diff --git a/.gitignore b/.gitignore index 6a063e066..d2e15ba16 100644 --- a/.gitignore +++ b/.gitignore @@ -4,19 +4,6 @@ # general ignore *.pcu *.pdb -*.csproj.user -#TODO Что то старое. Там, кроме всего прочего, зачем то копия древней версии инсталята паскаля -# - удалить -!Grammars/Oberon10Independent (by Juliet)/**/*.pcu -#TODO Тут тоже копия древних примеров, но зачем то ещё примеры на BrainFuck и PL/0 -# - удалить паскалевские примеры -!ReleaseGenerators/Samples/_SVN/**/*.pcu -#TODO NodesGenerator ещё используется? -# - удалить pdb -!Utils/NodesGeneratorNew/**/*.pdb -#TODO Это папка с тем тестом ML. Стоит её хотя бы в отдельную ветку. А по хорошему отдельным репозиторием... -# - убрать целиком -!W/**/*.pdb # vs internal files **/.vs/* @@ -35,7 +22,10 @@ !/Utils/Old/NodesGeneratorOld0/bin/* !/YMC/bin/* -# + + +# local user files +*.csproj.user /bin/CompilerController.ini @@ -80,8 +70,6 @@ **/PascalABCNET.exe.config **/PascalABCNETLinux.exe **/PascalABCNETLinux.exe.config -#TODO -!Grammars/Oberon10Independent (by Juliet)/**/*.dll @@ -108,7 +96,7 @@ /bin/WeifenLuo.WinFormsUI.Docking.ThemeVS2005.dll /bin/WeifenLuo.WinFormsUI.Docking.ThemeVS2005Linux.dll #TODO копируется только при сборке pabcnetc.sln - это норм? -# - Этот проект, получается, подключён только к консольным компиляторам +# - в самом проекте написано что его надо удалить... /bin/YieldConversionSyntax.dll # Debug-only intellisense problems @@ -129,11 +117,6 @@ -#TODO Часть в индексе, часть нет -# - все добавить в индекс -/bin/**/*.xml -!/bin/Lib/en/*.xml - #TODO Метаданные .dll, наверное их забывает удалить после тестирования их генерации? /bin/mscorlib.txt /bin/System.Data.dll.txt diff --git a/Grammars/Oberon10Independent (by Juliet)/DLL/Errors.dll b/Grammars/Oberon10Independent (by Juliet)/DLL/Errors.dll deleted file mode 100644 index db0c63267..000000000 Binary files a/Grammars/Oberon10Independent (by Juliet)/DLL/Errors.dll and /dev/null differ diff --git a/Grammars/Oberon10Independent (by Juliet)/DLL/Localization.dll b/Grammars/Oberon10Independent (by Juliet)/DLL/Localization.dll deleted file mode 100644 index b28c18a7b..000000000 Binary files a/Grammars/Oberon10Independent (by Juliet)/DLL/Localization.dll and /dev/null differ diff --git a/Grammars/Oberon10Independent (by Juliet)/DLL/ParserTools.dll b/Grammars/Oberon10Independent (by Juliet)/DLL/ParserTools.dll deleted file mode 100644 index a5453bb7c..000000000 Binary files a/Grammars/Oberon10Independent (by Juliet)/DLL/ParserTools.dll and /dev/null differ diff --git a/Grammars/Oberon10Independent (by Juliet)/DLL/SyntaxTree.dll b/Grammars/Oberon10Independent (by Juliet)/DLL/SyntaxTree.dll deleted file mode 100644 index 070d4ca13..000000000 Binary files a/Grammars/Oberon10Independent (by Juliet)/DLL/SyntaxTree.dll and /dev/null differ diff --git a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Doc/gplex.pdf b/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Doc/gplex.pdf deleted file mode 100644 index eb78e64c5..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Doc/gplex.pdf +++ /dev/null @@ -1,12228 +0,0 @@ -%PDF-1.4 -5 0 obj -<< /S /GoTo /D (part.1) >> -endobj -8 0 obj -(I Introduction to GPLEX) -endobj -9 0 obj -<< /S /GoTo /D (section.1) >> -endobj -12 0 obj -(Overview) -endobj -13 0 obj -<< /S /GoTo /D (subsection.1.1) >> -endobj -16 0 obj -(Typical Usage) -endobj -17 0 obj -<< /S /GoTo /D (subsection.1.2) >> -endobj -20 0 obj -(The Interfaces) -endobj -21 0 obj -<< /S /GoTo /D (subsubsection.1.2.1) >> -endobj -24 0 obj -(The IColorScan Interface) -endobj -25 0 obj -<< /S /GoTo /D (section.2) >> -endobj -28 0 obj -(Running the Program) -endobj -29 0 obj -<< /S /GoTo /D (subsection.2.1) >> -endobj -32 0 obj -(Gplex Options) -endobj -33 0 obj -<< /S /GoTo /D (section.3) >> -endobj -36 0 obj -(The Generated Scanner) -endobj -37 0 obj -<< /S /GoTo /D (subsection.3.1) >> -endobj -40 0 obj -(Byte-Mode and Unicode-Mode) -endobj -41 0 obj -<< /S /GoTo /D (subsection.3.2) >> -endobj -44 0 obj -(The Scanner File) -endobj -45 0 obj -<< /S /GoTo /D (subsection.3.3) >> -endobj -48 0 obj -(Choosing the Input Buffer Class) -endobj -49 0 obj -<< /S /GoTo /D (subsection.3.4) >> -endobj -52 0 obj -(How Buffering Works) -endobj -53 0 obj -<< /S /GoTo /D (subsection.3.5) >> -endobj -56 0 obj -(Multiple Input Sources) -endobj -57 0 obj -<< /S /GoTo /D (subsection.3.6) >> -endobj -60 0 obj -(Class Hierarchy) -endobj -61 0 obj -<< /S /GoTo /D (subsection.3.7) >> -endobj -64 0 obj -(Unicode Scanners) -endobj -65 0 obj -<< /S /GoTo /D (subsection.3.8) >> -endobj -68 0 obj -(Case-Insensitive Scanners) -endobj -69 0 obj -<< /S /GoTo /D (subsubsection.3.8.1) >> -endobj -72 0 obj -(Limitations) -endobj -73 0 obj -<< /S /GoTo /D (subsection.3.9) >> -endobj -76 0 obj -(Using GPLEX Scanners with Other Parsers) -endobj -77 0 obj -<< /S /GoTo /D (section.4) >> -endobj -80 0 obj -(Advanced Topics) -endobj -81 0 obj -<< /S /GoTo /D (subsection.4.1) >> -endobj -84 0 obj -(Location Information) -endobj -85 0 obj -<< /S /GoTo /D (subsection.4.2) >> -endobj -88 0 obj -(Applications with Multiple Scanners) -endobj -89 0 obj -<< /S /GoTo /D (subsection.4.3) >> -endobj -92 0 obj -(Stacking Start Conditions) -endobj -93 0 obj -<< /S /GoTo /D (subsection.4.4) >> -endobj -96 0 obj -(Setting yylval and yylloc) -endobj -97 0 obj -<< /S /GoTo /D (subsubsection.4.4.1) >> -endobj -100 0 obj -(The TValue Type Parameter) -endobj -101 0 obj -<< /S /GoTo /D (subsubsection.4.4.2) >> -endobj -104 0 obj -(The TSpan Type Parameter) -endobj -105 0 obj -<< /S /GoTo /D (subsection.4.5) >> -endobj -108 0 obj -(Backtracking Information) -endobj -109 0 obj -<< /S /GoTo /D (subsection.4.6) >> -endobj -112 0 obj -(Choosing Compression Options) -endobj -113 0 obj -<< /S /GoTo /D (section.5) >> -endobj -116 0 obj -(Errors and Warnings) -endobj -117 0 obj -<< /S /GoTo /D (subsection.5.1) >> -endobj -120 0 obj -(Errors) -endobj -121 0 obj -<< /S /GoTo /D (subsection.5.2) >> -endobj -124 0 obj -(Warnings) -endobj -125 0 obj -<< /S /GoTo /D (section.6) >> -endobj -128 0 obj -(Examples) -endobj -129 0 obj -<< /S /GoTo /D (subsection.6.1) >> -endobj -132 0 obj -(Word Counting) -endobj -133 0 obj -<< /S /GoTo /D (subsection.6.2) >> -endobj -136 0 obj -(ASCII Strings in Binary Files) -endobj -137 0 obj -<< /S /GoTo /D (subsection.6.3) >> -endobj -140 0 obj -(Keyword Matching) -endobj -141 0 obj -<< /S /GoTo /D (subsection.6.4) >> -endobj -144 0 obj -(The Code Page Guesser) -endobj -145 0 obj -<< /S /GoTo /D (subsection.6.5) >> -endobj -148 0 obj -(Include File Example) -endobj -149 0 obj -<< /S /GoTo /D (section.7) >> -endobj -152 0 obj -(Notes) -endobj -153 0 obj -<< /S /GoTo /D (subsection.7.1) >> -endobj -156 0 obj -(Moving From v1.0 to v1.1.0) -endobj -157 0 obj -<< /S /GoTo /D (subsubsection.7.1.1) >> -endobj -160 0 obj -(Performance Issues) -endobj -161 0 obj -<< /S /GoTo /D (subsubsection.7.1.2) >> -endobj -164 0 obj -(Removing Unicode Encoding Limitations) -endobj -165 0 obj -<< /S /GoTo /D (subsubsection.7.1.3) >> -endobj -168 0 obj -(Avoiding Name-Clashes with Multiple Scanners) -endobj -169 0 obj -<< /S /GoTo /D (subsubsection.7.1.4) >> -endobj -172 0 obj -(Compliance with FxCop) -endobj -173 0 obj -<< /S /GoTo /D (subsection.7.2) >> -endobj -176 0 obj -(Implementation Notes) -endobj -177 0 obj -<< /S /GoTo /D (subsection.7.3) >> -endobj -180 0 obj -(Limitations for Version 1.1.0) -endobj -181 0 obj -<< /S /GoTo /D (subsection.7.4) >> -endobj -184 0 obj -(Installing GPLEX) -endobj -185 0 obj -<< /S /GoTo /D (subsection.7.5) >> -endobj -188 0 obj -(Copyright) -endobj -189 0 obj -<< /S /GoTo /D (subsection.7.6) >> -endobj -192 0 obj -(Bug Reports) -endobj -193 0 obj -<< /S /GoTo /D (part.2) >> -endobj -196 0 obj -(II The Input Language) -endobj -197 0 obj -<< /S /GoTo /D (section.8) >> -endobj -200 0 obj -(The Input File) -endobj -201 0 obj -<< /S /GoTo /D (subsection.8.1) >> -endobj -204 0 obj -(Lexical Considerations) -endobj -205 0 obj -<< /S /GoTo /D (subsubsection.8.1.1) >> -endobj -208 0 obj -(Character Denotations) -endobj -209 0 obj -<< /S /GoTo /D (subsubsection.8.1.2) >> -endobj -212 0 obj -(Names and Numbers) -endobj -213 0 obj -<< /S /GoTo /D (subsection.8.2) >> -endobj -216 0 obj -(Overall Syntax) -endobj -217 0 obj -<< /S /GoTo /D (subsection.8.3) >> -endobj -220 0 obj -(The Definitions Section) -endobj -221 0 obj -<< /S /GoTo /D (subsubsection.8.3.1) >> -endobj -224 0 obj -(Using and Namespace Declarations) -endobj -225 0 obj -<< /S /GoTo /D (subsubsection.8.3.2) >> -endobj -228 0 obj -(Visibility and Naming Declarations) -endobj -229 0 obj -<< /S /GoTo /D (subsubsection.8.3.3) >> -endobj -232 0 obj -(Start Condition Declarations) -endobj -233 0 obj -<< /S /GoTo /D (subsubsection.8.3.4) >> -endobj -236 0 obj -(Lexical Category Definitions) -endobj -237 0 obj -<< /S /GoTo /D (subsubsection.8.3.5) >> -endobj -240 0 obj -(Character Class Membership Predicates) -endobj -241 0 obj -<< /S /GoTo /D (subsubsection.8.3.6) >> -endobj -244 0 obj -(User Character Predicate Declaration) -endobj -245 0 obj -<< /S /GoTo /D (subsubsection.8.3.7) >> -endobj -248 0 obj -(User Code in the Definitions Section) -endobj -249 0 obj -<< /S /GoTo /D (subsubsection.8.3.8) >> -endobj -252 0 obj -(Comments in the Definitions Section) -endobj -253 0 obj -<< /S /GoTo /D (subsubsection.8.3.9) >> -endobj -256 0 obj -(Option Declarations) -endobj -257 0 obj -<< /S /GoTo /D (subsection.8.4) >> -endobj -260 0 obj -(The Rules Section) -endobj -261 0 obj -<< /S /GoTo /D (subsubsection.8.4.1) >> -endobj -264 0 obj -(Overview of Pattern Matching) -endobj -265 0 obj -<< /S /GoTo /D (subsubsection.8.4.2) >> -endobj -268 0 obj -(Overall Syntax of Rules Section) -endobj -269 0 obj -<< /S /GoTo /D (subsubsection.8.4.3) >> -endobj -272 0 obj -(Rule Syntax) -endobj -273 0 obj -<< /S /GoTo /D (subsubsection.8.4.4) >> -endobj -276 0 obj -(Rule Group Scopes) -endobj -277 0 obj -<< /S /GoTo /D (subsubsection.8.4.5) >> -endobj -280 0 obj -(Comments in the Rules Section) -endobj -281 0 obj -<< /S /GoTo /D (subsection.8.5) >> -endobj -284 0 obj -(The User Code Section) -endobj -285 0 obj -<< /S /GoTo /D (section.9) >> -endobj -288 0 obj -(Regular Expressions) -endobj -289 0 obj -<< /S /GoTo /D (subsection.9.1) >> -endobj -292 0 obj -(Concatenation, Alternation and Repetition) -endobj -293 0 obj -<< /S /GoTo /D (subsubsection.9.1.1) >> -endobj -296 0 obj -(Definitions) -endobj -297 0 obj -<< /S /GoTo /D (subsubsection.9.1.2) >> -endobj -300 0 obj -(Operator Precedence) -endobj -301 0 obj -<< /S /GoTo /D (subsubsection.9.1.3) >> -endobj -304 0 obj -(Repetition Markers) -endobj -305 0 obj -<< /S /GoTo /D (subsection.9.2) >> -endobj -308 0 obj -(Regular Expression Atoms) -endobj -309 0 obj -<< /S /GoTo /D (subsubsection.9.2.1) >> -endobj -312 0 obj -(Character Denotations) -endobj -313 0 obj -<< /S /GoTo /D (subsubsection.9.2.2) >> -endobj -316 0 obj -(Lexical Categories -- Named Expressions) -endobj -317 0 obj -<< /S /GoTo /D (subsubsection.9.2.3) >> -endobj -320 0 obj -(Literal Strings) -endobj -321 0 obj -<< /S /GoTo /D (subsubsection.9.2.4) >> -endobj -324 0 obj -(Character Classes) -endobj -325 0 obj -<< /S /GoTo /D (subsubsection.9.2.5) >> -endobj -328 0 obj -(Character Class Predicates) -endobj -329 0 obj -<< /S /GoTo /D (subsubsection.9.2.6) >> -endobj -332 0 obj -(The Dot Metacharacter) -endobj -333 0 obj -<< /S /GoTo /D (subsubsection.9.2.7) >> -endobj -336 0 obj -(Context Markers) -endobj -337 0 obj -<< /S /GoTo /D (subsubsection.9.2.8) >> -endobj -340 0 obj -(End-Of-File Marker) -endobj -341 0 obj -<< /S /GoTo /D (section.10) >> -endobj -344 0 obj -(Special Symbols in Semantic Actions) -endobj -345 0 obj -<< /S /GoTo /D (subsection.10.1) >> -endobj -348 0 obj -(Properties of the Matching Text) -endobj -349 0 obj -<< /S /GoTo /D (subsubsection.10.1.1) >> -endobj -352 0 obj -(The yytext Property) -endobj -353 0 obj -<< /S /GoTo /D (subsubsection.10.1.2) >> -endobj -356 0 obj -(The yyleng Property) -endobj -357 0 obj -<< /S /GoTo /D (subsubsection.10.1.3) >> -endobj -360 0 obj -(The yypos Property) -endobj -361 0 obj -<< /S /GoTo /D (subsubsection.10.1.4) >> -endobj -364 0 obj -(The yyline Property) -endobj -365 0 obj -<< /S /GoTo /D (subsubsection.10.1.5) >> -endobj -368 0 obj -(The yycol Property) -endobj -369 0 obj -<< /S /GoTo /D (subsection.10.2) >> -endobj -372 0 obj -(Looking at the Input Buffer) -endobj -373 0 obj -<< /S /GoTo /D (subsubsection.10.2.1) >> -endobj -376 0 obj -(Current and Lookahead Character) -endobj -377 0 obj -<< /S /GoTo /D (subsubsection.10.2.2) >> -endobj -380 0 obj -(The yyless Method) -endobj -381 0 obj -<< /S /GoTo /D (subsubsection.10.2.3) >> -endobj -384 0 obj -(The yymore Method) -endobj -385 0 obj -<< /S /GoTo /D (subsection.10.3) >> -endobj -388 0 obj -(Changing the Start Condition) -endobj -389 0 obj -<< /S /GoTo /D (subsubsection.10.3.1) >> -endobj -392 0 obj -(The BEGIN Method) -endobj -393 0 obj -<< /S /GoTo /D (subsubsection.10.3.2) >> -endobj -396 0 obj -(The YY\137START Property) -endobj -397 0 obj -<< /S /GoTo /D (subsection.10.4) >> -endobj -400 0 obj -(Stacking Start Conditions) -endobj -401 0 obj -<< /S /GoTo /D (subsection.10.5) >> -endobj -404 0 obj -(Miscellaneous Methods) -endobj -405 0 obj -<< /S /GoTo /D (subsubsection.10.5.1) >> -endobj -408 0 obj -(The ECHO Method) -endobj -409 0 obj -<< /S /GoTo /D (part.3) >> -endobj -412 0 obj -(III Using Unicode) -endobj -413 0 obj -<< /S /GoTo /D (section.11) >> -endobj -416 0 obj -(Overview) -endobj -417 0 obj -<< /S /GoTo /D (subsection.11.1) >> -endobj -420 0 obj -(Gplex Options for Unicode Scanners) -endobj -421 0 obj -<< /S /GoTo /D (subsection.11.2) >> -endobj -424 0 obj -(Unicode Options for Byte-Mode Scanners) -endobj -425 0 obj -<< /S /GoTo /D (section.12) >> -endobj -428 0 obj -(Specifying Scanners) -endobj -429 0 obj -<< /S /GoTo /D (subsection.12.1) >> -endobj -432 0 obj -(Byte Mode Scanners) -endobj -433 0 obj -<< /S /GoTo /D (subsection.12.2) >> -endobj -436 0 obj -(Character Class Predicates in Byte-Mode Scanners) -endobj -437 0 obj -<< /S /GoTo /D (subsection.12.3) >> -endobj -440 0 obj -(Unicode Mode Scanners) -endobj -441 0 obj -<< /S /GoTo /D (subsection.12.4) >> -endobj -444 0 obj -(Overriding the Codepage Fallback at Application Runtime) -endobj -445 0 obj -<< /S /GoTo /D (subsection.12.5) >> -endobj -448 0 obj -(Adaptively Setting the Codepage) -endobj -449 0 obj -<< /S /GoTo /D (section.13) >> -endobj -452 0 obj -(Input Buffers) -endobj -453 0 obj -<< /S /GoTo /D (subsection.13.1) >> -endobj -456 0 obj -(String Input Buffers) -endobj -457 0 obj -<< /S /GoTo /D (subsection.13.2) >> -endobj -460 0 obj -(File Input Buffers) -endobj -461 0 obj -<< /S /GoTo /D (part.4) >> -endobj -464 0 obj -(IV Appendices) -endobj -465 0 obj -<< /S /GoTo /D (section.14) >> -endobj -468 0 obj -(Appendix A: Tables) -endobj -469 0 obj -<< /S /GoTo /D (subsection.14.1) >> -endobj -472 0 obj -(Keyword Commands) -endobj -473 0 obj -<< /S /GoTo /D (subsection.14.2) >> -endobj -476 0 obj -(Semantic Action Symbols) -endobj -477 0 obj -<< /S /GoTo /D (section.15) >> -endobj -480 0 obj -(Appendix B: GPLEX Options) -endobj -481 0 obj -<< /S /GoTo /D (subsection.15.1) >> -endobj -484 0 obj -(Informative Options) -endobj -485 0 obj -<< /S /GoTo /D (subsection.15.2) >> -endobj -488 0 obj -(Boolean Options) -endobj -489 0 obj -<< /S /GoTo /D (section.16) >> -endobj -492 0 obj -(Appendix C: Breaking Changes) -endobj -493 0 obj -<< /S /GoTo /D [494 0 R /Fit ] >> -endobj -496 0 obj << -/Length 1349 -/Filter /FlateDecode ->> -stream -xڥWY6~У D Ozld@.(Ai[,:q}g8-Ebqf8G"'"! F,m9.xBf)3&J@r - -yfp?/(Ia.F~WL_FMQ׮Eߴ˯$L3S4KS(˅pG 5˲ DȯK!D I`)"8eE(O(t+l1Ћc6QC3D~@S~Y(cF+&sra_ڵxD 25k.߸C?0%X|ʣ-.8S?@s&@qTŧŇPgSO: ڧgN&țu+ 3AydoshHR-7sgK*cFkuM\in~Zc!SsHAccEuu3oʺYǨ -fEKp1 DAܟ*<6# / Swp4!qc]tnKP_sYݮ/Y }s,-eSߙ  7zFCG [rVRNGz8!MhX+] u;lP/:5\rKܧo91*/,X"GKC?hkFn_Ц9Za/e#kb &8u;Ǖ^7s5[wrlm%e}z"t(n\m u˺LMxlǦDц}ft5]So5uwh?5(]%/E`'e⁋uἏ6H. $.웙 C=}xn̥rG@ w* z ՉhQ)8WMBZlmho;L -&%oJ6Bw,_(ɶOO%ˬq] 7wϺCi{,tTGLV޺B }׵TYQܦrE]iXBP2q*wٱk5|"ѧ^0aǝ.r$D*t>x(9yOLK͡ =>PTL+uKtftX)A2ai -c9ȣx|CʪmA@.u9z soI_{X `zˏ΁I\"ŞΕ -@[)~؂Cb}@Lp.tMS0g?\`/ Ϟ@0'9gZG5Ws$Lo#"3ULP7bendstream -endobj -494 0 obj << -/Type /Page -/Contents 496 0 R -/Resources 495 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 503 0 R ->> endobj -497 0 obj << -/D [494 0 R /XYZ 125.858 740.998 null] ->> endobj -498 0 obj << -/D [494 0 R /XYZ 125.858 716.092 null] ->> endobj -495 0 obj << -/Font << /F32 500 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -506 0 obj << -/Length 2276 -/Filter /FlateDecode ->> -stream -x[s۶)H=%cqR'Z̜GmN%RCQN ]Ik. 0x?x Gd9ZMwv&3o3.~D#-d~0F֔*$ޚyPdB#.4xQ3Dع\ LpUMݕuʚc9dFͿ7puݵSn誦ϳ^?~tLAí1KYڿK\b_ь 2(Ǩϧ*ϞբXx(3&E3n :tb/C\)!2">Dbd+R ԰ V0qcI-IlM{(CS+[+eɣr6@p $3&(ҭ1üӶMa~h2L^0n?a/kT䥜w:\(%ަdm(ٗ;%\!.JB~,-nh|a>`Ei_Z#]9iEٍ_'B Dzhlz 9sSIxm>|Lfϔ皹0(0r*N.\` jcx4)^o~Jxve:\3QK:(w0( *VIP\P8GTdcԏmI@mmR|>C#<  9iX;7eWg?nm7/Ӈo%^$ M ĸmuGEnD܂|*+h0f&WR,őŕ gw>˭0Q:2"T@d@r!29_R.GbI _bb-P{:ܩUقIU)0( 3.Mur& `2S(`ü]} -TIt^iFi{\ ȅI9Z/:۵b;v5iE=VP.-Q.}PjݖM:b MEhF$H.ٓ;Rvw-U;<pTyn3QeT䡿4 -2g}&#xLQ3X1܆|Ĥ|*ao=ȢuA47rtIFiYr)=3h(N7Y˲VWd*EHpw2}mwS3= -FTϣQ: -M% Qȅ&1Ò1s%1eZFܢ~QE<>4z Fi‘Oa@.1a7_{?#)cBR hf9`\`ssg.QЁ>g4;QEs o4JËɒGܠ\yxXSĹO@߳^׋c -l<٤H.2J]ɒ/(+HP%sgul2G7MЧ~hl}|89-U[i;v 9SDPO,l~-~3^g6m_0q0Fi>>\>#)Twr*W{YUm3P3*owݰG#07$ :J=M)Ū'YGB_|hqt> endobj -514 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 670.54 265.461 680.991] -/Subtype /Link -/A << /S /GoTo /D (part.1) >> ->> endobj -515 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 648.659 182.545 657.7] -/Subtype /Link -/A << /S /GoTo /D (section.1) >> ->> endobj -516 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 634.732 221.738 645.675] -/Subtype /Link -/A << /S /GoTo /D (subsection.1.1) >> ->> endobj -517 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 624.819 221.867 633.72] -/Subtype /Link -/A << /S /GoTo /D (subsection.1.2) >> ->> endobj -518 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 612.839 297.743 621.765] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.1.2.1) >> ->> endobj -519 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 589.033 235.158 599.917] -/Subtype /Link -/A << /S /GoTo /D (section.2) >> ->> endobj -520 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 576.948 222.954 587.892] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.1) >> ->> endobj -521 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 557.003 243.077 566.044] -/Subtype /Link -/A << /S /GoTo /D (section.3) >> ->> endobj -522 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 543.075 289.772 554.019] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.1) >> ->> endobj -523 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 533.138 232.776 542.064] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.2) >> ->> endobj -524 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 519.165 293.418 530.109] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.3) >> ->> endobj -525 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 507.21 253.061 518.154] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.4) >> ->> endobj -526 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 495.255 256.587 506.198] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.5) >> ->> endobj -527 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 483.3 228.572 494.243] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.6) >> ->> endobj -528 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 473.362 236.921 482.288] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.7) >> ->> endobj -529 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 461.407 268.621 470.333] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.8) >> ->> endobj -530 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 449.452 242.54 458.378] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.3.8.1) >> ->> endobj -531 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 435.479 337.383 446.423] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.9) >> ->> endobj -532 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 413.691 214.126 424.575] -/Subtype /Link -/A << /S /GoTo /D (section.4) >> ->> endobj -533 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 403.623 250.211 412.55] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.1) >> ->> endobj -534 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 389.651 311.102 400.595] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.2) >> ->> endobj -535 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 377.696 267.117 388.639] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.3) >> ->> endobj -536 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 365.74 262.395 376.709] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.4) >> ->> endobj -537 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 353.785 307.147 364.754] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.4.4.1) >> ->> endobj -538 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 341.83 304.936 352.774] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.4.4.2) >> ->> endobj -539 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 329.875 267.914 340.819] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.5) >> ->> endobj -540 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 317.92 292.024 328.864] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.6) >> ->> endobj -541 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 296.131 232.707 307.016] -/Subtype /Link -/A << /S /GoTo /D (section.5) >> ->> endobj -542 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 286.064 189.609 294.991] -/Subtype /Link -/A << /S /GoTo /D (subsection.5.1) >> ->> endobj -543 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 272.092 202.65 283.035] -/Subtype /Link -/A << /S /GoTo /D (subsection.5.2) >> ->> endobj -544 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 250.303 183.312 261.187] -/Subtype /Link -/A << /S /GoTo /D (section.6) >> ->> endobj -545 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 238.219 226.182 249.162] -/Subtype /Link -/A << /S /GoTo /D (subsection.6.1) >> ->> endobj -546 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 226.263 282.011 237.207] -/Subtype /Link -/A << /S /GoTo /D (subsection.6.2) >> ->> endobj -547 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 214.308 241.962 225.252] -/Subtype /Link -/A << /S /GoTo /D (subsection.6.3) >> ->> endobj -548 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 202.353 260.014 213.297] -/Subtype /Link -/A << /S /GoTo /D (subsection.6.4) >> ->> endobj -549 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 190.398 250.49 201.342] -/Subtype /Link -/A << /S /GoTo /D (subsection.6.5) >> ->> endobj -550 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 170.453 165.589 179.494] -/Subtype /Link -/A << /S /GoTo /D (section.7) >> ->> endobj -551 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 156.525 277.758 167.469] -/Subtype /Link -/A << /S /GoTo /D (subsection.7.1) >> ->> endobj -552 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 146.587 274.33 155.514] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.7.1.1) >> ->> endobj -553 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 132.615 363.316 143.558] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.7.1.2) >> ->> endobj -554 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 120.659 389.358 131.603] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.7.1.3) >> ->> endobj -507 0 obj << -/D [505 0 R /XYZ 125.858 740.998 null] ->> endobj -513 0 obj << -/D [505 0 R /XYZ 125.858 695.552 null] ->> endobj -504 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -557 0 obj << -/Length 2267 -/Filter /FlateDecode ->> -stream -xMo9:JYd,0#7V_3οv7Y%Ė!T}bf#XeGFRVohzifA?ݼ#G/G6?7Ȣ.LtEQڡ7cn*aZPMw!ȉOf]6zVO\_M{nVfW.ݾlˈB LO:DȡM !fzx.eE191OR>Nfd=C}Un٬6mxhZL.r&,'f / cl\L,L53,$KAe`ar `}Z.x|,q0?2͘SJPBr8T@ -"P利(<@T'WyXܭ]r,$'dn!p099UI;K?Qj0]+ '19f"19G[b&?XRnu=^-H^?-eF*Y7DGiXfE *{;azR끬frOAe3319oR LLN47fٴ_! d|ռ}`eeiJ~D./$G_jBs=o oG˕' ĴPYPGO*q`rr"upf0^2)`09Cb5jG5ҷv]= %sYn<-<@,rD,W(er 2~d*XY ƧxD˦g0+MnwBN8Tfl&,9`!$2M!"sF`~e>6m.]^tgձPqT)*NQ9@*t PITAWBs)26&H9CHُ$B%zX}Lbn(,$7I(r &L"ʦʉCaM,FG q2)L& -!DA4ObzGV9ƨ3b8TfP9`+͈6|4Vw ܞ$'dn!p9!;\ 7%endstream -endobj -556 0 obj << -/Type /Page -/Contents 557 0 R -/Resources 555 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 503 0 R -/Annots [ 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R 586 0 R 587 0 R 588 0 R 589 0 R 590 0 R 591 0 R 592 0 R 593 0 R 594 0 R 595 0 R 596 0 R 597 0 R 598 0 R 599 0 R 600 0 R 601 0 R ] ->> endobj -559 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 702.976 294.554 713.92] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.7.1.4) >> ->> endobj -560 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 691.021 253.538 701.964] -/Subtype /Link -/A << /S /GoTo /D (subsection.7.2) >> ->> endobj -561 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 681.083 280.108 690.009] -/Subtype /Link -/A << /S /GoTo /D (subsection.7.3) >> ->> endobj -562 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 667.11 236.273 678.054] -/Subtype /Link -/A << /S /GoTo /D (subsection.7.4) >> ->> endobj -563 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 655.155 205.021 666.099] -/Subtype /Link -/A << /S /GoTo /D (subsection.7.5) >> ->> endobj -564 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 643.2 214.804 654.144] -/Subtype /Link -/A << /S /GoTo /D (subsection.7.6) >> ->> endobj -565 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 608.553 253.076 621.215] -/Subtype /Link -/A << /S /GoTo /D (part.2) >> ->> endobj -566 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 587.041 203.247 597.925] -/Subtype /Link -/A << /S /GoTo /D (section.8) >> ->> endobj -567 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 576.973 256.706 585.9] -/Subtype /Link -/A << /S /GoTo /D (subsection.8.1) >> ->> endobj -568 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 565.018 285.957 573.944] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.1.1) >> ->> endobj -569 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 553.063 280.149 561.989] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.1.2) >> ->> endobj -570 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 539.09 224.607 550.034] -/Subtype /Link -/A << /S /GoTo /D (subsection.8.2) >> ->> endobj -571 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 529.153 259.356 538.079] -/Subtype /Link -/A << /S /GoTo /D (subsection.8.3) >> ->> endobj -572 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 515.18 338.519 526.124] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.1) >> ->> endobj -573 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 503.225 337.951 514.169] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.2) >> ->> endobj -574 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 493.287 310.604 502.213] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.3) >> ->> endobj -575 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 479.315 311.959 490.258] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.4) >> ->> endobj -576 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 467.359 355.684 478.303] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.5) >> ->> endobj -577 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 457.422 345.144 466.348] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.6) >> ->> endobj -578 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 445.466 342.982 454.393] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.7) >> ->> endobj -579 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 433.511 343.829 442.438] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.8) >> ->> endobj -580 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 419.539 277.11 430.482] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.9) >> ->> endobj -581 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 409.521 237.768 418.527] -/Subtype /Link -/A << /S /GoTo /D (subsection.8.4) >> ->> endobj -582 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 395.628 317.508 406.572] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.4.1) >> ->> endobj -583 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 383.673 324.841 394.617] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.4.2) >> ->> endobj -584 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 371.718 245.579 382.662] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.4.3) >> ->> endobj -585 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 359.763 274.072 370.707] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.4.4) >> ->> endobj -586 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 349.825 322.24 358.751] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.4.5) >> ->> endobj -587 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 337.87 257.404 346.796] -/Subtype /Link -/A << /S /GoTo /D (subsection.8.5) >> ->> endobj -588 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 314.064 229.349 324.948] -/Subtype /Link -/A << /S /GoTo /D (section.9) >> ->> endobj -589 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 301.98 333.507 312.923] -/Subtype /Link -/A << /S /GoTo /D (subsection.9.1) >> ->> endobj -590 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 291.962 240.876 300.968] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.1.1) >> ->> endobj -591 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 278.069 279.85 289.013] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.1.2) >> ->> endobj -592 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 266.114 273.693 277.058] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.1.3) >> ->> endobj -593 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 254.159 271.929 265.103] -/Subtype /Link -/A << /S /GoTo /D (subsection.9.2) >> ->> endobj -594 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 244.141 285.957 253.147] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.2.1) >> ->> endobj -595 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 230.249 360.646 241.192] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.2.2) >> ->> endobj -596 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 218.293 253.877 229.237] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.2.3) >> ->> endobj -597 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 208.276 267.695 217.282] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.2.4) >> ->> endobj -598 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 196.321 302.833 205.327] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.2.5) >> ->> endobj -599 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 184.366 288.985 193.372] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.2.6) >> ->> endobj -600 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 172.41 263.581 181.416] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.2.7) >> ->> endobj -601 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 160.455 277 169.461] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.2.8) >> ->> endobj -558 0 obj << -/D [556 0 R /XYZ 125.858 740.998 null] ->> endobj -555 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -604 0 obj << -/Length 2082 -/Filter /FlateDecode ->> -stream -xݚ]o+|i_%Fvn۸(zuĨ-8NY,N ],^rpH -GGIbiQkh(F Lf]/y'h~o٧yk ߚyP,(os(>ШB^,Z,d$\?7bYպq[.ݲ*XÎQA3JNPm6vPs}nl5.Մ__Cض-}pU葲P-9ib֏ * &$YBr!E@WQC+q200ۍrR;dE\Y9$v GwwY43K03D.0c ->g&;fOj*y~U9t.mW4Ji&p!r!SAPO9ɘ+vbqigL'#L1'{Odɔ_B^.;ƌ5@̡`vhONh1>Ӷ oR~Β}ڸɠ6]u]mۄ!N/PeNJُ++OׂC.l`I%* 'E4ʳHy&XeDz߿r'8qq|u9YG *̷0p6a ! |H>]O[. ]{=F}Q'FY*wT ~P.)RpȘ3iV4Ju&`!r$ؙ_剄d;MMgXL>lVE -7~~w5N95wv4;;ξЀg#rْL½ݚʠ=뼾zovއKO=.\qT(*TrUOnIw}}}zU -J)nwۀvw_S{N5QZfXLZN FB^+l -U -'9CzGAt)F<ĵ&GȞriXnj[_6o_7WV{ֿvkٸ?K O=r!|WKUl z]>]cFP]766}3# 91E,S׾aL' zrC;+$)|+s|:>ASBaMVP:60L-%I@$pS7u %.?moՍQv`y.~Q9?09 -ѿh)}*jUU=lVhཀӋFyz;z\דJ drYa턚qU3c{T?3>5*@sR 6HJendstream -endobj -603 0 obj << -/Type /Page -/Contents 604 0 R -/Resources 602 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 503 0 R -/Annots [ 606 0 R 607 0 R 608 0 R 609 0 R 610 0 R 611 0 R 612 0 R 613 0 R 614 0 R 615 0 R 616 0 R 617 0 R 618 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R 626 0 R 627 0 R 628 0 R 629 0 R 630 0 R 631 0 R 632 0 R 633 0 R 634 0 R 635 0 R 636 0 R 637 0 R 638 0 R 639 0 R 640 0 R 643 0 R 644 0 R 645 0 R ] ->> endobj -606 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 703.105 297.891 713.989] -/Subtype /Link -/A << /S /GoTo /D (section.10) >> ->> endobj -607 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 691.021 291.147 701.964] -/Subtype /Link -/A << /S /GoTo /D (subsection.10.1) >> ->> endobj -608 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 679.065 276.134 690.009] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.10.1.1) >> ->> endobj -609 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 667.11 278.495 678.054] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.10.1.2) >> ->> endobj -610 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 655.155 275.178 666.099] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.10.1.3) >> ->> endobj -611 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 643.2 276.283 654.144] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.10.1.4) >> ->> endobj -612 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 631.245 273.514 642.189] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.10.1.5) >> ->> endobj -613 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 619.29 274.589 630.233] -/Subtype /Link -/A << /S /GoTo /D (subsection.10.2) >> ->> endobj -614 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 609.272 331.874 618.278] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.10.2.1) >> ->> endobj -615 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 595.379 272.966 606.323] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.10.2.2) >> ->> endobj -616 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 583.424 278.495 594.368] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.10.2.3) >> ->> endobj -617 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 571.469 281.782 582.413] -/Subtype /Link -/A << /S /GoTo /D (subsection.10.3) >> ->> endobj -618 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 561.491 277.987 570.458] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.10.3.1) >> ->> endobj -619 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 547.559 294.545 558.502] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.10.3.2) >> ->> endobj -620 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 535.603 267.117 546.547] -/Subtype /Link -/A << /S /GoTo /D (subsection.10.4) >> ->> endobj -621 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 525.666 259.625 534.592] -/Subtype /Link -/A << /S /GoTo /D (subsection.10.5) >> ->> endobj -622 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 513.671 275.178 522.637] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.10.5.1) >> ->> endobj -623 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 477.046 226.822 489.708] -/Subtype /Link -/A << /S /GoTo /D (part.3) >> ->> endobj -624 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 457.377 182.545 466.418] -/Subtype /Link -/A << /S /GoTo /D (section.11) >> ->> endobj -625 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 443.449 311.76 454.393] -/Subtype /Link -/A << /S /GoTo /D (subsection.11.1) >> ->> endobj -626 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 431.494 332.94 442.438] -/Subtype /Link -/A << /S /GoTo /D (subsection.11.2) >> ->> endobj -627 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 409.706 227.317 420.59] -/Subtype /Link -/A << /S /GoTo /D (section.12) >> ->> endobj -628 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 397.621 247.72 408.565] -/Subtype /Link -/A << /S /GoTo /D (subsection.12.1) >> ->> endobj -629 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 385.666 367.519 396.609] -/Subtype /Link -/A << /S /GoTo /D (subsection.12.2) >> ->> endobj -630 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 375.728 262.654 384.654] -/Subtype /Link -/A << /S /GoTo /D (subsection.12.3) >> ->> endobj -631 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 361.755 397.955 372.699] -/Subtype /Link -/A << /S /GoTo /D (subsection.12.4) >> ->> endobj -632 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 349.8 296.308 360.744] -/Subtype /Link -/A << /S /GoTo /D (subsection.12.5) >> ->> endobj -633 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 328.012 199.641 338.896] -/Subtype /Link -/A << /S /GoTo /D (section.13) >> ->> endobj -634 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 315.927 244.712 326.871] -/Subtype /Link -/A << /S /GoTo /D (subsection.13.1) >> ->> endobj -635 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 303.972 235.855 314.916] -/Subtype /Link -/A << /S /GoTo /D (subsection.13.2) >> ->> endobj -636 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 269.325 210.91 281.987] -/Subtype /Link -/A << /S /GoTo /D (part.4) >> ->> endobj -637 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 247.813 225.882 258.697] -/Subtype /Link -/A << /S /GoTo /D (section.14) >> ->> endobj -638 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 235.728 249.165 246.672] -/Subtype /Link -/A << /S /GoTo /D (subsection.14.1) >> ->> endobj -639 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 223.773 268.771 234.717] -/Subtype /Link -/A << /S /GoTo /D (subsection.14.2) >> ->> endobj -640 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 201.985 267.207 212.869] -/Subtype /Link -/A << /S /GoTo /D (section.15) >> ->> endobj -643 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 189.9 245.389 200.844] -/Subtype /Link -/A << /S /GoTo /D (subsection.15.1) >> ->> endobj -644 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 177.945 231.96 188.888] -/Subtype /Link -/A << /S /GoTo /D (subsection.15.2) >> ->> endobj -645 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 156.156 276.711 167.04] -/Subtype /Link -/A << /S /GoTo /D (section.16) >> ->> endobj -605 0 obj << -/D [603 0 R /XYZ 125.858 740.998 null] ->> endobj -602 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -648 0 obj << -/Length 2435 -/Filter /FlateDecode ->> -stream -x]sWh7҅/vvwjC6'2RT6/ BptJ:;#!''\hf*cei&lro?~CbQw7\)1)YD??.fs+zuso-͕.az{}r$bRNbR匋_fe~ʹ_=Yd.y?͹ɲbfӦ?۪~}W0~W l6Ҿ6fL.y=iE2(Sj&<"D>Ã?u\uUc|}(/ZN" H5F!0m!ۺ&醦lZ YEUt>ۻB#aҨE)$fmlI5`K![UaI*`>M_LOd7b>[^Uۭj Ai(Me -P5"mGQ"̺USyikQ?3P9iI;Q gt7{OvNzbQ1g'' Y-%h 9D+ˌrK#aBn6Ŵn*;K{fԹ3 LǠ4d)%L 9d㒇3vlva ܛ;kn;#B &(Ơ4Γ((9DA!,c Qv2OWպoZݽ9 ͥ1AiLo&J1rNLSbmͰlqiݏO&_@HQPE S(H9@A!" 9bYm}Lp}}F@b@(9B!rJ#5f@n R| ,mYAiVyɕ1)9d:"tvvwu0f2;.~6]\rCxUy1} U:.HѾoj US}iP4\ -B()aJi/ˮ?_ׁ~70$VVWseE{|Ơ48H9D!'3\vL?)G7b7]_oMcFW"Hk!L1-5(!{ wbUNkV -&^9QqȘ./[,5xDs`#L-!lU)6x.;e6SV GK @:)4$4$EPZB:&cАx<mC~WvD AcUjJ$41(*O$,Jir+7,K^B>Xj2\ŔoQxq_R;TFy&H9DD!"S@Abq9B O0.+q8QvӰaӯ7M?<+7R ܢ)AiʱiʔR&䐲RИ˗iw0+Wtwu3+SBh*cPJlSrIL!BHa_Mӏ.V]٭,fe'OIcοiǠ2C 9]WX,@1n` -J;պ.aPM75gR0ݼmO ];5Li -eF9QFBČ$4QOߺR0p UZV opwIa.6x JXS8J &`Y欔&*Lv;u4L]]G~~، 3vٺ-&k!) U>%~ RQr(V/[@9/A`i:^ -s<1G)9L!BL^ -ePu;蔗v@"/A+i:cPNdJ!NYVHH+?O>k 㧏Ђ -H媇J\uȄdƠ4*7!䐌* MyD> s_yZJ1mÉaBslZWS`A41( 6rZ%drC6湄{bk}7lfՁ.h@ Ai:]: C:^} JQ$WKNȡ\:@|j|wAhcPEdNN -(9dA!3K  Ai CEFJ!BS2K@:G)@.5u3Tίm,IvYx~FJHQPltH9K!z0~> endobj -651 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 680.709 296.178 691.653] -/Subtype /Link -/A << /S /GoTo /D (figure.1) >> ->> endobj -652 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 670.772 266.53 679.698] -/Subtype /Link -/A << /S /GoTo /D (figure.2) >> ->> endobj -653 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 658.777 276.921 667.743] -/Subtype /Link -/A << /S /GoTo /D (figure.3) >> ->> endobj -654 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 644.844 331.475 655.788] -/Subtype /Link -/A << /S /GoTo /D (figure.4) >> ->> endobj -655 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 634.866 285.857 643.832] -/Subtype /Link -/A << /S /GoTo /D (figure.5) >> ->> endobj -656 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 620.933 298.27 631.877] -/Subtype /Link -/A << /S /GoTo /D (figure.6) >> ->> endobj -657 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 610.996 329.353 619.922] -/Subtype /Link -/A << /S /GoTo /D (figure.7) >> ->> endobj -658 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 597.023 303.211 607.967] -/Subtype /Link -/A << /S /GoTo /D (figure.8) >> ->> endobj -659 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 585.068 334.036 596.012] -/Subtype /Link -/A << /S /GoTo /D (figure.9) >> ->> endobj -660 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 573.113 322.968 584.057] -/Subtype /Link -/A << /S /GoTo /D (figure.10) >> ->> endobj -661 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 561.158 284.103 572.101] -/Subtype /Link -/A << /S /GoTo /D (figure.11) >> ->> endobj -662 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 549.202 336.277 560.171] -/Subtype /Link -/A << /S /GoTo /D (figure.12) >> ->> endobj -663 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 537.247 282.29 548.191] -/Subtype /Link -/A << /S /GoTo /D (figure.13) >> ->> endobj -664 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 525.292 320.069 536.236] -/Subtype /Link -/A << /S /GoTo /D (figure.14) >> ->> endobj -665 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 513.337 370.15 524.281] -/Subtype /Link -/A << /S /GoTo /D (figure.15) >> ->> endobj -666 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 501.382 299.745 512.326] -/Subtype /Link -/A << /S /GoTo /D (figure.16) >> ->> endobj -667 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 489.427 297.972 500.37] -/Subtype /Link -/A << /S /GoTo /D (figure.17) >> ->> endobj -668 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 477.471 279.272 488.415] -/Subtype /Link -/A << /S /GoTo /D (figure.18) >> ->> endobj -669 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 465.516 297.384 476.46] -/Subtype /Link -/A << /S /GoTo /D (figure.19) >> ->> endobj -670 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 453.561 255.192 464.53] -/Subtype /Link -/A << /S /GoTo /D (figure.20) >> ->> endobj -671 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 443.623 309.876 452.55] -/Subtype /Link -/A << /S /GoTo /D (figure.21) >> ->> endobj -672 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 429.651 375.31 440.595] -/Subtype /Link -/A << /S /GoTo /D (figure.22) >> ->> endobj -673 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 417.696 324.461 428.639] -/Subtype /Link -/A << /S /GoTo /D (figure.23) >> ->> endobj -674 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 405.74 427.863 416.684] -/Subtype /Link -/A << /S /GoTo /D (figure.24) >> ->> endobj -675 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 393.885 331.335 404.754] -/Subtype /Link -/A << /S /GoTo /D (figure.25) >> ->> endobj -676 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 383.808 264.327 392.774] -/Subtype /Link -/A << /S /GoTo /D (figure.26) >> ->> endobj -677 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 369.875 308.064 380.819] -/Subtype /Link -/A << /S /GoTo /D (figure.27) >> ->> endobj -678 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 357.92 336.308 368.864] -/Subtype /Link -/A << /S /GoTo /D (figure.28) >> ->> endobj -679 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 345.965 305.752 356.933] -/Subtype /Link -/A << /S /GoTo /D (figure.29) >> ->> endobj -680 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 334.009 317.567 344.953] -/Subtype /Link -/A << /S /GoTo /D (figure.30) >> ->> endobj -681 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 322.054 375.31 332.998] -/Subtype /Link -/A << /S /GoTo /D (figure.31) >> ->> endobj -682 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 310.099 334.036 321.043] -/Subtype /Link -/A << /S /GoTo /D (figure.32) >> ->> endobj -683 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 298.144 322.968 309.088] -/Subtype /Link -/A << /S /GoTo /D (figure.33) >> ->> endobj -684 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 286.189 295.431 297.157] -/Subtype /Link -/A << /S /GoTo /D (figure.34) >> ->> endobj -685 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 274.333 290.23 285.202] -/Subtype /Link -/A << /S /GoTo /D (figure.35) >> ->> endobj -686 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 262.278 298.27 273.222] -/Subtype /Link -/A << /S /GoTo /D (figure.36) >> ->> endobj -687 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 250.323 282.29 261.267] -/Subtype /Link -/A << /S /GoTo /D (figure.37) >> ->> endobj -649 0 obj << -/D [647 0 R /XYZ 125.858 740.998 null] ->> endobj -650 0 obj << -/D [647 0 R /XYZ 125.858 692.898 null] ->> endobj -646 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -727 0 obj << -/Length 3046 -/Filter /FlateDecode ->> -stream -xڝZ~E83|H1 isM6@^?вl%Uo;akgp?W=HEI$E|8Їwœlҟ}Ȭyx<>D6q:zMM놆~?|4&@(aRiNI)7?}AE)'Z8WB[=˞esAC_/E=a6ǦhL(9Ur@ڈg ũIohJ,-|pݡQdm>5%Xĩ0Y̌F.BYFoؑ&JdjY͂_t.35]\YktDRBXvU7 XmH:mkڎ:wh;hdm\BH'0V1"\$l4\:mZbR F[PoyC V}uA(6;ț/AdN*r?WV]PpOЦVyU͕RV s^ Ib4Mkfa&nr0ݙO;6uOI~U@(Q& 윉ő$W-x{ܠ"@]ѭ7tJ}G\4S\n0 DȾon}s{>}i[Ќ 7AZhq(Z-2b@O_D^sHDQ(0 (ǵc'b5 ZLa/OcJ% +;T!}qFH?9o ZJȉ --%lf@uPubL0(#Ďq# y&]Cc'];m鸰C5ә>P ae`:mӯEلC4K [g}Sqf!qFmыTspїg^ -CV^V%+Cs<4I I 6=O&kbadi9Qr͏>]݉G~Cy)hh5X^M:Q3 (cF|o8/Boe}ϒkM]CIH28!*\ !zG& grpWL 7D4^+@J$P4 :o񞎽\0ٌ{F^Lj&q9vM)Cƒ~vh sMPV@x,<)RI7XXx9/eG@4~'Ra,a:e̟ D0n)$Ny6>}}$-&BT)X3)z2w|*JߢfXTNrMDVڶ*C^{2uNTq0#꜂g$zr>5&SwB$VtՐ:Ar>~6l՞V lxDz*|N[B -i3Eс۬'e. X*=Āu@j񘰍]O8P۬}g ˩L_/%Ed5\Yya֫*.S"qeف -`ͫaPYڬ +AG=]|X5( ۷.gX~}1bx;-L(S&^\D"ͳSY6&]ũI%h|oe?~๻;Tl&$(X4 d-޻[tz+.C0¬ф x~Uendstream -endobj -726 0 obj << -/Type /Page -/Contents 727 0 R -/Resources 725 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 503 0 R -/Annots [ 731 0 R 732 0 R 733 0 R ] ->> endobj -731 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [453.629 289.676 468.075 300.619] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.2) >> ->> endobj -732 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [143.253 243.897 151.88 252.799] -/Subtype /Link -/A << /S /GoTo /D (part.2) >> ->> endobj -733 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [354.052 158.792 361.025 169.735] -/Subtype /Link -/A << /S /GoTo /D (figure.3) >> ->> endobj -728 0 obj << -/D [726 0 R /XYZ 125.858 740.998 null] ->> endobj -6 0 obj << -/D [726 0 R /XYZ 125.858 716.092 null] ->> endobj -10 0 obj << -/D [726 0 R /XYZ 125.858 667.391 null] ->> endobj -14 0 obj << -/D [726 0 R /XYZ 125.858 230.323 null] ->> endobj -725 0 obj << -/Font << /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -736 0 obj << -/Length 3129 -/Filter /FlateDecode ->> -stream -x[_OG8$R"}h&EAkӶYr%6߽3P?s7 p8,p8?U* KteYڞ>." r}WˤXgw?za}?}N{1h-DʔqLwX"3fXR2,♑xԍ&+)WL}: -V7'ݞC%,J9*Fq5zo{ST?!ξr;+,I(D,'*Ҟ@ۼ+a+SiF[f}c z84 \ s =eIgMu9=|l umg)ƣhm^UhA|ɫYÿֈʂK[T[w8̉yt_|֝}pi bSv'O4YT8/TG xD/;984H?#ߣO:mS0fM~/v ;%R@ g\B%Ji1`Ȑ])a""^piJq&F2"`!(!QԈ}3Xvx^QWzp Ɍ nJ(xp?YtS|#J=4QˮXdDvPg Npnx\!P@bmPU#[ze+[MӱJdJ^7(08Vc{ -ʼTljcRCUX9hf$lb,QY2 F]hKǺHWkFc/\>QM{̱2#Q:+{[Pb(ɞ ?TX?CU,NKѠ*_jsc-W0?PpO/p}z!jN/t7^ :,~-sH%m{O3w/Rx/ 0iĤT9D4Off3< =0 ~0*1a`K3Dq8opz'sـeʾBۖřC4Off73@;> 4|0tWK"zz`32=`9a4!-1Q$A3ka03:,l20q7yfdwM.I9<GGUx̡0a!8 i3kf| -)SٯGL_ T  ׏Ba~7tKDiDaDE')<P(qwt_#Ϸ-ޤ6[[zT - IƄ0^l0HeQJ'[jxEFiR M7e-e¾}wzo2Ypz#ST;n(my}pLs}@ 2v; F,4 U( {% /9/L^ᙻB;0yƼ#ª3tͷEYt&sS#ˏuQl|db5Dc"x_4mjtG]Y $mP|,t 's$FG[-crvʏ~Va ea0m^mHnm^3.8?:3\a~Zz]j*{k*:q 5g4=w}kqPh7vQM/Ű\ Yg26?nRT9я•ڷWN՝ @-8}i@?%E4`|L?6\\2L9SAܼ\^oXVLxzл72lįgWL3KtqϺ!sN&-7U~v@#6&ޅ| |ICмN7n,ggf2OJhvendstream -endobj -735 0 obj << -/Type /Page -/Contents 736 0 R -/Resources 734 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 741 0 R -/Annots [ 738 0 R 739 0 R 740 0 R ] ->> endobj -738 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [412.62 679.065 419.593 690.009] -/Subtype /Link -/A << /S /GoTo /D (figure.1) >> ->> endobj -739 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [153.365 440.745 160.339 451.689] -/Subtype /Link -/A << /S /GoTo /D (figure.2) >> ->> endobj -740 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [408.067 212.814 422.513 223.758] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.3) >> ->> endobj -737 0 obj << -/D [735 0 R /XYZ 125.858 740.998 null] ->> endobj -688 0 obj << -/D [735 0 R /XYZ 251.652 665.083 null] ->> endobj -689 0 obj << -/D [735 0 R /XYZ 266.476 426.763 null] ->> endobj -18 0 obj << -/D [735 0 R /XYZ 125.858 294.258 null] ->> endobj -734 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -744 0 obj << -/Length 3526 -/Filter /FlateDecode ->> -stream -x]6}N.bFp@H-.m=>ȶU\IN8)K,}HFp>81mf9ŋz}=*z@{Je6B#\8,u򻥁7/dk) K% {yQtbg 0#"h83Xq¸۫☕2ѳJ$jy0N&zX86EYEv67iu?k'jSUqGof%CF bV)j&f-y!Ϗ@Hb9\sv৬nzu 4/l"_ -}hF4Akz(m^{>H{wۼm#MȖ+ oS)62PHw[*+uCOmkPgcoڢ%Wɋ^ŋHIJn~t`nXbz $|`̣„"0$ - u #͢\ ?{£b)/T -ŤtU )Z´ˁA#^8ZDR@k -C P<#U*zM*d?:#O;vqpUUz|UAa%aoU\3޼o d릭M{mրSF& ͤ:B%h#LY` -No SpƜ&~.e*2vѣo %XG,r -gހ5Oݏ?Nj-}u3 ^cƭ],M\޽4f8 Cۛ+bXFzP -$KӅdx׉ο,*h%(.r=mʬi@hR=4עLb",i wVqT^x_-F x`fq_/zCVgıwQ -<]h ?QvOi[HGY[9]( >^DoqJ `9,>i.O?K5$7y1Al fBaDRDIŌJ{eO>m"}lq+) `1ӖDodK\{Eݞ!61FFNtjC1 2$7D1$qO\iʒ= d*BiyR|[Pb.&NQ997⾈ ܦՂ1O'ٹmZŔ50Z/ S<~Ɛz*vV= 2n߄zR%Q7Rѹ^-FRh- <\$I=$)!](e9vUH惨[ɦ, -ci0 1^f4EɄ,%"Ioh";8) >]20B+zM]hNF=J]] \^.;2Mxo"@Rpmѭ`ֳ0(RPݳ)9hԑ[nѤHuqsYauZ;_K5z[y,3j!D^ջ]OGRW]gH/"yb}ӧɘ igoL{s~?YG{,,'u\!3Ԍ b:sX\,@S#Ctmy7U W]ک-p d-Bs!UWUeq2w,)pM *Y&o,]Ův9ض,{P*=,~!>lh"sɆڕԠ ]9^G<7.6{ӮJ?)N`axg%c_174N(L"]U3r-*j*BhŞa1KGk7[z)#qWrv -; -ڼg[RRCP7-=8S3B?$p yϤ- :`U aR&y~6B90;`΂ڶR:!\(dKYk:T -x]UU맼=R &cn`]#T ->m螨FN.ґ6q3h -ЫC_/T`O)p 8~!3B*B2[؝&nK Y88\Ah`}[q?v4U :EPE`>Wv}K y/^ !ӷV6T皺.hz@r4VΩIsJ[w0T eh?eIN-#gG f_5=Y8%I7^t*n.zZę@u1wMezY &Avmej6Q!j۰b/=χs 0Tu7$nC&IBO&!5H0^]%|? X%u+O`h>@cT[?rzpa|8VH?iuEK| q-$Ve8I#\#1u1`sI@ӥs4z-!s=, ,sO"҄d'w жKu{/~;0]gztm -ԝm[0;\u^&CXl5!5vwϬ`wW>&:JREæipmP7?8v8uQcTgJ+\h$l֑ŗ=:H+xd;hnz7@\pP kw;``r4E  ŏE!ٲqˉSwvJ܄i*OAV+vKBvr<bendstream -endobj -743 0 obj << -/Type /Page -/Contents 744 0 R -/Resources 742 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 741 0 R -/Annots [ 746 0 R 748 0 R 752 0 R 753 0 R 754 0 R ] ->> endobj -746 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [300.551 669.128 314.997 678.054] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.6) >> ->> endobj -748 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [316.919 609.95 323.893 620.893] -/Subtype /Link -/A << /S /GoTo /D (figure.3) >> ->> endobj -752 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [278.687 371.061 285.661 382.029] -/Subtype /Link -/A << /S /GoTo /D (figure.5) >> ->> endobj -753 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [342.612 287.375 354.567 298.318] -/Subtype /Link -/A << /S /GoTo /D (figure.21) >> ->> endobj -754 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [275.653 275.419 290.099 286.363] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.1) >> ->> endobj -745 0 obj << -/D [743 0 R /XYZ 125.858 740.998 null] ->> endobj -747 0 obj << -/D [743 0 R /XYZ 125.858 636.874 null] ->> endobj -690 0 obj << -/D [743 0 R /XYZ 261.28 594.189 null] ->> endobj -742 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -758 0 obj << -/Length 2668 -/Filter /FlateDecode ->> -stream -xڍYK%0%B^Y(mi+9D9`Y1 Xť*q׽bYmRymC9`lѻLJaAbQ?n(O ?cǿfT:ږljadүcR1%lO]mFS_IN}d8lE`7q𵫫ǣ`N_4cU{ʱjw^ۦ]'i;!<-ϖ=%e0E`Iv,x,b?4?L`.㔣gRT#` .jfo)8 +aTOՏ?QfanMݖnSK"B<ӿM9ҭ2˜.azdz+LXB,= Dh%G -O02" -^ֱ°36¢(jJfbeUɘۭlmzs] X0 C6Pz!tkwu8L -,C/0[Ûި -Q#8|"*4=썿H^;K3 -cW0~f)('Lcu|L%LofGsW'd܌I2x#Dr$Y# grzӌ -X!\33Tb=A0q-6V'*a ajWfξ Iax/%+){k.7A#+}y)cJǎw|D!bItQܸdFRMRCQu$Fᕴ22dp3Ñ;IC5|il%! H X)2Ep>M ݤ[%( k|#Rhqr s Ez=!E~ IC^"~\&Y-2@1 -ZDQµfL޽D -,'PDZl~ _g"2ݑR|$6j~~|]tc/߂5*M -Eh.tȦ\ {LXYHC5Q4 ӄZnʊx f2yeyd/l{;I.k;GDi#j!JrBeXp7e&a?: ul'`>Uzd0ɾ*)Qϓj`b[ ^r#\9FTj ADžP^ЋIBMYrkwxXLK L+t< '6-ws7o⢒9,EnŧUϽ.;OGZj ^\}*ܚ |s]Ht8Hw*.4r-髯{Ӹy5g4Dj2G&ʦ&vPO /w_8Ϧ9SB0p}Dl"_q:|d[XAKJU3`vh &v" =8?K<WL.`jw' VϹsSYD)h&w ylfZP Q|&Z-E -+WoG(3rW:ҋ -BOтfVD=a#((e29Ke\r* > endobj -755 0 obj << -/Type /XObject -/Subtype /Form -/FormType 1 -/PTEX.FileName (PDFs/ScannerHierarchy.pdf) -/PTEX.PageNumber 1 -/PTEX.InfoDict 763 0 R -/Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] -/BBox [141.22600000 212.01100000 578.97400000 589.92200000] -/Resources << -/ColorSpace << -/CS0 764 0 R ->>/Font << /TT0 765 0 R/TT1 766 0 R/TT2 767 0 R/TT3 768 0 R/TT4 769 0 R>> -/ProcSet [ /PDF /Text ] -/ExtGState << -/GS0 770 0 R ->>>> -/Length 989 -/Filter /FlateDecode ->> -stream -HVnF}ẈD_@-BP+(䁡hK,EMZ[EQ ̙3gßOs &fs7J82-"lvR+T2aAy m* ' 0<\ WV2* hWEDU0'TJtb_3(T]KԦƣbM ̹M"Er& 'y0B rߑ>XtN#GSt%vY Ki%g -ȧիGkخMW^ngNpsfv+Ӷdv25rohLȗ@:DidatHíI rUP+Q3VDUiZ}>FqY('QY%⸧9Ncj}jAOH/1i,Zsѓf *i$ϖ \W;Ȥ%wI0=[|)B:ɖG!f"^ wX!q*@\ ҏl#QX. Jo6hߨR1L<ު"CCoTPyQaVl[Fyҳ(y?.AenGeo&$tA#JOw;Q߶D i_0 Y:n/p[j.+}Rr-nKшq -}muX>}Ho&<|TdbG\onOSY+E׭}7Y:u]Jjt#)q͍򡻽iq1_R %T7Tl~~ɋqv wKF ByKCr\?b~+[OmܹlkjKrh<қ\2HeP"fŒtz'弛gI:\,op}S1eΝ %$/ ӄU7s-om=Ѱ?M }endstream -endobj -763 0 obj -<< -/CreationDate (D:20090215190130+10'00') -/Author (john) -/Creator (Acrobat PDFMaker 8.1 for Visio) -/Producer (Acrobat Distiller 8.1.0 \(Windows\)) -/ModDate (D:20090215190241+10'00') -/Company (Queensland University of Technology) -/Title () ->> -endobj -764 0 obj -[/ICCBased 771 0 R] -endobj -765 0 obj -<< -/Subtype /TrueType -/FontDescriptor 772 0 R -/LastChar 117 -/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 584 0 584 0 0 722 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 611 0 667 0 0 0 0 0 0 0 0 0 0 556 611 556 0 556 0 0 0 0 0 0 278 0 611 0 611 0 389 556 333 611] -/BaseFont /Arial-BoldItalicMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -766 0 obj -<< -/Subtype /TrueType -/FontDescriptor 773 0 R -/LastChar 116 -/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 0 722 0 0 0 778 0 0 0 0 0 0 0 0 0 0 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 556 556 500 556 556 0 0 0 222 0 0 222 0 556 0 0 0 333 500 278] -/BaseFont /ArialMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -767 0 obj -<< -/Subtype /TrueType -/FontDescriptor 774 0 R -/LastChar 120 -/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 584 0 584 0 0 722 722 0 0 0 0 0 0 0 0 0 611 0 0 0 0 0 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 556 611 556 0 556 0 0 0 278 0 0 0 0 611 611 0 0 389 556 333 0 0 0 556] -/BaseFont /Arial-BoldMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -768 0 obj -<< -/Subtype /TrueType -/FontDescriptor 775 0 R -/LastChar 121 -/Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 667 0 0 667 0 722 0 0 0 0 611 889 0 0 611 0 667 556 0 0 0 0 667 0 0 0 0 0 0 0 0 500 500 444 500 444 333 0 556 278 0 0 0 0 556 0 0 0 389 389 278 556 0 0 500 444] -/BaseFont /TimesNewRomanPS-BoldItalicMT -/FirstChar 46 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -769 0 obj -<< -/Subtype /TrueType -/FontDescriptor 776 0 R -/LastChar 121 -/Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 556 0 556 444 333 500 556 278 0 556 278 0 556 500 556 0 444 0 333 0 500 722 500 500] -/BaseFont /TimesNewRomanPS-BoldMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -770 0 obj -<< -/OPM 1 -/OP false -/op false -/Type /ExtGState -/SA false -/SM 0.02 ->> -endobj -771 0 obj -<< -/Length 2598 -/Filter /FlateDecode -/N 3 -/Alternate /DeviceRGB ->> -stream -hޜwTTϽwz0z.0. Qf Ml@DEHb!(`HPb0dFJ|yyǽgs{.$O./ 'z8WGбx0Y驾A@$/7z HeOOҬT_lN:K"N3"$F/JPrb[䥟}Qd[Sl1x{#bG\NoX3I[ql2$ 8xtrp/8 pCfq.Knjm͠{r28?.)ɩL^6g,qm"[Z[Z~Q7%" -3R`̊j[~: w!$E}kyhyRm333: }=#vʉe -tqX)I)B>== <8Xȉ9yP:8p΍Lg kk Ѐ$t!0V87`ɀ2A. -@JPA#h'@8 .: ``a!2D!UH 2 dA>P ECqB**Z:]B=h~L2  5pN:|ó@ QC !H,G6 H9R ]H/r Aw( Q(OTJCm@*QGQ-(j MF+ 6h/*t:].G7Зw7 Xa<1:L1s3bXyeb~19 vGĩp+5qy^ oó|= ?'Htv`Ba3BDxHxE$Չ"XAP44077&9$An0;T2421t.54ld+s;# V]=iY9FgM֚k&=%Ō:nc1gcbcfX.}lGv{c)LŖN퉛w/p+/<j$.$%&㒣OdxTԂԑ4i3|o~C:&S@L u[Uo3C3OfIgwdO|;W-wsz 17jl8c͉̈́3+{%lKWr[ $ -llGmnacOkE&EEY׾2⫅;K,KhtiN=e²{^-_V^Oo§s]?TWީrjVQ=w}`嚢zԶiו8>k׍ - E  [ly邟~_Y53rW򯎼^{7so}x>|쇊z>yz -endstream -endobj -772 0 obj -<< -/StemV 135.84 -/FontName /Arial-BoldItalicMT -/FontStretch /Normal -/FontWeight 700 -/Flags 96 -/Descent -211 -/FontBBox [ -560 -376 1157 1000] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle -15 ->> -endobj -773 0 obj -<< -/StemV 88 -/FontName /ArialMT -/FontStretch /Normal -/FontWeight 400 -/Flags 32 -/Descent -211 -/FontBBox [ -665 -325 2000 1006] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -774 0 obj -<< -/StemV 138 -/FontName /Arial-BoldMT -/FontStretch /Normal -/FontWeight 700 -/Flags 32 -/Descent -211 -/FontBBox [ -628 -376 2000 1010] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -775 0 obj -<< -/StemV 116.867 -/FontName /TimesNewRomanPS-BoldItalicMT -/FontStretch /Normal -/FontWeight 700 -/Flags 98 -/Descent -216 -/FontBBox [ -547 -307 1206 1032] -/Ascent 891 -/FontFamily (Times New Roman) -/CapHeight 656 -/XHeight -531 -/Type /FontDescriptor -/ItalicAngle -15 ->> -endobj -776 0 obj -<< -/StemV 136 -/FontName /TimesNewRomanPS-BoldMT -/FontStretch /Normal -/FontWeight 700 -/Flags 34 -/Descent -216 -/FontBBox [ -558 -307 2000 1026] -/Ascent 891 -/FontFamily (Times New Roman) -/CapHeight 656 -/XHeight -546 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -760 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [318.625 619.29 325.599 630.258] -/Subtype /Link -/A << /S /GoTo /D (figure.4) >> ->> endobj -761 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [142.854 315.172 157.3 325.727] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.5) >> ->> endobj -762 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [240.497 290.873 247.471 301.841] -/Subtype /Link -/A << /S /GoTo /D (figure.5) >> ->> endobj -759 0 obj << -/D [757 0 R /XYZ 125.858 740.998 null] ->> endobj -691 0 obj << -/D [757 0 R /XYZ 234.003 603.529 null] ->> endobj -756 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R >> -/XObject << /Im1 755 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -779 0 obj << -/Length 3334 -/Filter /FlateDecode ->> -stream -xko>Jio߻L!^il(|%V#QDsZsQ_`.bLzg1no՘U̷Eu ɉVMy\Yt.d)#L8fdmq.{'B|(ąF$.a%3$3<)lIӃ o+e:>|I&.wz4*FSf%$$/+sFtPF2k'3Wċ銵bPHZJc(HLf4/1ٴԥpb.\G*X6b -^V£Gr,M]gE$&t[T15}^.@3g&{SĻr2Av_@36ݝ+0JM] zG2Ȣ=q,C!bU ôlܟx7m12~|9|qDddZv7] B.脟Ħ~#xq5}(:\LQ5,g9$gڑqq ˻bWEn*F0{&tQ h#x@֛}[x,Y;Sut,w<++/o~`_sֺ@i3vb4Voካt/MX!>x6CR:IH' HOӐVa$:\'7Xo&ҝ4 BPAD`$O﹙?_qes9E^m |D2FgdѨݷ}H7l16 o=˚ -죚@!WkK ; `ypSl6i[W_-n_`W!ya.*Rz7 &IeZEyυ!x/.=jYrg  ^\@\@Uu@ʩmqdL$/N]k`ҧ),bϪKa8,nz18Z}X#p|qYӦjpdlҘޑ m紒^A.@pG$cd︕LVI"+٤$+Cq+h%$l<HwQ MԄK֢7|?wijdkd/*rQ?2-h{S<(S<|VFD]Hy%mτ6c -w? `S@L-c V5Xl܉G(0v%$bA(:ګmY <ँXlE|qZ}[+.*IO{'þ8Pيo {,VM/k\XPZLT"-<06]W,OOUm[} Xa$YcG_yӟ)n UqvW79xzIE\4ePw1bm巻SgJ0XtO1 ,)ڇƒ}_lʣT!ֱQj46 )l% -"G1 RZzZv4ʎ1o3HA=@Ӱӡꌢ\g'@\P‹e!v|_kg<.{.Yo>̴r I2o} =0η)y\xbQE8q=- 0*wPzZmQjMK#\/Q3l*u t0f]n:K5`?\NĿ[Xώ-%R 96/aPijendstream -endobj -778 0 obj << -/Type /Page -/Contents 779 0 R -/Resources 777 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 741 0 R -/Annots [ 781 0 R 782 0 R 783 0 R 785 0 R ] ->> endobj -781 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [366.007 482.02 372.98 492.988] -/Subtype /Link -/A << /S /GoTo /D (figure.8) >> ->> endobj -782 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [205.242 446.154 212.216 457.098] -/Subtype /Link -/A << /S /GoTo /D (figure.1) >> ->> endobj -783 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [416.755 434.199 423.729 445.143] -/Subtype /Link -/A << /S /GoTo /D (figure.6) >> ->> endobj -785 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [233.01 173.019 239.983 183.962] -/Subtype /Link -/A << /S /GoTo /D (figure.7) >> ->> endobj -780 0 obj << -/D [778 0 R /XYZ 125.858 740.998 null] ->> endobj -692 0 obj << -/D [778 0 R /XYZ 256.813 711.29 null] ->> endobj -693 0 obj << -/D [778 0 R /XYZ 250.606 418.438 null] ->> endobj -784 0 obj << -/D [778 0 R /XYZ 125.858 211.853 null] ->> endobj -777 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F53 751 0 R /F43 512 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -788 0 obj << -/Length 4250 -/Filter /FlateDecode ->> -stream -xko~~9֚6qv i$;J"rG*$ϊZwf|b">y̞iS$IezEBIO׻^><^^Kūx/k9=EWWB"p1Z, "ZH;=WE'`/}3Udb)ڢ*{6 jreo^ft"O\Xg*%P:ILaAC)/L,O19ܗ' N5twhV)=u}*/=D[t)/gQ66F+5IQ)~##aPE9F8 T|a rD=>ns ~kBj>bkz(sS\3" *#Mk2) 7RC73ֆ9Eb{51Rp_ f\Ɲ<=s{|dovsMmo2PQ]8 MMMŌo91qoh 8,]iz`* 4mC!߅ -6aUScA-营#h)ʧhD}ћ 4:RqitbdU~WwY=P1 SpO~Cu==S٣g^pu}D:DmDEHc&>(p\"H=Ha#f$,T.?ӏhd BO~Wzq-8Ԃ$mhdhd#^蠣 LQH<)F&NL)9Wiq_s_1olXvrm+mU<.ӧr)?I7IB("HKkwx#ôqOoDbDp,Qc"%`"*P'#beK 4`TIejl!Lo_ޢ-Ghf(#b(BO͛~/}; X`SM$a`Q:BE3OS"Y|X`|0@`}Qx@uHJ`RQfyPŹn\]^Wo4XMs6Fxpzg&<&Nn=sqR()J Q9L{M)9j)3Fs c@7uU dScea.wDQbxt}9 Cc6R$5֙̐$nj`ġw r+j*w~xOlYqʽi2Aݺ No{$auP:Þ-.58FpB.)Iy 8^[9 u꼱p9^?9݌Qi!_6 q@lI@ E3.G>8](yWew|Y|[x}$#YghJl_a+Ј{EW;\Gw}%I NxTXᢒy{/عO|d?odCrn{}]Mb.0U* -R9[- ՠ=Wր+W&o3w|.=昇[paQS/ -Qܫ|Հn\6ԴFpb{͜ 2&jBv6kCu[HnU(0&*!iLbR 0]Sl a\>]r]8p6EUn{hss>/|-CPPlP(e(b_;9_ vtfBxXqP೾?*%Rd`3hFA/J `om@L@]osMwci)!T%Ʋ]`ڸV*\v 'BF/s'3J>N*a(]Z^Sq pbUJTg}(QAl )`1pȢl`fA8xX-QD -׊AkX<#'#qW. PH,Lzt2Q!Ӟ\4tS4}YAo5O;F"W#fJ GBU{yj'aB0%7.it%tj*gcW<o4V{Yv)*.=Pv3?k)㶠p`mKF,9H>E2@X3nCAT} c%Az[0,=1âɧt ́sP -,u]~UhjeIm<vPk<=_J6-\Bm/kW6kg - -{JT]g[ܷXYv1w5SU_j-ۓ~[ݱW!@* Uի-ơ3# $'ޓWcwg|r!tV$/7BRF G:X$ ܶ7#`?It.Z7sbcXx{R2akLiPyu8YC8b<{p@fCw>Q.L u' .sB$Oɨ %6ec!5nC¢B%Bz')$ŭ^`W:"s> !!SzQXb"&29pRռS@dF.Ҧ>&{x$ea|l]f7 jaqDJl>Ġ%lRј$w -5)LīD+8@ͷ-%(^~e@^9Xtt]_F΁WóΆM& C CPN6Z2uV ʎ.5K~u} -3rƔ&w[uƓ0ߚ2t7x'&pu v!ikg]GhТOoa4a0"L>߬2d-|}}]uV?(Z/lO` 3<</jK0FMX'/X^{`i_.VaQ)LhIN9"L,O$ުn6?iT!Ȁtf=̿M)qJmꧨ;oB5> endobj -793 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [329.563 454.224 335.54 466.645] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.1) >> ->> endobj -794 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [204.064 382.782 210.042 394.914] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.2) >> ->> endobj -795 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [406.492 382.782 428.41 394.914] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.3) >> ->> endobj -796 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [463.592 313.277 470.565 324.246] -/Subtype /Link -/A << /S /GoTo /D (figure.8) >> ->> endobj -789 0 obj << -/D [787 0 R /XYZ 125.858 740.998 null] ->> endobj -694 0 obj << -/D [787 0 R /XYZ 235.064 711.29 null] ->> endobj -22 0 obj << -/D [787 0 R /XYZ 125.858 369.208 null] ->> endobj -695 0 obj << -/D [787 0 R /XYZ 248.135 285.561 null] ->> endobj -797 0 obj << -/D [787 0 R /XYZ 140.204 181.571 null] ->> endobj -798 0 obj << -/D [787 0 R /XYZ 140.204 152.913 null] ->> endobj -786 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F53 751 0 R /F34 502 0 R /F11 792 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -801 0 obj << -/Length 2555 -/Filter /FlateDecode ->> -stream -xڍYK۸W-T!>ފ8nLUZ I)!_n4vA_cһһqWweu]5W>:Έ~xzu.cwu\is׈mi$/,f$z[l?7?n~{;>;sY La)CWocYQyQwOs;_=):slF)̉Gi4nx5w'ijzI^uu ~Ǵ'oYFozZR ˣ4rmo?s@$S2|KN&N:-ڈSxDkh,oJ'nDlI=j -4rÒY1ugi1J3` GHkFeaY+*BQ6зxOEF}ڤI$QdV AKC+~G!D׺ ݧ uoRsVV;3ڨވ+Qee\WN qǣAZ4v -DOi=tEOm4#ٵzk{7hTF+]k7ȑ,.HL5Rq_lP䉗\Xy4ldpVQ7i%2VFQ( w*}_7?Ljǩu `}_yVe ;V9`!YG,1xs4섑mH֎"{a8ZP,\E' M/0݊s+l!|Z"jnAJcwvy4[s{: ٥@ɭ?zAZ)3G:<pѹҺ?,;8L@e)\@i$<+-K (emt5m(NRYQ"l -v7tr)#*y[CGu{q=O$/ŪLya`#c5y )ϡ -"B -*OUi,_F^a^V5kˠ&v{J*_:ً -VYJ̠9*K)^l5,~ű{"S$;jN A3ŀ$_\uԧl8&*ܶ -NIEBg!>P Tq:.ޓ~*~ -խ֖~ƓF.05/" 'FwJ-)x u;1" Cԩ2+Fa!d#w Wf3&+D(F `|Ƞi#Ŏ&6ï3i~hEʸE-9Y`;0kNj>ZP=9Ti}eQdz8|QgDf&j鮶A\6D[X'-"SfJ ?~w t1 A*ЉG> R;OS8O.\ )';%f ϠWcەm?Ldv%hH_6 qےՙ3 LSTkB;NCK/NmBCGW@(E4SzSBJ5%dkRyh,feiӠF#zC]{j\~H!&[>8_! o EЖ9׍U(1U}5G|)Cܔ)=(KKhpր kjqѕ6%e80ղ+n@~^OMtxY`; owRGhF}k -(GJ悮1XαY:X;j4-KuW $*^ }G"'={UESX4iǭF<jȤdیUo۪Rh`KIS~q,،`Tms;u&&>(;Kft[>II,t I;4 ~dg9Pj!,;VoR?/0{ke_(:n83dj3,mP`nvhSEfn"wbC1Vw3f)`%|endstream -endobj -800 0 obj << -/Type /Page -/Contents 801 0 R -/Resources 799 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 741 0 R -/Annots [ 804 0 R 806 0 R ] ->> endobj -804 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [301.956 356.426 316.401 367.394] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.7) >> ->> endobj -806 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [406.582 275.355 421.028 286.298] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.8) >> ->> endobj -802 0 obj << -/D [800 0 R /XYZ 125.858 740.998 null] ->> endobj -26 0 obj << -/D [800 0 R /XYZ 125.858 592.64 null] ->> endobj -30 0 obj << -/D [800 0 R /XYZ 125.858 497.073 null] ->> endobj -803 0 obj << -/D [800 0 R /XYZ 125.858 407.215 null] ->> endobj -805 0 obj << -/D [800 0 R /XYZ 125.858 326.144 null] ->> endobj -807 0 obj << -/D [800 0 R /XYZ 125.858 245.073 null] ->> endobj -808 0 obj << -/D [800 0 R /XYZ 125.858 175.958 null] ->> endobj -799 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -811 0 obj << -/Length 1968 -/Filter /FlateDecode ->> -stream -xXM6WQeJԧ/A68^`'A2>Q>2WZR&FbX,>>;Q n08I#yvS_GtlgF6 -or?O~~o/l&Rǻw70VXv?KF9 g&W$$1vg]Ů?s;q,C?um:n !ICj{ʪٙM{_ٱmX[(M{E=Ի?9[v2 IRAqlC?gd8 }ۑG֕ug=ԥa(~螹w'Y~s,N'Z2C}&rdub4WDQYQ PdyXe4n`isIxTe3Wc%6xguG`"1HOa!/ &P^h~0iyhO@[,sq*k<(hHˉ6F4KΚ zQ{5OABW6Sj -qfǂcLȄEa-i6jX12_H{L[N ̄w[lVf -Ӏ3jt>"b]5Q -k򮵇RPlpإKVΐ/xjn=1 uũk/k }%sMU4F:tuBhZ-$Pba| _ܛ3 䂳PԉX*hF~wB[[BA\Yʃ -'6[Y'SWXN7t??yguRt99i,MdіRyA5_]P% :{ȠF1EPP*} 58v :UryAB>&:s3`Iˍk߶TNN LQ͊Œ~ Yc,/w̽S9{]{~%SQޮh.cګKe>wޮs}GSpٞ -[ uvS =#O peľJ=dy:I=gngmЂڱM6\9@aⴳI2^\R)O&}&撒Y I͓=1!RL! .r2WWB|쥊ӷ1 VyjqTWaAN1B߉dOro~4 Ֆk9W~WF*fy,endstream -endobj -810 0 obj << -/Type /Page -/Contents 811 0 R -/Resources 809 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 821 0 R -/Annots [ 818 0 R ] ->> endobj -818 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.414 285.666 268.86 296.635] -/Subtype /Link -/A << /S /GoTo /D (subsection.6.4) >> ->> endobj -812 0 obj << -/D [810 0 R /XYZ 125.858 740.998 null] ->> endobj -813 0 obj << -/D [810 0 R /XYZ 125.858 634.986 null] ->> endobj -814 0 obj << -/D [810 0 R /XYZ 125.858 577.825 null] ->> endobj -815 0 obj << -/D [810 0 R /XYZ 125.858 484.799 null] ->> endobj -816 0 obj << -/D [810 0 R /XYZ 125.858 415.683 null] ->> endobj -817 0 obj << -/D [810 0 R /XYZ 125.858 346.568 null] ->> endobj -819 0 obj << -/D [810 0 R /XYZ 125.858 253.542 null] ->> endobj -820 0 obj << -/D [810 0 R /XYZ 125.858 184.396 null] ->> endobj -809 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F47 642 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -824 0 obj << -/Length 1748 -/Filter /FlateDecode ->> -stream -xڕXYo6~G-`ђHu8iA>+@Wu4v}g8CYU- X9Sns787$7Yule3k$" f?a:c}fk{c~@͗w~3RJ (\).>&0A9]-T'EHdp(zZei/>}e>ݺy7ڮLbkKױy$A8S2JDOHCL|bg޺\ƾh.7I:*^"8ID3ٖ'|Wnl/臢~<5@GR07JEtÝ@R[/A3/t<3P]t o䴫A:*~$oFuG=Pdd[̂x_ޝé?ZԃJn=mvV|,T7?7Um؂f_?c ȃO+a )# Y;mL[Š곴UGBsAސ>i/W{톱{lw)f8d`pЦͪڜSvi6hzǂ 3CWlP}sW|>4h -N\.]@l©d-ҖNy3`*#4ND" ƺȚ\g_8&$֎87P45{ R{hpgV=Y*{a狐" -Z՘Ր%GkQpƽ>aZki1}]0021 W 6^fFL;8`?bvVqB X.9\ -J±ejYf Y-r.꨻LNRuJJt31Z_ix0x11 T<#2\ ΂+ D7gU"p^L]>qA,!wUH!'蕶EʄDGF6/EO`Sp{sB}k*[K4S+)N -# al&;Hmd-ʋ?p-tuɋcsx2WUU bQx譯m[Ƙ .CpHB-l%NR)=}LfFrޞ1 Q':HA5L -%'tXҚl۲RX Ptk\N^.ڒDiLx(2C>On^h+'>׭ 1 jTg4sʤ^96Wm=}Jș%R7n1zk1FN7Ҝp"^}'LoxC-=5Vi]d,ty7VzZr%HσiI+C3M3 a 4Ehgk>5G o?q\UE]Tſ c>?9/:Bz&][AjU=I%U\ʑx=zu>9+\߿[ o*?6q@ $,@2S%wi)(3 8b"{~2vje|Cle7\Lq uRendstream -endobj -823 0 obj << -/Type /Page -/Contents 824 0 R -/Resources 822 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 821 0 R -/Annots [ 829 0 R ] ->> endobj -829 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [456.12 558.02 470.565 568.988] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.6) >> ->> endobj -825 0 obj << -/D [823 0 R /XYZ 125.858 740.998 null] ->> endobj -826 0 obj << -/D [823 0 R /XYZ 125.858 697.377 null] ->> endobj -827 0 obj << -/D [823 0 R /XYZ 125.858 652.171 null] ->> endobj -828 0 obj << -/D [823 0 R /XYZ 125.858 595.011 null] ->> endobj -830 0 obj << -/D [823 0 R /XYZ 125.858 513.94 null] ->> endobj -831 0 obj << -/D [823 0 R /XYZ 125.858 456.779 null] ->> endobj -832 0 obj << -/D [823 0 R /XYZ 125.858 401.462 null] ->> endobj -833 0 obj << -/D [823 0 R /XYZ 125.858 320.391 null] ->> endobj -834 0 obj << -/D [823 0 R /XYZ 125.858 251.275 null] ->> endobj -835 0 obj << -/D [823 0 R /XYZ 125.858 194.115 null] ->> endobj -822 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F56 730 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -838 0 obj << -/Length 2088 -/Filter /FlateDecode ->> -stream -xڍXK8W4&$nL3s%FG뷊UeKnbX݅8 ,ۦaP]پ -0U"gBovߥ]"߼xGazl㇏7~_ol>n]22I`72xv7KEdxYbOV"ªϛ8ԠkmތCN:ǍW& -=96a(/ǭ&<ط^ݱt.)pV8kZbS8Rv@'mVLU @MW[‘E$p1~EY*Ypfk,H6'2<{$9l;b2S( V՚WMw8tHb^D." -*=j,L(mD~x$ 6p#Ƴ~D8 oq0E X'rW6 h/bXz:"Эd3CUYpqqX~upWtAmQQ%pxCuAEVZ(?Jk2yi9"ZY3ɬ>tדM@8g-xjab{pۨSg3"'IqP 2sS?6)ƨlX[O?+T݄ ,%KqutxOB).SP=NY%>s/)ҠLp mX̵Pvxu%#>|FEfO܁}WqZZIS};^֍8ntWR꽪Bc|!cb:2{~%XnC1m2+p8#1[۹#bx;{ȱ^;;( I8D Q%< -$@ozD0^pEӫ oGL8wM?PdV^>q -y.UW]]µI ^8D|$qS i5Z#r - VdVIr1{ɯmbdu?}. 2eRذ'܁2@f?ŐmRh FE_Z*Y_GN꘬ -(r n_>"`Y`m䴂Qh#0DRmrpĥc퇵8Nѳen4mdOq\7ЎW3tl+ă\B[CP氵24s{^?_"[;,oSnρdp1?$oPendstream -endobj -837 0 obj << -/Type /Page -/Contents 838 0 R -/Resources 836 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 821 0 R -/Annots [ 846 0 R 848 0 R 850 0 R ] ->> endobj -846 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [396.321 362.628 410.767 373.571] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.3) >> ->> endobj -848 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [362.299 257.646 376.744 268.59] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.5) >> ->> endobj -850 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [416.884 188.531 431.33 199.474] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.7) >> ->> endobj -839 0 obj << -/D [837 0 R /XYZ 125.858 740.998 null] ->> endobj -840 0 obj << -/D [837 0 R /XYZ 125.858 699.22 null] ->> endobj -841 0 obj << -/D [837 0 R /XYZ 125.858 604.321 null] ->> endobj -842 0 obj << -/D [837 0 R /XYZ 125.858 549.033 null] ->> endobj -843 0 obj << -/D [837 0 R /XYZ 125.858 490.03 null] ->> endobj -844 0 obj << -/D [837 0 R /XYZ 125.858 444.824 null] ->> endobj -845 0 obj << -/D [837 0 R /XYZ 125.858 389.507 null] ->> endobj -847 0 obj << -/D [837 0 R /XYZ 125.858 330.503 null] ->> endobj -849 0 obj << -/D [837 0 R /XYZ 125.858 227.365 null] ->> endobj -851 0 obj << -/D [837 0 R /XYZ 125.858 146.294 null] ->> endobj -836 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -856 0 obj << -/Length 1621 -/Filter /FlateDecode ->> -stream -xڍWKo8W؋ "%Mnm=(%Gv;!pI8:]%1g֦銯Õ,1^]re5j=mDjhz#5>~v-Ok}YN*X[P W^X}U3^-h Һ箿jj2C~,ţhhŹk]ŝ]U6okGy8mVQVUנNiNϨI_ |-t?w][T%[o-gǦ򫲬ڬͽ<=zY1H+y95*Xin16 YV9ELȉ^XՠxwmMSyGbK5+`8uu -Ǟ5M+c- 32oeZI6d6<:d>NyX_@ үhbGo.Յi>/ .*6^-Z#i 7?e^>A^һ6U탓K/^w֭7RR)5^y!$b= -ݫ:; !?ÓE9#jޣɧEbb{>J'Q\$Q.[ UY䴖\dM0'v#P':` OwCW紵Е-]=_\,ji\O%:YV1d)aLg -<;9f9 "+}w3WCL!k#fKX@KY=8KCN2FKeIWWVHK^1Gey&R~Qρ4b G@9BxH@קt%児ܦ)]k ʵX5Jh5L>Đ%:ƒVh_^4/+-oށ$]ϱr-{*vh6'\sThJ {ܡơ@8p8(T@ -Ki`B6Ԥze&6cDB0oR9 9t?\Qb'00 ؚ<Îv ˡ]x\ndb&u$r4D=eAS~i~Fa6w4Hk nR,b8 AV!8ob NNj͍F g1wH -:i@q-: 4sk&Dr)PpHs :]Q… j] r z> endobj -852 0 obj << -/Type /XObject -/Subtype /Form -/FormType 1 -/PTEX.FileName (PDFs/FSAn0.pdf) -/PTEX.PageNumber 1 -/PTEX.InfoDict 862 0 R -/Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] -/BBox [248.28600000 563.63900000 500.85200000 674.93900000] -/Resources << -/ColorSpace << -/CS0 863 0 R ->>/Font << /TT0 864 0 R/TT1 865 0 R>> -/ProcSet [ /PDF /Text ] -/ExtGState << -/GS0 866 0 R ->>>> -/Length 582 -/Filter /FlateDecode ->> -stream -HUMo@ﯘ~zQ8iA3qҤ$8J2z߼y3n89ɯʷ vqE&n{_q!8vx2 WJ*c m(Y7|3cX0y^Q\J6l?#wY]׌;^AdgBx F`yQU~]"'D͵rB:;K@q_@46_y CA?@U}ޞz-KYsBydSV"@in%EcG}ywFwwF#Vtޗic̪1+y]SqPY&,Rt. o}FP`59Nz̒|6H%TVOÃEdҟ˝c7x!.A02M4GIN&VK:F> -endobj -863 0 obj -[/ICCBased 867 0 R] -endobj -864 0 obj -<< -/Subtype /TrueType -/FontDescriptor 868 0 R -/LastChar 120 -/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 611 0 0 0 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 0 500 0 556 0 0 0 222 0 0 0 0 556 556 0 0 0 500 278 556 0 0 500] -/BaseFont /ArialMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -865 0 obj -<< -/Subtype /TrueType -/FontDescriptor 869 0 R -/LastChar 121 -/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 722 0 0 0 0 667 0 722 0 0 0 0 0 0 0 0 0 0 0 556 556 500 556 556 0 0 0 0 0 0 222 0 556 556 0 0 333 0 278 556 500 0 500 500] -/BaseFont /Arial-ItalicMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -866 0 obj -<< -/OPM 1 -/OP false -/op false -/Type /ExtGState -/SA false -/SM 0.02 ->> -endobj -867 0 obj -<< -/Length 2598 -/Filter /FlateDecode -/N 3 -/Alternate /DeviceRGB ->> -stream -hޜwTTϽwz0z.0. Qf Ml@DEHb!(`HPb0dFJ|yyǽgs{.$O./ 'z8WGбx0Y驾A@$/7z HeOOҬT_lN:K"N3"$F/JPrb[䥟}Qd[Sl1x{#bG\NoX3I[ql2$ 8xtrp/8 pCfq.Knjm͠{r28?.)ɩL^6g,qm"[Z[Z~Q7%" -3R`̊j[~: w!$E}kyhyRm333: }=#vʉe -tqX)I)B>== <8Xȉ9yP:8p΍Lg kk Ѐ$t!0V87`ɀ2A. -@JPA#h'@8 .: ``a!2D!UH 2 dA>P ECqB**Z:]B=h~L2  5pN:|ó@ QC !H,G6 H9R ]H/r Aw( Q(OTJCm@*QGQ-(j MF+ 6h/*t:].G7Зw7 Xa<1:L1s3bXyeb~19 vGĩp+5qy^ oó|= ?'Htv`Ba3BDxHxE$Չ"XAP44077&9$An0;T2421t.54ld+s;# V]=iY9FgM֚k&=%Ō:nc1gcbcfX.}lGv{c)LŖN퉛w/p+/<j$.$%&㒣OdxTԂԑ4i3|o~C:&S@L u[Uo3C3OfIgwdO|;W-wsz 17jl8c͉̈́3+{%lKWr[ $ -llGmnacOkE&EEY׾2⫅;K,KhtiN=e²{^-_V^Oo§s]?TWީrjVQ=w}`嚢zԶiו8>k׍ - E  [ly邟~_Y53rW򯎼^{7so}x>|쇊z>yz -endstream -endobj -868 0 obj -<< -/StemV 88 -/FontName /ArialMT -/FontStretch /Normal -/FontWeight 400 -/Flags 32 -/Descent -211 -/FontBBox [ -665 -325 2000 1006] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -869 0 obj -<< -/StemV 85.863 -/FontName /Arial-ItalicMT -/FontStretch /Normal -/FontWeight 400 -/Flags 96 -/Descent -211 -/FontBBox [ -517 -325 1082 998] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle -15 ->> -endobj -853 0 obj << -/Type /XObject -/Subtype /Form -/FormType 1 -/PTEX.FileName (PDFs/FSAn1.pdf) -/PTEX.PageNumber 1 -/PTEX.InfoDict 870 0 R -/Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] -/BBox [118.34400000 571.37300000 492.69700000 666.40800000] -/Resources << -/ColorSpace << -/CS0 871 0 R ->>/Font << /TT0 872 0 R/TT1 873 0 R>> -/ProcSet [ /PDF /Text ] -/ExtGState << -/GS0 874 0 R ->>>> -/Length 718 -/Filter /FlateDecode ->> -stream -HWMo1ﯘ#TZ(lҪ5boUl B B ֞yXvK88埏AqNg$(5!J ?H:yWBRP˄v3 -`&Oz @ lTk\&W+Uɻy'D*<Tֿ`BjAiLOCWu G( cuM 2RlQwnMujeIr`wٞmN .^BF^oIYn}[Fy{ tzU['ʸ8qR! W(-,SOa4@A=^۬3AJe-_Cx) 3) -.$\Y(W;g޴zLMa(s$_[M;58~U1Ӏ|q@1Lکn]U]HмS0:/VW."4gc@7Wڤ~PQ3u!pIOjaeA )q<.tf="b fd-i*Y56ªH1I+[0q-ql_\mhՑZ[S -DIK9)LQP(TH2v(asԓ"-ޗendstream -endobj -870 0 obj -<< -/CreationDate (D:20080804134311+10'00') -/Author (john) -/Creator (Acrobat PDFMaker 8.1 for Visio) -/Producer (Acrobat Distiller 8.1.0 \(Windows\)) -/ModDate (D:20080804134339+10'00') -/Company (Queensland University of Technology) -/Title () ->> -endobj -871 0 obj -[/ICCBased 875 0 R] -endobj -872 0 obj -<< -/Subtype /TrueType -/FontDescriptor 876 0 R -/LastChar 120 -/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 722 0 611 0 0 0 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 0 500 556 556 0 556 556 222 0 0 0 0 556 556 0 0 333 500 278 556 0 0 500] -/BaseFont /ArialMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -873 0 obj -<< -/Subtype /TrueType -/FontDescriptor 877 0 R -/LastChar 121 -/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 667 0 0 0 0 0 0 0 0 722 0 0 0 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 556 556 500 556 556 0 0 0 222 0 0 0 833 556 556 556 0 333 500 278 556 0 0 500 500] -/BaseFont /Arial-ItalicMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -874 0 obj -<< -/OPM 1 -/OP false -/op false -/Type /ExtGState -/SA false -/SM 0.02 ->> -endobj -875 0 obj -<< -/Length 2598 -/Filter /FlateDecode -/N 3 -/Alternate /DeviceRGB ->> -stream -hޜwTTϽwz0z.0. Qf Ml@DEHb!(`HPb0dFJ|yyǽgs{.$O./ 'z8WGбx0Y驾A@$/7z HeOOҬT_lN:K"N3"$F/JPrb[䥟}Qd[Sl1x{#bG\NoX3I[ql2$ 8xtrp/8 pCfq.Knjm͠{r28?.)ɩL^6g,qm"[Z[Z~Q7%" -3R`̊j[~: w!$E}kyhyRm333: }=#vʉe -tqX)I)B>== <8Xȉ9yP:8p΍Lg kk Ѐ$t!0V87`ɀ2A. -@JPA#h'@8 .: ``a!2D!UH 2 dA>P ECqB**Z:]B=h~L2  5pN:|ó@ QC !H,G6 H9R ]H/r Aw( Q(OTJCm@*QGQ-(j MF+ 6h/*t:].G7Зw7 Xa<1:L1s3bXyeb~19 vGĩp+5qy^ oó|= ?'Htv`Ba3BDxHxE$Չ"XAP44077&9$An0;T2421t.54ld+s;# V]=iY9FgM֚k&=%Ō:nc1gcbcfX.}lGv{c)LŖN퉛w/p+/<j$.$%&㒣OdxTԂԑ4i3|o~C:&S@L u[Uo3C3OfIgwdO|;W-wsz 17jl8c͉̈́3+{%lKWr[ $ -llGmnacOkE&EEY׾2⫅;K,KhtiN=e²{^-_V^Oo§s]?TWީrjVQ=w}`嚢zԶiו8>k׍ - E  [ly邟~_Y53rW򯎼^{7so}x>|쇊z>yz -endstream -endobj -876 0 obj -<< -/StemV 88 -/FontName /ArialMT -/FontStretch /Normal -/FontWeight 400 -/Flags 32 -/Descent -211 -/FontBBox [ -665 -325 2000 1006] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -877 0 obj -<< -/StemV 85.863 -/FontName /Arial-ItalicMT -/FontStretch /Normal -/FontWeight 400 -/Flags 96 -/Descent -211 -/FontBBox [ -517 -325 1082 998] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle -15 ->> -endobj -860 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [398.364 526.662 405.338 537.606] -/Subtype /Link -/A << /S /GoTo /D (figure.9) >> ->> endobj -861 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [444.685 298.16 456.64 309.104] -/Subtype /Link -/A << /S /GoTo /D (figure.10) >> ->> endobj -857 0 obj << -/D [855 0 R /XYZ 125.858 740.998 null] ->> endobj -858 0 obj << -/D [855 0 R /XYZ 125.858 699.22 null] ->> endobj -859 0 obj << -/D [855 0 R /XYZ 125.858 630.104 null] ->> endobj -34 0 obj << -/D [855 0 R /XYZ 125.858 600.485 null] ->> endobj -38 0 obj << -/D [855 0 R /XYZ 125.858 574.133 null] ->> endobj -696 0 obj << -/D [855 0 R /XYZ 232.723 510.901 null] ->> endobj -697 0 obj << -/D [855 0 R /XYZ 240.748 270.444 null] ->> endobj -854 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R >> -/XObject << /Im2 852 0 R /Im3 853 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -880 0 obj << -/Length 2830 -/Filter /FlateDecode ->> -stream -xے۶}B3}:+ONj̓=}Dbt=HP&qg~Å(c+1ʬZo^}<&l"ooo^|eM~vc"F)Mnf&߿y5c,}77޽Y^R!iys۱&SKTj0cŊ1bOS¸ux=pk(1fH4>69CöqO9s?9<|Ϗ&{rS~hM!;ϕ~A.5#ΉV^&"-󯷧L Ǽ'фtV L|rI(Z"M]vvT_=k_L%9fOչzqLZPe:`ٙ r|:VG2ɶ̀4֊كI*%wyYQih?t̷2N9@P˗xnL"=G0R-@ΓƊ PcC5Eu1Tqh6 9_|*Ӷ.xrl'aLr_{5Io:7(s;l(vn3&{ !~F?V֜&_-1a8T!$# C)7UUCNl{m݋VpE[yܹ񠟋c{ = 0Ѝ[ֲr:?MЬWD0:M˓aa&w[a!È & dfb:HĀvʍ]` VCw64a!#KJ-CQkCSw!]yR,䩩\0a{7DcbBe#HRcqs ޤҢa. >.P.T`l$lX -RɎ3@Qd8 -0({'o\|??y4Z y:\%48q?c!M 5!1)pC|1t֮7CːxϞ.%HRvSLn䡇:" &,XW&Nq 84V -eC LƉ -02K76P*vLhB͐ǧZmeA7HShVTGKI+x#[`yC@QnD ty;D1!Ha 8o&fKyL[B -!X[ӥx - E%W=K1+a#@9A___ X`5Z)0jȏm$ZŰT$c(4xEj:dP3S(2@q<ߕfa<+ёp|ꦀ<0Xl+MUDy8d PÙXQF.Kbim`abMY Y)|@5#/srA$H-nm]:8YBIA\q.5xu ]rjoP$Ψqk1. -bdo=Tk|V1=PpdڔоIzYfXFNTI(^aqN4E#vFeU*pVh^֗JNun LaC3jD(0~oQxEz A84l.yh0.!aS8Wfb$uP -^ut}eƾfe)p15PPZJMvW6M).4(nټ)yXmEWcHa-iKVP<؈MD TEF7̒YOwwKÛMr7*c`|jo YB U[t`)c2D/v*D1cjآs/Fly%~yp S!]6c2śP/#HV@`(GiGYB=Dz] %m*ED{j+^< -/z)N?rxi+d&Tuծ|ؼ؇%#e0N -N{P.n]N6AZ4|/#Mt׵MȅYVyyȏlz`^wOw^XW(;0.}'nqwP5UJf0wiy[= a:)ɮz. )+v4nK-䫔-;Zd4e,h(Fא#sг2iz0kEI@ צ]˅qt_3>8݉%]=۵U > endobj -882 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [386.543 588.655 398.499 599.598] -/Subtype /Link -/A << /S /GoTo /D (figure.11) >> ->> endobj -881 0 obj << -/D [879 0 R /XYZ 125.858 740.998 null] ->> endobj -42 0 obj << -/D [879 0 R /XYZ 125.858 716.092 null] ->> endobj -698 0 obj << -/D [879 0 R /XYZ 260.18 572.894 null] ->> endobj -878 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -885 0 obj << -/Length 3503 -/Filter /FlateDecode ->> -stream -x[_۶OP &$NgbNi־>%y$F"黋(xt:@p],v "|bJq4MMW_pKr4+˷X,rq t60J07Xr΃7x͒~R8JA 'Hq-)S:^F07 C͸H*P, ѠHJ#D.,͈?uBkͩ-2;,W2謮=nmN_{۱ԪvWc#&MVWD&SiIylbX}X̀1s"]Q֠D348K2#|} lcV iTt6VD7jCZTOK\"[r;\|KPk#vؓɏY2lӰQXZ0ڛ5A :YLpm}nlz)`՜M] -N~ -X6=H-HبFN?NuYyq768绀~ Džq\ҹ5ၞEՑf‹ӄE2.+TQƮ0,8ǹÄ&}Z>'gEQ߇ieNb{CF h_9cG@l<]K]nokqqYC_;a ]N`Y@YnPܦ *BX[U>7B , G}PE[zk40m;*xt͊Õp2? ͕RvNM -+) C=nQ!abN03ʮAUR2 - ⫋ mFfr' -(uM';[JV8]EQ".`ShW:R'o/S⯱ utSiA42f ˨ئiV$SJؗyrU ss[L^e!&gsՇ*6C0pREO=P]F*p'͠N"EpJTR o9 > -BZ4F~nB?3^w_)yN! Ds t {ܮf = T%5z ?[xB쁲(c;(d>Xψ=ajrGT+7D$ OQ|I+##t>XO 0=OGuQ3L*:ώW1Fci3~SPWvQQ &&PnZ%(l{G)< ^KPAq6eC 7ED4 oCs_@38ODώ3Bw (_C9=OCp/CL3 KKBJ9HT'Fx2XGC'x+dWN #k8eZӅ7d4^ZO{vWN^~=<0thD&d~FR4\1:>jB3) %)ƞP+B!2׹U0$ hw\QSLOM,Kzcuҋs}'EӉRH[Q;!xBi͍&];lzIC5А\f{FۂS17Ew^9^.Zixn*uwE[ʼn֔x/w  /e5ˏEkβ!dMʿMD49@_ س}endstream -endobj -884 0 obj << -/Type /Page -/Contents 885 0 R -/Resources 883 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 821 0 R -/Annots [ 887 0 R ] ->> endobj -887 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [395.893 360.884 407.848 371.852] -/Subtype /Link -/A << /S /GoTo /D (figure.12) >> ->> endobj -886 0 obj << -/D [884 0 R /XYZ 125.858 740.998 null] ->> endobj -46 0 obj << -/D [884 0 R /XYZ 125.858 430.373 null] ->> endobj -699 0 obj << -/D [884 0 R /XYZ 234.093 345.098 null] ->> endobj -883 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F34 502 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -891 0 obj << -/Length 3472 -/Filter /FlateDecode ->> -stream -xڥZY~ׯ[*\8ʃeJX}݇w+_ߛޤƘ )өG{DQ()3(P:%vN|7ǕJyR TV"hUb, /(siYY]6չʋ_P`6]>|l1mʶr."Z u$ܼQ^KO:Jd-w#%L5kU<` &{%bG(;Z&H$X@& .8kGv,5i8X#8tN4QrÄny$)rˋǧMo,m9pCuT25_)r]#6&,&3+TsGpKeH/R:+1c].M;xyiشuGM9/T=s C Exwnymf}k_,}FSiS#wHA\HMo.%߁9]jX3?ȏ@}mfŁ~l6xE&k'T^@59DoG#֏*P &u]^js7IIY8ͪJAHNBp*UM ݤbI&6gMYQ.H$5H6IJ1a8!P?We3nD$~9C6 t2HHd~BhR (Dф-XƵ7`|-8H,Ǹ儉G %Dc'9@1)ʚԟ^KCz&7<jγ@n !e -HQtBB?~8ܠ!%m bn /ZLr ؙ1͇I~*}m_/ev8"Ġ, DO@KK$@@$L:UGpN\ψT_VuvM]~Okd" -L@y}u\ -_2ȇ ba./0̏ "ɟ<ohs[v3y (bJFrX>+3gu- p 1OMA.?0ƥ5h#p+(ejX$tNu͛ 7jk_)#[Ćj7(Xmou6bԍjnCϧLuEN!8TZ -rV#;te*cIu0ʁ<?1yu4lB Iyޝ4_ WA`oT;IƏs4Ba g}DU7}d\dB)bCXjsP@\|$ΧDb/dҩNGA6uFMPO]dU3 /sQDmUKn, -y %pP[aA8VӄyU7T-Am>HZ'/[S)Cjj:> >YE|dG/R\C B<,nD n;xZx  !ŵ>]8AucЧsy_2M*mѴylt tgG -qґTHqC:Qnn:Ci/mS»>uzqs|"7g`g6043 -]̯G/c -znY -]7-?wVEnѿ LbkKy#^_a#šh  ys2}#w}.Q#M3HW0@(ltxBrԓpjdet]Sllz&3~ 9 -ȸೋuAX" вEMG2 G`mV>hex )-o:qą @Hsma`l{_+endstream -endobj -890 0 obj << -/Type /Page -/Contents 891 0 R -/Resources 889 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 898 0 R -/Annots [ 894 0 R 895 0 R 896 0 R 897 0 R ] ->> endobj -888 0 obj << -/Type /XObject -/Subtype /Form -/FormType 1 -/PTEX.FileName (PDFs/FSAn3.pdf) -/PTEX.PageNumber 1 -/PTEX.InfoDict 899 0 R -/Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] -/BBox [121.15700000 501.19500000 595.27600000 567.16800000] -/Resources << -/ColorSpace << -/CS0 900 0 R ->>/Font << /TT0 901 0 R/TT1 902 0 R>> -/ProcSet [ /PDF /Text ] -/ExtGState << -/GS0 903 0 R ->>>> -/Length 931 -/Filter /FlateDecode ->> -stream -HWn0+x -AqRnE,/!%G-Ȅ#7 QoY..w/׈˫! -n@ FS_ -(&Jjj bj15JfsF(]ሠtfa%H-9Bt >6`aƐ00YrhGu_x$zC3: -Np 3էu޸>Xw}Pk V:g0<朋AqVA5ȋe0SƬĠN*gtL? zϰсy09|=A{(VBl"vŒ{^7H -9HVp8T88F&e0r~&Am2gFFB!b -L`u2L'Xa:p(ቐ,|Xvry$/nAc0p"pg vqyWx9{J- ę:`ظkSSݹ‡pSJ @"BiABIr0LV  -Sm -! -)f|v.y B}w"kCmaC0V*)Ce };ڎ:>?V ͛&op AcH&6,lRKxXNM9/ 3NNYu%1l+(F]`GObc`@EGhtƑ h s=kj$ |䞒W @ox(EQ,[XU$D.нw&҆L둓\`"!A -_|]O'q޵%q(m%ݿ;۪rZ|t-|`&̅KSa> -endobj -900 0 obj -[/ICCBased 904 0 R] -endobj -901 0 obj -<< -/Subtype /TrueType -/FontDescriptor 905 0 R -/LastChar 116 -/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 0 500 556 556 0 556 556 222 0 0 0 0 556 556 0 0 333 0 278] -/BaseFont /ArialMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -902 0 obj -<< -/Subtype /TrueType -/FontDescriptor 906 0 R -/LastChar 121 -/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 722 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 556 556 500 556 556 278 556 556 222 0 0 222 833 556 556 556 0 333 500 278 556 0 0 0 500] -/BaseFont /Arial-ItalicMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -903 0 obj -<< -/OPM 1 -/OP false -/op false -/Type /ExtGState -/SA false -/SM 0.02 ->> -endobj -904 0 obj -<< -/Length 2598 -/Filter /FlateDecode -/N 3 -/Alternate /DeviceRGB ->> -stream -hޜwTTϽwz0z.0. Qf Ml@DEHb!(`HPb0dFJ|yyǽgs{.$O./ 'z8WGбx0Y驾A@$/7z HeOOҬT_lN:K"N3"$F/JPrb[䥟}Qd[Sl1x{#bG\NoX3I[ql2$ 8xtrp/8 pCfq.Knjm͠{r28?.)ɩL^6g,qm"[Z[Z~Q7%" -3R`̊j[~: w!$E}kyhyRm333: }=#vʉe -tqX)I)B>== <8Xȉ9yP:8p΍Lg kk Ѐ$t!0V87`ɀ2A. -@JPA#h'@8 .: ``a!2D!UH 2 dA>P ECqB**Z:]B=h~L2  5pN:|ó@ QC !H,G6 H9R ]H/r Aw( Q(OTJCm@*QGQ-(j MF+ 6h/*t:].G7Зw7 Xa<1:L1s3bXyeb~19 vGĩp+5qy^ oó|= ?'Htv`Ba3BDxHxE$Չ"XAP44077&9$An0;T2421t.54ld+s;# V]=iY9FgM֚k&=%Ō:nc1gcbcfX.}lGv{c)LŖN퉛w/p+/<j$.$%&㒣OdxTԂԑ4i3|o~C:&S@L u[Uo3C3OfIgwdO|;W-wsz 17jl8c͉̈́3+{%lKWr[ $ -llGmnacOkE&EEY׾2⫅;K,KhtiN=e²{^-_V^Oo§s]?TWީrjVQ=w}`嚢zԶiו8>k׍ - E  [ly邟~_Y53rW򯎼^{7so}x>|쇊z>yz -endstream -endobj -905 0 obj -<< -/StemV 88 -/FontName /ArialMT -/FontStretch /Normal -/FontWeight 400 -/Flags 32 -/Descent -211 -/FontBBox [ -665 -325 2000 1006] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -906 0 obj -<< -/StemV 85.863 -/FontName /Arial-ItalicMT -/FontStretch /Normal -/FontWeight 400 -/Flags 96 -/Descent -211 -/FontBBox [ -517 -325 1082 998] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle -15 ->> -endobj -894 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [273.683 645.815 285.639 656.759] -/Subtype /Link -/A << /S /GoTo /D (figure.10) >> ->> endobj -895 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [456.12 645.815 468.075 656.759] -/Subtype /Link -/A << /S /GoTo /D (figure.13) >> ->> endobj -896 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [151.841 297.462 158.815 308.406] -/Subtype /Link -/A << /S /GoTo /D (figure.6) >> ->> endobj -897 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [194.328 249.641 201.302 260.585] -/Subtype /Link -/A << /S /GoTo /D (figure.6) >> ->> endobj -892 0 obj << -/D [890 0 R /XYZ 125.858 740.998 null] ->> endobj -893 0 obj << -/D [890 0 R /XYZ 125.858 658.896 null] ->> endobj -700 0 obj << -/D [890 0 R /XYZ 261.086 606.144 null] ->> endobj -889 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R /F56 730 0 R >> -/XObject << /Im4 888 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -909 0 obj << -/Length 3732 -/Filter /FlateDecode ->> -stream -xڭkܶ]+DJhQNAjk!PĽS6zĹpZv9Mb#dQѡ%INw w0뇻oCIDC6ۇ2߽yëb[ovba/#Ax:L D'}{0ċTr{>XW%VnQZ5턿OMc|v/tO4*sҴ={Ң*:7]0j'-AfBxIY|$cݜҮHap9&Ie_zw8|iDcOq$Ҫ2p =- 23NFp_R!Hp.늁jxCЭN }k䊐mM;c-hY BDV8bqqD"zB~̰'=9>#% vAJ-l44պy~9Ö֬r&R_qlXK{AՏh::RiA_8ckX~Ǵ =~RZDh znD!h;fG.e= D4loޏJ>Gy݁"ucBs3DH+G4;/( @v8r0K8nwhLkј0!# 3k&OS՟mx -IphՒ\P\\IwF(KJ}{ s YճCЕ@@uBQ -gΣ.(܁+QJ{rǢ2c(J!*L-ն=D]M=QX9ETyHeb6 UFbH'[ ߻&ͨl38D}k/NL@V5$^zv{Ӊ˳S<]S,P{IM`Kj`&҆mvQG{e0p(ŪAi)$-<\EHKpRb+xY7nPb={!+> ŸʞR./H/źjALq':= j.`HSi+d4HS1jL K[fӎ `/u5yp{RA%{Ѯ N}g[:lIV!'Nns nt*rHD\l hLij0r0[$(9L6 휛7K#w>CE [k^͵kmGi#R}s`cC&Oz$gC/ -@俯h:3J')>MV |T -w)] -2c 1hb[l OhMX P\`ў z+ӷqdBsVkXb?ׅ-p'3۵Wdzq,JTvd* w2*H!P~҃Z i,LŖM5MFd{c)W -rM^N}¶[MV Gj$)}&2r2scP`xd;jC$wdEdm\Fi)uF1QĜ`Ѯ#Jm€;6ud9<[soKwخ#d~=0KoդE,]x>^QE%J{n uW VK&=ahq|h.Qnp{64s9h18,L}!P@}((ޏeU#Pk%׮K֮KC[  Z<=5r0,_Ryi`_ *s\#Pk0mzf 'g~KjB X)%56鷪;@yNk)󙳈p!'Z.6~N=vLfP9j5:Ho6$1)#9زy s$UBH2˹F .޺!|0D{ q+HgW]m(,-.糭⡶M>iwyCROm1Ci ޝNZU(ו[2t0ʵxI09m*KQr-|~*'VWM3YJG+A5G)'qškbRE(Q4(mA{?IPEܱTH]t ,>&O_-6 ~اq持܋=]M)YjyӞnGvȯǪ|a/0ѹ.1ܒҙn\/}-Nug5Dk#Ȅj*iFڬendstream -endobj -908 0 obj << -/Type /Page -/Contents 909 0 R -/Resources 907 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 898 0 R -/Annots [ 912 0 R 913 0 R ] ->> endobj -912 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [423.657 417.297 429.634 429.818] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.3) >> ->> endobj -913 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [142.854 395.404 157.3 404.331] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.1) >> ->> endobj -910 0 obj << -/D [908 0 R /XYZ 125.858 740.998 null] ->> endobj -911 0 obj << -/D [908 0 R /XYZ 125.858 658.896 null] ->> endobj -50 0 obj << -/D [908 0 R /XYZ 125.858 452.963 null] ->> endobj -914 0 obj << -/D [908 0 R /XYZ 140.204 172.898 null] ->> endobj -907 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -919 0 obj << -/Length 2384 -/Filter /FlateDecode ->> -stream -xڭYݏ۸߿oјI]vAKR\ؒ3R-ApL7 -U,,eeY,6tw7ܳ*by}.Z.ֻ\4Mo+Ood}hy'^6R<+A Np丹]edJ?>\K/gO5tǽI@hN磽.L]?sJ:15~CO.J{Zw}UwPZ1DLk6mi7x6MU]_{ZmvD5ơPWfvrV*D~T')=-++ِX+X+~o^O_'_ 'I}}zOU<ed$`"~iɴ'gp'ƱY -<8K2D0:ھT/&)rDy)̵+ ]\feXpˊL\B]niN~gۓDEۅD?gKRTYZ{Y,;(I.*e򡪭i"MV?R;5'횖_ d ޛd~V-2:d;Ñ?3v ϭVϪwȕD2xrՑkȁH }\$jS{[P)89\Bqok -qAㅌod(3wC՛WUUEn-ѣۑChdņw~hg!;"?LOT,[gs10KTf8W$B ?DT\)IXhgCːѣp%4x!2cc [{j6 -mwշ@R:3]7ࠖ1* -F֗$54Ϲ-֘m5xp?Bhg܁@ǁ'Nd\:qAԙNsJ. Ik.Vܚ%'l8a> endobj -915 0 obj << -/Type /XObject -/Subtype /Form -/FormType 1 -/PTEX.FileName (PDFs/EncodingExampleFig.pdf) -/PTEX.PageNumber 1 -/PTEX.InfoDict 925 0 R -/Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] -/BBox [18.66150000 529.52300000 396.29000000 625.90700000] -/Resources << -/XObject << -/Im0 926 0 R ->>/ColorSpace << -/CS0 927 0 R -/CS1 928 0 R ->>/Font << /TT0 929 0 R/TT1 930 0 R/C2_0 931 0 R/C2_1 932 0 R>> -/ProcSet [ /PDF /Text /ImageC /ImageI ] -/ExtGState << -/GS0 933 0 R ->>>> -/Length 594 -/Filter /FlateDecode ->> -stream -HUMo@W9x;1#RDH(PHi)д"˻{ov -=Q~TBI{b]3pX2&unVϛ*X}=pʻ>xS= # .'5YaJ^20V`d12VajACC -X:nX]2!"#C4L$ MIkpݺ?Ι;5Aa wP>Uπ}a>/,{ : @v 3I}HÁ̴cn:15W</W_"{@#f(TLG xߝlq&'ꄣFmru;6K8ehϩz<3MK_SBS6ū X^]nnG~N~@F+x/IO/"c=<`ԎFFW!'%OjnJxod;7 endstream -endobj -925 0 obj -<< -/CreationDate (D:20080801135037+10'00') -/Author (john) -/Creator (Acrobat PDFMaker 8.1 for Visio) -/Producer (Acrobat Distiller 8.1.0 \(Windows\)) -/ModDate (D:20080801135243+10'00') -/Company (Queensland University of Technology) -/Title () ->> -endobj -926 0 obj -<< -/Subtype /Image -/Length 502 -/Filter /FlateDecode -/BitsPerComponent 8 -/ColorSpace 928 0 R -/Width 26 -/Height 36 -/Type /XObject ->> -stream -hb`YXa6vfNrl^Q1q ^I)GZWFVW^QUb`PVUqx44A ^]Q^=G׀143൴qmxlUx@G'.n^ /ԡ~0`g(oXxDdTtLl/)Wy KNMMKg9rYpN6o^ιy0v>otA! B%y@TjkAd]=o#D7%R8ۂ"fwhvdo7Cx'N< L;3xgΜff7,X³EK!%KyeO]VׄEYǻH -mب -7nlݪnw{ jO7% {y1Ԓ y1d> -endobj -930 0 obj -<< -/Subtype /TrueType -/FontDescriptor 937 0 R -/LastChar 223 -/Widths [ 278 0 0 0 0 0 0 0 333 333 0 0 0 0 0 0 556 556 556 556 0 0 556 0 556 556 0 0 0 584 0 0 0 667 667 722 722 0 611 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 0 556 0 0 0 556 278 0 0 222 0 0 0 0 0 0 556 0 333 0 278 556 0 0 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 333 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 611] -/BaseFont /ArialMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -931 0 obj -<< -/Subtype /Type0 -/DescendantFonts [ 938 0 R] -/BaseFont /OLILLK#2BTimesNewRomanPSMT -/ToUnicode 939 0 R -/Encoding /Identity-H -/Type /Font ->> -endobj -932 0 obj -<< -/Subtype /Type0 -/DescendantFonts [ 940 0 R] -/BaseFont /OLILOL#2BArialMT -/ToUnicode 941 0 R -/Encoding /Identity-H -/Type /Font ->> -endobj -933 0 obj -<< -/OPM 1 -/OP false -/op false -/Type /ExtGState -/SA false -/SM 0.02 ->> -endobj -934 0 obj -<< -/Length 2598 -/Filter /FlateDecode -/N 3 -/Alternate /DeviceRGB ->> -stream -hޜwTTϽwz0z.0. Qf Ml@DEHb!(`HPb0dFJ|yyǽgs{.$O./ 'z8WGбx0Y驾A@$/7z HeOOҬT_lN:K"N3"$F/JPrb[䥟}Qd[Sl1x{#bG\NoX3I[ql2$ 8xtrp/8 pCfq.Knjm͠{r28?.)ɩL^6g,qm"[Z[Z~Q7%" -3R`̊j[~: w!$E}kyhyRm333: }=#vʉe -tqX)I)B>== <8Xȉ9yP:8p΍Lg kk Ѐ$t!0V87`ɀ2A. -@JPA#h'@8 .: ``a!2D!UH 2 dA>P ECqB**Z:]B=h~L2  5pN:|ó@ QC !H,G6 H9R ]H/r Aw( Q(OTJCm@*QGQ-(j MF+ 6h/*t:].G7Зw7 Xa<1:L1s3bXyeb~19 vGĩp+5qy^ oó|= ?'Htv`Ba3BDxHxE$Չ"XAP44077&9$An0;T2421t.54ld+s;# V]=iY9FgM֚k&=%Ō:nc1gcbcfX.}lGv{c)LŖN퉛w/p+/<j$.$%&㒣OdxTԂԑ4i3|o~C:&S@L u[Uo3C3OfIgwdO|;W-wsz 17jl8c͉̈́3+{%lKWr[ $ -llGmnacOkE&EEY׾2⫅;K,KhtiN=e²{^-_V^Oo§s]?TWީrjVQ=w}`嚢zԶiו8>k׍ - E  [ly邟~_Y53rW򯎼^{7so}x>|쇊z>yz -endstream -endobj -935 0 obj -<< -/Length 633 -/Filter /FlateDecode ->> -stream -hjˌ~}~אxxx222դ545ءHGH:9:Ђ===DCDMMMefe{{{878kjkݸnmn<;<֐QPQ$$$HHH212fefxyxFFF"""ƿBABsss-,- ,,,>=>JIJZZZTTTEEE444srs#"#ppp qpqDDDJJJlll434...;:;fff|{|󕔕767壣***ddd)))&&&'''GFG;;;XWX~~~zzź]\]EDE!!!UUUTSTSSSljlQQQ>>>wwwyyy y:: -endstream -endobj -936 0 obj -<< -/StemV 82 -/FontName /TimesNewRomanPSMT -/FontStretch /Normal -/FontWeight 400 -/Flags 34 -/Descent -216 -/FontBBox [ -568 -307 2000 1007] -/Ascent 891 -/FontFamily (Times New Roman) -/CapHeight 656 -/XHeight -546 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -937 0 obj -<< -/StemV 88 -/FontName /ArialMT -/FontStretch /Normal -/FontWeight 400 -/Flags 32 -/Descent -211 -/FontBBox [ -665 -325 2000 1006] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -938 0 obj -<< -/Subtype /CIDFontType2 -/FontDescriptor 942 0 R -/BaseFont /OLILLK#2BTimesNewRomanPSMT -/W [ 652 [ 505]] -/CIDToGIDMap /Identity -/CIDSystemInfo << -/Supplement 0 -/Ordering (Identity) -/Registry (Adobe) ->> -/DW 1000 -/Type /Font ->> -endobj -939 0 obj -<< -/Length 216 -/Filter /FlateDecode ->> -stream -hTPn0 {!@oXHʼnL&Glv׎lN`dFd -arֳ #ߖsG#< Cy.N ol-MT_WpF -P@ӀQU75#L#T/wmgpJ#+zͣ >o~nFOtCb><I,|RK!~ k" -endstream -endobj -940 0 obj -<< -/Subtype /CIDFontType2 -/FontDescriptor 943 0 R -/BaseFont /OLILOL#2BArialMT -/W [ 652 [ 690]] -/CIDToGIDMap /Identity -/CIDSystemInfo << -/Supplement 0 -/Ordering (Identity) -/Registry (Adobe) ->> -/DW 1000 -/Type /Font ->> -endobj -941 0 obj -<< -/Length 217 -/Filter /FlateDecode ->> -stream -hTP1n0 - 2q2t0EvW$PS-}$qс$x᎔M֒ ? w-cuغ> -endobj -943 0 obj -<< -/StemV 88 -/FontName /OLILOL#2BArialMT -/FontStretch /Normal -/FontFile2 945 0 R -/FontWeight 400 -/Flags 4 -/Descent -211 -/FontBBox [ -665 -325 2000 1006] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -944 0 obj -<< -/Length 8834 -/Filter /FlateDecode -/Length1 23492 ->> -stream -h{{|$,YI6 $$"ِ  IpK KQ (h*-JEdJZҪԪBwfwC}Os̜9sĕV8+5Q)8Os*H~F"Ed%+P,j" _bkqZZU^y~G-#ӈ/(',]Y }^D*CVTSȐDcQڙ1_}cUʪ7">h"*]SU{f̎_%GHt"^}tMy9]ӹЈy&i5jCy^ڞFXؓbiJ~0bw3SPg9ڗE$@;i%Y66BQ6Hu%E S_=ͧ5!T@oGԇ2fB)lEO, =o3ۨ/ 1t?f_ F"hh3Aa}HqTF[&s9t 7鯇 ֗iQZ1m>jD DWt*GdÅlN0a' +Hɴnt`al$ -DP]x{Cl8V_Jِm=迅V3b֞eF1Cg, :AċzmV_#8;ކ߿fCo\s'4jh-]KbVy4ig;A4B{ނYQ+ޓe/f`ct6-a؝WW$F9-Esi)fxw/=G/lKN| ~-6myml"+l"@ >!-cu]X?.z -p"[RYOior}}U+fv dF#~#þZkh=HMtM0#?0`s5z_n{{=Þc/wؗxQ<|o»'bbޝ Fz:IaK!IEߟ n?h9:Ko }~O)[?chB4$cֲD646lsb.n> 4O|&%o-_b-?)"[rZ#ϊW9kZіhc+׺Sӗ;g-1,-,w[X>ZEEW͍y u~R-Xºl6V,d}9_͊lv;59ܢ?h8+^zƟF74VN;+dhy$ª߅J/jJ~C{<̆WpNG-_3>@Z3'ٟX+1W<̦-/8̎8Ri#{"~OY|a%c!vO; -cOnNt۟;qHF K4k=%tafJwzsľ? 'VRYv˾Ep!zo/b/`еj!l3a݂ta9 -Y_"h߉(.Oo=%j;jԸ}E,|q6:/&a\V㌚36Lsi 2b]khݬ9zv<#ۂ}{͢#8i$5ia2'7-)zV'$F#ڧf3_:E3̇M' -Og v3av'kՙf=jU#҇KIN8d w+>pӿ_t>Q==BClV (9ϕ_fxyAIRdUFy'F+RQԌK5=\Eth2I)FulތouޏU~oWy;qq`E/5]ڔWBs\9U)lr޾fw*oKǦqqrzzh - 3JeȓTeR-%e.$Kz{m:;D-e}q_^0U0c^TmA%%|L,c~dBo?ݝʫ.9%"sl -~!Wvf򽐿| :зJȣPRAc.Lv/TQVLQT嘃cKҾۧ mmxTjn >~jn3](ʓF1Z%ƚ4e ۼn$˝JχC0b-n4C,$@o_I? _:` @sOld~6r$!S伳9!du~@_ȷFYd>@= =# -}h@{'$0!un7Ș)CƆēY9u1f -HGM Z/rr-ȶelɘ R}*)cuɪoelu2%5DFd}ʆ<Ҡ=r}5*S &7dS7h6/ TkSgto"nmd̥\twKXOeh {=L ~iW6LRβgOh1'LS;Aw?Z#H$vm9k&sFC6zu6NՖ8RE̦-*qI(!툣1XR4r ؃T m2SjMf~Jl:Hͽ Es9e'SbS#9~?QIs]iGG?bQGi^p]7 #؇1̼՜o֜/1',7~ffsǙ^?xJ?Gi@9~究gTte\r bsK+-V[֥#FfHfS^4 nW{PhR5YiKC=*y~{$1W}Yν+Ó#jnM neMSR@ǭ}A{`'_ML+[eH(V}M 1?Q.41Wq3ΨDp>]YyN<\u2 $0 YN +3Mu?}{W{R6Fs/9h}> k1{@@n?eq dt?(ޤ◘'~g8ST"^F>Z)\ JgCVzGƃK܄:o>FWZ~gyG8tK9QZr(UĹ@A\u]^ekg;O!UiNd}НF^0{}I63F0m$dЧ2 ؄m?3Ϡ^ -:Cu9~g1KqsKei]m ,e]KQb0QKY>wdϕQ2 -vj,P6|Xd'ͷ@簓8(gpw? - 2+k^[hag#Ze 4^d}=|^ibp7˖B,`kYk(þ -H]UߎPk,:#:JU'8/]yyϾLi@#%1?eE⚸6V'`</FU;8|sSͅĹw4"HB [vM#twh׽%p O}zfvq`/:vnGy5oQo<n -| !5yw返~w 7#8WoP净N|7%KRޣ]VޟIF pyʻ#7PRyoeNr÷8±~RBm\`1%?i:GQ"xoW8{Fgjz A `D׳Jg?}ߖ|W~p]r/ 7p]^m躎;[gj'`3+xE Dww]O8 hVZ~{SD;Wg~ t^~Q?Lfx%// -4LQߐCR? 7( &'|}bm߄ ̨1LДS١mmq -NWZ K?mS3rn'<͖A黎Cx*U|^hyk xB HNu8R!=Ո #}s#MjmFT(ut A@Y]AwzS,P^t t:Bni@nr;(R&6ftЕ~ -w]s9oppA>ޯ"Cg=tCg=&_, u :]Hۀہݲ$a-boA%ÓX W{~.BBe p[U-!=$BkyvOQA?8 -JrMTRtZi#OOg#oZ岈#"pvRHL($:fe!!B#I 5Ql)RE( jcGx&ZƎ;vDv;Wޭ[TO)/؟bi}02|eCCqll{b8*ȔUU쉊#8qqdXv0;U:Emɭ6$rv '{K]J)zWfy{(7&?%͠K;fs[ĞLt uuqf=Mn*MICpE\ʔ٣de dkuuuuu5jXcQj,6mdj5O{t,:M;L=8֎7RY7 -'xG'Z͙1I^[J%/ʨ*Ybcnt[KKY -/ga3yuׄh6+:+b|$e4Y0Hl7]fDC|5=k%)-9ĮfJ>.Cy-(SBRYRy~gdyV)-񷕀.V$P)AJ5ă΍  ARJ[4vC=Z]~sJɭqRcuunNҿ=YK[ǥe*̻ehE\VWU,*[5+.#rWn3U4Wxr}|Κy43;=ԗ5"4;oF ||"]Q[ZGuI  -2KgI0$j45\ j ^TSMb/^ϱ]4470iw5FSjPUCՈٿMY_ՠR?A4g Zq80qs#qzpuByKCg~agSGփ>+|]al=Q Q+/ -endstream -endobj -945 0 obj -<< -/Length 7561 -/Filter /FlateDecode -/Length1 21604 ->> -stream -h{y|TEv7YH$зi$:i%! $ChOyr"Ӡ@qEQm2 -oUItD>oNU:ܦ!FD'N*HKx; -ǁeK_^Bĺή|9Ιxa?OeEiMI -S&Qd侕 |Y_._]VJ]rʂkkFD KTd]ޟDc5*jRdĔvҐY ,>H?lxM]O%*i3gCXf#m\ZFڋ'@YvƼ♼WJr'5 OZnn}\T󟛿1͛h -a%gmzi,uƣ37+bg9[vքV^bﲏ+vn/K~ K[GIV(R (yTyGS&9]ۨmvj'3ox?V35mdC18FR<0q_X.gL6]îH61J9'H!>>~6^+D!zH>줲RU[`'?ʏ"gR2#RNx_ZH>]Ig$3|+T&E"r~Ap2PMV^ו]Noa;W&# -֊ɭC+װQ]cJ B!KgTLR{_Z/VΡ[i0[F*i mm1y>W]Yqn8ȮR6Nh1S-Ax?LTh+1WuZ2C -JIn˔t  i{cT&Bș(&*"h.4bGV4G̰/4tt9(sjImnX9o ~Lcz//F;'x0Z{W2uqDaYt^~)ipԠo~¨ҜOpFgרԞ.*fը#: HMIKzuW^ q=c{t53sdDxX'ݦ -gSI%7.UȞR(J[)J 1mm Dm-X2>F8lbs<>8%]nsc+stƘ%%9!<,ۓ]B a`=<5 h&#wD'G$2<9FOOPsKˍSssn_j< dQ҄e3-۰f7tސr~]IJ#=3 '蒌vs׿{ADkZ+su!ׯэmS[EcJǠuļվbFU\) I0/3|| r\SvIsЋ_"sm5Ɩ+%Ԑd"l)|-!)Kq >-Hbo xi?8(4+i>"/ H\c GR_{#Oޔzn}5ym`<3f+x"s3ZPaɠ.JaY2.X(`$PrVFn^Dq NkP 68"x*,vae&/`&7la ,aљ2]}>4`gyt~?Y_[ -xc:ƪak4xڂxX[X.5E^>+\hR(!/sUrY9B:Fe9C:yN|]X:z o`l'}HsSjZl6K% *]R 0ދjS|-PzW}vL,싀QT MJ!v(:jD=tyQ{f[Pߣ(wiC lM߃2趀C~ NxWlC=XDy.Wkw mL+h=Kkٳ*FC=r}!?lQ?Hy7z4 7,U> [>}AZm Za2U@<0bHk_t%d? &,d`Dy^)_0]oۈ~cq_Si+Ώd5 -QXy݌8^%bVb\D1V}(Bb}UƢVҽ6 {6[ BRr$w< y~1F=Ǚ6?ֈ=%=`0OPy?WKOhg6?ю&A l (HfU,`/"KZKCՃX ie=ݬ7_c~t=J%'hUxmOŞoŔ ԆwB*gy>`n -ƫ]K|>OvqZ.>#e{*u -?n_b{>oO[b>Bӭu]kc|O3M~[S6wk[b:OҠC6XٽrT_'#B;y(fA'RK0iSY=0C Xq.3Q,΢JyQv0uEMKTANF;lRZ w,HG 4H}61mr t QH+a#.x){X򸋈c:m1/Va mik.vPHrq򼾓~{Z9$yVٍ\}P1U9jp]#֏D>,wRL*Zz $ڽ~bތ.k&}3lˈ;X/v/u=➂irEg:8T [X9' eK G܊3tS)]D=.k[[a[ :!]Rt wK?F yMWGZZΤZ -1(݊8_^ =Lں NdNPQ, -0nW`N _[ ~zQNبw("M 1H_le"]v=4}c!'i0g ?+7HPmFO<.-&P^k~HZ(}>|6O!+l+} uS.7ʵxG1(0o>O.u6пwp(&Cԙ0NSY B?PSF{ˊ?ZT{,%,,wHKsʾ-hl嗘Gq6EaO -w{&5qL0#{~:B{؋i=#naf;+},h\\g8[:Cؽ{?[nw/ Q\ ڭ n>z:nYowxwnZg^(st(C~| -\neyȿTHb q+~1JF@ 4mq\uzhw(BAPGAPȅ4 n64 -pFx{ Hgt)WIq4_N9f#f. d%)A4,2`fw;pAShC*{&o=0*'yPa]3øOS4`?sWww IݜH3px( f[i2|H t Qup_O'4q%ZLx/7~ѓ]2W8{B:0(jN e0"p^`2/5?֘ΏgN3yޠ3]|B'4 bOhم𸐦$`&p`xrW4*ysycHF -$MxD$ݺHn\N$Iׯ'K$|8$M N$I -! -{k*gFoUݍc6{w3̟;3JW32'0o2clϼMmX?1-'1"e~ q`Ir%ٓ)FGG7Fԍvc@z 0䅑'hܳ}FWgP CC*BMQHӀ `&8 ؤ;NՖH,' #~no/g39N-EfzPޝ8Xo"M$uoQ/L^Ԙ+3Vul8%DaT+!2JAXTcRk?,Ju}QcW]ǡٽJͮhO -04ݗ0ai]!a*AfT3r'MwC}9 \ZԹוpkTj(5.$p_l[VX44*)b$t{mw{#p8l0Oz #UN.RgNWUyY,8XFytOMnh,fDQ^a1,9/`7y})Tůc]V}>$#6#ztcr~ ) 6|/cc^AH˗gY>;}.x2}///J;C|.Iv;z6Qv}]N(;uv*v }ss6=t6=6a(m鰴9/l$!& i &i-&7˖v&!hy2dy6?S?+V%-K*c ,]o(YK*UV)hiTeaȞ!GzrhFnaq oENH\Oioɗ m-m]6*,*L5vdcE[CE[CE[cce[$c|rq|3tCĻ}Yݝ5et.ߏ N -O,#Y" kJdu{btne9ɢŵ)6wnNɵꃼ\[S[Gg/32L/nۡ-]2Ft`P9B(-B7J:u ?--V?y{:)FB~\PCkY2 !ݦ O!-8k,,"hQN{ӕ%]=(6TX$ -ݣ""yXsyQɋ)2R2_4EDH`yEF Bt"ͲqQ8 -| yXx?󆇇ۊCK&Qrgi"eοy?yy2Ώ1h utqqx@ٷMi)_4)wܱaH/:Ёt@:t@:Ёt@:Ё0Mf -NOAbֿ%`OZByū'Y UoYJԢv&x-^W)Aj6ixYzauTzvEus59u1J M>~! >|`*zz9uz~EmŢ%&0iBr梹'$NpQiyłEUzuF_T1gnm]Ţr}BE:=I/O={^\_[f0`$Mn51r"CSc4c)϶lH2);vW'o*v0&1v%1fF.ҾM_9NrD@$># -endstream -endobj -916 0 obj << -/Type /XObject -/Subtype /Form -/FormType 1 -/PTEX.FileName (PDFs/EncodingExampleFig2.pdf) -/PTEX.PageNumber 1 -/PTEX.InfoDict 946 0 R -/Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] -/BBox [18.66570000 529.52300000 396.29000000 625.90700000] -/Resources << -/XObject << -/Im0 947 0 R ->>/ColorSpace << -/CS0 948 0 R -/CS1 949 0 R ->>/Font << /TT0 950 0 R/TT1 951 0 R/C2_0 952 0 R/C2_1 953 0 R>> -/ProcSet [ /PDF /Text /ImageC /ImageI ] -/ExtGState << -/GS0 954 0 R ->>>> -/Length 598 -/Filter /FlateDecode ->> -stream -HUMo1ﯘaHa z@B BЦgM(bw͎/*2]wj)aH0_U'a4 RFo+}y]Yk0h޸jY.M 0T5 ` 7Gc8 JVB(Y2] -@eJb8J.kt0>H/shqDoƆ䵰/kǀ(+;8VE?RG*D m$cZdK<<˼{B^H>CEj &a2}ڪB^UǙHh&6QFۜΟgȱ{>#Fg@9.q -z0;g D}VMm}ȍ-֔%+}bf֔~*[ʭ4T6-G'5b> X٨s5uȵ)ҩǓ2ZtPwendstream -endobj -946 0 obj -<< -/CreationDate (D:20080801143117+10'00') -/Author (john) -/Creator (Acrobat PDFMaker 8.1 for Visio) -/Producer (Acrobat Distiller 8.1.0 \(Windows\)) -/ModDate (D:20080801143211+10'00') -/Company (Queensland University of Technology) -/Title () ->> -endobj -947 0 obj -<< -/Subtype /Image -/Length 502 -/Filter /FlateDecode -/BitsPerComponent 8 -/ColorSpace 949 0 R -/Width 26 -/Height 36 -/Type /XObject ->> -stream -hb`YXa6vfNrl^Q1q ^I)GZWFVW^QUb`PVUqx44A ^]Q^=G׀143൴qmxlUx@G'.n^ /ԡ~0`g(oXxDdTtLl/)Wy KNMMKg9rYpN6o^ιy0v>otA! B%y@TjkAd]=o#D7%R8ۂ"fwhvdo7Cx'N< L;3xgΜff7,X³EK!%KyeO]VׄEYǻH -mب -7nlݪnw{ jO7% {y1Ԓ y1d> -endobj -951 0 obj -<< -/Subtype /TrueType -/FontDescriptor 958 0 R -/LastChar 223 -/Widths [ 278 0 0 0 0 0 0 0 333 333 0 0 0 0 0 0 556 556 0 556 0 0 556 0 556 0 0 0 0 584 0 0 0 667 0 722 722 667 611 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 0 556 0 0 0 556 278 0 0 222 0 0 0 0 0 0 556 0 333 0 278 556 0 0 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 333 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 611] -/BaseFont /ArialMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -952 0 obj -<< -/Subtype /Type0 -/DescendantFonts [ 959 0 R] -/BaseFont /BGEDOI#2BTimesNewRomanPSMT -/ToUnicode 960 0 R -/Encoding /Identity-H -/Type /Font ->> -endobj -953 0 obj -<< -/Subtype /Type0 -/DescendantFonts [ 961 0 R] -/BaseFont /BGEEBJ#2BArialMT -/ToUnicode 962 0 R -/Encoding /Identity-H -/Type /Font ->> -endobj -954 0 obj -<< -/OPM 1 -/OP false -/op false -/Type /ExtGState -/SA false -/SM 0.02 ->> -endobj -955 0 obj -<< -/Length 2598 -/Filter /FlateDecode -/N 3 -/Alternate /DeviceRGB ->> -stream -hޜwTTϽwz0z.0. Qf Ml@DEHb!(`HPb0dFJ|yyǽgs{.$O./ 'z8WGбx0Y驾A@$/7z HeOOҬT_lN:K"N3"$F/JPrb[䥟}Qd[Sl1x{#bG\NoX3I[ql2$ 8xtrp/8 pCfq.Knjm͠{r28?.)ɩL^6g,qm"[Z[Z~Q7%" -3R`̊j[~: w!$E}kyhyRm333: }=#vʉe -tqX)I)B>== <8Xȉ9yP:8p΍Lg kk Ѐ$t!0V87`ɀ2A. -@JPA#h'@8 .: ``a!2D!UH 2 dA>P ECqB**Z:]B=h~L2  5pN:|ó@ QC !H,G6 H9R ]H/r Aw( Q(OTJCm@*QGQ-(j MF+ 6h/*t:].G7Зw7 Xa<1:L1s3bXyeb~19 vGĩp+5qy^ oó|= ?'Htv`Ba3BDxHxE$Չ"XAP44077&9$An0;T2421t.54ld+s;# V]=iY9FgM֚k&=%Ō:nc1gcbcfX.}lGv{c)LŖN퉛w/p+/<j$.$%&㒣OdxTԂԑ4i3|o~C:&S@L u[Uo3C3OfIgwdO|;W-wsz 17jl8c͉̈́3+{%lKWr[ $ -llGmnacOkE&EEY׾2⫅;K,KhtiN=e²{^-_V^Oo§s]?TWީrjVQ=w}`嚢zԶiו8>k׍ - E  [ly邟~_Y53rW򯎼^{7so}x>|쇊z>yz -endstream -endobj -956 0 obj -<< -/Length 633 -/Filter /FlateDecode ->> -stream -hjˌ~}~אxxx222դ545ءHGH:9:Ђ===DCDMMMefe{{{878kjkݸnmn<;<֐QPQ$$$HHH212fefxyxFFF"""ƿBABsss-,- ,,,>=>JIJZZZTTTEEE444srs#"#ppp qpqDDDJJJlll434...;:;fff|{|󕔕767壣***ddd)))&&&'''GFG;;;XWX~~~zzź]\]EDE!!!UUUTSTSSSljlQQQ>>>wwwyyy y:: -endstream -endobj -957 0 obj -<< -/StemV 82 -/FontName /TimesNewRomanPSMT -/FontStretch /Normal -/FontWeight 400 -/Flags 34 -/Descent -216 -/FontBBox [ -568 -307 2000 1007] -/Ascent 891 -/FontFamily (Times New Roman) -/CapHeight 656 -/XHeight -546 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -958 0 obj -<< -/StemV 88 -/FontName /ArialMT -/FontStretch /Normal -/FontWeight 400 -/Flags 32 -/Descent -211 -/FontBBox [ -665 -325 2000 1006] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -959 0 obj -<< -/Subtype /CIDFontType2 -/FontDescriptor 963 0 R -/BaseFont /BGEDOI#2BTimesNewRomanPSMT -/W [ 652 [ 505]] -/CIDToGIDMap /Identity -/CIDSystemInfo << -/Supplement 0 -/Ordering (Identity) -/Registry (Adobe) ->> -/DW 1000 -/Type /Font ->> -endobj -960 0 obj -<< -/Length 216 -/Filter /FlateDecode ->> -stream -hTPn0 {!@oXHʼnL&Glv׎lN`dFd -arֳ #ߖsG#< Cy.N ol-MT_WpF -P@ӀQU75#L#T/wmgpJ#+zͣ >o~nFOtCb><I,|RK!~ k" -endstream -endobj -961 0 obj -<< -/Subtype /CIDFontType2 -/FontDescriptor 964 0 R -/BaseFont /BGEEBJ#2BArialMT -/W [ 652 [ 690]] -/CIDToGIDMap /Identity -/CIDSystemInfo << -/Supplement 0 -/Ordering (Identity) -/Registry (Adobe) ->> -/DW 1000 -/Type /Font ->> -endobj -962 0 obj -<< -/Length 217 -/Filter /FlateDecode ->> -stream -hTP1n0 - 2q2t0EvW$PS-}$qс$x᎔M֒ ? w-cuغ> -endobj -964 0 obj -<< -/StemV 88 -/FontName /BGEEBJ#2BArialMT -/FontStretch /Normal -/FontFile2 966 0 R -/FontWeight 400 -/Flags 4 -/Descent -211 -/FontBBox [ -665 -325 2000 1006] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -965 0 obj -<< -/Length 8833 -/Filter /FlateDecode -/Length1 23492 ->> -stream -h{{|$,YI6 $$"\H IH[IX4Xb@AKUmQ*"؀V}? -VVV}_3B~<|̜sf̙3'Ĉ(6٩Oy[G("-]bQeҕ_K4Ӳꊪ?Dm?fD|A@9a٪{+[Y[YA!öGɫ*~XggGP%o܁|=Xw%QILf;H'GJ=G0s5 7zl2^E[+:Vwd?/Y`PJ+h,g iû6L ^n=>JI 3@,6נUwS{}!_wóx./Kf; ~/J$6%ii㝬o`fl]l?_v;xϜknJFXybp/އSƙf.DC2f-MbSNg3;[exFc~;1W1fGd_؇S Cy*Hs$^g]k|fAS"REk]xY|q-YK2Rmv\{I{UZw2}%reeNAsVغغմ[=qO8ףXѢŃ,Dԗ`fQ#VE-ˏxNj%L?i}Y ne"[ԾIg+4_3bdi} X7;PE^÷Rv5O[p񲶋.vݎ]%xۏ<L5T~F8k#4 v61^T&mdCx_V9 / 5L4NX;PiM)~Yr_շ"4h!cmnt:BiN`ndUcƖS* n5.BycXY4LmZ>vr[VB,?POoU8sF)ͧdXm`g^tLƹ聅/0NXd켷1Qp&>G5en2">s->L2>WOҮGd[oOױY4}=MfY6$?8EߡU16YӨ,u8NLABi;תcH])dM2sqcnjbTȴ)I Npb/*2#WXhj5% - r65yr,*(`\5ʕqKizNM02)3%wcy.͟Yy2OW*oG>.eyނu˚\KXh+:4%ZBÐ CUOd*od(@W^w+OZ*od/˭t-+T(WuzF-$i+`7ZRsu}`cT'"DQ Ъh5|6N(ۀh=t<%YnGTD>WGkq$Lb!zU*KH؈'s_ l##+vO~*}  G CU0'[rdA' RہǁNvA0NƌM26T#Tyod^Q@2>Jn`8tz(mkA-cKLB>9NS]KOV}5(c M/1$v#c U6(DSP"it!F4O<_|1XgZh?wfvJ\ʵ{W7z$[!1Kѓ<^;t}_G0ߕvk$* ~4t, 0|nKbwV6r n>j5_=4Vk,ZwnTmM@=/߲'1苟M}к8sߌ%Ez *׀=H՚0T*'{\v% -:E~W\>/ߝvC>|50pC>}-̛b|r#f+jtnJeg~un* -gnyjpHu~GjoKWu(`*8ǿ0"hH`]J>bdi6+ž;.V*IXè EyT:ړ:'hOLFsܗ[";0T\o yOjzQ\cuH{F'<Çr 2 -(s]#,Fs'ABHw|l3|*|uJŋǃ X_kT% tPڸrP GJ<Ոv,5.(=L+2g^վDqn9P7eky=vWNi%mvU=hon?o:tz<.pOh-Ll0BMG>I࠿Lw6@[-x] AYWȾ. -=]]!׮нl{&JXo/-mB fRDC%xl(`Wq^jQ@|4|_H>"0) t6hvvw`(g㽳,w\Xʷg_ -8uGoѸ{Ε9{sQ8ΝAeI;Ab9sDN@uqq_ _62= -P'έ(-ʓmC[@!pk<}"#o4>tw}sr4-q Şoƹ"~BwiS{?vR6Y@;A.@ywW}{J=<738]/"Φp쩟c|Pg<{\OG1cA?i{eδuęn6~",OrFw=9߸\|o{K{3 Du}!-CAFh™J~m]g;G!1>2fln_Q1- r=n\3S*0ZUߞ=曟k/i ppÏP.jO&P7,1Jx?LC i_%yӗȌϴOI?*ޤO.tUu؈v0;5#'"/#^oM=ϋJU{grġPk>]#Q;,QxAH@*P$9b;~8ThT"L>QwI}A*KЁ?>%(TBz1o:ukY!@z`#{0v"ۉ!ebXzjM]p׵8k[H^ _ ] ]KD::)bt6@gt6+iR`~%ߋ8?A#Kj1V$9dK[3ig.)GU#Sy8e&:8)L_f6H/sy_.|?u>dHc_qfe),#@Φ~гKAL/z Կ)&bUo7K^^K^^dw/&|+A>l)%p[In.-q2Z^ :_9ߗ,kX5d b՝R%jb1V7 W)^Qu=Z<~_ˁ,ܷ\̦;_:,sOncǜ/w>m6&qv'{c΃K\J)zwfλ('?!͠U\˒':ewĞLt uwuf=Mi&MICsGC\ʔ9cdedkuuuuu5jXcQj,6mdj3xt,:M;L=8֎7R9QH%9ޱImVsw\RVn)C˷1*)EJXc$ݰ2VmņG^ݕMeEgELQw<&]x>ѱ gz-ˌ[V$xyy$e5|M,guQ<eJ"Z)^Q?%>ޯ4">O+*j|0%`x7޵^UcH56H*PIvKn(* boNU?nVa0 mIW>9CVQU)\Zʯʽ[-n\l-Uo~u:|q2I+oU<J)pPe~IiK:WwU䕵>Д[xQ_7utƚdc -/!.d_BT_rXaqirri+ z(+稛DŽbhc+,˕R-EXR[|8 nB\ "}\9D5y$64F+^mBoc73)+cr:Onq4x&lܞ;`Xv|Q|m|S-R1OOE#5S}6,64ˇA=.1)4;*qeP$F~?6!) UrDHɏɓ=%M'ZNZOg~ 7#H^>t.U-$ '5$dtwC}RI @5] @IqeFI/(bDeOjG}kmGZe6~rN%R[$3g8>˜~>wC22-O\76Hsh?k2vxn#\" MٗbC- c._/;W<4"42<6tppM["lb' .aapӝrknw\8:n0MTyRel0(QQ11Tr{|](k;hãR(;z6o  šu;BA"q GcCs.\s~az… |gTL pT*eJ],tޠVf4fB.aoTQ?dc#][1cƺ-VD>J~%{DyDBoJWyIWS4#*oּ *6u(\^gft.<|wyxGzЃ=AzЃo=AzЃ=Az - -#$K|:T*Vz%F -E9@ނ@J+-4s-2y@^4@ނ3ax%=I/P :%TA -(e*?ji52(˴aG ˖R;-3h6$+S)FR4J 75VBA՚ꁵiUg ЫN-xhe -2[K+Væڠl(K@s0jU}#-BK^5ZW/ 6d}]jWFɲjczڵuk+jjWu++Gy QJkW6JN1e5HKA>^ҘUtYC1zꪜIyESJjVUϨzVų|_b(Y[QUb -vhziM}C*f9cQ2(ZdQʨ^Y_}2D"VRŅ(L|F8_߳ 5cFHeiJh^`4ը$~&#kPoӐwWO-)e¡V8L\"H\P8iXdQx6udvӒ>yh 9  -endstream -endobj -966 0 obj -<< -/Length 7560 -/Filter /FlateDecode -/Length1 21604 ->> -stream -h[y|TE>U& i6M@Y%-" JBH$ԇ "A&DA灻(n6srWշCQg7_NU:ܦ!FD'N*HKx; -ǀeK_^Bĺήk}9Ιx`?OeEiMI -S&Qd侕 |I_._]VJi]rʂkjFD KT}Atd"њE5O}Lt1LbZvi۬ʟh6vh<ܦrQ['qdbjn< f^bi\m?DDG65?O`@dsA:@O(0&zzPMvZC6MGvl4ڎNa;~b͏iVR)P&MjZ.7 z[]ECrZH5o{^ڧ巴6+W̜c~ܴ>4<WЇ,-SQL| -V t%Ufφܭ0';ڸIOHyyzR -G;4]ٜ!ԏ#=Ϋ-]jיP7DE>/dzByFcfQgohciljEYyNAATNs1ޛP[,;uW 3f$,=Y-5;|&ܮޯl/Ev7, cSدX%[ְ߰;agB^O),<jJQQsqSjL7o)ڂ]pܬl=vYZy>f_xx<|_owx^*=>J2DjxF #;jzT51FmSۭ=E Njg~wٷym&a\4 -ޗ♇ވ{"0vq?.d l3W{ *;#yy³$IՇPV*#t GL*W&rD*Y]cG+贚~o_D -hM2J}NoGP5EP##>m> TumfWjNɈ?br+wCzzbޱq|ۅ}(&) -DP=ZEU/tx-+W-4-X<󮬉z?z7e֍n`W*mka?R&|Vp=HW+ZX}!MDveJ]]eXd*E\(&*"h.4bGV4G̰/4tt9(sjIЭnX9o˵16L5^7_v"O<a(իRecIh^~)ipԠo>¨ҜOpFkרԞ.*flÇ rA$wEI}=}ܺw=t92"b.,n=rIRQ7WP{9)5?z Rk)oEKTt (ȫ>@` r&~QE(`*g&@aOE5IkiET,ۨ=K-wNpZ;״e6v&F~t[@!o?Z|'z6^S+cU;W -ô@NRZ,-2gD L5Ϫw6Klяr7nkJT["@|r*D@XNI 䕘|uF|0 ~s1ljpؾ@EL2}PM15'??F7cOQ-~V AkZQkK!TVL@mXG,ok+Xbh`ߵt/͡lU3}\lZP(8G}N3!Uz q,4Z},LZk0{iƘ̝ٚJӖ/fއ~_ry/t:Gt)mՊhvۊbh'劄/(';WX_k7ŞC2+џkcb5?ưJ=G kQvQ؇}W)VE[aD7Cw@ݛPeۄo^wqG6ASо1mW&ZqjJy{AAHyuAH3H[qR?^滔pĭ8C+i:ҕASB꟰V(ڕ.VpKWp4Yː7tuʯLU{P:sr-(ޣTk> dM4ur } <6s -_gOSԋrFFoA<6:e+Z1n 8I)8ㇰeuX >2nC `5~tx/Ytm6/ZCCmGpK˶y͕.3 'VP7\}ok'kXOP s!4Pa} h7[Q]Plǟ -J9QL03;n :'1@N54y?!VH!ryAKT*t8@7D~ǂ0O۬{eOZeV}?Gݗ_AOP'ggB^<Sbƀ]h( #罇T;Kt@445B!;v48xgz>Ϗ(泹5",-,ov;;+v&)/h/i -ZoEMQS]ys @0^_δz{3-3f?Ӈ0xgŅ_|39ʡs> Kϻ\@P}?Wnr{IHn^>Gq-h~.ĻȹȇeVݹ\l;_ z8 -wtǃfIrog!S=,m-_(ǭ!L )  D \wHǩ+sWt] <9 -rTCaTfL@!4`0 -(T+iUz4n ,ɞyӥXg\)=|A:qJ $itb_аݕ)OagmJ WlƫD雔S¨\A5FvI &?E8?'9]ҷfN@y9f[Q`'-ERS)7e* 7:H^õ?7O2iJ==_n+ۣ'e䯐p4 -*t`2P6p'?p 0!E8 d_jD3~1)˕ٝR a/g$}?-Ag{(32NP'h5.3 ?q!M2ILV>hT(%cIO;&e#t$ $Mx'D$ݲHnXN$I׭'K$|8$M N$I -! -{k*gFoU]c6{w3c̟;3JW12'0o2lϼMmX?2-'1"e~ q`Ir%ٓ)eӣ#FX = -RH4[>{g#ҫ3'QILÓ6bD=JDQH3A`6X4 -iVtraX$!'>˙LvSnM`Q٤fo>w'..|I2;[ qEom+65&=ʌaEUDNI,tJy%8nƄ(՘:R{]&8!~U=F1hvupǒ d.M% s=xHDFrAOJj!y\I]P_N,uue$\"u A?  Jo}>~=ݞbw]^x{7Gp9Cup9d{n6H2*y< (on|] ) ͓Ō<+2%f149ϰOUqc53ju>b^zGݗdfD2|L$%V|ۆel+(6v1{?Ǿ`ssSF/r^TiG:vϥ7ŽtG]"î ԉ]bNNe®onNC߾ҦNҦP"lMw?61Z$$w4aq MX4z$2&ْ$m"Ol"O&~*ٞ'q% -ĸyIe៥ e>rI%*-0|̓73DHON-,ni);mںK&@eEe"{hkhkhkwldO.npP/{Faגx/f ޑq!I>#“eD"+535SdaMwVVx֭,']t%Pm -$Bbơ΢R(R%OD..H]9xƫŦ -KD{TdZ$ aR5[x"20?jr:y4EFJ拦ɜcoHpaQQHNY6. -G0/4 gp[wxr|$b_,T,7<:9O:ORQ22 dW..!(#-&37l@:Ёt@9Xt@:Ёt@:ԙ"i,S)H W3ϴx$4WZN$a+c*%(]-> <#bMi-TŦp<)ҥ6%P'K壾Z`-AZE/CWI9r.*12:h.ZVu¦Ϊ=i,Slo"Ih{M)E -*_*K^[S1B_/'V/JϮ^TSnnBf~=Fi2zb/DAÇLE>@Ϝ?_ϟ;VϯX> ->> endobj -923 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [431.846 612.565 443.802 623.509] -/Subtype /Link -/A << /S /GoTo /D (figure.15) >> ->> endobj -920 0 obj << -/D [918 0 R /XYZ 125.858 740.998 null] ->> endobj -921 0 obj << -/D [918 0 R /XYZ 125.858 697.377 null] ->> endobj -701 0 obj << -/D [918 0 R /XYZ 242.197 584.849 null] ->> endobj -702 0 obj << -/D [918 0 R /XYZ 217.156 463.921 null] ->> endobj -924 0 obj << -/D [918 0 R /XYZ 125.858 185.056 null] ->> endobj -917 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F56 730 0 R /F34 502 0 R >> -/XObject << /Im5 915 0 R /Im6 916 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -969 0 obj << -/Length 3608 -/Filter /FlateDecode ->> -stream -xڍZKsWj%>+g3nT;{)b EjIjʯhK,@7}?q/dQze}q 1ӝ([!}xc(3?~7Om"劉~}BxcFxn~hQؠ$ǁ0(^,Wk/df5{0 ?h~84]OǼ87P)`#a#5iޟ5lhoqQ H" b85#ͯ |҇|#[ Dn' P~bƜ:fdgT4uSɾͻ=N_$=W5d#/v8eZ -!03t I2Hnt9]Ey8wEvzPv<6[X2!'HS'*4 lۧ)=]٭c'=T^[?ꚶr*f`Qpx]Bcdՙ75֝-:v6+o9Jڞ4,2~5䛷}A6Lo3+սО+S?64 Z˓'&04v#R@jJ8aWLI${Wz_H @-Gfvl:~--P~<\13J˜[bjJzw085Ń5&DX ێ__'&M (Lh[$ $spJ9?O@&,:BBz4.' -݊[gcd*s umľ5/Fk,w796 !}&V( l7 -4gϿ9q\qV->(a(r&㸑'kYX-m[ -e0 -h؊J~–,&gǃVx-xMS|`O;&寘 -11S^k-GwyF\x{A01GL`/ItͨH|.kHwhG6(=\gr? &,Ȱ2i=tQVe_2LqR1I `(l OMy9f8NBB;682&gog2#o\e.\Y/&0{Xn3VI`AiU3%)Bei1z<~׶+2ŏ؎^[&8_ݹ9@)JGҰDyrBzP7*x6lMTs][.ztёGp26y*xp]YcFv[4jm.نqE1!ʚ_Q=3;S<#QWb|[ZF܅: -.c^SڭSKYyO5^\zɈ$2⹎tV锩 7&3 [lwb~~{;rB_Y/i&P6b5uqMN=' -&َJ 2M@ejU*e1r -t>=#wf_V)NRc&1ob*az5?_hř xljgTҩ9X~ȘhA t^S&4LHe^s^k? Po4QwuճŖ3B2^n. - Ԗ642qELdkzbWO0څZ4a=.2_C?ܑq1/Giy{uo.pJAe"e,y/З$ G,Hf#ênpL_Tx޷-JĻPuqJ\"~%Y:!nZhrU IO)߮g-<̖!$zuUp>NМeNoܭ~lIv>r2 _ߪy^"gk]OQC*SAiDtB5` &,9덳68wáVy+\vFxfq߉8s[DZձ|3"D^S++͚F~! ,x'T7mǗUA(]L+Ik)Pd*0EXpWպpjYFo~]"n!C/QQCjJCmn 1{w:$4_%HֿS-O -0AЉY`LjmK $+WAobe(endstream -endobj -968 0 obj << -/Type /Page -/Contents 969 0 R -/Resources 967 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 898 0 R -/Annots [ 971 0 R 972 0 R 973 0 R 975 0 R ] ->> endobj -971 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [243.137 607.334 255.082 618.278] -/Subtype /Link -/A << /S /GoTo /D (part.3) >> ->> endobj -972 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [289.901 464.495 296.875 475.439] -/Subtype /Link -/A << /S /GoTo /D (section.6) >> ->> endobj -973 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [331.028 332.988 337.005 345.509] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.4) >> ->> endobj -975 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [199.136 239.962 211.091 250.906] -/Subtype /Link -/A << /S /GoTo /D (figure.16) >> ->> endobj -970 0 obj << -/D [968 0 R /XYZ 125.858 740.998 null] ->> endobj -54 0 obj << -/D [968 0 R /XYZ 125.858 593.76 null] ->> endobj -974 0 obj << -/D [968 0 R /XYZ 125.858 288.909 null] ->> endobj -976 0 obj << -/D [968 0 R /XYZ 140.204 143.907 null] ->> endobj -967 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -979 0 obj << -/Length 3334 -/Filter /FlateDecode ->> -stream -xZ_sFУ4S1%m:.=}%E"U,4)Ҍ}C&s . Vb?DINQ&"^ЏIցf#zyy⍖4JZ\^&TxyZxwB,/_>ݻ+|oToRTt -btR!N4mtVza 4S4 93=(Vvi); D~Sܜ꜖*_Vk%]VEyCEyR`d>_xyxTR$=_ߌ95Pxs9Rɐ>b( { -2SMF. hp_PJQE9au,JBBbX@ H|5$b$PҋѶ:ڂ~>=x3'Dv}jD*bp{zɆ=ULÜLM?uF&t8]tHfy 5-ChW}OQC|N3A Tq`6Hf9AѯǼ cX - -ep -N8{TߧkeMqqF!:<-i -8.{}.]QR6R $u']zᄸ{($aoDrlAaj_m>bj͎_"uG9?oc[Te`ʱs`y or+Zʂ P/EEڇU["(EAmf~ny0+l>!Ǭ.23 Q9|KUNϢ,"η {'9sJ0Gpސ0$a'Ԛ6NwE{cCinoX-/!) 0e[jtwC_KPOރxf!oo:tvfi?mu~&6<㉒Bs8K=z Ż7v U@cGإH/I]II2XT>(f VY)P oyyҒO,Lx_riZXGѩ|՘p7e: *FJz- -&I7ceQ 9;j\qS;yC[kTBUND:~ . z!POT a"i4Y䙸#L"6}'@E ^ G)$c W\йHGoS;CD<|y =I -9T [ڨ22s#>7)l8g: ^^z^Cu.z2rο|DޯjBb߉ 'Q'L]4NO EAoǰ&QEoaC0˯A8Ʉy'T&L؎jT'3Ib7`H" yHE~Vs&_J@rV)fBHUʡ#r#L٤|@ > / id"cpEQ;V{ppppNc7lԇ{A[o[+n}=E=ұ?SpS)6Lh?RHTLЄi@@ @Sco$ڌl& iޤm'=,EBO•YHlgw6# /k_H-Ɉ <32v=)%A)FR y<u? Aic¶cއ,[}%vB -)endstream -endobj -978 0 obj << -/Type /Page -/Contents 979 0 R -/Resources 977 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 898 0 R -/Annots [ 981 0 R 983 0 R 985 0 R ] ->> endobj -981 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [370.811 528.012 377.785 538.956] -/Subtype /Link -/A << /S /GoTo /D (figure.6) >> ->> endobj -983 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [301.469 399.12 313.425 410.064] -/Subtype /Link -/A << /S /GoTo /D (figure.17) >> ->> endobj -985 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [357.584 131.963 369.539 142.931] -/Subtype /Link -/A << /S /GoTo /D (figure.18) >> ->> endobj -980 0 obj << -/D [978 0 R /XYZ 125.858 740.998 null] ->> endobj -703 0 obj << -/D [978 0 R /XYZ 252.359 711.29 null] ->> endobj -982 0 obj << -/D [978 0 R /XYZ 125.858 485.775 null] ->> endobj -704 0 obj << -/D [978 0 R /XYZ 253.246 383.36 null] ->> endobj -984 0 obj << -/D [978 0 R /XYZ 125.858 156.999 null] ->> endobj -977 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F53 751 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -988 0 obj << -/Length 3148 -/Filter /FlateDecode ->> -stream -xZKsFW̑Sidg_xMR'k@qz$g ɱ ×(%Arl4d+ -؊qERI*?\-$@}}}+Mt,V׻ OXo4rF|͚1]_]}Eֿ\1BDjPqםj2DzQ{!DxFs"$Q\8K OjkM @J+nOq[eW`4zoldQSL)X.+oZ$ aJzLՕ1ٍTO3M)G_/~@%zcJ֫Å`8RbpJ?ɮɍR vЗEjZi`Mv=tש^RvhŎX<&ckTZc|_Ao? -)͢1#J~8s982 VaרOA@e+=L¦H|v|hxh(\ׯ3Oy&K 9žG`V>?_4c[Te3+Nф -25ɋ 3=&R&2½UN8иNjMn|c9Y}2u]l}g|SaEY'UM\OQhL=<1Q)f@(v6qgKDeQK9mu*[ߒ;Ϥd%^Tl5M{KG[$*°= -/hk?jka|XuѶXyCJ@&ˆ4cwef7pP=S(4njf(QC~5$2J™W Oz޻T(p)[oפ|t 8s9/EYY]5bk0OqGMoa.XeǬn,l -MNsʶx`wDf9vq1k[SlJ hSkѾ4yw%J]^+uOͧ%HAX*ty`c^swEQkǽ}ݛ +Ok")SMudvGP,U`G|noie~lS8޴~q^mKr` _*d5m0 z@~o4w՚ 9o[kũ U>gz:)VA:ObOL0uVY -fBn#DK9BB<7nݞrT͂.!4V>7BӠ"2EmD|K۬.qܯ7 dW!j[cnf JJ<+#<8EYݻ`P< g8JA=lw6|vqfR`ȟnqAj/X"b@/1`TۀyGkLv56T]buɫJ\q,.iYr6RΪ!pC Pi_OEm\Iw 2S^%XRfXob;4~]VG !]cFphcqendstream -endobj -987 0 obj << -/Type /Page -/Contents 988 0 R -/Resources 986 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 898 0 R -/Annots [ 990 0 R 992 0 R ] ->> endobj -990 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [164.562 364.087 171.536 375.031] -/Subtype /Link -/A << /S /GoTo /D (figure.4) >> ->> endobj -992 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [153.365 187.375 165.32 198.318] -/Subtype /Link -/A << /S /GoTo /D (figure.19) >> ->> endobj -989 0 obj << -/D [987 0 R /XYZ 125.858 740.998 null] ->> endobj -705 0 obj << -/D [987 0 R /XYZ 262.596 711.29 null] ->> endobj -58 0 obj << -/D [987 0 R /XYZ 125.858 421.621 null] ->> endobj -991 0 obj << -/D [987 0 R /XYZ 125.858 285.985 null] ->> endobj -986 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F53 751 0 R /F34 502 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -995 0 obj << -/Length 3475 -/Filter /FlateDecode ->> -stream -xr_Gif%D2}H64ҵ'/IhYK+R{.xWvsǹXHtA$ZĘl]; II"o/^laQ|q};BtmW MtyUdw߬(՛o~rEV\[!- D5 r0`TMdp*4¨Z$¹t 2; '*5_NA66_VT.}S;Pa{r7J3"bg̳+-QϾ7hn?X ->>U›z[?A}8s#4)@մDjMWF.Ǧy|L(4.]C=˥\6aADpvG.е2q[X8MվXwU'MٴCW >cSWBB> NWꁢ4j"D:$.H#]K+y[$xʖU wHTǘfMپ895 -6,zAVPjíޗʁiX)+<^C䁪eJ}Pl1C;c>ލكjǰ^RV֫ bXjUaU:;H~ʑC:u!۾-mQ tW/i%N]jD0a.eV—CcW*68Λ5,|@Qknr{=Z, -\D`Tl`mq 3`Y7WR\{PV,zoW۩]},FBф@YXi,7Kˊd1Oɳ_׍mk/RΤ5]U`8sWw!v -PI6Me8.MYW#:[`>8.^ )ap(lij -TOVw0k=D1j,:O;DP"6 GUP1a.e]"C=j!&*<ӳI=qCxD: ӧ:ayR}$ociq90NPC?U~m~Slϫ#bewU{ؔ3c$#2 6 }ۮ 'V ID ?.&űs 61K;0x=-Pfo hM# - U`#J Q.#ń 1QwJh ہvt7$a+`$4{_;MMR:qak1s~:Z)Yu9<>nˢ ^B[a٦mNї|=]*BK'rQB5[)[>dCW7?}[2 Ed:9N 8&oݒM?U@xh; "; f ]!_o<"[ـ)\^ z9^U -KT3aۺ/^ kc0MjN{?q3e0ex{0[)Unq˜^T9l\cQgIBa-9\߹Ml,pwy6ׁjO@v-Z]3Ԫ5Ԍ5]Ķ}4^#*4} ՝iYVmrBoLϺŽNWZٝ{T~2jh.5a`~ȅvqsP<~4.lo_X}$› Vzb - -eCWϏOQqtJkӂpv2v}dqKx2|Rdg2'(F`k:(dh] -ӿ\ya˳3nN=g~ dף?h$8$WG(|#nDdePϹ)nNp;HgyM̘hd1&:F@878QBY!wV baM!. -ҳ^v ?bu+`f,*6*k1kN*(P8mPyx*"4$tS 0LQb\'b@P}f,{C$)G63OoGOMR-ϕC 脜!rzyzD3uiزm_ --`Rv)߶最y_qnovpj۵89ئX#X?tXn[OڧgKh -(HJ&thX}NʠYFL̦3zOA%hLf&ӴH9I4D26g=M2<̓@D -4L-"TfL/PTݎFгrQFF0D 0$!ZɮzHg@1}*Q-/(}G0(GzFGT397=e' -ѳG!y;zV+C 'RYyD=Z -9|yZhX_l0J|mGD_v dksVx}fDHbendstream -endobj -994 0 obj << -/Type /Page -/Contents 995 0 R -/Resources 993 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1001 0 R -/Annots [ 999 0 R 1000 0 R ] ->> endobj -999 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [380.07 365.332 387.044 376.301] -/Subtype /Link -/A << /S /GoTo /D (figure.8) >> ->> endobj -1000 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [372.84 305.556 384.795 316.525] -/Subtype /Link -/A << /S /GoTo /D (figure.20) >> ->> endobj -996 0 obj << -/D [994 0 R /XYZ 125.858 740.998 null] ->> endobj -706 0 obj << -/D [994 0 R /XYZ 253.54 711.29 null] ->> endobj -997 0 obj << -/D [994 0 R /XYZ 125.858 531.215 null] ->> endobj -998 0 obj << -/D [994 0 R /XYZ 125.858 402.324 null] ->> endobj -707 0 obj << -/D [994 0 R /XYZ 274.635 277.816 null] ->> endobj -993 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F53 751 0 R /F34 502 0 R /F43 512 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1004 0 obj << -/Length 2987 -/Filter /FlateDecode ->> -stream -xڕZKܶW[ |%ge;Su8١!')i} >\ɑD4~| ᯼Q,8Ku(<+/o»g)?簘ut|x^J<=h?^߫SHub (o&t8ɿ*^I&BFΖEۚC1ji*VLR%4ba˱Uvx,qj{XP;?ʹg?lnFl?H4u kPOmZc} -ңLꁨ52N3 0$ -x:g`p!)=ݴ%[[W@L>|&gwR\H~B:DWyFGS *C$sjD|6.pE0i)Ώ]{cm=Cjf՛uTI$;_F;4@x9:c `~StlG 25b^MYnD,vÇ gcZӷǸ;‰8:p4KVLJ5xI*tO h{HAlR<LьBxum'B/} -.cG:an'*d>ā'x&GDžkGWiݟ2(AױzsꊢHD6Lk&xt-t~|0R-<glRL2s 2G!$eP=KiSu! >i)L2@h _Sء(~ODLv$bUfbDHev@Hw@ow~i: cic7缽#"0KLE+N&>{l3 >h8iu .E"J JiBZKz1Hq깻X.Gy% nN,[dzHuү[0%j%f.ZzgAQ8SA+O+VOhGKG5y?8$OZ( RKy.(`!,KnՆX;hKc^ePo ;e3o1ay)-1ߏ="﨔2+4 %Y:qf@Sb82)}ŋ; Q"7s+ -f)&At;?oRS|]P|e"ߦsk" QG=\)Hl0[nq - z-`)Ae{K=a$;D=:)c6yYRw-:/ Hysa|Q?̀UͶ݋H Wd2^*h2 %&6EOSvQCMy b!tF4_@?⩌XYA(ThzSXB#pDY 糧 -X W0yfޔbroԙCі?$"JݴT *i<{_cS~wJ -F ghyS{@ˮԯm~6ЀC+رw_y{WgRuj%Ghw8눏:`j,-v >Y֍4t]q]3=BFD6:s1 krrDt^ 8\wVAVC+1%3qͪx@ҷSQWmjBm;ձnEhNjb-ݫ1“?Iבq1w-Zl:P=wM+=ⲇ|踼'BhiUG}AXx'_ѡ 0#Mw8Z/+)T+E(^@Bum: h@[R.2-Rs~CcT _ -aB'*H `\Bk^; dN TN p-v - ND>AOogIY: bN`|=KQ(L?W0@#*BAZP%O ", :_#S -W橈&彊@X4&ӻ [$F/޺a"#|ŰU0g6l1Ѓ -m1[9N7'ym0}=?/ TI6GoFdpKXC1Eyv7F*}^~Kd -5!^K?j (D~_ 5endstream -endobj -1003 0 obj << -/Type /Page -/Contents 1004 0 R -/Resources 1002 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1001 0 R ->> endobj -1005 0 obj << -/D [1003 0 R /XYZ 125.858 740.998 null] ->> endobj -62 0 obj << -/D [1003 0 R /XYZ 125.858 569.85 null] ->> endobj -1006 0 obj << -/D [1003 0 R /XYZ 125.858 492.147 null] ->> endobj -1007 0 obj << -/D [1003 0 R /XYZ 125.858 339.345 null] ->> endobj -1008 0 obj << -/D [1003 0 R /XYZ 125.858 222.408 null] ->> endobj -1002 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1011 0 obj << -/Length 3016 -/Filter /FlateDecode ->> -stream -xڍYY~ׯG.x~Pi %{fsH֛_pf(EX`]]]]]]w;?,s<+O~z+VH?'#$4.^&Eeѓ"Bˣo5\P">Л4ODGy%$| -4k0̺|ͣBu ye m#V&|mY&oֲ=g>1Tg$A9R:mi(q 'y Օay, 5^#bAPhO7zu5yf/xE`]2t8}S2|4M$#P%S<)>|ya7T;6&Ewmvl -H`-: )ZB=#e}V1*qxvk 0u󮯎TO9_!bg] ,H`d1}fH| |Vxm9.ؙۚmVf 웢Cӕ={ Q{Nz eMHY(Wg}'LLϚGJOX ӕS`œߚpsw~fus/K#Vɋ$6{By@xe垛xֹ+e ^7PΙlݨr<sdPT - 2R,"x`슱I}WלLl΋`pE= UJύ.=9ZpPJbV\è2!auEvQR4kb:_B+I-O"!mb?0^"~K{Hnq%u /j^wsj{yW\ˠ_l& tD??{hR[QV*}ѿ(x13pU+L C7dy6ݍ {ajZU%#8CtΦ_JB>i%@9=ߵcXvi|؇?l5F:(:V,uiG*zq͘ cVL32gvHKKy84S꫼ k28ϤoTK/C(q^^4}Vɗiʖ$͖Ti֣$,֚ڄ12=Rыͼz߮ USocYVJxG^bk C[F oZȖIMCۉآeiȪdgc/Irv`ɶS r%'@ JT;T>mDX~h43MdTF8a3ʄ$` PDB*ľ꫉Q!X:[w=7oU4o$e JtB=Iqg㾘8͠sA-1`c0u][ I:}0@\lȚFh- 4h6KS%t%ZNLw'ơ fQ(;q9Xɥ+$%Qg4j;ʹ)LB>[ ff͍vNy~BܠQf+P}mjh*ӓ*#,/?Nw'دQ7\M8̒MRRTsiKٹ+I hNNHG3iZ6m;,g&W(H"oDͶDmH=dZ5pDu\ӌ]Teb}yۿ&kM͇wiD5T'KG}u9m@Qtnl?aendstream -endobj -1010 0 obj << -/Type /Page -/Contents 1011 0 R -/Resources 1009 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1001 0 R ->> endobj -1012 0 obj << -/D [1010 0 R /XYZ 125.858 740.998 null] ->> endobj -66 0 obj << -/D [1010 0 R /XYZ 125.858 677.447 null] ->> endobj -70 0 obj << -/D [1010 0 R /XYZ 125.858 546.562 null] ->> endobj -74 0 obj << -/D [1010 0 R /XYZ 125.858 324.047 null] ->> endobj -1009 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R /F56 730 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1015 0 obj << -/Length 3697 -/Filter /FlateDecode ->> -stream -x]۶~ AIݙԱ;8iڻKӱHt߻(~ wNt[6ȩcܳ6Pso\:usqGidȀn~E \g-(V⤧+ Q6mVGStR1 Hvy >sj:;Tm^^2-7n|8O#+4!;!dWthܗȾmSjs+$:e{Z9i[TSh0TL1PUR șlZ?5R)A(V;T,,؜np$0Q9NTԁpAwpU{C>zՙ`5#ͩh)U-vH>x#.Y[Q -V#?}@GmlNMcWeU:= -C :~,S ř42;CҘP`?Mq}Nkxfv06̨{u7,IbWVUJ ,6<ƬiaQůrL|FD~m*GG l3R%,l2%d1R ƃ |`9AZ a/2(δfY9&A3 3 8 -}sř#1JHؽﯮ~*NXE08`".,k9X9I2޹ `)^sHxsS<=41͛+x<_g:,E$'<"ÄQ<bB H>I0'#";*|F&R0AcDHOj -$7 s2"b +@Th'bm`)C䜥>?]?A #Ӡ/ Aߗd!ŨhFUv_4>ՈQQm06CT#;U  ە: UvgW=yY >ͮFG1zSnCJҜZD`6Ӄ&E bQҀA]&әprS=jO!9c:S~-{(JL%s!lIA"lLgM@nC6)@M¢'9 ZzS g;wJ {ScHRl~D4Was0e $x _CyD.r^$A=L=kY٘z 1 *)`頤&LO˜CI7SI1^]A)P^4c&LCKg@JS%ua#$8[z HHJq`֏ e3:qD\3Q\(3i |.e}\j-YPFbq:]T -s,YCLg2\Z>s} 9IC=L}0}6I~>}hDib[C`QP&HWԖv>Y+ݥn#ua'~rtFyF$oY'6$!q}ϰt a=P:Kk;BtqayAx|^{-_T9҂kϓp:EψCƘ?A_1,Ju$9K#"vPD'2wV@vHU W)PH5[ၰlCPE%|, i-IK[VbuSȹ~Q8o[Œ;Qѳ{e௳6Ozr`{a\H%̛Y٢D%=F&zRQɤ( yҕP۽!64Dem/kaW|&$%éig[u#T {XG -S#Hޜ+0A[bk+4!*EcǼmВ7YtP2 -] TXcq]LU|9!T%]ůrgo 4qW)\qtSqʠ9.$%0},"`A4j@L'\gv:YiRO{mPCͦ+/LuWcO@b sVe`j/!{8=st?Dh .fоtaLr+e2>;Y[f3^Օ^o -ѥ`ZQu]Toq6?4S7A8Wx)_3\i%0ۙk9 z8TLFnBa x8ip&lA{SF( k&#=Lr%uK2Y\]{0"Ǭ{\bi.ǟ̳H[l}3 Zq_T{j} _.븦x\PcdրGtzz @}|\ۋ$t7Y6==>@c4b ;kֶқ(IOiTΩ^Xn_ꆻoϢZ%en0?؆}y}f6ì-Mn2Rhq{jlY)]0y)h%^tGG]K/prv~Q[$sonCseن B|ߥ#Scח-詃]`*f|ﻄJ`']ݶJR2˘% ,v'>wG+֐ K餿z.?^J%ʚ{}~tStw zȒT𚇇|X+IH> endobj -1017 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [157.729 564.396 179.647 575.339] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.4.4.2) >> ->> endobj -1018 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [366.223 564.396 378.178 575.339] -/Subtype /Link -/A << /S /GoTo /D (figure.21) >> ->> endobj -1019 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [318.673 295.893 324.651 308.414] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.5) >> ->> endobj -1016 0 obj << -/D [1014 0 R /XYZ 125.858 740.998 null] ->> endobj -78 0 obj << -/D [1014 0 R /XYZ 125.858 716.092 null] ->> endobj -82 0 obj << -/D [1014 0 R /XYZ 125.858 692.898 null] ->> endobj -708 0 obj << -/D [1014 0 R /XYZ 247.293 538.311 null] ->> endobj -86 0 obj << -/D [1014 0 R /XYZ 125.858 211.426 null] ->> endobj -1020 0 obj << -/D [1014 0 R /XYZ 140.204 139.255 null] ->> endobj -1013 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1023 0 obj << -/Length 3081 -/Filter /FlateDecode ->> -stream -xڝ˒6>_RUC|6NlǩݍKEaF"Rx~9VjDh~c&?Q: $dqEhCCzpXoHqAKow*m*۝Nao1&6twoMi&i};ždQ*]rG{۝MPrCVEAVDzp,Fk koBA&[OWԖU?ڞvxu-n"8 -$]w=^WV|}s;P#ClYWe CG@<ʑ~crdCu[ ģ;n4Jo&\C@t̰߯E1ctUJa4/tQ'-zLxF`i']|~ÙF)0Xn̠yr;|8.;3or^M१-Bnb5r70mdK˂.|)Z`qa wܜNԗ{/3 @o;5ቤ$h+ wЄ:VTd[pcN@ {C] -|:}D?Nt45M$8QQ.^$UFk$( |6kԟmUס?ߐ]]Yh`W^~?]ĨVPvuMo.e$ )d23p){"lقmEN˷E7"lc'IM<m0ҙ8r.=Va7HYxۏҰbaDŽ+.,tpX2Q)BߢЁP)S]:V˃>!Bzoom#9^zИ4{:)Biq+0.H+sg' B&H]tњ/PQ0gUpeXX膱a,50eXg4CTeJ}?Yن%z{C*Uw=;qXXroOjj^BTQ)#^ a=r:m={E(#!?_}8 xAn!Ra"fi"Wvo;) ڰ -BCY\@jĕ`kV;.+5ruX\]:k0xiŠB93m; _=NgQ|k &4L43$3{v {i@+;@ÔfRTly+es_o)(۱(WivMH Ŗ:BqYnm@:0~!@"ީnjÞr?jgB[δ_l1"/Lϵ W|%_ٷ x:Ǻ3_p#2RMacmqO0l|{:öxFxnUsd2Gɔ8FlU!(>̜'VM$`smˬlˌ2f|Cy' 4ɤJQ -^^Gqe-$Ӹ/W0`_|C3 "2FQE+ AѢr%1seӴH8G4&< ^fw/STI \=6|;>oP,ç^1TnaJm2Ln\$-Z!ύ>'˞TbeiL9qq54WEhB xW,y |KK6YI|pԮ(X٢3G,q2K5'8I:辠w q3쟸ϪїdER$:*?FϲL[ÕW8C)&5hJ됼JyvfAHP*cbK6. -~jFNi 7~Mv۵"7+&g=Gޝ|TKGRQfUQ )9x|E9`&>}R*%i}ڔR'c0ifF+A![dL3I&ɤP#:VIM򆕤TKB ۔PWӋ.?W\t dENrGڟ~!yݑqu",z -_t9.'7#,Kp4>MVS6;^/`Jut`aBG젢)W7% B5, D-w.> endobj -1025 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [293.816 643.2 315.734 654.144] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.2) >> ->> endobj -1026 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [462.097 607.334 468.075 619.855] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.6) >> ->> endobj -1024 0 obj << -/D [1022 0 R /XYZ 125.858 740.998 null] ->> endobj -1027 0 obj << -/D [1022 0 R /XYZ 125.858 503.479 null] ->> endobj -1028 0 obj << -/D [1022 0 R /XYZ 125.858 386.543 null] ->> endobj -1029 0 obj << -/D [1022 0 R /XYZ 125.858 233.741 null] ->> endobj -1030 0 obj << -/D [1022 0 R /XYZ 140.204 155.489 null] ->> endobj -1021 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R /F56 730 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1033 0 obj << -/Length 3289 -/Filter /FlateDecode ->> -stream -xZK6ϯ誽ҴvS'dfZ+mO~$kI!K1c}¢aRX, "g(0u/օU.߿8"o%,G Gt :V.pFIfVTYNSTe$V,2ށ>9q2-"osب2g %7^[7ae5$E.~-;5_վp3#WƵicZT5v -,c6 - yvH=ǂaUs8캅;m[Jܤ?8 ,UWđ(!9|?}jH(RwiuwNrb۵yyoغf{ \X@36Xo{p]]q&&1">;"^ba#N{>kiP.h8X5&J]6dXN8uăeYZ%f5qGJxFTti@Wc.`s4D-G.w1ڂ$> -ءGhܺw;*/߅O$ރ#[AzC3@J.΍/b\ _V -ҲwO{wס -H1-o. Ma" qmߝ8fmL ,CP6;} HBt 1~Eb/6<`_BSKrs&!ǺH;:Z֖i ifZ_边 -Au - 6wX^]_2((t y.FEcF~b#.O!a3%H !d *5Zt6+\Ў< ӳgt1*/0p~ ׆`8a0pl0\p(ݼMb{ru ]Lz(3p™I.kx,Xf#ÖNijf}<.(|}iGp*{G>G&t~03EY d%WF&Zy  fx}0u$h$MӰG~ -պX>MA~t 0`(I4XytuzxV=@r>}>-<EN |8bFF娗$ҏFXZF}xa+8}/>פ8['5<6z$6B"iYvgmX<|ޡP+؆*,F)AbMޏhRpEG<Zr).)WS}=lKH-oӲG5]+~Rzygz#Nn%-9l]v׿5>˝ -qWuز].$ x!ׁJá(ڮB ]6  Nt <+J ذ/k4uBT5mą |#`ZxUHfԚ|{@_A@oG(Ww@czOU-y d)y  $Ka7X'j?o"tЯX"r!"OCUSb 8-\`96.LLp?jU2*؜dKAFpXɓEb_2kd\R77oew; ~Aۺ2,mЋUJ;NQHշ;rS[BE뺪 KJ܉WP!mVѲ٤P|I)t@=4Vm'wܝ\3(O {3_K '/ľgŇ,}BX,8Kn~r,Fiv.`SZ0ғ}^l۸+Ζ -zv}(n99`jKR2%7RIs`oiendstream -endobj -1032 0 obj << -/Type /Page -/Contents 1033 0 R -/Resources 1031 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1001 0 R -/Annots [ 1035 0 R ] ->> endobj -1035 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [153.58 488.406 165.535 499.349] -/Subtype /Link -/A << /S /GoTo /D (figure.22) >> ->> endobj -1034 0 obj << -/D [1032 0 R /XYZ 125.858 740.998 null] ->> endobj -90 0 obj << -/D [1032 0 R /XYZ 125.858 629.626 null] ->> endobj -709 0 obj << -/D [1032 0 R /XYZ 214.576 472.645 null] ->> endobj -94 0 obj << -/D [1032 0 R /XYZ 125.858 180.152 null] ->> endobj -1031 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F43 512 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1038 0 obj << -/Length 3424 -/Filter /FlateDecode ->> -stream -xZݏ߿b*gF$E}E%i/&in"H򠕵PYr%9-EY!C!9Z߇q*u}*x_l=vB燻O>}?<-= Vat?6ںo>t5. 6: s;agUIja*3E=Bn&w+m2WP% >?b+ Tܙw dNyCt_6eW"qFI*F /EbuZ+$ZaVsk|Uqf^KIbS]nLX ' B{^Ac*wMBx&=W9!o~c](8%FEUWC>Wpi3|f<*sW)w¶b"ʇX6bsNwVz}n8545vf3q%+K?>՟xś A%jB;wUË8?D:tyYufa3)eN0踣iw2,-N =uta$!palI4IeL8:]Eꃯšw(nـe}őw&ZXYڨOuq@i#z"2-b/F]҅_]&SnjFөh[>l+T=?%j+=84zF^/.5*o{~~ EVπ*"?h 8]f-ʸsxꆍDPsGF'wǗע`OmZdHl!3M$X,+6~6 .ǺŒ!Xva04j۾BQY - r,6||iJ<l[qlUQ1 &*d֞Ҍ瞔>a>tX{'cx*:)ًJ+C8I&F|`hC?ZZ-U6B*.VVźldC3QǏ'6+NEc4TLJ@`le- J&!6UYڛ){ ΎDc9m_|<{k/)7_F"K6c 04d8}y̛5M0@}y"%h{}jS{=hq DY(H]Z%4@daLlf>rt9ӹSlbT;B΃40q +cߌU:}{5,} ѺYD$QB¦ʗ~܀9H4!YFX/Iy10m.97S-y3܄ `/rI!, @Otz\LGЁTKS.;&qߣZ+vw.H4SZ#W|Hk^g$Dc-%9#x@d*\{cT精WɰQ1좲cMÖpV!NWx⺲*%0PBtk*aýZВjҴN TGe&$d!H,K!}P&CHܶ%F{uulv 8"]|Gz~#DyaG1xĕl]BJ :<r ,  -}h2"9a%Y %Mucj>>MS&S~Q)P(vbv@ܟr߁Fnގ[ˡm\LKnZ -4DX2("+,xjw@H{2IjuS]Z79nPw 6!(}GA.T!ZTʢλv0]Q2䢉YCK1z +З_eN D*nL< l{<0xΌGΠ)5(57sf~"*`d|PM 165J.}辸 !P+8 w*,}Ad''n 8ɯl~ bA sY!)4j#D `7`q%.D0>Pl[ߥ3w3d, -/퉦rBt^ti^No}ן!xB  !EGڂt D*N"Zl ^Nz!9Uf?S, B&78B -lqX+%Ȍ7˿F1&^UNAqʫ]q\r(n,w<C| HUu[D.&H@i5{5VYmǿj wjw/Hw2-ˍ>HtWR " NB8 7 sb+W -ǫQupo(iA]Gm@wE}ݣj4KY-nھyE΅ۇpbP)dT끯E[gr[Ok蒏@5cX4&:xr~& >s.C)B8ȏBȤ9-9?U|H;Դgo1jlDLH^Va|'x6O.?4&endstream -endobj -1037 0 obj << -/Type /Page -/Contents 1038 0 R -/Resources 1036 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1042 0 R -/Annots [ 1040 0 R 1041 0 R ] ->> endobj -1040 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [234.565 406.712 249.011 417.656] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.1) >> ->> endobj -1041 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [244.855 301.731 256.81 312.674] -/Subtype /Link -/A << /S /GoTo /D (figure.23) >> ->> endobj -1039 0 obj << -/D [1037 0 R /XYZ 125.858 740.998 null] ->> endobj -98 0 obj << -/D [1037 0 R /XYZ 125.858 557.994 null] ->> endobj -102 0 obj << -/D [1037 0 R /XYZ 125.858 345.317 null] ->> endobj -710 0 obj << -/D [1037 0 R /XYZ 240.001 285.97 null] ->> endobj -1036 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R /F47 642 0 R /F56 730 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1045 0 obj << -/Length 3250 -/Filter /FlateDecode ->> -stream -xZm6PD,_;iE屢+pij-VcK$7ko3%K,rF93PV BHQHB),]7r(Yy@gBDfx˕R_,CkL~_,W:Roo3ƈ$Td4J|yƙQn3gҙ0(ʖJnGmϪXd2bz=ц~^('K:,;idPxjzܣOUקa^ =j;5YìM6wveK7cZyPUG=v8Z8/;;.oxu]ʙ(ǎF/PЀ28T^>ٻIpmܠո!QP;1יo^}{;wI̳0&72 yƱd -k{F \_}.ןfc:{8o`/Q"NҮS ¡p)n@դK%1-R[6©~Ͻdp׮iw B>Qpp -vG%T[iá#Sg. BpֱJ*2hqt` C("ve{r-N BȔbrՖB#`Gwf27axjS -ɱsEՌSXXtOWWv rfc{uШVV~щGLl2r R-fxku%A`ȎΙqܣ%v"";"S|ה^<ok8}Vb>\Q.@هuSLlIu2y|SzU/C9wn;$U„j8Cē0]L0a9L|u6a$'Xzlζ^qAcosXWo@H ]rD22V5ظ0jUaw9A 6+fuA}߼{}<N@vN8ߞV&Yd(cRj TTrd,C3ҹ&6=0hƚ音vl!Vrl>\MZ35cJP@u -mP-5RaFN^8AGP%h9=~l=(Ttz.t,X? Nol.&vݘfLMԯz,$t%E*bE&'3(Db@eH'Hg\TP#"Z6ZI[j'Vt5"n7r`r\X<+FK6Ws-\|-%0#$cy6kjhui O {X!gl=ŏ=+@^Qp8KO/f:"I?@Yv5R(B7) onW~;CeQy7+ * 9O>4ΒA $Ӎ%4 +B<{ѕf`z_6*r`|/0WBߛe>h,z{a5,eqji՞H7x0/~đK&1wɹn\ JB?3.r40u݋/,DpQf>e Oendstream -endobj -1044 0 obj << -/Type /Page -/Contents 1045 0 R -/Resources 1043 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1042 0 R -/Annots [ 1047 0 R ] ->> endobj -1047 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [411.623 315.888 417.6 328.311] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.7) >> ->> endobj -1046 0 obj << -/D [1044 0 R /XYZ 125.858 740.998 null] ->> endobj -106 0 obj << -/D [1044 0 R /XYZ 125.858 665.655 null] ->> endobj -1048 0 obj << -/D [1044 0 R /XYZ 140.204 139.255 null] ->> endobj -1043 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R /F56 730 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1052 0 obj << -/Length 3204 -/Filter /FlateDecode ->> -stream -xڭْܶ]_oTi(7[GJDvY*Y#Z}rv#')UiFhU7S7JG~7IY,/}]o2?iC//Uwova}L}7vR߿_3 r? 3` /NLqGq,g˷QϢhxJg̸ ˶9~ݞ/rmjp`oR?fYQw(-" ;!B)\Wݥ;xlԡJ"o|R㞯;82Vpzq|`ߩkyR" Gn}`.jB? @G`Ku`ϗApvzЖ3c=o4^5|"ﭜrr9=\VW}1Ě6;V-E ][=BVZh7/5ҞmfA?ΫqnLV͑6_y>!)x0\]=2 zėV!hD`(GXT_CUWDĭhp{:00C-g0j9eeӑw/Z5횼Idژ|ЄoיT)"/o_T=e-YS -&%2pUROXdǁ-ʦ*5c9JyC^={eɒVsu?30b|=mox]-*Cn"Y5a0Y.N.Hj~|nJLF_ -}%0E{4ݧh¾ -}89[R 7 RsLΈ!_f~bbъ)#t:S\3H!`9m9WW.Hl(1I+Hdɼ=`y 0P+N -re^< - -X685.=:o ׆Ƈ(?Y*y]dp]ԑJ4{!;>퉐GZ-L?`:t$b7> G=wc @r[L"Ov>(A@,},M>brE~ʈ'·`!w``O 0<]jUxw8/o+H2S&I缓 [q<}6Fǚ'PjeaIjr}^O` f& *)Rػߣz9Y9HE xdfFWn\cɹ̈́Lcg9@u@ C@ %/y H˱*ia"h/ -EI'~MpJܡXpF~P?Ecw< dVl [nx$-OxdB8_h6<$1솓FRM"dhxĎUv,VvZ?b(Hgjq p+蜹+_5G H֏p9 0H]V0MdXH =tweT8%+ h6/3Bux\̼rCm?=!`ru2KIvKI(Ğ*|=9m{[D><8z|$~Cx]b=C8ik~(֐9%)cBwD?ⲑE:Ss#wal*\k\0 -@ -\S)xWbjGtr4-Qee9oP$WlıbXO -CVXXˎz'_nkBϟ,;  !TFǶ%8Ƴs᣼/Ofak_"xvSxlJG h;r<9 pƝe_&1Q)'Vi}ڸwqPJR+jLz%R ۸I[`LC\&٬;Q0E6Uq* -&ol(OLgϫhPQp"/I} *Io'h+!LmǢt_S_gC_F5`4hl_ 38t-::HҧOJÅ7ppCv@*-eE}_Ik/ZRJB#gLr Lb_.(-燐%d5J1i*t٨ {ҁkCj%QoBP`ɼqŇ\\~=\΃Z'3]2(@տ1b7 endstream -endobj -1051 0 obj << -/Type /Page -/Contents 1052 0 R -/Resources 1050 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1042 0 R -/Annots [ 1062 0 R 1063 0 R ] ->> endobj -1062 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [348.828 222.941 360.783 234.896] -/Subtype /Link -/A << /S /GoTo /D (figure.24) >> ->> endobj -1063 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [153.365 199.365 165.32 210.308] -/Subtype /Link -/A << /S /GoTo /D (figure.10) >> ->> endobj -1053 0 obj << -/D [1051 0 R /XYZ 125.858 740.998 null] ->> endobj -110 0 obj << -/D [1051 0 R /XYZ 125.858 716.092 null] ->> endobj -1054 0 obj << -/D [1051 0 R /XYZ 125.858 580.44 null] ->> endobj -1061 0 obj << -/D [1051 0 R /XYZ 125.858 272.221 null] ->> endobj -1050 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F8 1057 0 R /F14 1060 0 R /F11 792 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1066 0 obj << -/Length 2676 -/Filter /FlateDecode ->> -stream -xڅYKܶﯘ#JC9+)V>9pbDZo~}>j 4F?>40j)y8 -"/wCSr<_~6( -2ID^?~x{,c,.@db{0)E CACaxT*U0K{RdEhL<~g<45oUFEՍeUSr cuuϝƝu<}yt~26{__ [racDq[dkH&1oVSĴœ8_BHK{g~4sjjSoZ!mK -%^hZ\sXRdO?AϲҌbc^;~QPmpfi%~)YJ߰]ʘ\ԛ[^5I& -$ijoϱ _ [mO$)b; ܵAVĮޫ$W:" t SX(E-k ΉN^uyr>af1z*>BC) ̪1H.q]G MU%f"~{ zU'`u#pP=0a-t 7 ^@>]|G.: vvv#"5jTčTA`2psJp% -~#\ W$Oް4 Kyjm܋Anؤerږ"/xrq]cEd;6#{[bSb RN4VTXA"JLN/ o^guN #t r7}>7XPc;gLev `-`ifmo]84uҜX) ];H[_'T-oWKƿNEJfΰƷEX騀}._n @r|H]X߼|ih&P߸|ݨ)8wlPu.WCy'+a0 VUdL͵{ISY+K02 5l# -@㭥i霟R_kyI|?Jm"|FsiquBa<ζԾ:i

>= s4c#-'WYE<]F.1K!)>6RˆB43i<[{lw,' ذzNfϷ^Gzkťoy6KӃ$hhFnI-4<=a$Mo`u[_qendstream -endobj -1065 0 obj << -/Type /Page -/Contents 1066 0 R -/Resources 1064 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1042 0 R ->> endobj -1049 0 obj << -/Type /XObject -/Subtype /Form -/FormType 1 -/PTEX.FileName (PDFs/FSAn2.pdf) -/PTEX.PageNumber 1 -/PTEX.InfoDict 1072 0 R -/Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] -/BBox [121.15700000 501.70600000 492.69800000 666.40800000] -/Resources << -/ColorSpace << -/CS0 1073 0 R ->>/Font << /TT0 1074 0 R/TT1 1075 0 R>> -/ProcSet [ /PDF /Text ] -/ExtGState << -/GS0 1076 0 R ->>>> -/Length 840 -/Filter /FlateDecode ->> -stream -HVn@ +(3ru+zpeeCl'Ҵ_rxk#َ@`(GȇDƉ`g-e"2^))&ggŒq@;3e1K>WD - R2p\A 3i1hsA1h#I#Rո* ml6ݴLΊf>v1LQh0q2 _D:|\,YFp^Trj2y'f plem J+R."ejA/t#?~B:}=ޱ^%i#?1N܊*AB[SI S#$xdiƍq-V'ZyqcX_khT^guPܷŞbw.:!5CP| `ts⍇Ǜv?rbgxG3[ hF隘ٟ֢`<^oUCynv>=QV+(A+ǑZwfXϸ#etendstream -endobj -1072 0 obj -<< -/CreationDate (D:20080804134124+10'00') -/Author (john) -/Creator (Acrobat PDFMaker 8.1 for Visio) -/Producer (Acrobat Distiller 8.1.0 \(Windows\)) -/ModDate (D:20080804134201+10'00') -/Company (Queensland University of Technology) -/Title () ->> -endobj -1073 0 obj -[/ICCBased 1077 0 R] -endobj -1074 0 obj -<< -/Subtype /TrueType -/FontDescriptor 1078 0 R -/LastChar 120 -/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 722 0 611 0 0 0 0 0 0 833 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 0 500 556 556 0 556 556 222 0 0 222 0 556 556 556 0 333 500 278 556 0 0 500] -/BaseFont /ArialMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -1075 0 obj -<< -/Subtype /TrueType -/FontDescriptor 1079 0 R -/LastChar 121 -/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 667 0 0 0 0 0 0 0 0 722 0 0 0 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 556 556 500 556 556 0 0 0 222 0 0 222 833 556 556 556 556 333 500 278 556 500 0 500 500] -/BaseFont /Arial-ItalicMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -1076 0 obj -<< -/OPM 1 -/OP false -/op false -/Type /ExtGState -/SA false -/SM 0.02 ->> -endobj -1077 0 obj -<< -/Length 2598 -/Filter /FlateDecode -/N 3 -/Alternate /DeviceRGB ->> -stream -hޜwTTϽwz0z.0. Qf Ml@DEHb!(`HPb0dFJ|yyǽgs{.$O./ 'z8WGбx0Y驾A@$/7z HeOOҬT_lN:K"N3"$F/JPrb[䥟}Qd[Sl1x{#bG\NoX3I[ql2$ 8xtrp/8 pCfq.Knjm͠{r28?.)ɩL^6g,qm"[Z[Z~Q7%" -3R`̊j[~: w!$E}kyhyRm333: }=#vʉe -tqX)I)B>== <8Xȉ9yP:8p΍Lg kk Ѐ$t!0V87`ɀ2A. -@JPA#h'@8 .: ``a!2D!UH 2 dA>P ECqB**Z:]B=h~L2  5pN:|ó@ QC !H,G6 H9R ]H/r Aw( Q(OTJCm@*QGQ-(j MF+ 6h/*t:].G7Зw7 Xa<1:L1s3bXyeb~19 vGĩp+5qy^ oó|= ?'Htv`Ba3BDxHxE$Չ"XAP44077&9$An0;T2421t.54ld+s;# V]=iY9FgM֚k&=%Ō:nc1gcbcfX.}lGv{c)LŖN퉛w/p+/<j$.$%&㒣OdxTԂԑ4i3|o~C:&S@L u[Uo3C3OfIgwdO|;W-wsz 17jl8c͉̈́3+{%lKWr[ $ -llGmnacOkE&EEY׾2⫅;K,KhtiN=e²{^-_V^Oo§s]?TWީrjVQ=w}`嚢zԶiו8>k׍ - E  [ly邟~_Y53rW򯎼^{7so}x>|쇊z>yz -endstream -endobj -1078 0 obj -<< -/StemV 88 -/FontName /ArialMT -/FontStretch /Normal -/FontWeight 400 -/Flags 32 -/Descent -211 -/FontBBox [ -665 -325 2000 1006] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -1079 0 obj -<< -/StemV 85.863 -/FontName /Arial-ItalicMT -/FontStretch /Normal -/FontWeight 400 -/Flags 96 -/Descent -211 -/FontBBox [ -517 -325 1082 998] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle -15 ->> -endobj -1067 0 obj << -/D [1065 0 R /XYZ 125.858 740.998 null] ->> endobj -711 0 obj << -/D [1065 0 R /XYZ 188.3 711.29 null] ->> endobj -1068 0 obj << -/D [1065 0 R /XYZ 125.858 393.501 null] ->> endobj -1064 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F8 1057 0 R /F14 1060 0 R /F11 792 0 R /F43 512 0 R /F7 1071 0 R >> -/XObject << /Im7 1049 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1082 0 obj << -/Length 3636 -/Filter /FlateDecode ->> -stream -xڭَ}bX*O#7>xZGZUstzƎ]U坪.J)MsU  œ֑᳍Bere] j 'Mս#ǐp scf|GS!e-Cm5D۾=V\K'gAz)]: tfXAZ\;U2DW@* -?OļF*;8 Clog=NM.hTDkr[xr^ItpCʦ҉PșAQ P QiFCT˧1շ -x 4^G`5 -d:FD NGUe2y:\=̹R7+ vs+*hE㍙C)/ 6:>^CڂTiTJ,!-5V)OI \a0M L<ٷ=b\ w*{@n435;wDakfr{諸CC%ʦѸwIc&x/z%/ ͥ3 haa/uk+Bq;uszszGdI;Wn(J{,Q߲ -^nŸ`xw)&TY}Ogq);X8Iq{h%wc/Ѕ)֦ +nV}4uFJ;8YmҜT} M()_+TDy3yc3}Ur)|M % phx;'hY:Ppɜ`"h8N֕s0ir%TA9]1r/G$[֓\ (q9?W]"GϩmqQHZFa>?7TBI\ -8n8JGu@`$P>itdFFQES{nuV5mp({&qy5o=tci0O}0*tW%e9F'-jtDX0yh"o^}͚p9!S5*", GںNY:,\e-=qFΙnf,>KV(a/aj0 46H$ ͉c326ܻǾXj{#.j), 2 M+j%ތo?:JL #&eyH@RAprx?I5- ԝ}djVZֶ0JB "}ZPG,d,f i yZ.@ZdUMyҋ%?n䰠ܬ0FHͮ F<:|ֹrFQv8<&ca˯G5m"p"GPQڮN#s[:8? - 1?X, @9my-y g)!^ -qGƤh"eqT >ٓn0 d^ţ0*ˢ.^KRv,˫oQzݵŸk*$,߄ !r}upkb>R%t,r|}L`1dvLf%XƗjɑ> endobj -1085 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [168.391 212.456 180.346 223.424] -/Subtype /Link -/A << /S /GoTo /D (figure.25) >> ->> endobj -1083 0 obj << -/D [1081 0 R /XYZ 125.858 740.998 null] ->> endobj -1084 0 obj << -/D [1081 0 R /XYZ 125.858 299.111 null] ->> endobj -1080 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F11 792 0 R /F8 1057 0 R /F14 1060 0 R /F34 502 0 R /F56 730 0 R /F53 751 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1088 0 obj << -/Length 3507 -/Filter /FlateDecode ->> -stream -x\[6~_a+5#^E-6mw3ؗX걦4P3 n %;>^|8t?L-9)KWoW2_^lUR폙Xoh"\f曯&zMu߾yWoydsN -Qc+SJHU. e(Ef"|z_2jʒp|"=j&_7ٻꛮon:C{pV7C}ᇵγvӀ@"}}&Q9XLeG'=/ Qt 3nzj 徻 V9eBb"\z_{E5M=XC pY1wIC  cȂ@6L0#$fNIK.$ ^ihRhAJ -b "-8i9CYX`%,HHJ '#<'D*H0J/p%%j4eҮ)G̀骿YW2V)$HJ+) 4C!^$ &y~eIIl )IB2|^f)L O0N`VR#—D'kskVS;YCMv qQʂSXCD3Q. -h*`DaI+ +K0DXR% -KH5 w`FVZЕ /X0{` M^golipyb{#\KM,[nx ua |N IԅYs@ޱK!/?(ԧ.b/̱7F7 ^gI6{lIABrp9)I㾹i5K`O%AA% -*( C%BJ\AP\<t> QR0h^R"ht>M^fN K']O$Џ_ -p }lB0$\.) ƠyGP' SmKQJ%` O>7 ,ɤyқt>%ld Z)K;&,‚C% ,ֈpakFYyY-jJx̬z$}df5)D$I1ӄO -BݗB`Y} tV|""\Wb>%P{i -+r^X2ÚYuRմ{{r'Ii:|{n"d:zA`@4}_Ho*E>#irz\e?΋|^}Vpk(l%ZzfSAYo*;>@ǦvQvioOm8,)Iiy:!ơ浧}BG bopk\! +G]!wm+wNq`K}VdQ0HԜ!0Eowz[;wy[e2W3+?~1?\u3QPM9iB3߶9T0TeRiLf蠹c3{i ->4K~vpW{Y}o'3C^mU/:ĵQl} 9p~۝+wԡvϙ~=Uޞ1%ƅ&$6J -KJ KLI%x%8NbʼndeԲK0@( w1d2Ip -#㈡Nm0S8R8I^$Z?$%s˼'Esbe2D2J,2,2DY -ʂöR@%٢$ 8XA4Kh>,R#7 -:O]_ o o\Fb<-7ISI.k拠flfʞǒ#矟or7\u֕,4oUgDVP5;)Fp`?M#Jxqcmc&lhR, 2E$S'=1kH=R$^"Dh݁6 .LmJ]~0y J >Phwն]-Qz.kneC+7f{tjD>sU&=><μu.ft0Skk?E7~gQfC,dՐ$|b3|䟡=O/Ԭʊ_dKt!Cm?Dʾ6oiaNu):-2m(p>u[6Ze]-LLSS@藕 Br':QW}4iCt F*)'b,` $>>:endstream -endobj -1087 0 obj << -/Type /Page -/Contents 1088 0 R -/Resources 1086 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1042 0 R ->> endobj -1089 0 obj << -/D [1087 0 R /XYZ 125.858 740.998 null] ->> endobj -712 0 obj << -/D [1087 0 R /XYZ 236.564 711.265 null] ->> endobj -713 0 obj << -/D [1087 0 R /XYZ 270.068 361.925 null] ->> endobj -1086 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1092 0 obj << -/Length 2842 -/Filter /FlateDecode ->> -stream -xڕY[~X): -#y0)tr<8<@2=[30D+-})Q&~YE?WLDdd3ۧϻ}Ɨ -㇏?ۛwl(,.`ZīxqNfhkA꫰,4>bۧPS)`w(ǓaYcɓy2ckxm%'ia^zZ}ˮt.v4tnx;j{"IE0giٴC -} J<Ӳp҃`hWrHSAz=օgsE{K"v2P6FۍȦ'trx'zZ&5ј4:<98NwXAp5YA+0G*sܩc3 8~/'^9Mj |6@֯Ւ);T|haˮ¥z8MK'Y:*4q:0Nh=8*B 7f0`%a}QM8!r847-*NEA>k/)Wtxכ AEaeGۻ-3u[bM0 UQLKG - C>>g9І; c0̗]G궊xBȝ챳g pSy| -jJHE {plzpZeݍ=vr_ChqTn6Oʙz帩~$f]3r?N6Wk0\9G1}jTui2t)đwyȅ4eBjtQ("$B?7OΩ!&TalQ*l -oJza~qX9q& -#q/U5fGfgWR -)!Pg_IE}?FdѸi8- ܻٛí>*E+nA#%ji R *W r -?0٫?τ/Zߞ9a "wয়'B+D,l{%q*mLL)n`4P+ -*dVJXȔ2)F8?T‡}wCLphq^Pc7f .!#jKiM9/'1hيѶ͖gz.Nn^R?My Hx6j!~ -X LH&?tcj#s`JE;'Xk-t7C_Z837G _Ģ;tXKI¶)v=vK1TXU'b|=w[9bM(vC1ǥ}O't2.c ` f~BeЁr'BKm)Ũ4gR\a93&!ET /ekeQkZL4I&E\\p ʜiJ6ySO- gvQPbEp%Dx;@-gDYfN?endstream -endobj -1091 0 obj << -/Type /Page -/Contents 1092 0 R -/Resources 1090 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1095 0 R ->> endobj -1093 0 obj << -/D [1091 0 R /XYZ 125.858 740.998 null] ->> endobj -1094 0 obj << -/D [1091 0 R /XYZ 125.858 647.001 null] ->> endobj -114 0 obj << -/D [1091 0 R /XYZ 125.858 439.958 null] ->> endobj -118 0 obj << -/D [1091 0 R /XYZ 125.858 361.338 null] ->> endobj -1090 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1098 0 obj << -/Length 2604 -/Filter /FlateDecode ->> -stream -xڵZKﯘC w.EAwm؇ #ohi!j-3C" ,"Y"9c<%*UwYBI=Џo2_޼!w9ɥ{8.&z8KR>}eS{}qh~?`N!ɒلB7FT7"2@ȮH20Jx>(V t2m3^tW mg[e4yg^lK5Sa^('̹Im$j#Tr?YPݔ{H2#\/Q2N8h>9g$E3Tӭ!pZXnA$oeDp|,2d3bͤLfsg`Bo9zފ37뾵mY^;mX5eulw ųZA$KKNZ4/1D(/]k(HW5 m#D=_Z`ǐƗUJ8sjyr&,HyrD.(pJzD/01&)|GF&NXS sf3$if ;=Fs3vc024']^y7mέIcmQ/׽9vIW5(9 $N*QR 2 Kv&`~E=&k;Md Rfm",_)t3 2N(MnjeD dӡ6$/V%(X0OZz^O>.Ed) m}9UDVu&yx)SX1'7I7?* -lqqpaF*;ϔrli -u)5 m"';'A[Òa#/7n1F出jlH8i'洆-ۈJOF$x'Di2`PGTX>fb8`=Jys;3`AB}uFH8$Pr$m牓Y$J[ccpeqVIW۽f`Y.nZeGYY$Xh=cE\Hf} ?Wj $M ,G1҃m{ˉW.pv(Z}.Y3p^P=UC]&fiv TS=9WZo7q́da^ k/I?0 ?*S*Mwt * QGI<`;H& l'iЌ8`]yr(\{!%m`5F8:mtJqm,um=us d EWloee"*9SZ9Y莠m-5BB 9|IcUݷvN&< Mܙpmثevƈ?Mx`D/ KXC=Ee5, -TWYըXYwYTj+p۩A)I)@h;%"%gY&oG e> endobj -1099 0 obj << -/D [1097 0 R /XYZ 125.858 740.998 null] ->> endobj -1096 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F56 730 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1102 0 obj << -/Length 2653 -/Filter /FlateDecode ->> -stream -xڭZm~bXy^.H^p`2"K$goE"a?Fp晇3һe1.2+No< ";'{$ {xL;EǏ[m3l)?}/{srI*$hqo= D8sD2l d7,MaQB( SmKM^{˦֕fp:>f@ό1#1a"JdG*XYOZVm۴V6qK7ӥ]UֶߩS^elX4-w^5XZ=I3l3Тg̢gnt_MO*Z9cf]UL, -9lؖUu_=?>8ߴ/FpKq5вk̢kff^*5 3dU3'3, $@/$W$?ԭdZYIq[meA}q}٧Oͥ -[,aDpG@a_t x f+21@pp$F׳(%H߃yv<p ]mlƛxoU3ͽE. q?y5e}hz4r,6 .u̷L{;X n r W}5^M2MOHX<&L@DʖOMW:SG{nw,Ifq2(#2yBH2?`xeD҆Q -`+,cm|ScJ-c ZƎYƎ-b>'%逩YJ"( d& #<0C]%,вցm ` xr*ni5rA-flsR'XX̓s%z*UN^MG~ayC;Q0`-XJeRGW d06d}뽥`c0zH=`p2(`8JY7p[G9B- Q4ZLʺ$UHddRNIs -Xyw;\: >!qOWk*OKeFA<@us*߄KۤfwUY4m%X.=F" -h|ݘ8 3D+[Dn"g'@kv2M?"ش_Ry}+v5xk0+O`jڱŞ~|N d8ỲYvnǬQ)т-?݇Pw=¿IHJ..S&ƏlNfbXofI 1:$Ć&ލbÿ̐ c -_tgoU^]?5tL8w!:7, +!~qH[ -P_S,$E&a- -[頾=\Դ2uDN3'>0#V^Nfoе{L pNT&Qg"3" Z6NMf K@y+LY @!'%q\ ncPkybF[:2f?nrj7s+*73O+&)Ş2endstream -endobj -1101 0 obj << -/Type /Page -/Contents 1102 0 R -/Resources 1100 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1095 0 R ->> endobj -1103 0 obj << -/D [1101 0 R /XYZ 125.858 740.998 null] ->> endobj -1100 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F11 792 0 R /F34 502 0 R /F56 730 0 R /F14 1060 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1106 0 obj << -/Length 2847 -/Filter /FlateDecode ->> -stream -xZm_Rrʌ~($Ed)HaAf`_~n`䔓Na~7/ HH&wUtwo_Ŗh_} w)I%\lt_}'8<}@E{Of}L}a? dSwRz{?reJL7gW}PXGkϳ=P(,&lg؅'Kۦ["y'ۦhi"!VT%""M0 -h! UJGPJWɉ*PbFZxJG3ΥE -nB^_Wm Ƣab..pv+j H"w,M8_XobZp4 -x iD$lz^ .f0O׾׮M/ \Ys8*Zk-]W>9tz3g^Fa95P5~68$ Ʉ(k7 -s=,cmX'\O{vYq<4+&訷0q6#~XIol7ݏD蝀Yy U^"RE \t/p!u~#pN&u+VQQ=|.{i"هXDz.ؘ9}0K|Ymv&>qFX p@I1D=~ #m͊,DPpoH<$Ǟ ,IVd}K J]|2у[7?ܳ*VSp-4Jʉ9kN`-Vc옒fvB# T%1?a*2Y)>g&_'DjKW#a1(l)KMF9tW7Oa8, A! &K;c"[08zkCyc*Κ=g cO&V? DWtĄN=L fd -leHy?jqė7R5pȹέn]C"}S@GtD- ~ScBn ,|]P]) -Enh2x J"Qm5)wd3~>rʽtp"h*t&l1l~qϭ/~k -s͋@vC_kLm&Rc_'xD7h R5ݶu/1mcVt&$,ٔ,0 @[!DD/d)\ss5]*M nrcK+*(}ggTFEN+Vx576\mF ê/XWfas6&lvH^Dt@\][ l\h/:X/c("!b<Џ M9)"Q"yN4^Go`> endobj -1107 0 obj << -/D [1105 0 R /XYZ 125.858 740.998 null] ->> endobj -1104 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F56 730 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1110 0 obj << -/Length 2823 -/Filter /FlateDecode ->> -stream -xZݏ۸_/EC)RzwMQ@=P٦m! g(SCQS+b/2"7]cQ*${O|]!4{6zս8W&yg -^߿{_$3Ini{nByD"-D "2`0NTŅdA+X7+GO519mmKJV_& w-.fDkD, )&TB*".^̸UBd<_700ƭ>8x.ON0b)%Ii6'NziD[1E2׿,lMSw}{|^A}@w? -bVFl$mh='3:V[ u2 O)XH,v-Bul;>"C>SI-<͌bBSyg ^{QGbm0(L+Co4e=pgƉPRfŐy@1H*+߹0+C6qKUGa5\Chb>eϡШtE}܄si4h\w -W8N-dQUuݙhW#죸:Uz62agMBnHԕA ݾy+w=N2,do: s -z l]q^$HsxZo;xSciK'qmOuTAROzFmD-xF~$A K!ækph<T0"ig(J³{驠q;!)n\4 wms m@)eʧ Dȗ_Rh,igfq y@ͦ55rECm]wW5<,@A' ʀRgoӸtx/"ldU8cx,>g* Ne}>/ҧCSr7ܼ'Vo1ȑ/KZrP1p%5q5$Y,b(njiOv}ppT$Pݺ]m"T"ZzPdzt90DUTvF >2G:'%s,'`i.)X#au PEУ4!d|YNl1kwe QcuzK. LŸGǁS1Q =: ~r~|]_rFoK-d׉?q*{z)iu0|!I'PDh_61wߖ7&BGSBӟN?nfu!ts͚kr@}^ѡPWq=-;蹓<1_\0={nshzow"E~R<|~<&Ddѩan";M(|M_GF\Do ,X,#endstream -endobj -1109 0 obj << -/Type /Page -/Contents 1110 0 R -/Resources 1108 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1095 0 R ->> endobj -1111 0 obj << -/D [1109 0 R /XYZ 125.858 740.998 null] ->> endobj -122 0 obj << -/D [1109 0 R /XYZ 125.858 514.059 null] ->> endobj -1108 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F56 730 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1114 0 obj << -/Length 3044 -/Filter /FlateDecode ->> -stream -xڭێ}BR1 gH'pM[4@JSKB 9\r7jX̹h¿h)&$qdY9^#l} =o.V,Ȭ?,.?}/o_}~i:H AX!ݻf٫8 lpNBI$6T6WHD\v2}"y!l6(m[vѶX9FhU0 $ 7$A(x{: -e#z=Ypf&*3Tsm T 3㛎r%o~Ku#ʼng}#gcFn56(H{"G8O# ӡn x7?TEx^@KÕh(O=70i2)Sy{B y*˥5 KKXvǡ-Ns ;&zQ£{@/꾃ݿ=Jv2(kY׷ Xꓜ,=.T$9A3Q6#hRY5&)5aYʊXqC/kQ<1 -]\\[q 4Pq"o|Pn^=m۴8"nm9CW<{;u&B />P8KY:b$TUDNǾl5>ݱ- 9qt}^=9'BOx(M V:3 -GQ3~ -N*]g y Kgf?̙>.i| a/GfA0K 7z30&m_?XB9NLsqST:E]jwh :\`I~V(N- &ǡg' [v$Me$T (2"?-jxM3 rGOk9rh'h"\hd}?Ϋѵ~Ih2`Jc#|*{|2Ͷ/Ny=ݶ6H,P`sS -p*)Мn-u_7mU<,CъyH!xH|+xU܏r  NEuk@[y]G|Zq,Q%f|![$ki݀]V@ -V{+/?;W4,Q8s$BUpfE4 v`vȏ_rq& ̨q~5E40~?a,A8ke(c*g~Y#eMfP|)~~oo{CIwb#xScU#ҹcjpbR,KX?U3"Ҭ#&|fb<)NIlATR;K2JG!J25VADlyzj! V!w)#dG^2Bί%V;@ .ӂ|Ų'y"'˼XeA|F!f0t@9w8IDB#'h) n Ka[#*]8yL2)2kУ#qFP>w n,Ɠw:v[|zC ^> wat0_P2Uw>E w޻>~$`- --0 %wΠV'ƙܚb&2_ -j hTݵ.[ЈʢAНrae^G %3^f\fc쇾)y+LzH;Cj -f4OS0VkiJ d(ktLAvoZ !QϾr[mcZc[wَ{|Ch,0b&Z g<Q Bĭ/. Qx罃MTbGR B+,=>RLu"g؜dS: ꘀENj}uA?B¡Wu .!󗕣l֝Rr)j#Xa͗ņ+G`(kW`Hԣ1@*0 S+ 3y|BAIIz`O%K " O,l8=鿢 -{b8z[7P+jb R(ܕ1YPKA@;(ܸk+gGX"rצ3߂D} 廒\z_sngB׎1KWOQyeo!p|%񖪵+qwařKɸ|!Y1c?hP$™?pg-endstream -endobj -1113 0 obj << -/Type /Page -/Contents 1114 0 R -/Resources 1112 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1095 0 R ->> endobj -1115 0 obj << -/D [1113 0 R /XYZ 125.858 740.998 null] ->> endobj -1116 0 obj << -/D [1113 0 R /XYZ 125.858 580.342 null] ->> endobj -126 0 obj << -/D [1113 0 R /XYZ 125.858 276.941 null] ->> endobj -130 0 obj << -/D [1113 0 R /XYZ 125.858 176.749 null] ->> endobj -1112 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F56 730 0 R /F34 502 0 R /F11 792 0 R /F7 1071 0 R /F52 1119 0 R /F24 1122 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1125 0 obj << -/Length 2821 -/Filter /FlateDecode ->> -stream -xڥZm_!0*ц]i4 Sh;Hb;{gvf`9.gm3,-'DċH{"I[=L4k7{E"P-nnnv.Zz|ϗެ٥N@k\d0A̪gi깂$<=y~bedЬζM^4e7YMfKޕs-yO@s@ɵ" w2vv]"|/`]%V*Z~*E#`-?]JmEwyz{[j bE"D7Fx<1ñx`X%BEQqn!mZYu x':,SZY-M˪M 58"-:I8|P1k<^;Cz,QpݤM%kჷ0js3l !#T }.n xQa ӂ/>h(\kjN`xb 3/~pd<_DW;%v<}q#0(Rr⠂0$=Ķ1I2.4^䘨0Jx0C1dNJl9B!X_|7<=F0DĞ)ItW2ϒ,u@RI`$rrn?qb7pmi^ۑZK3xn㈔DZ2QZld(Tw؈ 9i8)˩H]xɌ7' .JCVyZ4-wTxˑ5c')șU4?Ώj2^6~wJB>/_1N*Y뚆=aWJXv S=[?;pEU5n_6 H`\6 JT7UZք~X-ߘ0>0ha~o!IQl? t ?rt.8ՉQ @2 }fn%V6`_?٩(a-(XC>H{}Nit#f HC kM֛Uf䱅 o !DSU'1WbWx&OqTùPJ~򻼱:yd >&N]"CE0)r|? &7)y9كO+}VxPm35'8@y]^S̐jn4U 2hs$}[~& Fc+tL%FT{,+^)Ǭ23 LφMĦPχرRv13V歱-cu6)I-;Ey^y00;q`c I"eyrV㰛U782_\lFKBhwU:C -:@%"a7Vicn>K_|Kt66 mɯ|> hM*GvCy7k8I%,Nqt߇9m\6K ð; jKf^^Sy:XS(ZI-=w$O?+wacTx-LsIYVHЋ6%6i3ޕX xĀ Cp`HՆ"5O4{2 -Qˇ8wfV6ʆT"Բ%[Wp -$XQbDH)+\ VX';is^kgLlhxB(Bn0.1֬sぢESf(v#:MbӝƘҴїCfٙ1;3 hzb1Jh;zp*1Gix/q3g)p>A1E` 9Dgm`Q5Mӥ[ *1Eh?Eecߋ–˜k6%4uz@KfR(弴Sm{n7e}ѥÞODP=C5_vk͓P1~y ]T#뮼/ܾn|@~TXҷΗc*3$s{le[<4f 4 5m7;szuV.{T%TOH/>dN^ ѓs\J#2& }#bFfѵ1A1OO_bF O4˜z>@ iL\ >2#qӧ' E3PC: -3MhWG`:> endobj -1126 0 obj << -/D [1124 0 R /XYZ 125.858 740.998 null] ->> endobj -1123 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1130 0 obj << -/Length 3744 -/Filter /FlateDecode ->> -stream -x\YsF~ׯ`,&MU[I]k[e"! 0Y{QT*`gYY*XċRbs7pĒͺCל.T$[\^]n-jM0\7?WoV.5< "@s.\@HUьcS2 Tiq?uZSΗ.MN8+Wi XdnZw'YWnCF`z  -$fg >05!B"OPtY\/[֠f jy}Q՚MMo}"0IiL;lEIi^[XʴIYg>)&R"+ک*QTY,˼0Ƃ}LEv 2CtS-oJuyԦ;1eZLO4$hum;K#5@ OzNd=#'\Tyv; * aEcGADTX $Db:Ӑq$kAӁ9u%Εp-6hc:v``z_}L}:S$,:ju0xK4$`3Fj,Żb ?\%a@Z.Ŕ_W+t² hQ4QLRY5bc9T=,5:v7) X=cC@P N t}Y%50ujȶCP8cX"IQS$߇" wQX.1+p[#1uRaڧC0AzKʀx+t`KD@8;Æ1qkDa -nGqoihMA@<8?TK=`iRz$9z)XBٗg`w~e~mZ?@s4ϟO x:@ׂ jږ"آm/R ̓C1z]YP$r@XRC6O$nPMĒuBG=abb?3|exI@whp*f,o\  _Z`e y؇dݟ精EH 63Xј>}S0JœE8=4^WR=پRC#cO|Nh X8ލ$*X,6GFŋ} {W쐑Kp!y1+1p5q Lx#5 -2GSܷ(aB$c"KCQҠcadW*T/:ơxeRRjs!Sȋb X΅iG!m~ZZ3|`Jz}h2\;".rs'玥A[}[U1>kN3w|2t`{[fuc2D ѹ^=* J0 ;N -3Rh$TȞ&l΀ ;Vyii8bS aF& mtNߕ5USayiJDnO۞2້8kE=9+-SɜBD a=tf Yܻ]6iaaԗ=+QDtjd**43`9Ɯ!;|G7`dO!eB ѯK[|w9ZZ ;~G9dWf<)Mg-l|Ɓ253%q=@u|bD泓QKT`Jz'/82G>Uf(W7Qq -kG;`ԝ`Wh=D2o"hHf#I+9>MoVgsf=Vh^z6{Vj'7+S,g-au*jӸ.NQ׼Mړy6n.ϯP94{rKT88Z`W(^1lf9S"`a4^xt$ސy$p4:߽HwyK5!_ta`mޞ׻^OWLbxbf#^~Y{m"ƻfv0j%=!vŞfg Ⲩ W+UW F ]FȻȜ~հ { ?v-9my9`t&v;b]:C/ jv*7%+@tsG; jE|j 4砶eAOљ} 5H@ Xs?C`guQ6.,`$[>k|J -ı\M\*tTI!SߚJERp Wl#~ֶ!nWh˦L bg>~RtY+-baO͝fUK]ݻrC.f$a W@)@kD򟵣]w' %w_M(4괪6Td9`&|Qooum%$ii -pUgdĊzf_Λw"7 -֎&mߚWiUꗲµ>4^XI&Vr|tfo&$(O- V9wLBL'S`TզEd'oIz^ X?ROeK-o]NWlc/"_L@0`E]-1H[[9u.VO犝*ܞQ, )◦SǨlb9@`*р<55pwK0\ GZU Ƌ]jMƾ(n]l;4q9N~1 oc\y'~;SVq_3kNT߮pΰljх,v%407O)_ \Ɠ1(ܦ X&t)3HU8j.uJAi<;de./FknrRq6X6@xl*{ PEñ=GH m-]q!. "pK,?gyڕ7[K p[3 #.endstream -endobj -1129 0 obj << -/Type /Page -/Contents 1130 0 R -/Resources 1128 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1127 0 R -/Annots [ 1132 0 R 1136 0 R ] ->> endobj -1132 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [303.84 619.29 315.795 630.233] -/Subtype /Link -/A << /S /GoTo /D (figure.27) >> ->> endobj -1136 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [305.374 191.322 311.352 203.843] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.8) >> ->> endobj -1131 0 obj << -/D [1129 0 R /XYZ 125.858 740.998 null] ->> endobj -714 0 obj << -/D [1129 0 R /XYZ 248.2 582.924 null] ->> endobj -1133 0 obj << -/D [1129 0 R /XYZ 125.858 253.456 null] ->> endobj -1137 0 obj << -/D [1129 0 R /XYZ 140.204 139.255 null] ->> endobj -1128 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F53 751 0 R /F43 512 0 R /F79 1135 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1140 0 obj << -/Length 2511 -/Filter /FlateDecode ->> -stream -xڥY۶B͌Tc!ċt:N|gNSGT{wH,.BGIdiv }:Y ^I1RC, -Fwu6 -7qq0e$ƭ4zpNBPT|ZVN"6Wghr-q2 _'y*E[D$uzUUO3jf r˹`QudD=ϙѭ*HX.7U!]<Xo#v -JZtMbe;2eB730. ZSt Վjy5n&3:W$'s2]t8"̟n! O…q"ޮt਺0ޒ0`Rx^W=vWN9!#Lp!&;g"~?,3 s -(݆4 &O&Wu=jp6ixN[dwluᶯYjL -nLYg5jZCˢu3g68,&ip60-FY}6,9<^z w4 @G^= - :DŽCcU*{V}3'ڗ]3C~{ss?!~2>~'`SK RX"$D7)? ⧯O|2Q6vab "&th4 -‰sx`AڇPC?ТtWds|mkg/<{.\E]qקw8@%ܢꏏ[,?k ^v"VtRtRquH50eP  ްG&̙S4a$r솙HLS@:Hu @f``glɊ͌'Xmn=h+kj@8jrWsͫ~vNN{ -,A !_q}@ۆ@Χvp8܅=$h}3I\]f!%"Wg2wcf7i\w -;\{{ w+mpC 'l5?.WR͌O -zEOMb'Onj തO\L0bd4ΉӲyX'܋6MMb1",e}#!+V_”$lMCs>w.zJ }ܹ`T9T߾<.EM="{`˞N! ?91s4|\P8xIsޠxs# gY.yLƤ) xO,ioh;<{Pt7q TYlࣼ &dG, EQ-[JFRΟ<ńFrS!Q"v`=QxWyOر2iHW9'kj38 ^?$>dendstream -endobj -1139 0 obj << -/Type /Page -/Contents 1140 0 R -/Resources 1138 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1127 0 R -/Annots [ 1142 0 R 1143 0 R ] ->> endobj -1142 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [303.332 691.021 315.287 701.989] -/Subtype /Link -/A << /S /GoTo /D (figure.19) >> ->> endobj -1143 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [378.866 409.716 390.821 420.66] -/Subtype /Link -/A << /S /GoTo /D (figure.27) >> ->> endobj -1141 0 obj << -/D [1139 0 R /XYZ 125.858 740.998 null] ->> endobj -134 0 obj << -/D [1139 0 R /XYZ 125.858 467.25 null] ->> endobj -138 0 obj << -/D [1139 0 R /XYZ 125.858 312.521 null] ->> endobj -1138 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F79 1135 0 R /F43 512 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1146 0 obj << -/Length 3413 -/Filter /FlateDecode ->> -stream -x۲D|'>[ - -yбe[[2{G,ᒇE{,Rf],Ewիśo>{zRQS"Wmm&{J4S0VE. sEHž-mFJN>( ϋKit/JUkTvB#a]״wծ(4@q4&jcw$Lt$d\ITh_^gk.q$tvSTn-wsG eҫ0ш:" 2,H$LEұbEb$03'cgzsbt<=bio6kתX_ڀT.z4607ZG4Fˊ# hj@m(|U ʏMM7ArA -6SEZ8VKpEp3pY-Fg+5VADZTO2TϫUV/$$ҳq$7XFI5d!{hT,C%rP#ƂV-yMi\u6w\Dby56 DH W}ʐ?N;1&{GU0݃@nSs"v@l* g!7 ]Cwe;7 07ANB ?˫?,1owٳ/ca N>2qM6o -0UeSU) A-C7tIҌ~6(Z1V -z.*h#=󉏱GY('Zhnj$d@|7_\<YБrOi&%imhe 0i^ w#`oIqRV٩A C Wթ^y_`-@ߓ>"܇RH8!e;+i{qF]?7!RB@zWe<#2(U?!*I$!3-cc(m{x󆆏~OƄpR:VaϻǬJ߱: -$] -A:kmDFvPf^?KW+2RĦKz^44=,h#$_\Dkj~u8Z:-_pXu9|f‡v!0 t}("( y-U T^e{C2fj: H!ҁ%rPrzuv~gOB.mwzQ |CS$LGZiYY_M^6E[:a?h>$7 -ț=. |Um7hP/cAq+_)ˊoy/DME a 'uDzFƀE|h]4xU48o՞2h9BA1hx6x-V9@49 Fx_gTcY b0cCT\?2 VNMK<`w ZyFkAcYigDZ`{-{39i#=wa^ؒU S}vp3GyU0( ]hs[NTCZL%#SC2i$u9`\!פ5-.Вi-Y=q5VZ`-DbD021`)v@rl`'t)3) _KPXPn3v5dеO̟#'NvTnj9Stx&tj2bN0gbE٩YьW%O|p~Zǵ ǮjcUL\PPx-/X5<觝dh38a`ާ1}i!OQܧ3jE! 6(-/ C-r}-Q&?dC* mE. t -?CjB&ĭd+ο -43hfBߑ;WH -0:oOkiM`up -']>NuةGpNppSՇ^έ\x`|s/VzX H^0ҫǚsw/uLʩ -pco2d -[[|D 4s6&t2W4*zj];Q}(BA۟Vİ"J`fEIc+VygoUuE̗hR;np# #0}Ek1aǂnH`"'pgט -҈ @t2N*"V~<)]\=7g^s$J)X~ |C F .<"/9 .hCDĭVA: -ic\/C)o)9HU]o|3A68;f[~ ɖ0qW TeX秋_XOgϣGǡōi{K!(_8ˀ}z' -DƦ6t+ V0}܅Uǜ:3X{HX5VVS) Ht0c+woj?)chOTu p+G‰dgx·j8`'JE^v[0M"yBo|пHo~Kۏ73Q/ԗl f+KyæmKtKGW<~' JxPhv.wtDڤTHm8pBg? ~Kg0{3CatoG@ԫxB!]*1d>$r:9ZQ -վE$+ DG z5Ӟ`RdeMN,ۄK@RUoI(hh/)2//#km`i_H7b),M +@xC2m7*f_x!tgeUvL l&Q0t'zqwPJ-Œ#Re˸-K⅍챏za!$𒿭D6?k5 .]ߨ8A9H9c*u5UD=B=OO\9Lj:W Dud8Hɔs|yi&{3' 03 闿BL -@ -#HSoE (oҠ#8\a;ahz:Aˤp \$t 3ĔYa2^ADul+X3 UIbCC1A'ӰJBt0◚,:VӗS7 ¦L.Tk%*a˞UsHXs|D 0ec˟@ǃЛ-"qfw@ kvń `Yh]Sqb(+oV.b\Ώ;!' _ecU GuQfR <B e -.Z< EAcn1 m #s␓5QYEGP& J6 AE -@]%ozJ+a&0U8-endstream -endobj -1150 0 obj << -/Type /Page -/Contents 1151 0 R -/Resources 1149 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1127 0 R ->> endobj -1152 0 obj << -/D [1150 0 R /XYZ 125.858 740.998 null] ->> endobj -146 0 obj << -/D [1150 0 R /XYZ 125.858 174.707 null] ->> endobj -1149 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F34 502 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1155 0 obj << -/Length 3468 -/Filter /FlateDecode ->> -stream -xڥZ{ܶߟbʢH4ة T)֊Iw gkY9qb?aQJTgY }H0lDϯ=}Ug\]]?zz# nśOWRI)DeNP)RhQ3V ih{a[Bo<1 ؼǛH|eN|滎R_dֶIIb/U4 0tD^"qCW/ddQ*tD~Rτ?JՀf'2rW~P?$.>}ڧ yˇ-ݖN75tl_f@ИWs7`ؗL6Yptۆm(B{yMj28 7`jpyk~/BנzOܖ6@_@c{V߳S:ԋƒС A>]¹ >0j|<`.M -?oJ0  Cq!#3y$l_fd 'uPw#/^0#[S 0D" rcD]$!ׯEg/pˏ~NcgEj_wUu4 gLb'WQRrQtwLЄM|I]y`N|Y$JXi$bZ$>j#* c؟pdb68lfi"tqoqdsna' !{L}"[9U^f_"͝uZ@UMO4H~j]7X&vq=-ᄕbAW%g},a`?ݽ hYw+H 9v}iG='X߳`A7ޱ M=/ݱa0g{<`<?ȕz8HGd.\_nv@p űr?,T}%wB(aL0(A1܍ߣ4"EZ3wj=ʥva* )ТZm''2ntNoء5:) zUJ!S QTd7`;*3A"VN6@G )WG.[E^wG' -Yz^(n]T}\wucÙi m٫=տ Z>|O{kRXuMa+-1,vdwa7Yqn8 3M2,>Y3փ -wTiKFJ<Ȭθc/ Un Gd;e%H8E'#r ?G&:~ 0,S"3c[؂u/Gݟ"ApA,aЏ!$ A>DTM`}ZwE?Ì7tYZ8YmCw-cföߑ;\ܹ,XvQ`|$(H.AAHMhQB~(@ -Ff@>/>LXrlfKGz39^zZbق#"?ߠT߭JVSN+.H5YlƹUDd]LE=]MB7s0acNĜI Zj׆mHob9Ca`h=їuAy(zhPwq=!2fǠ;9M8󅂿ѝ>Ted+O .f0-F(j#Q-\:D? BlUp9MB/bVjJBlz,jC3ӐclR,Gs1/TKyƥN|n )/&?tKi̥8/piXr'WkP.q7a/ E}jVr%V~}mӯʼn $B^Ùs%Øf ! ai|ptyZe? -Gfa>9|koÝ.>/$],7K%J endstream -endobj -1154 0 obj << -/Type /Page -/Contents 1155 0 R -/Resources 1153 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1127 0 R -/Annots [ 1157 0 R ] ->> endobj -1157 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [236.517 477.299 248.472 488.267] -/Subtype /Link -/A << /S /GoTo /D (figure.29) >> ->> endobj -1156 0 obj << -/D [1154 0 R /XYZ 125.858 740.998 null] ->> endobj -150 0 obj << -/D [1154 0 R /XYZ 125.858 403.201 null] ->> endobj -154 0 obj << -/D [1154 0 R /XYZ 125.858 376.848 null] ->> endobj -158 0 obj << -/D [1154 0 R /XYZ 125.858 294.308 null] ->> endobj -1153 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F34 502 0 R /F53 751 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1160 0 obj << -/Length 3944 -/Filter /FlateDecode ->> -stream -xr`C*sTrͮ%W^ *{b}֊C,tF$LfH&*Y:f)IlFn?ŒFQ47?| qI,R DWo:BD4€ FL X"qNba$TiJ8s`,;bd4gKNM^Kjmon._xR( k"ei a*_P9|(4Frv\xJqB>İ#࿮~9+a1IM}{u}#]sԂ2ĥ"eF#QXͧ`I',;{HqAbDŽ㑒jv+b5p♇i)R,̑jڬ3"Acb w'ĕz)NI  -t/o|hDTqLBPmnD<*b &9@$yT`ݳn+\ -\9,h>J CZJO `PDf|R9uZ098C ]{o64ޣQ$ D^wL+x`M+}SEnd>N&mRY PNxB#~A>d%/"."ҙ߄twp.H QxDtqkJWa;x.cߣɁ J u̡lt$Vg20>S: - $4~O~%P_G|_!Bh]_!DGll_Л]N?5F)EgLޥo]P2N∇Ͷ OqK s,u[n=: ^"diHI[|qP"`A$h~cW4|*;UV( h C7h= {?di@@d6^qc?VDE[wƓS&wOPTYsUnmw3:mM4ElkUfVuΛߌY(%WW2fzzT]e\fpCtqkۖOẄ́_tmALtf,)oWmjq99`<|V60_gzGoe=5Vո']0t0a|zzK]^z HarRN SL a.C2OWg< ؙYk٪P>".D "BO\OU3ǦTC޴U̻N 0́(n0^hBwdyB qX&R|Doi=#/))~v^hYy!efoB2J8䖉q0AfyϷ!GîxPI-gQGU"NCl9=d'BGY R" -[weO=jںˈD2 ssù%b9ȎS`yWyG}}|W-h4'1tVcY_,]t^ʭCrw#-mNP׍WyGQW—Y47FAƮqhа"}VgЌyҌ7}ߪG[p(Q泭eyrM#zt]YlG4T &*rʼGsʊmv=aG[?.qlm$LVJf,GHKXU2XՖy2_P΂1KO -j:"\v֚ѽ]8 -9o`B#Hny>ņ\J[:/-vO̅]fm10\G[@e0 @/W'Ŏqp,L6ߑm-xRIطoUۆfYӲe^ -hc7f@xxlzsnj*J`BO!p0#у Ff)c6} i*8,[3(5F7q1À QUSQm,|VņE -, aw[`~ipJ\5V )S$e%sv-Snxh%P(5RcN\ߏhhFaa'}W - ! Aļ*rt"ƈ{x9+&B:3LN8J"~ķ9,QQuhbmNkZo0B?m۬Ǽg3.8Z- <-—} w`V@ם%~@Puu$ΧYQۦ?ɀqz7smSmGܩWyʶr~}6 ZdT'Ǝm< ے( -'&P$1p#tѶ,fc*-u}qwh-h -݂طf>2\ֹڼݨgY4`4 ⺨U}:5Mwpb(vޟE[> endobj -1162 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [417.253 216.241 429.208 227.21] -/Subtype /Link -/A << /S /GoTo /D (figure.13) >> ->> endobj -1163 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [334.683 156.465 340.661 168.986] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.9) >> ->> endobj -1161 0 obj << -/D [1159 0 R /XYZ 125.858 740.998 null] ->> endobj -716 0 obj << -/D [1159 0 R /XYZ 249.355 711.265 null] ->> endobj -162 0 obj << -/D [1159 0 R /XYZ 125.858 319.768 null] ->> endobj -1164 0 obj << -/D [1159 0 R /XYZ 140.204 151.07 null] ->> endobj -1158 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F53 751 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1168 0 obj << -/Length 3151 -/Filter /FlateDecode ->> -stream -xڕZݏ۸_Ns%MkmQں%WeVr-!9b&gU^-$&y7FžlOoٷu\ۧ;DOF$IY=?}!K4.с<o~x.ϊ:΋= %Ell-&Nw>o5ۦ=lѯܰ&Ҍ{x>eqm XŅÃɣXin44;ƍMaэvMItn٠7D[QO~B-mAL'f:ϙm erV@nUӞ:jͣb@;8t8ZpsF8kGzZ?$:?R© O 2z?t~ó"TE]DUSUȏi{P`* I1`*fѽ -7#8tM9{X"$ ifGF8J}{T8>(˾e84};/OImz_=s[qeݳcz0"%Y`&Nɝ2!Nn|R&9,[~HNK$7w}bJ*U80U֮"QAp}wӵUQ@*\}OܷaYN|p2J qt7ܡk%صZAE1{~3`[ -~[?:ˮߑV4rmCA3sŒufluC3pnWfUW:=4fp&򊿹/;y0PLjc}C^W:Ve_ ;U^+g+Ɔ+\GVE|T|gqSΗȜdq:?|yߝ*wWvreE|MREi]p'x aVnfc{`Ev^ `[?4v՟kbEIڮTy uy_vtoE!=i'ٷYg!2,lz쎬#* Gt+]}{qߋ U=4uF8>4My}NxQԄ6QF{887!Fc̔}: fO`LE$zCC'>Fkl^=o}KgӸ*%1Ghߵ -3 V\jkuL%M_ = 9uI929=ݼ zdSKTZnmZEkJhv 7L)+_4,M^`D__4#;x!ntHN gf4ŦX$G9=FR0 R7lހ,1Ep2Qs{q9ʳ)WFH&9[4%^f'^ DJ˦եNdUSr-SE)sW۠4]l &u^Eao6P,ZH*BK,PvfuINr5{3[!m`hJFܲ㖅YV)ԘP_W]$乃Uśt`H0!i=$Z%6 džV#U F],J5c^لj)ld6ab*7˴ш]*8!F&c -Έ~=>[-,m)I :t0gS.?vܠ̓*82bɕ͠Gqe"dYVV;.}7ބxnH,d9SuUSʏKkQ=U߶Xvܠ̔ƞ_=N/o3;oaGi\y3{uٵԤ6yrؓw -w,%V'Bdetk7[̼c -&AN{=!?tapb35#;ea!@صQP~nDHH5Κ6hiEk"~J#8i -㱅"G{llzC/ B fi$H,SJsZeI7W6.+ح*BCuDߊB_&M1v4V]viL(fm;fe|kh:iB"M@r.\K5<,ʹhA*Y<CP#'!' 蘱^ΪQoׯZad3TW}GAyK@^V%,F?`Q[Y(I=F[zm 1s 1 8$'s -^fM{:GFEJC7C$KsN6W[B6AB?J ȷo'xNe~;g &,D{-[;TT~.ި]pZ k=pƴ %V5Nʅ*]H!iR?GHiYFdAuU/(,?7&N:/Z۴atOZwVz*bb}B")$N22v]?dM[tn5J-FUp֥4;J%IW{mA@?9y!]ʝ4PLݬ7\>J# da+Of/[蹞,Ĝs!WC.ZNZҕ4{U)Pa6[QqmcS܌yL}n# eQɼ5%ov> endobj -1170 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [416.746 612.565 431.192 623.509] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.2) >> ->> endobj -1171 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [253.787 256.525 265.743 267.469] -/Subtype /Link -/A << /S /GoTo /D (section.16) >> ->> endobj -1169 0 obj << -/D [1167 0 R /XYZ 125.858 740.998 null] ->> endobj -166 0 obj << -/D [1167 0 R /XYZ 125.858 716.092 null] ->> endobj -170 0 obj << -/D [1167 0 R /XYZ 125.858 551.17 null] ->> endobj -174 0 obj << -/D [1167 0 R /XYZ 125.858 242.951 null] ->> endobj -1166 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1174 0 obj << -/Length 3266 -/Filter /FlateDecode ->> -stream -xڭZێ6} 20fHAM3 A$y%]YJrz_u!eRg:cba՝NH.1RdYzW_ɻGhzJ.[g;ëޘ.Y߂dUR7F?ox7z2Lk-B8 Rø3_,+X0n|vU] lpmeAq:QA3뫶v2ש2-d]>j eadhN#ׯy¦Ҡyk;D!AjW;鞪% %-EQ1( 1n?W_EJ$q:4VHzȢhbZ*7ͳVIl17&';lu{ec \|8w *λN"P,L歲Bm3OVC[jN}[,y\}L4ՉWK( ]N #[DB`&E)r~s)=fMa@4E㼲0&J^`ZdF$1n,¢)ql --}ore㉈#ǼFɫqQMɭ2d5 "YY~\i}0aa~}xuS[*ɦ`4;!8|Ṕc U '5mO?ơ!TuծAӥŤF$iQ@߈BoP,摇mz|g)Z8sNoWbDmWN,u޻3!}Q")PU.cS {i1(Ϫ:ݪH -̼̺͈P5YN7U37~ THpJya9tv H,iQ.UA0JqNB7p @SڎmC[cJcB*Ǐ!qyW1"cMW=\$ҭ[@D9D$SU0'wCBeVat ]{|\nlI5"d|TLC$=FCEw&!X`e/eV&R7B1ۣ}뤓uMF0KDB/0BT:@ԏ0ԋܨ: 7b| -^ -UCwFND Uz]MS@ž8a~6 5=\Dmwg?ٺFap2)hnCA8`y#moq! D:G%fjL$>VD$H4=igF,%l>AHy#-nbR3peufqڳCv૮v` _MZȽRaX#Vᘆ!v4h2;q[#o:\ˠNU H3Y#42Xtnhw[.'6HU/|2\W&uBD`P2)eEw n&NsN\wSג4 7mNP51`7m)<\':].F9)99jiۗ0 :h?M&w:֩ c!.Gzlyit6&3j/9"nhfѮ2%q <In@Er9>Igxܝ1z^=RTGL*I\r iK8דּ7nWT2gK2ʥjSd"Bi +eHu2G,-e pe(&`xAZ}9F!%NwZھho4oђӹ\Q-}:BL9@^A UܾIÊDҝ:rlyopdh"4&Fendstream -endobj -1173 0 obj << -/Type /Page -/Contents 1174 0 R -/Resources 1172 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1165 0 R ->> endobj -1175 0 obj << -/D [1173 0 R /XYZ 125.858 740.998 null] ->> endobj -1176 0 obj << -/D [1173 0 R /XYZ 125.858 697.377 null] ->> endobj -1177 0 obj << -/D [1173 0 R /XYZ 125.858 568.97 null] ->> endobj -178 0 obj << -/D [1173 0 R /XYZ 125.858 423.247 null] ->> endobj -182 0 obj << -/D [1173 0 R /XYZ 125.858 280.892 null] ->> endobj -1172 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R /F7 1071 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1180 0 obj << -/Length 921 -/Filter /FlateDecode ->> -stream -xڍV]o8}ϯ7*Zv*οkI2eԌh>" -,b\\Q&))<74j`H`7% -Rhmv+Mo%)?%ƛ/ɷ͇7ŋcB{ɹQm| f#RgRM/0@Bf?CPhLt$*`Jh -T5 e;pĈdD kC=&ϙE*'%b>R!#{8$ˢtA> endobj -1181 0 obj << -/D [1179 0 R /XYZ 125.858 740.998 null] ->> endobj -186 0 obj << -/D [1179 0 R /XYZ 125.858 716.092 null] ->> endobj -190 0 obj << -/D [1179 0 R /XYZ 125.858 622.901 null] ->> endobj -1178 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F14 1060 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1184 0 obj << -/Length 2639 -/Filter /FlateDecode ->> -stream -xڵYKϯ'Xu~`x'@'H8TD,E$"%z/.VUW}jM?*yo27.Ý$@Ok)D$Hlb%J~aeB$iYqFi6)ɛS!U^Qُ[ѻw$}bf((}p=gv.v"k)tVq1Ht{ʆ}۵C}9xb.sKE&{DtBGU'(-?% OۖDQ:;ֽ ǗnݎgW綮#bE,qb~_VJhM=) tDJ֯9Ʊj\%v0缯Er70cz"V@Gz1E=b}=Ɋ pJCLAPe5:<ɷ/ -;`[~ ]i @,!< o〾#6iagiLؒȄJ,[xbl,(KҴNe0'.c 9?t.,K0gێui9ocP^t0$$_7q,_eQдSovUu{V>ҫG۹2lw\RӺ𲍗H N8`{cd!JD2w(,| l6oQ]K,* ICjM"KB+ڿSl0^g~$+o6϶ip@Β.}Cj,TlUC| -K/dԓOKT r$wDB,#/q#q&8x-WT e›P\켪`Yp3T;6 47URI"ͤDAU3#FR8>v{?77 hTv~k$QGjD-R/Ia$Na'Uc \S@;au8?nNEhl@JJKUg#W,۲zlW*Hqfi ;S35 ݭ4:,yɌޝYt^<,\qS^bZmUeqhk 'q59'h EŲhݛ v)Y -XX[K1z ɹ O:]eBR9%:'To9K-iI "b!l]]WCk2/Xo>_D^O㻟3  ?ۭy6 9*?0Ԝ oS>u!6 W}6oQJƜ\*Qϴ[%RҢ]1^KZJ -47{&Y_N6a]#,=MݝXBDR$0E._sח~_Kf}G:jXGz1>\yk-i5X k Cs A +8ҋ0GߑOɻ?7vX̬h9Z\,\Н[n63KaUka{7Zʕ-&#MDhQ - 5P2uΈ?2AMCnj}(4Ynד%/Tq>49~"$ +SΓ㫯nY̅1V-B !4._?,h"{\Ć+0p[~Z1Vut'T6|vaLU^u@p[3}c3 -MJɒϘ,-f%e矻Wx6^%r}CkmoufϢ~b:41L1PA#-|4d4Eͼ4sj1[_i'kuJ͟ZH:ˑH[F Ǜ(~/> endobj -1186 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [297.982 427.036 304.955 437.98] -/Subtype /Link -/A << /S /GoTo /D (section.9) >> ->> endobj -1187 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [194.659 252.959 204.124 263.467] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.10) >> ->> endobj -1185 0 obj << -/D [1183 0 R /XYZ 125.858 740.998 null] ->> endobj -194 0 obj << -/D [1183 0 R /XYZ 125.858 716.092 null] ->> endobj -198 0 obj << -/D [1183 0 R /XYZ 125.858 663.568 null] ->> endobj -202 0 obj << -/D [1183 0 R /XYZ 125.858 636.609 null] ->> endobj -206 0 obj << -/D [1183 0 R /XYZ 125.858 566.264 null] ->> endobj -210 0 obj << -/D [1183 0 R /XYZ 125.858 401.507 null] ->> endobj -214 0 obj << -/D [1183 0 R /XYZ 125.858 296.525 null] ->> endobj -1188 0 obj << -/D [1183 0 R /XYZ 140.204 152.934 null] ->> endobj -1182 0 obj << -/Font << /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1191 0 obj << -/Length 2320 -/Filter /FlateDecode ->> -stream -xڵZݏ6_aPTbV(<\ u{P٦m!Jrw]3)KCyX͗f8N|G'Dbs$,w޿dfifяW?l$ -&u|oOLg}o錅/s݇]p <|ȑüՅG 䢺n0$a׏e֗Vj_}YEW}}p ]s|ou!jA/ˢIєSzJs"[ZVh׬RoUUyZX APy(.YRFi맬1܂e#n:<>ϲZ]Z{s2hWD#'4 "q]]$8Fh9,8`wrb-+"Hy@M8& 23XdOFѐIu(?b)kt,82N ODe$.*ۄDᤥq95"TJI7}.sv|JwާKy0sy2/5 4^Vg,Ϛ MZ5weW Hw=g4K9德) J֨]jĞ\F/L ۑR˕+x߷n:TwH$N"ٲM)*Kh<"yO+bV79b;m1r\z/+Fa?4'bn8Ұk @Fם IĂ c&;xPm /N3\UN9=c'H%#DוhsGF[-E[Y䢍y^7/k&iΕs2- -IЁȥosuVcWu+pjO qbђE`jz\#m- 2{kX\n(e6}3㫺ff{4""1h~A{Z@ 3T| lFyFKpOo(p\F\MlF$NBu9%.6( bŒܗM#Wwv.⡢᾵hg"~4 ن}۩ =40/O$Rnr o(4W5 C܊B]޺']VvjVu(v{H޲j)VrٕFodV*XAs65]nz -aH㋽ bW -M$5"HDfXRNHW?5ey"){<֍ܽI=Qu-䪩1K/i;ɇM oD>nj+zK򬽎7&C3n6D>nj+zKɎK7ET ؍-Xg‰ A8P889 2 -G -N@IAlAPQ6$$aK!w ZZ`Ta@as* ;XXO_8"Q,ӁF>p"3mFaiy]WzPl2,+@*Y'\V!rn*\{^ivjK =Mtiz9\M1riqgL[\5wmAp{wM6rvsfqGy Sx:<5-pPͽxIc$bz/ʼnOz~a˒;f\b7߀D$gkM[nB<H$}Zխ6YGCJBBiu -ĝ@$gӚ|kybtэ;h{ZL\eS"lŭIVDEn"v&gJ%TOejDؑPm#8C`7[Q(w tep\P1~"/q?h΂83E&$dAfv&~X:rSLAqª?6\lFG2 iA[XۦXfCL}}:eaNe Bs5lQ|wyzazA7 -=;sr8M<M%O~_P;N~)n *rT'+endstream -endobj -1190 0 obj << -/Type /Page -/Contents 1191 0 R -/Resources 1189 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1165 0 R ->> endobj -1192 0 obj << -/D [1190 0 R /XYZ 125.858 740.998 null] ->> endobj -218 0 obj << -/D [1190 0 R /XYZ 125.858 716.092 null] ->> endobj -222 0 obj << -/D [1190 0 R /XYZ 125.858 484.14 null] ->> endobj -1189 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F56 730 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1195 0 obj << -/Length 2149 -/Filter /FlateDecode ->> -stream -xڭYݏ@QTN)1}jwͦ!hܼ4^!dm?/^_zp83 o2L8*xY,6U9^aO4"fwl$nv Fb,˒ݷo)Yro};qI8PzeaB".UqR\"n&&҉("^䟶4Oj]M=<9vcnqrp?ˡZT)H8bt~B$mצze73<Ǭ,M+78kwsU}GO!2h=H}pô $Bb$9RO'nT3o%٤$FmI|24w+ #O۝ >\X=2 L0ӈDlKFy/0,5'DyNgGvK]eUUG|]9CsjolWU 4WUdDLp?`NA;s\ w7l\d rw{YFCV*9E4{F8 -/ϡĔ7_&~+Kw /(U# ^([G8Vz:>$ (K9!pJ/IOᑗԏ,KUJvŬ=_i- 0VNNp03L -ת+|CleYKJ905a&iz2/"O gw>!uDR3e/&Yg?ۙL5֑ئ ,\iѠf@MCվVhz̷WGu7d rXx^Ņ8)!ʄ_V="₭=nY)|2~Ibl ocUP8՞jfa!zyVc$C suĐsm`Pd[Lʦyr2@z,'M\9ASaƩ~Ce2)ETwma;7r>cu` -kƌ 6c}Ra]Yf,-pcҎK/?H(b L`|n*|s: 1F!q9a.Aܿ &- >\lu/1$zt+U3̴v{DŽ3jӜ3!D"Hb$9pȄۜ}0LfᄏhԿ8Dޘ o{6 |Uć<^Q -]6 F9+ -}/B_Frf,9JpnB:~lO@׷WD2=L}yEko.]nn9ݜC.׫[OFwh3 -]#$#0w> endobj -1196 0 obj << -/D [1194 0 R /XYZ 125.858 740.998 null] ->> endobj -226 0 obj << -/D [1194 0 R /XYZ 125.858 716.092 null] ->> endobj -230 0 obj << -/D [1194 0 R /XYZ 125.858 351.893 null] ->> endobj -1193 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1200 0 obj << -/Length 2838 -/Filter /FlateDecode ->> -stream -xڍYY۸~_r*gx[Y'Vj -$a$J_nt"Gwj`R jt"$_dE/6(fYoc(DBj)oJJv ߾{꧗oH1Fdq$E7a/qZ$-s]3] - ~]XF[9ve]DÁݪhK/eE_Ah翀D{׸3JGqjܶ=dOA*TJIZWf:ud5U+niVD:"*, /]yt<تr ,˟~,{XF]mxM]mK>s,3{wլaw4kOǮ%*He,H z -1ERѤÞͦ~bgQ1Yӫ`&ܖH-ooZvxY!ݽ[{~.FDVI1|ؗ^0[gy{˃A#*a|Li:1֯{{aaUVr -]ǜ5=m5sF-E3[-oCߖ_I f,XS)L^WBYB!zD(;VLUhTW|u)D[)>,t <M ^ X2i#M"+aM2Ip0x).DD{ged.t:-s`b-ƺHz-qFסLIs8%O+tgd1Lr`W!(ebcqnhDh.58rufUbDNEu*F\Z߻om5wW7#%r\Tߓ4S@YΥ^[ydL[64I o[.E*J:Zvˢ,3z9WG -Okzc3l`C%YHN)渄J̻19=E!I4hS!jяzgԥLs߆?sAM*´ UAS=ޚ,"]^d!gD'BX$:l+1 JǪh <ޢobϮq>xAzEϭly>5饠+xb/ر9n5s9cbUvAؖ%F w"ydr5 7JCE.Cm:GMo5H#ԕB-0s[ dt^Q@)yj[y>zBI2mpQ$h7C1_CQR`MKu5#QzpBi}a@Yb΄(]DžhtKB-yymiA#H`%rg`!{іH8q[ӓ j9d }?cVA`[sZ>qyn}2ލ/ -1Ͻ 56׋x15:8ux·E?Ǔu2gқRA;sQlDq,NMUd"OMk>A&|I|bڶ =QQg@=B4HsG{ _os=8I Ow,(u;QQS$0 ٗ[a\V+S u^Pguh0*x7̺,j?ņ˝)o39kc'WSJ!{y)t|5"Oʹz| - -)4:gu z9eDjBz |vTԴS2F㲂>ʣ5H\f5Aԡ~Yِy:-rWٮow+ÿ) 5F%s?ʅ˗Ob ?Ha|c)TQ,7d~xG.D.(l]+OocEl`:YJ__`~+σϺÐj/{U.T<@!~:HCJw!3X AX{*diG `P " -pL~ar!Ղ3)tޙi2Y@g -F$endstream -endobj -1199 0 obj << -/Type /Page -/Contents 1200 0 R -/Resources 1198 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1197 0 R -/Annots [ 1202 0 R 1203 0 R ] ->> endobj -1202 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [271.231 619.29 280.696 631.81] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.11) >> ->> endobj -1203 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [385.963 511.509 392.937 522.453] -/Subtype /Link -/A << /S /GoTo /D (section.9) >> ->> endobj -1201 0 obj << -/D [1199 0 R /XYZ 125.858 740.998 null] ->> endobj -234 0 obj << -/D [1199 0 R /XYZ 125.858 605.812 null] ->> endobj -238 0 obj << -/D [1199 0 R /XYZ 125.858 408.446 null] ->> endobj -1204 0 obj << -/D [1199 0 R /XYZ 140.204 129.79 null] ->> endobj -1198 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1207 0 obj << -/Length 3204 -/Filter /FlateDecode ->> -stream -xZݏ6߿/5oRShse8֮֒3(Kn<53ق?`\HJ.6+W]@4蟷W_^KHnvniWkF)]j]޼zo~xz"" Ff W)^vHYucDfhМ2@ʓ>O -`j Bn^X^=DpPZ>||E[_$|G+49l@M3'%6Kz=]lAWՏebaCuDj^+i2@ö7?SEu af%O&RϪq(H2졆#h z oSošWc_s&3gL%2lvWocYU~MFVL-Bk'?t86?wԐYS_˔4.Cq̫/ O}M%ƛ28Q=%Q~(vP2Ba1,ŶmNM[ز1C )e[=kN@FAvwu(%a>c?f!Rk8^Oqf/8rN9NOS -E fXGKnCޞgGH`Q `>/;Ϣx=(s#/xOH+>FTWvd,DßvÊuscyyˆ]ؙ`2 0M]~7m||}\1!@C0m-FHA% IQTȦi?1\ZJzPd姱.x?z -Hޏr&=.([kp=(;e3F;Y*aBj'N3ec!^N,D >m/لhyE cfY]qOaNdd?v" NOZp~9 CeUgJy:nSS{Sl "(4 @{S!iPH(Sˢ#:nKW 4f*f?̢_x.ކMlN*F,9(a'|c[[>yy(f=83+!Ì - %K] r8puHN \\Z֐K3 2.8;opuRͮ?uy<%J.h-`rC}'PsF1=8U=UQjXj]Hf\2 KA>o!82@iǭ_,|s|1t aTdDq, -bsx (X3LAb?Iy28 -iڧA@{ c=HG9{'rhPI"a7ZG1+ӌ@I9QGDB}$m93 3YBfR\Ĉ ZȪ(7nwW3j}%Bbҳ P#cn/vQ9/; /!sSĕ.^?T{83ĭ&X"̩hR])q lNuyR!, P -X^j(a9@3/@uǤh`/n Լ{s'TP`[?jаY#MMt>4&v}&YLu/2_ _p$,({=2F49ô1H3\`G-~# -BBC2g_!\ e_@=9KԢiX;F#ͼH8PHD"1ϛGWP1$Dr:p!| {Fad<RKPjSK|b=?.s,cLJc*ӗwXii@$ -{p,5tK)suRKW)¬&@AׁoB .FjX7ޕ(۝QЗt[txar+*-Sٴ3U9f}H4B֘AGvsW_lԺ&(<ї8X?D#+^4Ŧ&9fbCmxҚC"~ԡ˖w0HNA)!hS1 JeQvv0Wt"Tbs1#XxNV#x Ki/SXnC;fK#nuH '5Kl$e=I-LHi_YWf_M641M3|.zE&ޔ; D7a5N5<d縉!􀆔N]0'BW/.qH^_" _#!@HK 1k\`˿Ր !Իnbz$۪z7h$Vgɰ&~X$WzpF7.͘8PljCu@m)"m ޒBf(ZG{[rX- -x@ͅmvyXpT E1=ghܿLRHpYS]?pjNy5>{ښV`y֜_fGc}qM&Z͋g.) -$F -Q1B}1b^ZITV JJ%"n\Vu TKo+~e7N94&OC 3U`ϱga`bs:}Hmy,|ҽ4x "9m6EܝP]Vu~jYdg=}!1vmxÝendstream -endobj -1206 0 obj << -/Type /Page -/Contents 1207 0 R -/Resources 1205 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1197 0 R -/Annots [ 1209 0 R 1210 0 R ] ->> endobj -1209 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [228.9 577.259 250.818 587.814] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.2.5) >> ->> endobj -1210 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [260.799 541.005 272.754 551.974] -/Subtype /Link -/A << /S /GoTo /D (figure.30) >> ->> endobj -1208 0 obj << -/D [1206 0 R /XYZ 125.858 740.998 null] ->> endobj -242 0 obj << -/D [1206 0 R /XYZ 125.858 631.331 null] ->> endobj -717 0 obj << -/D [1206 0 R /XYZ 243.448 525.825 null] ->> endobj -1205 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F11 792 0 R /F34 502 0 R /F52 1119 0 R /F43 512 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1213 0 obj << -/Length 2764 -/Filter /FlateDecode ->> -stream -xڵZ۸@q|)tK{hfZ[B}rApo:]%*fYWK?D4Wo+Xf~?ct{7<_>_ޭqӛ2"d@ݯSK}e2MvR,W "믤Mp%46+OcD\ir0K#4i:f#iSq\SB2tB^Mkbەu3]0/<S޶$& 8?FGlL2I mO-~Vu_Y4 zkХiT H9RKPc[Fx¡`_ZC@pg>Zb0W[hځ2J۶fu ͺsEj:̎2H'oӨ!"7Ƙ -[}V?/f .MKoK}$[_KG%NQ8:eqW:V+fy&M@3w_8&l'Cf5',P 8ta{= TP tP%TW5-aY3qgeg={O֕O R,/g\"D/]m}`?T3>r1I -K+?I7߮7}Puga' ƣ,Km\vm}iES}"sBQJ1F`P.}`PzImYki\vҷv@ƪ ڷveh!'yab4ã@ -ZbT5oBO2g)IsY; e\w쨤C]=U8cn 精4㗆\N/-Pܶ8ee-G!͂[iى ;ї=-G?Aבo&P -bBoo!jOSK-Uya+˞.iOюMe _I"VL>u(uQM1g*Cˢk4l@R S%K9gpS._S @kmF@UEߵn"NLS TT`@(&R76_(7L-r%X4d*m7#6;6p/DsOpHMC@Iz ' ' `E6RҬ'ΣQ"g&nM$?ĸmni!xÞw^Ƹ (>s;̾Ui^"Gߵ߽$(endstream -endobj -1212 0 obj << -/Type /Page -/Contents 1213 0 R -/Resources 1211 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1197 0 R ->> endobj -1214 0 obj << -/D [1212 0 R /XYZ 125.858 740.998 null] ->> endobj -246 0 obj << -/D [1212 0 R /XYZ 125.858 574.587 null] ->> endobj -250 0 obj << -/D [1212 0 R /XYZ 125.858 360.326 null] ->> endobj -1211 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F34 502 0 R /F43 512 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1217 0 obj << -/Length 2344 -/Filter /FlateDecode ->> -stream -xڍY[~_ᗠ2V$R)EwSM>5*˴-D\])37R],&p. uMMb?M~g.؜a/BaY݌Ow~&DoA㿼l ݩ8?<ÇIZiù?Α݇%Jr?NU@Z`FB}/F5n/v+ )g9, KEA\Z5ԌDZSRkE!ɿF3rĿ" `:uu+h{_9/b7SCQb%ҸH7J]o[c1lXvH)"ʮB2=ȝ*Yz(mtb+t*M+V+H{p1 ~¤~9J|h(#/~{QW!XA6,#Xό[޺^Bk @FJ:|EyBޙaP\jyZ}]:K[HpY7l,A`8E9+HVCbjc^w,BU(/NT2XYp@μ'iEdT7KpT=NOH5r>?ڵ?jGyAd-GiT)`|ΗYf-d9'",k E`ܫ`V7U<3nAJQ~ -sҟQ)z4L$?jkWt͋]FkܗʼnC/2TW*PP>)S|ή;ް8r mY7IH7`rLiEB?t5'07wT$dK+]PȊXkbR 8fB}j:\*!K۱W&lE˞1"X Rc8ҳ*d&keC "T'N۱ SSYf ,F3]l;㐐NT2K~(A^ :LEkn-7@~i.VWD:)`2]{;/XEp #@gzj+Ss#qFHqaE3\# Jmlrad!YYyCs,/Y5ЈrsGn~H@N])>"=E=u!@=-vЂڵ&-x;bI ~5W84f&1&Qv)^29'=*%]4[:~*֣}kqB qii8"|0"LG'aJ~x.ďUދ޿ϯP|^>*=JH'L.7߬GЎͱ^ʫ :=%'sF^#fx<;endstream -endobj -1216 0 obj << -/Type /Page -/Contents 1217 0 R -/Resources 1215 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1197 0 R -/Annots [ 1219 0 R 1220 0 R ] ->> endobj -1219 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [295.999 672.341 310.445 683.284] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.1) >> ->> endobj -1220 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [157.24 530.911 169.195 539.838] -/Subtype /Link -/A << /S /GoTo /D (section.15) >> ->> endobj -1218 0 obj << -/D [1216 0 R /XYZ 125.858 740.998 null] ->> endobj -254 0 obj << -/D [1216 0 R /XYZ 125.858 716.092 null] ->> endobj -258 0 obj << -/D [1216 0 R /XYZ 125.858 493.427 null] ->> endobj -262 0 obj << -/D [1216 0 R /XYZ 125.858 472.673 null] ->> endobj -266 0 obj << -/D [1216 0 R /XYZ 125.858 198.383 null] ->> endobj -1215 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1223 0 obj << -/Length 2246 -/Filter /FlateDecode ->> -stream -xYmo6_/kV$E;.mŢwI?u "3Z[r%٠Xzw"|_pQf&12(v>}}=*ЬFD_\|:eZ.nݬr8n\}CWo.?|k9"di^Hqqy˒)W$Z w ̸Hb2eˆ^7, Hn*aFE - 9y]YWң)@/ek;T{]kmqt^۞xHD.VIniƴZ4(盲D4b݊+ŔЋU$Oߎ%YM`L65B,V -X1}RQV,j"{8ϓNF96VD AQZ% >o6IƑ -͕th߀i24iQO?i~v=eN٫ 'b"^?v,> $!vl#ƖDgY3%gs^g-wegWC1%Xi%#p3YVk[u -͋tۺ9~{vƳ\4^ -ljxCmȯܗ6l([XB|E %z&oU5=[ SUYݿCGSt~QN'fLY}U W6ͤ :V_?B?jijgInFN.PӍJBd M4aB3y(\ӁqyUW,dsHd1%17/κm]Es>z p_e)8L}N3m$ѿb~3T?X -(o!'92Ll`yb3Ldt,.'Ýt/O]@g$g]2a*D=3 }7B#a$8=G)i -v2nj;}͢-ԃL;RcrBPmiԃcI A.E6CX{&*l;-ft [Yp @[Pl<`g4 統^wjNоH)ڰloKۺ~5I}, H B^_\=rG|rfbJx[~p"y囙RCℓ'J $@6m!l- Ńh:PV>8_}:pwh=  v)L^ەuܗ"@5 0 -U0>|kD<1 ?9pQٚIºhI>3gl.j& S5]WjVDl`~RNp P KY;ד_%7xZ$M. -F`?mq2܏N1,5п\cXŷ2xqx-v\6¿o//1;3qGmDx:yzշ` ll AxU=dݣ[6>JtA\`ٳ㨷7'?÷ 4endstream -endobj -1222 0 obj << -/Type /Page -/Contents 1223 0 R -/Resources 1221 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1197 0 R -/Annots [ 1225 0 R ] ->> endobj -1225 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 518.247 468.075 530.768] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.12) >> ->> endobj -1224 0 obj << -/D [1222 0 R /XYZ 125.858 740.998 null] ->> endobj -270 0 obj << -/D [1222 0 R /XYZ 125.858 397.276 null] ->> endobj -1226 0 obj << -/D [1222 0 R /XYZ 140.204 129.79 null] ->> endobj -1221 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F43 512 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1229 0 obj << -/Length 3134 -/Filter /FlateDecode ->> -stream -xڵ]oݿB@J'fr FC 4EYQBRsגȻZ~rvwvvgzOt`$+)?MU~RGzseƭL}s(X~ G/YoRʻ&0ʻ?y}:` зQ -X㊫W-Q&N?I[3#7\"WžR:>ȋ[6zOc볶gP۲/ʮ?A4*sc:~d\P9`0Y1C -bːL˄-ցޗx PN& u~j \(? T]W~!ph˜?#uYu*:΀^UU8/})ˁZ{CFI⽆u6Uk XDGdȋ*EL czhXQ~le&94XNJ2Yx)&'.`į]u^5fyyy:p"{J8"O|ˬc FsH촠.bArMK:#mF8j6^[>{]ij8դЁEo7uuX%9O#A22ˁW ׀hb˱tS5ƋAE`cgVgej &Mm=GX\?#|,!(Pp8U}y!8AwkB2o&9Fd`ijWkfFlnE↵ mw!{ -Q)n咆?/:ue^pp}*ПG2)6qjN'9 >"_XW|9>i-M-e6C2*<θ Iu3>v H0` &M&־V؁B0B+>1] XPMM1ثE?(k[7%LNL&zHOB5s0M()LZF4Md4-" bp ڀLZ#(*7MXQ+9ȡ#z &G*Ӏj:&t.0iȈ^e*$MC}daNVQqԥTl]P0CB^g^M텵ڱCz2ʀ{fB٦+Y+jbE\̌`^8KP1je^֏hyj։@,,eti2sBu$6}%qFܫe*6=`2Nvv(4|;qʉb?,NH@Pվ'vI\Fn¤PiAw{b na ~v!`Hs :դ1%1~\J#phw`1[`C -()ǃ=ǏTWismRD\a{X)I/,.Ƈ8e} DFge||v׀XuM ?}5]w7Sy0sD@b)$"e陨rc\G>%=yJ16)x0=CrnɽC1:'t́;VߺyO φV1uȷ֔}> _dC+(h>t=zaFNGFC׺T3.o )x&PYީUCQbI: 9YާP >7-;k휹uc%T(z {:i+/H"3cEn ^W ->#Ɖȿ`D^t 2鬒2b'1{XÖJZl> endobj -1231 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [239.859 595.379 249.324 607.9] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.13) >> ->> endobj -1232 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [392.685 523.648 399.659 534.592] -/Subtype /Link -/A << /S /GoTo /D (section.9) >> ->> endobj -1230 0 obj << -/D [1228 0 R /XYZ 125.858 740.998 null] ->> endobj -274 0 obj << -/D [1228 0 R /XYZ 125.858 510.074 null] ->> endobj -1233 0 obj << -/D [1228 0 R /XYZ 140.204 163.29 null] ->> endobj -1227 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F34 502 0 R /F43 512 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1237 0 obj << -/Length 2357 -/Filter /FlateDecode ->> -stream -xڕY} -CȰ !0{=6K@6?-N=nvreݱ,Guu=+ng4xs8(Ǝ[ |mE2SgI9#6pq@ܠ49q Ī iSpv"?j!1&MmIYFUŦ[݃N~Mwz\.Jjg! hV?r1Te4]߳}U`V3_?łgҨ<t73=,2r5?s4^{;(-`(%K_r+ Z4E .i5&{aNw$ R9ƨMt[d?W5ã)j /\LԿ2|–< -(&Rjz^dKU,d©(u>B#!HΌ7Qܰ׍T],4icc}/ªey6(y;vԂnᴛOu! | &FM2 Qu\R^{T(-uv]{dR5Wt8vO>wu Ǥ*_n7h 6Q6C)r6x4z%Mhf~Q tܖfml6@,ROF60')"0s[(wp\s7Zs[6+"9 Mn^WC- T-M$Ƙ?JgovT-wdždK:NRL®2M %$o>޷|ՓcGe[{9[&!jWV$]ΰ3r( C<~˯|z?JX;A W8rڂ9=oؘ鮦$b:WOz~0?+ D^JT^ ؕײ,%4תُj{4r?tHaYtB%(\T}:(4Bͺ{/4ASS +.Da rP]Y5ubJƅ\kazo,fOo<B;B [ۙ46el6vD1I?9[an'~Ԟ>y%jFX8S1v@bsfʚ0=i@m_(pr Rȇ(|`K6ی%mߍ1=zp-l_zԪ1ߪ,FM ' ATX0vL/48<9M;d ,]ؖ~^dM}6Vendstream -endobj -1236 0 obj << -/Type /Page -/Contents 1237 0 R -/Resources 1235 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1234 0 R ->> endobj -1238 0 obj << -/D [1236 0 R /XYZ 125.858 740.998 null] ->> endobj -278 0 obj << -/D [1236 0 R /XYZ 125.858 538.164 null] ->> endobj -282 0 obj << -/D [1236 0 R /XYZ 125.858 397.317 null] ->> endobj -286 0 obj << -/D [1236 0 R /XYZ 125.858 289.223 null] ->> endobj -290 0 obj << -/D [1236 0 R /XYZ 125.858 260.216 null] ->> endobj -294 0 obj << -/D [1236 0 R /XYZ 125.858 179.958 null] ->> endobj -1235 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F34 502 0 R /F43 512 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1241 0 obj << -/Length 2949 -/Filter /FlateDecode ->> -stream -x[ݏ6_zۘ巤E4Njmlk!M?R"%. `o>e3 -lƸ"g(j0 ,E0/7/NYA --f7wB7̋ί_}ZpE7o^㛫_ow"" ,`]fƋW7=/RD,~΄]bjxa[^q:?vf曲5 >/رﶫ.Smk?~M®wWbmwݺZ6Xaϡ,e7 -X(,I*Sq.cPNjTľdBzST]THq0)U)7 Ib.xm) kfDVY!`b6L)eXF|^4`sej38lMնhg`o)ava},UbWÄ_MTX.X?.}jmnPD5ϝYhMu)QDe2AHB0*/̥85VFAFBV`۶o{a'4pPxF8hL6{1U:-9)Dmw[R=lisae;)aՁow] ϷF,l|﫦쌾Z(&篻#XahMe `h)r!LBʈ'~kmANhxR$$ˋg⫤ x&1 xtLЕoKBku`!^+)H03!6^ VX0-tgRE xȲgL w Vn7zQ `̶*<ܶ#)x,}UXQoUUY䅯ۺXH {ğ#i M r}m (λ[º@ՌvZ;Ch/@jZFsaؗZFmWWI[ utS-x[rj'qcnpt_7gL뾞D_D![Z@ú-SrBdc1˜l?MGG0Ʈ~&P2#dDڳ|"`dqjN$"> mEH(!i1Ni:}*DhvZD1] ue , Sp:JֺMiR\9̭ĭLnnɤ횜m w .|vh@n-?`n޸xMյ1n,^{~2HՁdp~Y!t^ҶZ0$S>DiJ Q8ZJUbs\.1-̱8z>[KH7"eac%_E wf,gኟ.LnTpy~F z4SQk棾Pm]oi]Km-qV;4~ -G凱qW1U0Ky%Qy,@EFJ\aM$Hd\e|&rmkef&ۺm}̔ y2٧ F}aⷣ;f(we9)r]2PSہ!۳u@\{u*z/rk(RqM"Z?"T,],d[ܚ6RNv/="e2ziD1GIʴy%sJi .Rs,;BQ>%לJ=QxL6"Tهݴ&)J }5KfKٟjV@9TQP$\_y_*\} -t9|Pz'' >2e!V#g5q[ 7ُlDŽƥ$OzXd"BsY4A2\&k%*0tR{rOX7M-40ʦ4ʇһjǞVN3Z1 hvLęMSĵ"o?i0.2d5l}jndȒ1eu,G''sҶ:EΉTs C$“?:Ӷؕ[[[<7یfkv ÄHe0`q*s <:n::nzU۝A%C;, .GBx>׮I3E^=b{äӶ朷s7Z-i{jlcSl`S,.sG,f0uO jO<r2 䗩V.:\KC(UݾnY _4ㆌ dqÙ~q`xm+ᱲySuLdv mNծnMbft0taL 0#TjVr_ӒNS3mLAH\L: m~Yh;j)h WChcj mL)h$yڊڀf ژ -`ȆG-DB޼O4W42㐉{dF6sD& M_'8FB45jƇ[O@DoߤgHPD(> endobj -1242 0 obj << -/D [1240 0 R /XYZ 125.858 740.998 null] ->> endobj -298 0 obj << -/D [1240 0 R /XYZ 125.858 524.562 null] ->> endobj -302 0 obj << -/D [1240 0 R /XYZ 125.858 313.86 null] ->> endobj -1239 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F11 792 0 R /F43 512 0 R /F7 1071 0 R /F56 730 0 R /F34 502 0 R /F14 1060 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1245 0 obj << -/Length 3427 -/Filter /FlateDecode ->> -stream -xks~P*:iNɣIqf -XN|woR8ӎ=w{޽p#&BF,I93&7g|r S 20g/h91jr,t~jgs>z_:ɈO_W߾?\ -VQJD5BpѱaQlNa K$AGW?H`#RjBĻ5%A O nܚ:q``l۬.[Tfzs.jnyd~oZ$ӯEݤ=La[G,Qɳ[ݷq{ -9<@wke iEǣpPm6wl;pľwçNTXl:ķ7~?<EvPr7lKZ{a% ;rssbF;7iGg0// UmNdġTOdOCsSÄ)մۑDڌx\"{B<@ca3lHU pĭaB3iƁ-ChE6 L3Bĵ̅ kbas+C 4J~P}}>b,߬IK0ce ӂ U@ɖu$}) ; F8 FuT7ߝH WʇD8*p&,+`GiUPQSokT7y~'er $ux?=f5: `) H=\gTh]&07zgtxh C:y5#*|9,)~oJ/uh \cxRb~@ !G~aߎ:oBӪ%5c}ȇAR~c#1#~V~`crv<@!JϳT !Tz^ MvO~HE/\""%RPCgҦZJV5ϕԥjOΏBXmɁ0ҞfR=,\3FyX.`4c1/ɳX.f{ 6(1Y^l^d? 8Ktrmᑙl΄}"]}/#񵺠Kv"}oTF ¨{0 ЫDiW8L!2Ɂ'01O4{Ԑi]=ku @{gH."^١a/8G@Hn1K<6+cmyyۮfg{%WAi>{Zp (_üDt^uj9&拎:,X޳S@> C?TڿĈaM-U&F!x%endstream -endobj -1244 0 obj << -/Type /Page -/Contents 1245 0 R -/Resources 1243 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1234 0 R -/Annots [ 1247 0 R ] ->> endobj -1247 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [136.488 145.539 145.953 156.082] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.14) >> ->> endobj -1246 0 obj << -/D [1244 0 R /XYZ 125.858 740.998 null] ->> endobj -306 0 obj << -/D [1244 0 R /XYZ 125.858 253.084 null] ->> endobj -310 0 obj << -/D [1244 0 R /XYZ 125.858 234.693 null] ->> endobj -1248 0 obj << -/D [1244 0 R /XYZ 140.204 140.144 null] ->> endobj -1243 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F14 1060 0 R /F11 792 0 R /F56 730 0 R /F34 502 0 R /F43 512 0 R /F8 1057 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1251 0 obj << -/Length 2995 -/Filter /FlateDecode ->> -stream -xZmo6"/%Z˲%cnW[3ctƞ=MǗ%[~KE -b[)ȇ}␥ȏo‹L}[+Gso"e7w3F7۟ts0 >\6WQ?ǏFx\L))\2eL0B(5}_\y]uņ'C J;s/=ft9eMWCeϚ,YK7m},=yhXdUY.)A:+BYp,M#vۂEgbKFbv{;fF8 7< ǍLKᑮH4yߖBF!yAIߐNPv%1z՛zs%xljigf -hkSL%"NdtiaׇMu-#Seu:[ΨCq`"iu%A֔%=Ucє1~o0;w`fs[l.7{j7HMO;2 99! pBD -'DpG_Vxz5K3[Mj8'j?TUsҌ:C@aƾJYv;_',)s/3;Ċ .뜧bRI;ݛ-weײUDkhݸb}j޸]!B4<>kffVvhtͼRH[; }$3@npKZ7dE{}ʼr_`^25HEm%[{Dv4O՜-_ϱzި 'tQRYTӵTЖ;H$gv%vVyoQ@tRhS<ІXx.ӘE)dE^)XdnzʺbW77@ZtkurL(t,G[eB3t$xT 1 1^G=֌六-5iZE7-tuT] o VPsÕnVmoMKPwi.0@>Cy~nʍqu։aOǂnph:b00jAbK 6` 83M2-L7m,Eub IGL<,֮/@x,ήمp*/N *]dưSi-T04"b[:q m6O=DНIflĵ/52Ѩ%I1wt=Gi@`jTZhlٚpjTw$\eP-/Y#qH -܈vro݂leJjM`Mv!ܶ]ٝ;8< I=&Cbo(c3ơ·:>لP =1ںi)r5eW$1  . jrUM&NXrMʹV`7/z[h}𑢏P MW "MⰯIUjmiER2T e(N)s2Gi xw1~LE}{E+fv%-xܺrц.6u`ً: uH]o^+ {}U'awj$JMҖs|_[b buE9VXeX{[uqj.1Uah~tP7[ҺT4?e Rxnm$n)A$!b۬Yd)G?sMpjvyJV>:q gV]p JӗxUKH#g(}Yuj1$]; o''P$\:e@s=hl9[{=cStIV4VX\V*> Y;g;1㕜 zgXGTn::v r#ᓝ9}#,Gb0"v_nZU:c9ߜ/J1MBr߸W9gA]f@2y*B ^->NOdNN y{r_P*XsuO@!(qQ?qHdKFakK◕܇0&0kDD1jda: ލٮ'v 8ޏ4==ЧL3ÕELkz%_+=/|@@U&ӎEendstream -endobj -1250 0 obj << -/Type /Page -/Contents 1251 0 R -/Resources 1249 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1234 0 R ->> endobj -1252 0 obj << -/D [1250 0 R /XYZ 125.858 740.998 null] ->> endobj -314 0 obj << -/D [1250 0 R /XYZ 125.858 465.678 null] ->> endobj -1249 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F34 502 0 R /F11 792 0 R /F53 751 0 R /F43 512 0 R /F14 1060 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1255 0 obj << -/Length 2945 -/Filter /FlateDecode ->> -stream -xڕZYo~6K!}?>\[E):}q~on&Ytq?)W%9PY5aoōr0.v -U؏0ӞP L_iСpvb.] em?0BitP}6!0 -"6Â)8W;qyXssoW+7 nپVq0z!8O] XW=ͱLS vKRpeu-KU|JE1]cX>&I{ !aߢ 1 ˁD {_DǢ7K(*0ͱq۞JbrC=6< v|[L3]47-;<ܝ9 mKx@a}SL TWbRv2 -vhlᰦ`"pJTwhxN@0˔;s1ddC-Mo-!d|dPdM`xQrkgmzRaǷ+p ?#/[ɮ@@6$Ec5^>jB=Fz ./tXhzAgw]48.<T v4{`I F$j1a4*L<]QP;+a=!lbzЮpjÏ`zBwVTd>iSt;)xx=E6o{J0{O{Ǐ?gr{(&Xׂ`{Yȷ:ozsh -c!^ИdRI -qbk`~0O`̭!ㅾ;◊@{8lbl{v9B R' +҇R/rK]zEYŦ{(w&J9WHLg)$~CSBEj3 z4wZXgQ;8^0V(mᛲ+jIXF",b`S 9FG#4ظǎ`)ӆx$#h/<0` EIh^X9*@b.-HUNkQ0͐ -kwk*ʢ'Zna3@ B-JҤ|-EOa(7b7QL1Jb!le0qW&8{b<ˮF1m*3DX7]G "h - -LkxKڐx#l꫎ pf-d V(uƴԡC "ǩAhpeA}cdbF S%WM2u钺2 VS2&?|zLtL;sA-M4eҡp t' Јs@/]-JEwv%ny[`8^P AZ툅51ZX-Au~rhfɷ*ǔA*Fh<$ԺA}[E߈GћČޠ$?i1rd˒b{8+gA"A#b,"DJgdh$2/=<4s6};Ѽ^ܟOX%,]NO3H0d|8MF~#(=FhB/t5 !z>HSI`ET;ҝ3pTynQjvƎ5侘ɵ\{uV,]r%Ym2n I4Y[VAcDo\ܤXڴ^8Ŧrȍ5f8CETSZ~A;./-eKKrc8!W!A[ډ6;TMovS.r:YKݜ"(uI(w -6CT~-|z&@1ə -&Nf}Y%; ЎhlKvO$|UT/;MU9;H6d 88?L7vaU#BvCiN5endstream -endobj -1254 0 obj << -/Type /Page -/Contents 1255 0 R -/Resources 1253 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1234 0 R ->> endobj -1256 0 obj << -/D [1254 0 R /XYZ 125.858 740.998 null] ->> endobj -318 0 obj << -/D [1254 0 R /XYZ 125.858 716.092 null] ->> endobj -322 0 obj << -/D [1254 0 R /XYZ 125.858 551.17 null] ->> endobj -1253 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R /F14 1060 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1259 0 obj << -/Length 3155 -/Filter /FlateDecode ->> -stream -xڍYY~_@<xVdg KV؈$ \g6>U]<ίj-?q+dȒ05gi~S?Gx`B7ky4RFŇM |˛~_ ys^MvQJXp.by0EG) u=j#\Ko`uoo /9'r!v}rv*79̨XJeC2bi-P* :S+oLm0RY^|0tǦu)޽yX(5S' 2IɈq̘~*۬}΁GhSk]0ڷ'Jd')pDOt1tWw54@8CF, 'D6̴W,Ѱ>ĉ~Y6NY.ڭG]_NS[TC'ӣ -!6q|Ntx<{eS{sĠq-^tYxV3'm_f+,D -΃; ~?V%^=@#6Gp(',R,,Pjz@)0f;F bZ΀CҨ<1E!ө8Gs\G3'S\uqm[0%אi5OqDC#EKg~Dlr̞vVȿBSj(Y°U|]wj\EȞƏFgqf"67v٬;[d5dc 6+eUtU:)] V^ʃջ;!rYAZ>%j; $5ݒ)|O3Ň^Gҥ=UٿP*4Mm=eCIe֗bh[l3?؛sGÛRzGe2Pc<$&a0(cZ -P{\}(q2|kl+Ԫp(80A㥜)᫃lyZۿr쳎96k1,D>aENzkα?]Op[TXo/̖([+@W$tZ[0W+f  -շټ2 Þj ֻ';|m'Γ60\&Is-OyO(PTS5^ )FB$v Oq|&;VOHp9+LsQ<ʿl <Qsr=4^ʹ'Guv~+7>(~P&x._clEXMjL'T$S,!d<BZ -ZDBt&Hږ%0LE#hjM1 w>WtO~t3 ϯ ҆p3B_O\s=gK3uJJFQD<,7qL@;Ue:B0).@=U1@OJ1?+eendstream -endobj -1258 0 obj << -/Type /Page -/Contents 1259 0 R -/Resources 1257 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1265 0 R -/Annots [ 1261 0 R 1262 0 R 1263 0 R ] ->> endobj -1261 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [299.915 624.52 309.38 637.041] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.15) >> ->> endobj -1262 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [211.496 335.291 223.441 344.257] -/Subtype /Link -/A << /S /GoTo /D (part.3) >> ->> endobj -1263 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [346.538 309.403 368.456 320.347] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.6) >> ->> endobj -1260 0 obj << -/D [1258 0 R /XYZ 125.858 740.998 null] ->> endobj -326 0 obj << -/D [1258 0 R /XYZ 125.858 716.092 null] ->> endobj -330 0 obj << -/D [1258 0 R /XYZ 125.858 296.001 null] ->> endobj -1264 0 obj << -/D [1258 0 R /XYZ 140.204 148.719 null] ->> endobj -1257 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1268 0 obj << -/Length 3119 -/Filter /FlateDecode ->> -stream -xZm۸_8p23")RRq8 l=pY-bkBmgM3!EfC +R93>*J*# -S\Y*ʲZ힥Wxg,e4g/^gWwgݮMdX4M?_yfT{7q;2~+xwⵎZ<+A<\8m90|T+?\+=UjT[Jث:c!Ӥ>"`BX2} 4Y i7ttP @;)g*K!KͺozJ [<:Ǿ^Ó*uk켯X}u^ћ}5 evհU(Rrn`\^$y48pk ,/>Ev3PԤT PƲ @lùݲ,Mw8dgH5)FZumP&DAjRZ틺+l UΤªn m?>Pq^ B -N錿LJP#qxiF(ZV -˟oR y=U{BhYx=ѹ%r=9f"S2L"<~Q:ڵ7gB)@ߣqgKxaSJUƕS!a^̩Ry~Mw&B^)ZWE6R /!/MEjBFD{+~#$dq=A$g K<[Z; NL-(Mq*B)4!T/hp9?-q Øۤ$ov'z426r G1ǰ/@W&нKs(~-.q -88s"c;̩чm#{R <u͒2Ι/i -؋n*X>GQ' GTqjCۍ%SN+̦k -tժ@6-tpR7*.X3L&,!g&&,B3U%A#%ą!'}5uQ0c/3DіM~_qA9 @СxIPM@GeX$X&,+R0Q1^(Ly_ ItDD֐x(COcCmg0!@yܲ[m1_295BXx^7>Ʋ4J|3KZ_W f0_ ñ?T62U(L}C=^$Ԏa!51uM֘mMIpjh8]rNQ(C(RR-2߰G|3S]Q>e6l<Á?>|âoBDgKLԴBRn0 -嘞i`uyv奆*ԧ;=lq¦;xYdK=91fwr0Li&W60ΗX`.:Z vxmy>;sHVtEŪ M(W%/ $/3Ex)Ux;2mh.0'by\$,szxoD.FD ^Π)'kzUa-3\׍_i&~/xc\ - %b`ptW$m΅*T_)Æ_Ke4JE Q^/܃Ot~G!mCմW}cF8GJ F4{bYlU+}:W * -AsۺGIe\Ƌ;GZ/( M`2UsoOT=7;u+qI6M^'Kz̓]ٕu)k/UA~ʘᖢe*3َ(qAefDYV1G|ۛ 'Fd& 'h̓+y?rLn -/ -DNT#8S 00:jL܎QmlH64pзiFbRwDp]ﻦt _gtC|׶4+8 uBowEeg օKvyu)36 xr)KK}\D1I{}tR}}$v89w4M8{IHH^"ӳҙ+G/ uendstream -endobj -1267 0 obj << -/Type /Page -/Contents 1268 0 R -/Resources 1266 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1265 0 R ->> endobj -1269 0 obj << -/D [1267 0 R /XYZ 125.858 740.998 null] ->> endobj -334 0 obj << -/D [1267 0 R /XYZ 125.858 716.092 null] ->> endobj -338 0 obj << -/D [1267 0 R /XYZ 125.858 431.718 null] ->> endobj -342 0 obj << -/D [1267 0 R /XYZ 125.858 325.516 null] ->> endobj -346 0 obj << -/D [1267 0 R /XYZ 125.858 296.51 null] ->> endobj -350 0 obj << -/D [1267 0 R /XYZ 125.858 276.324 null] ->> endobj -354 0 obj << -/D [1267 0 R /XYZ 125.858 195.529 null] ->> endobj -1266 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R /F7 1071 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1272 0 obj << -/Length 2724 -/Filter /FlateDecode ->> -stream -xڭYݏ۸_GX3HQlb.h(^d[h%Wow3upX`I!9/Z+F"Uj&X`oo$l#zGRz<=f+ Xݧ6_+}<ƒ/4nï|o?*o3u -mLo>l.&tasyR8> -zA:5̟JN. nbǦ~^]?婣^u'5jEs*!Z b%S5>|WZBsqWj)2^ Uk rd@kW]5]#G5L^R_ț7 HA{#9뱪[Ϥ`%zI(TnIy`B6h>j^б(u9] ܂CLQnYUYǙ\`JbgCyC9ԻdzLw(E1lMQrbO4Ob vзT(:2wܢFg'bӓ'0lf%6N`saq@.}ĀiZL.G A:б˾ H G -}^/-Р@e -(AZߣ  .M(.\N.'+'ࠠssY-q1䐻|Q/Mt6(,8/ZzU47∵[Q &@ R,*1 ;څ,&EՏT1z(u \Xez2 ˨^^W%WgNbZbz8W` 7g83ƧLMq:wBl+Ȗ Szo굶],\ 3` a+$]uZ=ȁzPBn'AzHJzԴ@* ->2cV5=zPb# ^}DWPh5wBO[…tɻ#&QFb$&^J/dDm5lׂ @ :РPk{A(3j #S'܁W|G9B͇OE@9|3rRE:Z=k:9NPe4DDS&pHm`{ W8"^-!{:nxT/lw}P2^UF_,A=$mx9}^ds7?oˑ@OLendstream -endobj -1271 0 obj << -/Type /Page -/Contents 1272 0 R -/Resources 1270 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1265 0 R ->> endobj -1273 0 obj << -/D [1271 0 R /XYZ 125.858 740.998 null] ->> endobj -358 0 obj << -/D [1271 0 R /XYZ 125.858 677.752 null] ->> endobj -362 0 obj << -/D [1271 0 R /XYZ 125.858 596.987 null] ->> endobj -366 0 obj << -/D [1271 0 R /XYZ 125.858 540.132 null] ->> endobj -370 0 obj << -/D [1271 0 R /XYZ 125.858 473.364 null] ->> endobj -374 0 obj << -/D [1271 0 R /XYZ 125.858 378.621 null] ->> endobj -378 0 obj << -/D [1271 0 R /XYZ 125.858 236.068 null] ->> endobj -1270 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F43 512 0 R /F34 502 0 R /F14 1060 0 R /F8 1057 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1276 0 obj << -/Length 3151 -/Filter /FlateDecode ->> -stream -xڭZm6bE>Ԍz@65p ~\[,ޯ)S/!@̗ѐ>|8\~?~ͅfήS<Ϯǫz]_q'2@ՋYLf[՚qݽ}OPy۟ͭk\Wrۻ_|',U9LIcz$䪼lU@X\q¸p/aΝy8WXQ+#5?LMeCK2jjCM]_m]ٗMM"}CERƝ6Ճ˕_rLl7mMPT|N}x(:ke =UHJ':N})ˡNr"gBrf3@qx͆ -2XIo= #BaE]UJGEEƋelNe`Z3V]v }bgoV\GSACRΤۈ~9Mw 5hs'nN -ł$X:zsYؔ1Kmw+:G$ SYoMe'WԽk=CPjT~@{0tBHuT_'!8̡ɮa 0 $ZLs{. }-F/:vzn3Ov1℩K0o:ă0ZߤsJmlfNef[TLԎO4߿c[+xYen=E.,Lm039jeLki @&TopRg@ 粽@P 闌vyQn T=xLd?J.ݖaILuFj9o{#;/D9m-n ";"tR_ƥv Zc,iU7Osb3vbΆ=p -rA8hrX@ٟ-Z%ɘ`j G`1@=|v\f{s>o8K`<< 䘣,*`v1ltps|CYB]mp'0v8Ybϰ:<%À8 _Vȳgbom7' ; !X-S3.Z~2 -0_t ^fr <c[mֈ`iw"E_:TH}ÓD@zY*"a_U*ağg^ 5w9ϔYc5pl*'I@-;S=9t\^@DxTբ8DH.(%٦u|:אn9S*`Xq%Xm2Y&L]e㾷>'L54f7@RR@3R6X&ptVҐ@iBFЙ#rFC]1x>ۧΜL%쑪 -\\+$g|3}fJ.z"608A|_"aP\/ҺD̲uYBI -БwvIA.,/ie ({I=hS^ -aV Yki>:1X*G:h9H>Nէ'ӱ66g7{s{yYRp/D: h\p4a5`2s>#u =XWgS'G1Dh8ܐ #w"YT#s.)69TH -Nm>~q.6,,k(> ܸb> 铤!ĵFw-聢=qkCrp* Ja -{ c['PUU*UG7>*lgt/']a^k"V.Ni^k3ȥ9;fvTqB* ޾CDOuQ͆O2!O3'3tNhb5e.|){`ꭡѾxB۽3s: -qk&Q|GM/E\k}v|HSӉe= dbnn<Os)B_l? ӥiL;Lp oQ<Zp{z0+ڝS5t/:|~/#uٔ礰<^ѨqGeC3uipMID,wSNbԗ=\=wu{j+fZ|jXP55YT,yR>X}!K$r0NA`Ң}ٍ\y3 -0JU96lO-v:$&'=I‘sf/R'3Q̤GeݕqTOw`wN@#6wҴC.cþwɔc-Aiendstream -endobj -1275 0 obj << -/Type /Page -/Contents 1276 0 R -/Resources 1274 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1265 0 R ->> endobj -1277 0 obj << -/D [1275 0 R /XYZ 125.858 740.998 null] ->> endobj -382 0 obj << -/D [1275 0 R /XYZ 125.858 554.921 null] ->> endobj -386 0 obj << -/D [1275 0 R /XYZ 125.858 509.716 null] ->> endobj -390 0 obj << -/D [1275 0 R /XYZ 125.858 488.767 null] ->> endobj -394 0 obj << -/D [1275 0 R /XYZ 125.858 396.017 null] ->> endobj -398 0 obj << -/D [1275 0 R /XYZ 125.858 207.465 null] ->> endobj -1274 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F43 512 0 R /F47 642 0 R /F11 792 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1280 0 obj << -/Length 2474 -/Filter /FlateDecode ->> -stream -xZKoFW<~ٻKʮ,q %G뷪rH1rw4Qd,b\TF nYgcz}!&HŒQJ?Xr9=]x]\:»~=eBPfq3Y&zxF^1K)4Mƪr0Q8n:[ݹvwY.S<͚5Wu.ڢv<>Zes.Q*R0*ARSݛ)IHjBDn6n(Ƃm*_0FJ+WC)<$s$PQ08ZiNgJyE5r;dRwwĐ?}}ěמG`>ƾ,cZ -j]- Ul|tHkmшӝU6Gu֬'BTP&am[0Rx!!c HII@ zQ0 JOe5LÜg -<0o w*8Ϫb_fC> g4Ot=. n3-# S(SE} -a2̈́7oi)ŷ|M6o6o\ۥ!%qӭuB6EP *9sFI4&*`y gpF}=3`xr0*a*{;+DH*vyQvv -18`()D69z2Xc>XF\'3C - -> 0!}ar=ϳps{ }xgQ(=G^g)aa~"9hfO;Yr>龺?^ԼU&R,g0ˋ7K8ɁYNv_zL,sB8oWxwʭ/fNɽΞz>+x "x|YȝLN#dI-d:竰'ililIz16Z山oU46Yg7y(ӄHĝa؆.[/40 w<[]:!T j$[[$7; -&e:YٹGwȤN!xzE`}hf;nC zrW^kn\uiljEQ=3۷j$FktXEXJ*G_Z>,PXWÖuʒc[NXWCZ(|Ǫ b.]Qו'_qM 3 э6,s@p4K:8C7h VqppBBP̆(>@ƳAA@uuZgU8詺[r=6o@GJk}ŗQ|wTES"*\/hp&1p@;#z }mDԓ4Qr: ɸʹ4)?"pu y H`u6?-.뛥OSFNE$UupJzIJaB.}U;t aZ -02}`—πKm? yi`@2_Y" - K<`EQb2z#Twj$tBb|uo( 0Nq9)(<|ODR*!ƹӞ%Nݺ;8_՞"hnoܳݲh9kOuoCu>jB?*Ht| KvGʞ@fD Ae]\1%wm!c j`] !?'`Jlֺ7ߒg^ IK;;LC!ьs~/} endstream -endobj -1279 0 obj << -/Type /Page -/Contents 1280 0 R -/Resources 1278 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1265 0 R -/Annots [ 1282 0 R ] ->> endobj -1282 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [153.8 655.155 165.755 666.099] -/Subtype /Link -/A << /S /GoTo /D (figure.31) >> ->> endobj -1281 0 obj << -/D [1279 0 R /XYZ 125.858 740.998 null] ->> endobj -718 0 obj << -/D [1279 0 R /XYZ 214.576 639.394 null] ->> endobj -402 0 obj << -/D [1279 0 R /XYZ 125.858 346.901 null] ->> endobj -406 0 obj << -/D [1279 0 R /XYZ 125.858 328.218 null] ->> endobj -1278 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F43 512 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1285 0 obj << -/Length 2162 -/Filter /FlateDecode ->> -stream -xXYo~_@^`+^:A&@@Lh:z[*p) yW%w)ɝTV&eYt[I&G臻w߿jW2ӻ|tW=?ǻYJaMuB;i6 O3!Ut# ^4EO"#;^QvDsV}gEh)t7{iTK럈sԥʲ FЖ䧾&0 8ǿ]JsaϩM/EheQi|E&-Ij>G?c%éq~4|$`@G7UM0<@5@DirwmLh~xg&G8:ξ`[KYCQ}mcD%o^lER1po0 8ct۸G>2j⊛w 43AS{mHeطpP¯?jC?MpPGB|K%lfupKmi@XrLJIܡ@&_0m}fa#Lst&kb7Fae? -?yjh( --\?&(߱?z}>%V7E|?bdA $qr66ùC<+q>dD3ьnbF~8ښHS gylF+X`_GTVE\b4Ng@)Д8`hp04wJ-= -`bJDgp(=t6Ri;rnÃ?w0B|p4%mV -R(sae!?@ &VA_ -aeD*3q:E? לpX(4߯5]e -Y/ -Z'^/MMliEa=Ū-ųu7`*}(> =?0Sn% -OP=ڞV> ]n6=#-9#4p\uD&,~wȔ<:ࣵ=hrt'=omlFpm6M)-^> endobj -1286 0 obj << -/D [1284 0 R /XYZ 125.858 740.998 null] ->> endobj -410 0 obj << -/D [1284 0 R /XYZ 125.858 716.092 null] ->> endobj -414 0 obj << -/D [1284 0 R /XYZ 125.858 663.568 null] ->> endobj -418 0 obj << -/D [1284 0 R /XYZ 125.858 371.743 null] ->> endobj -1287 0 obj << -/D [1284 0 R /XYZ 125.858 305.995 null] ->> endobj -1288 0 obj << -/D [1284 0 R /XYZ 125.858 236.879 null] ->> endobj -1289 0 obj << -/D [1284 0 R /XYZ 125.858 167.763 null] ->> endobj -1283 0 obj << -/Font << /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1292 0 obj << -/Length 1971 -/Filter /FlateDecode ->> -stream -xXK6QF#-)cMyqC,ӶYr3SOk3$̓+r%KdKd_$ǝ0ݿUꥑZm7mv)׮B8סp|cϛ_7߿VJ)/R7 -96Aza>)幕S-)"O>wZ -';藇^ xiZ~8Q@g-CGW.@:"f]T瞗ᗼwW떶TkԼ}G1WKs/֮'t<*cQ4js+/QHzipes5=y]uYQ"p}KgʭB@v,J4nݺrÎ -껽zӗ[vRXŤFm}4VT;L+C]?rDS=tO伯ELf-PFcao%m_vq. OjFF:1I`h}s}.Ć3þޛK u u,?~ɢZTnݸz6, Gd-޺b:c؏$dGyW5`"}/  ; .=gDObD~DY)D-l`PEԘEbQNU3:)dHijB$X[gڄ4Ґ20R"!T,/DB 5ҙ{\} E:Ȭ -N(x0bMJ"iXU8Lcp/D"|͌7et{2@+Y&pxw[Z~̚,Gَ؋ʥ|u9If&'41m/&8wS:Lg^ʲF=^ -dglkGpf15>arn/8= r8"/W  f)?J,Wf-l9ӳ`d4 ; dՉ5_AitmU V}hB?f[J~xI.Ԃ!L~bA)٤9rPG 6Y)^:%P?+<wJO%'ɿYy16 - Zvbq{[ʬ߷S,DL*hӨaeAM<<ÉT_C\M GjVntϴ@DW;WP8c-m -ہO-§%lTe1𪛂ë~g>QW$KF BӱIn5Kx[ڡON)n┴]<` ̵•~ڳ΋1"1A{"dHA" /ù.4 $gjom>c}W`S\̶n Da5%WhGs`hxo< $pǓ#!q l/cTHmwŞOH{MlL -1L",MhL78HSk(&`-ʎdhX@W'vGo SD6W̲& -~cb&!wG)J|x0'rxJ[ѳj_Zߟ%VQ\dVFA|C=/fQ!hv6C$(x]y -Mqq^!XR~(M0zkTzAxSGV4/y/g= 7$h[ᓜij7T~]& -5}>vl -) -q3޵{Y ~Vq=S#7 K-ȹ6߱ۏA -F't>Sρ5q7uKsz([tMRէ3cgq\~LIϺ.눟ӏq*ʋߠTؤ _Ӂendstream -endobj -1291 0 obj << -/Type /Page -/Contents 1292 0 R -/Resources 1290 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1302 0 R -/Annots [ 1295 0 R ] ->> endobj -1295 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.414 636.475 273.842 647.444] -/Subtype /Link -/A << /S /GoTo /D (subsection.12.5) >> ->> endobj -1293 0 obj << -/D [1291 0 R /XYZ 125.858 740.998 null] ->> endobj -1294 0 obj << -/D [1291 0 R /XYZ 125.858 697.377 null] ->> endobj -1296 0 obj << -/D [1291 0 R /XYZ 125.858 604.351 null] ->> endobj -1297 0 obj << -/D [1291 0 R /XYZ 125.858 537.078 null] ->> endobj -1298 0 obj << -/D [1291 0 R /XYZ 125.858 467.962 null] ->> endobj -1299 0 obj << -/D [1291 0 R /XYZ 125.858 422.757 null] ->> endobj -1300 0 obj << -/D [1291 0 R /XYZ 125.858 365.596 null] ->> endobj -422 0 obj << -/D [1291 0 R /XYZ 125.858 325.143 null] ->> endobj -1301 0 obj << -/D [1291 0 R /XYZ 125.858 175.709 null] ->> endobj -1290 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1305 0 obj << -/Length 2270 -/Filter /FlateDecode ->> -stream -xڭXKs8WhWz!ս2ƒzl& @=lw[I>|܆'RE"mbBe鶨6~H L0issg6YOW=~Idϟn}>Po?><|olHLAͧQg"e+*s~pH9Lk ,Q)WZep6>1o˝mi=5έ=E[~n6]k^Ӊʺ8 iL+}W1 -eqd嚶^ nH)(rM}$s0VF/?rgSضsӒS`ŊOtpW7UYòuthЪi1߫ $~r7#om};@H+up'tjt®"a/{lC5Ɖ{q'q]Dkpif[zAE'N '>9Hn9}#$b'4}MSOygoSk^6Nj7Ǿf׀5_\nT9n^J{/xsw` 0Tx<+=-;¿cX|zPw <:R mbvy`2lc6j(?g&a,/d$%J2_FDa(\+q -.=/A6U7ў+ -D$ڧǏתDHn@"e -cI/$mB`zBp3Ca{ -!4wLm<Ɉ0dBqnǀbLcNx{J`L {X'u\|̿~~DlZD2[2Ldhž(L<7u}ci]2V4ڳ%Vvrv<ťg)o6S'zyCSB3DV d,(Y/P:c%K" Z@vf=+b`γed;SJu&`m)b Mݼ -BXD1pRۿ5/I2 TF{,adn5B5Bp[;FzeK3\Y<.TcZF4yO<14<>)daZ+UސYל#+r_41 @JHK1ui*ZwR{oE*#1/XTL#qI -Liȝc[G M V (f3@c@:DHµ%;%WV;r?w"Kpk`{O_4 וPoC:eаX:pfY.*g&\F*̵x%|V#*en &:KDej#u"L> endobj -1311 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [174.116 429.517 193.544 440.072] -/Subtype /Link -/A << /S /GoTo /D (subsection.12.2) >> ->> endobj -1312 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [420.706 373.238 430.171 385.758] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.16) >> ->> endobj -1313 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [298.722 349.327 310.677 360.271] -/Subtype /Link -/A << /S /GoTo /D (figure.32) >> ->> endobj -1314 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [403.224 349.327 410.198 360.271] -/Subtype /Link -/A << /S /GoTo /D (figure.9) >> ->> endobj -1315 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [440.931 349.327 446.241 360.271] -/Subtype /Link -/A << /S /GoTo /D (part.1) >> ->> endobj -1306 0 obj << -/D [1304 0 R /XYZ 125.858 740.998 null] ->> endobj -1307 0 obj << -/D [1304 0 R /XYZ 125.858 697.377 null] ->> endobj -1308 0 obj << -/D [1304 0 R /XYZ 125.858 628.261 null] ->> endobj -1309 0 obj << -/D [1304 0 R /XYZ 125.858 547.19 null] ->> endobj -1310 0 obj << -/D [1304 0 R /XYZ 125.858 491.873 null] ->> endobj -426 0 obj << -/D [1304 0 R /XYZ 125.858 414.822 null] ->> endobj -719 0 obj << -/D [1304 0 R /XYZ 235.214 333.567 null] ->> endobj -1316 0 obj << -/D [1304 0 R /XYZ 140.204 151.296 null] ->> endobj -1303 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F47 642 0 R /F34 502 0 R >> -/XObject << /Im2 852 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1319 0 obj << -/Length 2965 -/Filter /FlateDecode ->> -stream -xڭێۺ}o1#OM[4[ES Z^ %G~}FYhApH>UzM(]%a,]`uKﯴl4 ]6 4%J˿cHO嘞O1I~($ ,1 D fwgٔ4ʼVs h.`>KP>գSTb)H=u0E,s@4X[z!(qփti& Z9'nAh "\fs|԰y]1| Ԕ4Dsmjuc -CϙaZ U?^ 뢂vg"xq8zjy(ϹqL"1>c,W&e)t0Ya|zP꒡ןS ݘb16G V0pdVHi6 !U͓y / ->/éiwLn~lm*ɲҁV>G޺PPw Rtxa$K*!}- JqQs>;*9 sCo|l ,J̝O}%<y֤0% |֥D֑%S_$Z^B~>A9u$H- ޢ -{t}%WcZ,"anxA[UnLU .|.h/u=qI>+ݴU]}4k_l'y]8G-Xk-.hଣYSK]C% AAE`lO@C m2 *s_(~c0YoB wq@<9_f7mYXT^/}4XT7` 8N?o*iMI[ܟFQalrb2?> endobj -1321 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [236.677 702.976 248.633 713.92] -/Subtype /Link -/A << /S /GoTo /D (figure.33) >> ->> endobj -1322 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [176.511 691.021 188.466 701.964] -/Subtype /Link -/A << /S /GoTo /D (figure.10) >> ->> endobj -1323 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [219.529 691.021 224.839 701.964] -/Subtype /Link -/A << /S /GoTo /D (part.1) >> ->> endobj -1320 0 obj << -/D [1318 0 R /XYZ 125.858 740.998 null] ->> endobj -720 0 obj << -/D [1318 0 R /XYZ 240.748 675.26 null] ->> endobj -430 0 obj << -/D [1318 0 R /XYZ 125.858 416.178 null] ->> endobj -1317 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F43 512 0 R /F8 1057 0 R /F11 792 0 R >> -/XObject << /Im3 853 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1326 0 obj << -/Length 3174 -/Filter /FlateDecode ->> -stream -xڵ]o~]HISr..n3Zs}g8CZɛ,~=70SMDag7MtS߽$pkoѷoz7yky_z}ڈx(6}w_wmXA7?~K2LFonFdJWukdH"qOX:);3= }CI,fG)UU]SG] Uaxxh/Aè-oF2"̕EqDv%EI2[p8҄χFqhm5y|xmǔ Hy"L/ tlQ[6 ܜn0U] /juGip יZA/OeQ! -f,gwZMCg8e tO] -C,re$E?q %,Npd 2d<(89JF -[k$ڼH7uiC -oVoI.Es9I2hi4M< f0YTN{q2оǤV}8\nQStm{sq=ٙ*{ҟ ,+ZB*H=i8BLi`]]n>6gD[YhMO,$d`OGT3/U{d+:_& j a;j*KD^5wZef"y;L䖊8@*@kA/)ͷ!Rմgp,9o& QKz8wnpvƑmYstKwq~"۠[k~DC!H,)sH\~M^hhӏL -K$,T9ĹSGEF5@1>=}zAڏاcy]4wiE`fn 42',T͎}%CSPuu)s˃֘JgEu(:5}R,1s˂Zc_Z#k -Om,;M*)C1;^37R"srq57+ʁ͍3@eP $mw#s%GK2Wo\=3[(/Z| -8u_ \cByUn5G:rsOtrYpl FeǛGY՞\03Q(#PuՔ;8е5wF䗹D" tvÊ-xEHcdzEۤK`Qme*^Un!2[mQOܗ  R/ ];ZF_rFhOM|suGPbO;~N kS_RB*BM\eB*Je^f @@Y -B@Hp{.$AEz8mhS"uz۪6Иe eό ljmX>kMp&Q6ISX)"2&Ua`3PA4IV$aIsPϺe$2RЮlꆥ@5'[L,E,8(گ<^eo$7Xe;4!cU>[XX~I -O>WJ8mZ)P+.{ml)\cޢ""ur?U{u;v_yDx,┹clihiiؾPJ #;JLSLƈCN^EEm,"uDMשhuKVW )<ͷ Wte-sWRpҹjӮC]£); r?SYΒ6ݹY DcbLwjHSk)]c6.q<8o2`CF:7428H.520wx"c0j'9O]D(u - `f,YUÁ[Do3QH ?yji XrVLW )~ -eſ P?K0&8?endstream -endobj -1325 0 obj << -/Type /Page -/Contents 1326 0 R -/Resources 1324 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1302 0 R -/Annots [ 1328 0 R ] ->> endobj -1328 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [431.48 414.682 443.436 425.626] -/Subtype /Link -/A << /S /GoTo /D (figure.32) >> ->> endobj -1327 0 obj << -/D [1325 0 R /XYZ 125.858 740.998 null] ->> endobj -434 0 obj << -/D [1325 0 R /XYZ 125.858 593.76 null] ->> endobj -1324 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R /F56 730 0 R /F11 792 0 R /F52 1119 0 R /F51 1331 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1334 0 obj << -/Length 3685 -/Filter /FlateDecode ->> -stream -xڥَ}b^l6^g^nIԈD<<3<$j|64Y m+Z|7wouD0/km,1no& gq.ko(lXŁ6l8bSmsч+˼n.wQi??I]O&Mʭj[3:PPڽ,'kW~Gk$:b\ebFLGxYD>)cC.: /0&vDx+ cC΂01W:ıkZmRrp2L@/VePW讜AC~2x>g_pȤ&M;YzqlZ- 6hݎ5WA~ᱭث#!"Tk K -W;w(<.]-xP͢^f:BV;\{N%ȎPDEƑ&} O-eڱK ,S)l\[TA8':abcvt=@~rh[*jق]p\UU? -ji^j$x{e﷾N3 Lr%dwk e"x28q+CáBy;o,6<]56l"%&O{V*"<uқQkX"pզE_ [ m`uzpu}۹XF{ɱ؀\.DXExSp[m'\ or~t[0&3'ב Lf^q3ԟa?y;csVb 艂F ܳO lv&׼t\3=YCfQ7ҐkaŒ~& tL"AG{+ )nVi9"EB"UA+"5&@Rg74ʃ~rȂ}bR &s*|(`e -k=:NSiN⍫3|(E;q._qr25۲!wGۜXϠ9 J%< CE# E#ҙ -Kh<5׳.G1Z3w^V $;kR -f|RJ䂁TU&m7ww3  e2d\XjUWd< - ZMQK ?"ɉ`4fV -_0c$:qpId{L1UlHG5|O6o~Rjm(ʼn}+C8g_u3}gEM^8vPu -"$Ų#xxT4g 1>Au0 Q#.CLڇm~N 0lS`y' -R-Ǒ]\h{v'VְM4aQY!õgh8bz@Z<[i6AyiJ[ FKdC~  m -tqdq;[Gv -[ /Ug}9"ȏ3Q !_p%B~ԵynN b/=4^f )5vD:g$S ,%4v'bubYzVSzi3r}HM zTptuI0S rBafJ]806819rN@垓~:I`pIJ^p]4 2[ڴX6=YґmbxGJJƅ^f 4*+Df~ {Qp+iH;wRΖJ60jhaF"=(Qc5S72^*9aWj;.h%/ zy-ef%P8aff`sޛ6ȼbg&C|{#Y@lM ,H F`޹/28rTϣ<Y+q]wUWrZbGgo:vP!TSNSŶ˂2[W'I/iY٫w-ZT4Lћ_Rb0.fzoyԧ.0M\͚ J,rjZK6]j|HR3kBԨU7(Hn.޷M Vْʼn(1%y -;Ed7^uѳ# G 鮪"H-ʤ|B)%#qGc"7fGJPA/&?Y]?dBLI(^ -e~Y}&If1ho qb厱#jW烏]g}F<7<&PܗESj{ht3TC3ҟÐ-SoJpԕ`>52t(+DΆt^l|,̂£axdPеc:wŰFy?9 -[31$CuMIR~?hs0E?-$l" MOοS8%s_f[(I2~Guw7n` >n7T0懛7M }?&qgL/ń+ Rm̡χLG' {lҬA'̛ܕ@PEbU1]lCP%Oɟ ǻTI[}b'׺uA wBRS+Iը@ȅ~&8<|=>PP !fPls'WrVzKI C=WPuڧx_/3[y|18 ,uY%55 ˄檚sr#V;ugնh6]mĴ:֋S4ɼȥ$ҋoOC6(c#'70$z O覼T5R} L;4zx#A T8! hGendstream -endobj -1333 0 obj << -/Type /Page -/Contents 1334 0 R -/Resources 1332 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1302 0 R -/Annots [ 1336 0 R 1338 0 R 1339 0 R ] ->> endobj -1336 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 684.296 468.075 696.817] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.17) >> ->> endobj -1338 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [151.244 435.998 163.199 446.967] -/Subtype /Link -/A << /S /GoTo /D (figure.33) >> ->> endobj -1339 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [166.924 244.715 176.388 257.236] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.18) >> ->> endobj -1335 0 obj << -/D [1333 0 R /XYZ 125.858 740.998 null] ->> endobj -438 0 obj << -/D [1333 0 R /XYZ 125.858 716.092 null] ->> endobj -1337 0 obj << -/D [1333 0 R /XYZ 125.858 472.989 null] ->> endobj -1340 0 obj << -/D [1333 0 R /XYZ 140.204 167.912 null] ->> endobj -1341 0 obj << -/D [1333 0 R /XYZ 140.204 139.255 null] ->> endobj -1332 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F8 1057 0 R /F11 792 0 R /F56 730 0 R /F14 1060 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1344 0 obj << -/Length 3246 -/Filter /FlateDecode ->> -stream -xڍZKsFWHm0fAl{pR[[= DaM*~Eqy4fzzuM8I02S^7Vi^~ٛ,wswco& ͗_߽??}o|{7Y9QGWf$ $ʯ\ ،ˋiU}.t7Prc_ߚp=^󃴚zC )/ n.1q"?MUJOecn 8&i'gͦ=7C{,;<#tJο]~VGasQ9?9U Of''`Kn勽!*gȕl)Zr:RȥF-`P1eIҡJk2I;B&C/k} -`OT1M;.@TC5-3*dG7#4/ײ|9^7{W33j6jXHaT5=,ݼ}<Æsi -W}_!0H; *TPБKu1j ?5_~j+e@Ǐ^s(!g}1_zH>ŏНgbd9'u|^2l?gL3B|\MN^*f/gqLމa8b(s)f-$MUAX\-Hĩ@W!gHIJ,$ȁB)c\~/B<rX#TC^,d4}{ |''(,vc]?1>VTE9Bp @> endobj -1345 0 obj << -/D [1343 0 R /XYZ 125.858 740.998 null] ->> endobj -442 0 obj << -/D [1343 0 R /XYZ 125.858 421.694 null] ->> endobj -1342 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1348 0 obj << -/Length 3482 -/Filter /FlateDecode ->> -stream -x˒6>_I`h"E$>L\@'3LHìTs朝>77",#̲7/h9s%j~=B~\Rp~~b) ܿ~w_/ߨKˆ uqn3:q$nrf_ui7O -0r<X3kBd=.3K]`u #%҃^0gL]- y%FNzI-ۦح_k;GmNMBwcbph:jZ=Ͷh55E -B́,fjM{1Z͔2sR+/Z ,AAh-5E^._6Д ͅ5&Z)pnOo]5)SVEVPXq1f5d<΁AY9 dg>[ܷ7)h0FFp׉,MQ;w​Fz#,#ϱ%P4)m8Yo:J~"R&)$1Z8鄼5EN1-NPLK,KݐOް6?eřё,-Dc?A~³[;'[ /yH8'S"0t]s -ƥzФq8ˑ|M!RLA}p% hXУ7 LZ'A~.ߓh` Uz:OoMZ*ux(SಷsK -|Mۧۓ!EI-\Pn< -]q碄-ɮaPM0l0ytd -.=̧ Tr;y6f9UaLU_Yẗdzu QBf=t*Lӄ5qj@5QktN9k-:v|nj1{lLM8Dfh$UC@c촉' -c\,0zFi߾ZapR:9ʫT>LeS')q&!Z_UM硙QAOPh, Oqn 0H5mRzƪ`{<ﯹmOwΉ^CgvX.T0nդ8"$sDoa#iOʻQB|}9 _r/L_(II=;IX*};IqK/B6Wy?<{>$&JB+Ȫݴr?1mO?EvolPst}E $) $X}4߀=\{<[RA.&Q:.GeR"x kQ; Q6.d#zjY炟z.p) Q%!nx^t],߆'wM?}W.(H/rӲ}F׫ O=x'^b1ya-h5(e4!ۯ XV}["޽V4Md$He;aPyր6ԒK`a[l50q_5My |?Ū[uO6NEk`hRnJ6[HzpX8@W}! Ϗ -|CW K\I',=6bJm|6`2eCw5{P#@4~hBފajSR0=5#8i^4—lk *jb?IǦ- uw L}j ذW%d_*Tv U:%fqP5G?+ ״tSMU\ex T谻Dy8 ) -b&Ff7&Xm}AwmxI :7mr;]9Vm90ZD2ޡkŃVCb} -x7"h̢TMojwĈ:釀w':\$TCh~}u@^mUřvDWnvU?,n(;3Cw1@ erqtb;R3KɎm_ < [+zmM4v%݋u+2*) g>[GAqq98?륽 άst"%m Ap=湖\0{EITtiiE8h"bh>c|^AC0]MZ4j'fGEՉXRׁ4ZCڨ^w._np3KG|%s9Aۅ+pEv!ံ 2U9\| -0&2&ӫ͟P;O3hǰЅ%-X}IM\A7Lxe . )0gGt8(Jco"gpЉ41o6XwFCRHaL}.7#y>ᑟe?aΚ-TDܾcD5B])eI\JMSdu%Y64e\GteP> endobj -1350 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [300.251 702.976 309.716 715.497] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.19) >> ->> endobj -1351 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [425.518 667.11 437.473 678.054] -/Subtype /Link -/A << /S /GoTo /D (figure.34) >> ->> endobj -1349 0 obj << -/D [1347 0 R /XYZ 125.858 740.998 null] ->> endobj -721 0 obj << -/D [1347 0 R /XYZ 254.516 651.325 null] ->> endobj -446 0 obj << -/D [1347 0 R /XYZ 125.858 370.787 null] ->> endobj -1352 0 obj << -/D [1347 0 R /XYZ 140.204 140.485 null] ->> endobj -1346 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F53 751 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1356 0 obj << -/Length 2880 -/Filter /FlateDecode ->> -stream -x]F}Q5af`-8ԕ=y@Ie{@xCj\'WR"U"IUvWx˝d ~|uVH^='v{R7}w=7*~{?~Z(H-qC/J`dQZ3VI!Ubm!c=WsB/-ɡ.oawL+KҬ[0`Bu;8NH#J"jjVuGbDǴaX'*Ce75DЍ" C71-wc]T2I8>.c2k^:RcN5ԏy=x n`\vpW:9\bt^J,6t='(r; -vPm -mK 5iO#Ps,BX2\d!V<3imBO7'ѽ# -Vua A4;UN7*zLy/T ̀ցdn I5Kh|@fzEAUja-aw+\PF.qE?T -CbhʍMMtgLM& sr!"oƽI5#@nA[څ#[6`e 7@ XwmvEM>G>Ǻ :dٹi -^ M7PQWT~m` =Yo8CP5-[dRl0w1+| ؼe*{]7\ <":T? ^t?_PMS[ĢU,2G'ښ==[IꚔ`Я7E-NT%9;,e\TmRv% CVK,~.H#D=XЁ;*v۱~u WDQ߁6ʧ K1qm4^ЪOY -Xn1{dwuIw$c;K%G4RMK(= ^w r.6ZdV.j`n`Y7)R`Z~fP-aVmu?5')5#cb"kDBt!W_Q<WQH6 >*4E&Ұ-DTLWùC2}p5͕iڀϸ3X!vO\3ƽ:3EdpcD d @~4{|qHm\!F z^C֒O n}%_(p?Y]C - X J0WNs׸W`@06?~S}!du -}yw W_!ar}Jb1WQ82B$0uP1́p׉ -(V ^6tb%$c7mYdUH_]6* jڵjBx| j <4iG~>KnΔ0~ aGL'܂0ςLGHDH5J`[(Է눩>@6Se -k -PYs0rId'&ZGidEI+"$yWnJP]L2B`,M9EɮI"C>VH,Y,"~pRH_'c/"iwc3zGO',"97Ad݇yjbO145Rg|y^,$}$y;>CMXW(O.beoUE gQG> K[iRî>#η c/pM[Y!dn,pphmCQC_^d~M򆲁DujIYAj/v"'—oޱ)8,]iЗ:#u68zF^82㳥Jdq =Paz-Ae;6~l^ù/$c6CQˇ/1m^Z\'訕ilgs< 4uO>m]1i14^^`C3}8*v&+7vV*v*|½>Sn9s(~~Y{-Ʌ |=ߥRpľÖ\=)Vۙ~b*Cjp1Z޸ڎtp 7-a۱Z&)n5BN$SjrvM,A}nxhf0{'Ior`m j,B3-l6RmO;#\tfcdI tnz p@[q#̢Xɕ) A)#z| w&N 5rFvm -33!yMmMHl{{ܬueL1.30ݔ[1|8ZnT< !Wl6su=R!^TvZicKC> =!¾O3t5cT8B~0xH"k΍)PFCim0to, N'.L1@ P@mI2q;&ئR^L-`"E/cY+INR;nAL1.E!{Vܚ3@z II]U~?m!8endstream -endobj -1355 0 obj << -/Type /Page -/Contents 1356 0 R -/Resources 1354 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1353 0 R -/Annots [ 1358 0 R 1359 0 R 1360 0 R ] ->> endobj -1358 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [258.786 443.848 270.741 454.816] -/Subtype /Link -/A << /S /GoTo /D (figure.35) >> ->> endobj -1359 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [374.971 198.956 386.926 209.9] -/Subtype /Link -/A << /S /GoTo /D (figure.36) >> ->> endobj -1360 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [153.365 187.001 160.339 197.945] -/Subtype /Link -/A << /S /GoTo /D (figure.6) >> ->> endobj -1357 0 obj << -/D [1355 0 R /XYZ 125.858 740.998 null] ->> endobj -450 0 obj << -/D [1355 0 R /XYZ 125.858 520.909 null] ->> endobj -722 0 obj << -/D [1355 0 R /XYZ 257.116 428.062 null] ->> endobj -454 0 obj << -/D [1355 0 R /XYZ 125.858 173.427 null] ->> endobj -1354 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R /F56 730 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1363 0 obj << -/Length 3405 -/Filter /FlateDecode ->> -stream -x[mjg_$JjC6 Kn~HTk˻j\}g!7sws!4=!g!bX 4NWIY_O_^ :@H2i=[ -v1_om~(QJ$,> -%u@XL*Y&bfIE%Zmu1"?pA_}Sع*V|ߕUAk4 thݻo6*Y"-IEP۩T`Yưh<ƕe2SYpf*W =5~ڃWW)XLdJIX?V9{g58h-+F>I֩CL$J1RXqKڠ/mƂuL9l,$Ljd)6 .>~\¤L($ޚ)1mהսmm$_Hׇ!jOwR -GkFqMg%h{olx]?ۢg"5D#w[> 8VMUIkZZ:mx@c984<( A2Sw,w}_$MW ge%Li=2N+1Y-_ta@a>5ADD*UjCT0EpN&lOKұ=ܒ⏳}C.:o(UD -Tq,rc<Mj!`x2`v Ӹ"&IIE@qCe:=1YQMn.A|"A?LDZ3v9;Qy9))Su2ASEh6Z쁄82'3D X d>vP7g>v{r8$1m~UzgR@p=ȋ˖=-?f46a58{8k]'şIb>?q2@9XϢoa2b{bW{h9 'q~27^ <2;A-?3?,SGZ֋Ks1 uKq2>;B-" jbi :¡d$$K4udA#!SJ<%4U0iG;Ƿ>̑8e2K?i #Cve4Zo(q0%= !R҆evf2wvʼneu]Cؖb}D<[}WXlW`1YĢXS -xW%Bex`soJ}o m:Z <m{hꍄd,gt$;#=АS޶;pؘTơj5^"tXj5AX-imTmyw,yM^uEvhGU%Kʳm{u0ȧ[[XD/,( cFWm~(]z8]ܺ(Ag]ao$IGXhmUopt)l]Qbؠ'ʎˡSWNJaGg,4٤`v2|%}".nVJ! nKED}ϑЍ+-O`LIsmeǯw -9wCI B+,xf-j"LH<)\ 3?KD) #S2`0tF3e9;E:2p)!EϜu4x'ቒL؞NǾ] -M0LF+/&AXҖmr`H.܅vu}bQ`?ACiycETKn~[/a4 qNЁEd!s@kлߗ|(wO,K^5I Ѷz㽈Ij:%R+J[]ca&PWYSGgWNIJSќf"UoYc0whKPIS(|z?>$~W:=cqQ oav_#ydeuQ =JOҮO|ơ[%B.ZK>Y hmZ"Gl,S:(iLWNy0|,pmX2˪niH?E%¢GZݘV VCw-5&Q~w']g"6jOⱨ:ĥ59Li 2gL fOP8@|*/sH[N92>&Nfyi'=B&;kdO0z33zҡ& 90ˌ>d10iil⍿vmt *ZIXY fRi;Qfb2 Od&'7E{>K\u\_ 8wػeDrD7l/`y<"A"!;v0-Z)*S)fD,"r)L<[3qO?~4~DZ xLjP1R1b=ݶ%0m}wɔRǼl6q/ Z`f/00VOendstream -endobj -1362 0 obj << -/Type /Page -/Contents 1363 0 R -/Resources 1361 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1353 0 R ->> endobj -1364 0 obj << -/D [1362 0 R /XYZ 125.858 740.998 null] ->> endobj -723 0 obj << -/D [1362 0 R /XYZ 253.096 711.29 null] ->> endobj -1365 0 obj << -/D [1362 0 R /XYZ 125.858 447.814 null] ->> endobj -1366 0 obj << -/D [1362 0 R /XYZ 125.858 290.035 null] ->> endobj -458 0 obj << -/D [1362 0 R /XYZ 125.858 164.769 null] ->> endobj -1361 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F43 512 0 R /F47 642 0 R /F14 1060 0 R /F8 1057 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1369 0 obj << -/Length 1830 -/Filter /FlateDecode ->> -stream -xڍXA6-$$4پ$Ωc٦9ь0ج烄4Ҍf4r,\,!^`ׇEB/ޮQ΀ť&38 ͆FDݹCعw*wVa-BbGe=ʼn1gx  ULz]`v8(R:t&(s׵%ԩ;N3tbk}=jpno=1<}x*ie'ª}ұRwR"zJmH+m)=)qJK)},]4SXH-w/bJeMp%EWfJ znpN>Y ᲧCL|7WK`m `r9ԛ[aelda3zrlXIY,ŀpѲ9IP,&ƟL/7\m`clW6=2/"-mO&HX\D65rs%0t)`W$hQqK|C[} Hf>XYuJfxfag+|,Js}FB򙗹gwy>6I泱6%xCɣ vj4Չ]ev"wq03 vT4,M4-dDl۞q}뤸rx߱p? -pU#`$S5`>79iny^[!2S"= $yZ`⨆Z KS _NpzDq|C/M( /tc`Ŋd{|*~yo X _g;$†Cgf.ۤp;زGA@-xwg7vij1.jX8Ls*jVkr_8Q{TV,۞j_7R*xY7V/Zhͼd[bBCRhm xb\SPuQBVWXC,f~Gm>sƯ@T|\PW ԫٿp?$#?endstream -endobj -1368 0 obj << -/Type /Page -/Contents 1369 0 R -/Resources 1367 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1353 0 R -/Annots [ 1371 0 R 1372 0 R 1373 0 R ] ->> endobj -1371 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [312.923 613.661 324.879 624.605] -/Subtype /Link -/A << /S /GoTo /D (figure.37) >> ->> endobj -1372 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [436.288 613.661 448.243 624.605] -/Subtype /Link -/A << /S /GoTo /D (figure.13) >> ->> endobj -1373 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [441.352 350.647 460.779 361.591] -/Subtype /Link -/A << /S /GoTo /D (subsection.12.5) >> ->> endobj -1370 0 obj << -/D [1368 0 R /XYZ 125.858 740.998 null] ->> endobj -724 0 obj << -/D [1368 0 R /XYZ 261.086 711.29 null] ->> endobj -1367 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F34 502 0 R >> -/XObject << /Im4 888 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1376 0 obj << -/Length 183 -/Filter /FlateDecode ->> -stream -x} -@ {p1w6N8H[A)c[m)*)}z}P\9-yGtѣ,Y `lx]tj_}>cqhy84V:&5nT[Ojһ% /Mmm ky.lBv?];LO[Hendstream -endobj -1375 0 obj << -/Type /Page -/Contents 1376 0 R -/Resources 1374 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1353 0 R ->> endobj -1377 0 obj << -/D [1375 0 R /XYZ 125.858 740.998 null] ->> endobj -462 0 obj << -/D [1375 0 R /XYZ 125.858 716.092 null] ->> endobj -1374 0 obj << -/Font << /F32 500 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1380 0 obj << -/Length 2627 -/Filter /FlateDecode ->> -stream -xZێ}2*yL j[VIT(YWO_r8hJ8ɽAEB~X2ʮOQyYMhi4V-:Z_6'K -&x;—YȕYHxZτԴi'H LH Xm۬Ztl]R JKMΓ2OmRSMv{==˳[r0֪JI)3mP$;@\ۤžN. p?67:)Ы[gb9bMYYt ɔCwGAдItwl;Zt1{)6+^Kכ7.m"@KDk<<1[̛x׾k\aۈ9j @]5DD^'D,ϩuNC.y@1N>j!J1<#bzj]ܧ#>4=@QL;[Кw2;PcEHg402Ѓ:$_T^Ь%s"B-$IUGو] -B3dV;࡝q~]ܣ6_" } xꬼ\Yy6+d7{Z~'~5wxόӦ1|hT ڤ=zhyh|tPA !.n4%f"cAƐ].5 p=\ĬD͘BA4.RAs!! dNV"~4A uACֺ0)л'zNeSٸ_ DmCƶJT,?`Ge%8] -^~,CM!%yE$mZjVxtV RIc8/i6[# 5oX;/^t>$^թ ~b@s!QƇ?*~'o8 FXB`z_>O 8ʼn #P6bO/V(,`V yjypH]_r-G:U5ڹPݑa+T;/#%% UyMGCe>) ً:dސ~AYP1H:#c*]Z[@d+|Frƒh^jS3q<9E&ܟqe%yh:b̪s:F+sAqO φp2l7e[?RȩIK>i)L)6QZM/> endobj -1382 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [345.839 464.528 357.794 475.472] -/Subtype /Link -/A << /S /GoTo /D (section.15) >> ->> endobj -1383 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [332.149 294.929 354.067 307.303] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.6) >> ->> endobj -1381 0 obj << -/D [1379 0 R /XYZ 125.858 740.998 null] ->> endobj -466 0 obj << -/D [1379 0 R /XYZ 125.858 716.092 null] ->> endobj -470 0 obj << -/D [1379 0 R /XYZ 125.858 692.898 null] ->> endobj -1378 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F56 730 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1386 0 obj << -/Length 2851 -/Filter /FlateDecode ->> -stream -x[o6b>:@Gk=}w^Wq2S?f#Eٖ_f ؑ%"eHRʇ|E ^EgZǫ_=ܒ[CwJ4ӡ\Ol\sZ7һzח;鰓RHiR\|RfA-W3qLXѯCƊ"WS}XߦedЫ+xRޟ&%쓒igo;K^9^bDhb^,).qM֦ZȻ2BQutU%(zYU[إe uzWl-6|_DFPϦZhcMbRp/oӊ3RM62ner8V -,Xškc UL|%Xɑ~W[ gL>ZRi&>//;u-2D>𢖥BD0 7~(\xIB%Y @5RvܾZ6ZOH@z~V\Ex"QpGgZ8,8iIaYE9[ tM $L,SU/VeBӚׯ7~P+Wv]'z< 6;jOYK_ U*ϕR/1$ (L-1В2t[ :ܾZ/~(d@@#,bbHuSƮhdRQf}}DK04A`\ӳ ?䶟^((2o'UڎpF^^X9fW̡JJVDh6`[& y?i m-nvI (ߎ߁]3ߗŁm\cS/& $6H 2F!PH)Ũǵ豨!3Zɾ)7 PG9HvԠS&hᦧ8to_.)` 3afCT vKk?oc -x]<]4ݞyHYzcWh3[|4 ,:\l:dܫ0nN ;k=g!~kn,LuڜUš*&9BqVx[%7Sy}ƻ*{0 d2kZvCs;i7kv-#b {aso}@JM֦;ŀXx{܊np2(kIx͵`t4dD5B(,/N^;aIB$#(TO*&ҏaỵyK3oPh8_R^{hL 2d_ooYk8~[JC$yn>xXڶY:liyqr[Q ڰs.tH8{EyHDz-:*G=+4pjeR KF%G`X.8Ћ~0yZ|:b2߯ CcY#%OJh'mDJ=9U-r 'πf. KZ>@n*o%:,bۜ?ru3?,O:k2ˌjZ2t2UufOfLh]l=SXIKc9r5|^4 {TlO1M=8Ih? -@ -z{}s"z~gr5pI6ƾͭ# بK8\Q!6O4wQn!l*{0:ͺ1|"N6f"bab㥝6&M=jtћ7 $-^82fQӤ|@{dSdSz!{if4WT -!xX ϺGu:%kv"$bq8pcop6,JvpswUotTܱu5ll&ٔX^ hqX^D]^8 Ίձi#+0ShҮ҂_3qt #C=EݐB3cw1E9ϢݢNi7xm/qk{hGac> endobj -1387 0 obj << -/D [1385 0 R /XYZ 125.858 740.998 null] ->> endobj -474 0 obj << -/D [1385 0 R /XYZ 125.858 716.092 null] ->> endobj -1384 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R /F14 1060 0 R /F29 1390 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1394 0 obj << -/Length 2825 -/Filter /FlateDecode ->> -stream -x\ێ۶} TxӥogIN&Lm46=bK$gfg"(e+P h^\{sS?G(p/7W46׌,btqutcþ/s{o_yVkj
BNRYVZ@JBWiABW5ˠW6XiSnE1~t!S3k+Ideo5+Iġd''- ވL/-K E_h@tc -Y$HY\qޔ%a~^9=yѓ -!'!f4 -m!hZ#Oxj#[ hByk"'et&nXSUӬDb[ɖdg*xWRB3Qf Wt_yr8R$zˮy?|sPj܇8Y,?p9M;A>ʙMW[B6z<lx+0`\D% ߚI6;$SH+DQX"YW+h,uۤkyN]\r ( sn;K`lD ./p~O. Ype5DB`h<1yb$ALzyjsQ1W:<ˍ]kᡬtE3MڀؒuJHד+whXg x*G6C N  @cgJIc?56ԓOl}qkV;uph.*$I`IHbci/ (#KsPVNY 9Krj/(bVH0\Xa2C9f aIl,(L SG/5bOͣBl~䴯K2,4yA5f/_G/I$bT|hdT#X܋j Pqg.@:PXmfI{X1[uu&I%+, -'EW& egyiHӠG/Dd";Xm$@YU.4:sƳL mVL,5)5̛BþF3R{im|{PZ>sKi"t&R,p)q?TRY~SSõR m@&gBJih(4";4ycK_q7x)gV 29U!LrVtnV>5{&m׹=Ntzף kI? r:Ox2$Ju2#AݵCw󜺳S9P6%'d/˫K}}!Mt*bP]lAȔVxd*r!^D -q8?$<2)(m UrR,锬ۍE/4hM'.ZY`9bb,nŌd%ps`ӨZp@3{~ -DLqS5(yHcKr7&d㦧+!D҇dJ\8OLtjbW }{}:8x0=clp/6קVc<wnSo+unD]pu']Rd=dA̡2 0j`+k0٧H($VgX8,n\ϩTRIz$ Y溽s!EMtbДSSe!]nucp8~VMS}"OqV,5ϩ$˼ZycD /E{9mc毺2s "D(NY uSVF=CEitH3x`m7usͶ]mDM:.;ﴪ;Kʼn@N\]1sk(.y.>1)J!?pe:i -uf.҃!iΩU y4-ȣiG1ʪ8/*mSZA,*\mjDwӊNj%뿙Q_a;*&ˤy8kk܏BUub PFendstream -endobj -1393 0 obj << -/Type /Page -/Contents 1394 0 R -/Resources 1392 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1391 0 R ->> endobj -1395 0 obj << -/D [1393 0 R /XYZ 125.858 740.998 null] ->> endobj -478 0 obj << -/D [1393 0 R /XYZ 125.858 716.092 null] ->> endobj -482 0 obj << -/D [1393 0 R /XYZ 125.858 692.898 null] ->> endobj -486 0 obj << -/D [1393 0 R /XYZ 125.858 503.599 null] ->> endobj -1392 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F47 642 0 R /F56 730 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1398 0 obj << -/Length 1357 -/Filter /FlateDecode ->> -stream -x͙]sF++f?a]\;dmf\` L$Pq~}ϲ-ص3/Á<{X ?*9FA v;T!:f -:zéc(K|A0뫫>T`ް#O:} -Ƒ˫wQ‘ -]4j c!Btc;KM&Z守$I'h7B+# xIo_Y -9 -$'.þ>} -0bp0ƈ1Jj{3yw.JU`2C.=<"̃@x!k2L'}D.SJ=`_@at>J%(Gtd;@& / d -dB {2΀:o#& Ub&UXKìC --N#|Y;y =Z <i#6Fmj:s hLL.R]E1I<'n=un 卭gH> =2ph/v_{~t -;~*KqD7l,*lA„S%i,l^uH: z"xD#70꽷szN<(p([3z˗a2fk&Z!4dfDNw`a|DQpW hd'ZK&U=@xPi :S2MV13hjeG]Ej 6(+hv\Z5h-׌%5(WSANe.ʰKɿg4W+$3Ֆ6J,, B<(6,²GC\*KfOEx CtY]Gj{6DRj,L-#,8[>N=~ AVOXűp}MEE/ ,hf]6<3&D͎P[hBejiP;]Qc7 it5馁ZOC7Zb[ oӵ \TM>:jl}%շ̄V˲2J'q0-GmuH7 zh]GɪNԪ(Xlc,+~>'!N_~wYz+NԒ=p>R}0wBXHc=D֛mY?sBkӥOE >"B)kLdd/Έi#nR(Ϡp~}N[y.㍪>ڼYQJtXI%Qy䴉'ԯ2ˬ҂x\ n$ JMg'D]/ endstream -endobj -1397 0 obj << -/Type /Page -/Contents 1398 0 R -/Resources 1396 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1391 0 R ->> endobj -1399 0 obj << -/D [1397 0 R /XYZ 125.858 740.998 null] ->> endobj -1400 0 obj << -/D [1397 0 R /XYZ 125.858 696.971 null] ->> endobj -1396 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F56 730 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1403 0 obj << -/Length 2134 -/Filter /FlateDecode ->> -stream -xYێ6}@.izfgz; 4&^ @Ymml+ət~HJuqz&0WUdSUQc3T4 %%qma)f΢3bk1[n -?LR?\]=>YyyoߋBegܽ["JZ4sZDH}ՄƜx4:J9gQ`_|GvI5P:[pN2O)bêWKΙ - nޙ؟~"ooY17*|U3m `;jl=i[*gq{]km &Ls 7H|`\.j:{|ğisZ6wMk.8XD|Bp -WH 9ZXvαrHn_.щ$(4I..Ѱ$`x6nMv.`%~05J>e@ Ơ{0XWnGp~,E?Il10yǍ08*^:-Tjnʿ͕ -%!*PϦ~.N\AjFuf.t$S4s ^4_v1?{ժe-grj5YM?# -=gpcW#K揥kSWI5|& s 0C`i{uOvl\E{ۄ˴cRVX%X -)"ap#aS9FC%ˢ:ak{ X2BxSf6tzK)^e9>;U>v;} 2ad/ 1yU}~I-ܶb{}DŽ0*&a_=bS9b 9O9 vb?JH(=ԎK{kSr_NX5% -@=44E$UUAͦbKYa{9.єޚnսU879z.OF~`ҟ%Y 4'NS`11gVh;7x1X]'㸳@r-l{wrÚ0XǤ5jL=YQ-t<9uBʷҷ$W-gi/$ -r ۲$4GJ#UvC@0j_;FlΕ1y?2\9R~[h+!ehcQCȣCH_b$ua?Np)RNhj*8Yn#ȫ]@/h`40kKUyKFH=/:Z;`WWO,f w<+ּgj%gnǀ¡%A֓S)8~y8t$Ez5h:T2xc#T Z0-b6^)Ja! dcVCӠEID5}T3I6-&ߘ:{|%h=Iq]ĊMasSX+͡i9۹)1Z="54X7yqh]%K$(7[tx2qűFS~9d2_UA#.]FhWKKyoy~(:ps[Ä QXp0ʿ HduH,Y㐴h/xlZSx]ѨhQؠ62qP7#cA8`ۈ(cDHcBU50,M}*yZ7 孧8$˱FAFz?endstream -endobj -1402 0 obj << -/Type /Page -/Contents 1403 0 R -/Resources 1401 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1391 0 R -/Annots [ 1405 0 R ] ->> endobj -1405 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [303.151 489.626 310.125 501.999] -/Subtype /Link -/A << /S /GoTo /D (figure.1) >> ->> endobj -1404 0 obj << -/D [1402 0 R /XYZ 125.858 740.998 null] ->> endobj -490 0 obj << -/D [1402 0 R /XYZ 125.858 716.092 null] ->> endobj -1401 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1408 0 obj << -/Length 2300 -/Filter /FlateDecode ->> -stream -x[Y~[(ڰ2KvP-0E*$OuClI[EQMVu_UY W3BEjl߅5nPFDžuAB],$(Y_?3: Q&fHr:{\;xȗy}zs$E$eE(,şcI$s]  xgh@‹}Xb H)GLM+~ < p^Ь7`S -E۵qOnV&"M4\ |PǑ91!4΍^^5Е>g:OP8 -} -?gD.kNnФOYQ(;I5rbWzRy j [}ڤ[1Ӑ}ILj| "7,`v<2'GY\u96*~y%egp;V m-Po?_*[0ƪJh08B%=:c }cC!%LEC)97K!czs*/D)'g3dH7ie$tBF=c+3̫9nR.Rؙ]X4U ;_R]ܥ1P.u3Xڢt`Nj㰼1@i]VC o\Ӊ\G)ga/ytƈƋnd[ pi-ڴږh./GEqV2FɠBqW7Ӻz=c#P)z_\#%:t"`-0ծb4(ӞLx5ğOׂ=ۺ!Hl\$VRPQ<愇MOe9g<(ʟ|"\"%oA.~4b8*"D&!d4*`q3259l<2P\dmk=pMqaYM|a`bYW`%b(L-Pkm+4+[@%dCo(ր5=<}]@Ķ x#bkoc+t}d7oEƽ8 -Ol[V$ ,5a4b3 oa'Lϡ/'Y8FFo MͻL=}sAƳ}E8f̤itm:}ІֲZuH$)UQnm -M3L&BH|]3E4Ңwuxp{_r2f J_Syt6&g,?E>5 Y)oW::SJ364o)E"΋i dg$VF"(4/~ʮ-vҀL`ee(x}xWA-Nx~I!. 2H15vjv#JcKwLyGYu71↽!ԏh 8~d]爝 \NyčkΦ*yD?ϥ=pZ/Ӭ w&ApnB~hf測+Ĉk -y˕$Ӄ΍9[9+K=3gX^]TΞ|᧿{Q -%} +fbGNj$#j#F:β. ] :ǞS͞ZmxE=Lwٜ3&ϋ&Vߙ?91(/3ޫ NKse hm)M{¶`Huxϓ;hYݞkyzE՜1rBpH{8f,Co$C{>;5>8do(&9vy .v#c!W朄o1NTf2",b"B\DZ0endstream -endobj -1407 0 obj << -/Type /Page -/Contents 1408 0 R -/Resources 1406 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1391 0 R -/Annots [ 1411 0 R 1412 0 R 1413 0 R 1414 0 R 1415 0 R 1416 0 R 1417 0 R 1418 0 R 1419 0 R 1420 0 R 1421 0 R 1422 0 R 1423 0 R 1424 0 R 1425 0 R 1426 0 R 1427 0 R 1428 0 R 1429 0 R 1430 0 R 1431 0 R 1432 0 R 1433 0 R 1434 0 R 1435 0 R 1436 0 R 1437 0 R 1438 0 R 1439 0 R 1440 0 R 1441 0 R 1442 0 R 1443 0 R 1444 0 R 1445 0 R 1446 0 R 1447 0 R 1448 0 R 1449 0 R 1450 0 R 1451 0 R 1452 0 R 1453 0 R 1454 0 R 1455 0 R 1456 0 R 1457 0 R 1458 0 R 1459 0 R 1460 0 R 1461 0 R 1462 0 R 1463 0 R 1464 0 R 1465 0 R 1466 0 R 1467 0 R 1468 0 R 1469 0 R 1470 0 R 1471 0 R 1472 0 R 1473 0 R 1474 0 R 1475 0 R 1476 0 R 1477 0 R 1478 0 R 1479 0 R 1480 0 R 1481 0 R 1482 0 R 1483 0 R 1484 0 R 1485 0 R 1486 0 R 1487 0 R 1488 0 R 1489 0 R 1490 0 R 1491 0 R 1492 0 R 1493 0 R 1494 0 R 1495 0 R 1496 0 R 1497 0 R 1498 0 R 1499 0 R 1500 0 R 1501 0 R 1502 0 R ] ->> endobj -1411 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [244.413 667.877 251.387 678.138] -/Subtype /Link -/A << /S /GoTo /D (page.8) >> ->> endobj -1412 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 667.877 266.331 678.138] -/Subtype /Link -/A << /S /GoTo /D (page.10) >> ->> endobj -1413 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 667.877 281.275 678.138] -/Subtype /Link -/A << /S /GoTo /D (page.30) >> ->> endobj -1414 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 655.17 281.275 666.114] -/Subtype /Link -/A << /S /GoTo /D (page.19) >> ->> endobj -1415 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 643.215 281.275 654.158] -/Subtype /Link -/A << /S /GoTo /D (page.67) >> ->> endobj -1416 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 621.297 281.275 632.241] -/Subtype /Link -/A << /S /GoTo /D (page.32) >> ->> endobj -1417 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 609.342 266.331 620.285] -/Subtype /Link -/A << /S /GoTo /D (page.20) >> ->> endobj -1418 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 609.342 281.275 620.285] -/Subtype /Link -/A << /S /GoTo /D (page.27) >> ->> endobj -1419 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [239.432 598.139 251.387 608.4] -/Subtype /Link -/A << /S /GoTo /D (page.11) >> ->> endobj -1420 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 598.139 266.331 608.4] -/Subtype /Link -/A << /S /GoTo /D (page.70) >> ->> endobj -1421 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 598.139 281.275 608.4] -/Subtype /Link -/A << /S /GoTo /D (page.85) >> ->> endobj -1422 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 585.431 281.275 596.375] -/Subtype /Link -/A << /S /GoTo /D (page.88) >> ->> endobj -1423 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 573.576 281.275 584.445] -/Subtype /Link -/A << /S /GoTo /D (page.23) >> ->> endobj -1424 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 561.521 281.275 572.465] -/Subtype /Link -/A << /S /GoTo /D (page.52) >> ->> endobj -1425 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 549.566 281.275 560.51] -/Subtype /Link -/A << /S /GoTo /D (page.72) >> ->> endobj -1426 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 525.655 281.275 536.669] -/Subtype /Link -/A << /S /GoTo /D (page.16) >> ->> endobj -1427 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 491.782 281.275 502.726] -/Subtype /Link -/A << /S /GoTo /D (page.67) >> ->> endobj -1428 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 479.827 281.275 490.771] -/Subtype /Link -/A << /S /GoTo /D (page.76) >> ->> endobj -1429 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 467.872 281.275 478.816] -/Subtype /Link -/A << /S /GoTo /D (page.57) >> ->> endobj -1430 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 455.917 266.331 466.931] -/Subtype /Link -/A << /S /GoTo /D (page.12) >> ->> endobj -1431 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 455.917 281.275 466.931] -/Subtype /Link -/A << /S /GoTo /D (page.33) >> ->> endobj -1432 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 443.962 281.275 454.906] -/Subtype /Link -/A << /S /GoTo /D (page.79) >> ->> endobj -1433 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 432.007 281.275 442.95] -/Subtype /Link -/A << /S /GoTo /D (page.78) >> ->> endobj -1434 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 420.051 281.275 430.995] -/Subtype /Link -/A << /S /GoTo /D (page.56) >> ->> endobj -1435 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 408.096 281.275 419.04] -/Subtype /Link -/A << /S /GoTo /D (page.72) >> ->> endobj -1436 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 396.141 281.275 407.085] -/Subtype /Link -/A << /S /GoTo /D (page.46) >> ->> endobj -1437 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 384.186 281.275 395.13] -/Subtype /Link -/A << /S /GoTo /D (page.25) >> ->> endobj -1438 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [274.301 372.231 281.275 383.175] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -1439 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 360.276 281.275 371.219] -/Subtype /Link -/A << /S /GoTo /D (page.33) >> ->> endobj -1440 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 350.338 281.275 359.264] -/Subtype /Link -/A << /S /GoTo /D (page.68) >> ->> endobj -1441 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 338.383 281.275 347.309] -/Subtype /Link -/A << /S /GoTo /D (page.68) >> ->> endobj -1442 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 324.41 281.275 335.354] -/Subtype /Link -/A << /S /GoTo /D (page.68) >> ->> endobj -1443 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 312.455 281.275 323.399] -/Subtype /Link -/A << /S /GoTo /D (page.68) >> ->> endobj -1444 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 302.517 281.275 311.444] -/Subtype /Link -/A << /S /GoTo /D (page.51) >> ->> endobj -1445 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 288.545 281.275 299.488] -/Subtype /Link -/A << /S /GoTo /D (page.52) >> ->> endobj -1446 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 278.527 281.275 287.533] -/Subtype /Link -/A << /S /GoTo /D (page.69) >> ->> endobj -1447 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 256.689 281.275 265.615] -/Subtype /Link -/A << /S /GoTo /D (page.54) >> ->> endobj -1448 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 244.734 281.275 253.66] -/Subtype /Link -/A << /S /GoTo /D (page.58) >> ->> endobj -1449 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 230.761 281.275 241.705] -/Subtype /Link -/A << /S /GoTo /D (page.59) >> ->> endobj -1450 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 220.824 281.275 229.75] -/Subtype /Link -/A << /S /GoTo /D (page.58) >> ->> endobj -1451 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 207.603 281.275 217.795] -/Subtype /Link -/A << /S /GoTo /D (page.67) >> ->> endobj -1452 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 186.911 281.275 195.877] -/Subtype /Link -/A << /S /GoTo /D (page.71) >> ->> endobj -1453 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 172.978 281.275 183.922] -/Subtype /Link -/A << /S /GoTo /D (page.42) >> ->> endobj -1454 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 163.04 281.275 171.967] -/Subtype /Link -/A << /S /GoTo /D (page.68) >> ->> endobj -1455 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [244.413 125.909 251.387 136.126] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -1456 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 125.909 266.331 136.126] -/Subtype /Link -/A << /S /GoTo /D (page.24) >> ->> endobj -1457 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 125.909 281.275 136.126] -/Subtype /Link -/A << /S /GoTo /D (page.51) >> ->> endobj -1458 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 667.125 470.565 678.069] -/Subtype /Link -/A << /S /GoTo /D (page.53) >> ->> endobj -1459 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 655.17 470.565 666.114] -/Subtype /Link -/A << /S /GoTo /D (page.32) >> ->> endobj -1460 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 643.215 470.565 654.158] -/Subtype /Link -/A << /S /GoTo /D (page.26) >> ->> endobj -1461 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 621.297 470.565 632.241] -/Subtype /Link -/A << /S /GoTo /D (page.81) >> ->> endobj -1462 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [433.704 610.094 440.678 620.285] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -1463 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 610.094 455.621 620.285] -/Subtype /Link -/A << /S /GoTo /D (page.12) >> ->> endobj -1464 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 610.094 470.565 620.285] -/Subtype /Link -/A << /S /GoTo /D (page.20) >> ->> endobj -1465 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [448.648 574.228 455.621 584.49] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -1466 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 574.228 470.565 584.49] -/Subtype /Link -/A << /S /GoTo /D (page.17) >> ->> endobj -1467 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 561.521 470.565 572.465] -/Subtype /Link -/A << /S /GoTo /D (page.13) >> ->> endobj -1468 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 539.703 455.621 550.617] -/Subtype /Link -/A << /S /GoTo /D (page.18) >> ->> endobj -1469 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 539.703 470.565 550.617] -/Subtype /Link -/A << /S /GoTo /D (page.82) >> ->> endobj -1470 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 527.648 470.565 538.592] -/Subtype /Link -/A << /S /GoTo /D (page.37) >> ->> endobj -1471 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 515.693 455.621 526.637] -/Subtype /Link -/A << /S /GoTo /D (page.53) >> ->> endobj -1472 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 515.693 470.565 526.637] -/Subtype /Link -/A << /S /GoTo /D (page.71) >> ->> endobj -1473 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 503.738 470.565 514.681] -/Subtype /Link -/A << /S /GoTo /D (page.84) >> ->> endobj -1474 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 491.782 470.565 502.796] -/Subtype /Link -/A << /S /GoTo /D (page.12) >> ->> endobj -1475 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 479.827 470.565 490.771] -/Subtype /Link -/A << /S /GoTo /D (page.26) >> ->> endobj -1476 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 467.872 470.565 478.816] -/Subtype /Link -/A << /S /GoTo /D (page.86) >> ->> endobj -1477 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 455.917 470.565 466.861] -/Subtype /Link -/A << /S /GoTo /D (page.27) >> ->> endobj -1478 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 443.962 470.565 454.906] -/Subtype /Link -/A << /S /GoTo /D (page.86) >> ->> endobj -1479 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 432.007 470.565 442.95] -/Subtype /Link -/A << /S /GoTo /D (page.14) >> ->> endobj -1480 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 420.051 470.565 430.995] -/Subtype /Link -/A << /S /GoTo /D (page.14) >> ->> endobj -1481 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 408.096 470.565 419.04] -/Subtype /Link -/A << /S /GoTo /D (page.26) >> ->> endobj -1482 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 396.141 470.565 407.085] -/Subtype /Link -/A << /S /GoTo /D (page.16) >> ->> endobj -1483 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 384.186 470.565 395.13] -/Subtype /Link -/A << /S /GoTo /D (page.41) >> ->> endobj -1484 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [463.592 372.231 470.565 383.175] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -1485 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 362.293 470.565 371.219] -/Subtype /Link -/A << /S /GoTo /D (page.28) >> ->> endobj -1486 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 348.32 470.565 359.264] -/Subtype /Link -/A << /S /GoTo /D (page.27) >> ->> endobj -1487 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 326.502 470.565 337.371] -/Subtype /Link -/A << /S /GoTo /D (page.57) >> ->> endobj -1488 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 316.425 470.565 325.416] -/Subtype /Link -/A << /S /GoTo /D (page.11) >> ->> endobj -1489 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 302.492 470.565 313.436] -/Subtype /Link -/A << /S /GoTo /D (page.47) >> ->> endobj -1490 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 291.289 455.621 301.551] -/Subtype /Link -/A << /S /GoTo /D (page.56) >> ->> endobj -1491 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 291.289 470.565 301.551] -/Subtype /Link -/A << /S /GoTo /D (page.60) >> ->> endobj -1492 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 278.582 470.565 289.526] -/Subtype /Link -/A << /S /GoTo /D (page.69) >> ->> endobj -1493 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 266.627 470.565 277.571] -/Subtype /Link -/A << /S /GoTo /D (page.51) >> ->> endobj -1494 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 244.709 470.565 255.653] -/Subtype /Link -/A << /S /GoTo /D (page.45) >> ->> endobj -1495 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 222.791 470.565 233.735] -/Subtype /Link -/A << /S /GoTo /D (page.56) >> ->> endobj -1496 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 212.774 470.565 221.78] -/Subtype /Link -/A << /S /GoTo /D (page.69) >> ->> endobj -1497 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 190.931 470.565 199.887] -/Subtype /Link -/A << /S /GoTo /D (page.25) >> ->> endobj -1498 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 176.963 470.565 187.907] -/Subtype /Link -/A << /S /GoTo /D (page.22) >> ->> endobj -1499 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 165.008 470.565 175.952] -/Subtype /Link -/A << /S /GoTo /D (page.22) >> ->> endobj -1500 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 155.07 470.565 163.996] -/Subtype /Link -/A << /S /GoTo /D (page.23) >> ->> endobj -1501 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 141.098 470.565 152.041] -/Subtype /Link -/A << /S /GoTo /D (page.28) >> ->> endobj -1502 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 119.18 470.565 130.123] -/Subtype /Link -/A << /S /GoTo /D (page.54) >> ->> endobj -1409 0 obj << -/D [1407 0 R /XYZ 125.858 740.998 null] ->> endobj -1410 0 obj << -/D [1407 0 R /XYZ 125.858 680.241 null] ->> endobj -1406 0 obj << -/Font << /F43 512 0 R /F34 502 0 R /F32 500 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1505 0 obj << -/Length 2035 -/Filter /FlateDecode ->> -stream -x[KsFWRqL*J$Je+ɁEئ] 1]= 7=u#%x WKPZ&ZG?,1h77gd#-v6ǟ7?}= Fi ȌX|w3,ȄЏbrcf&[6UH8 -T&-ILJ9q=LʵqΗ]wxÃ998xXlL,{#&o$*lyzP!Xt5!r]A TRzrX%+[5T$.h7:OOTGϤXN9/Dxޤ>9>MU8/ 'zwYX#EHa0V|{_PcWza6"2,|5i2_e6BY]IRai>{5Ǹ4ci#E0kMOIQ2VxZGGb~h⁽k@:{;[́};er#||h %j3oF5yΚ8g-(@}kK6m.z~*c;O6Ƥvcb]СBLI -옐ySŜDv#z2Vs:ޤ]| zXh1M2J<ηEx(ϼ{ HAh z`"~ ! a8ڧ0$O -Im&0 ->v' -PJ) ʥM&~5QC15pZFB&E]֍ Ggwl"̦wM\Oy/#\w|,mϤU:ͥJqd.1uq.Մ<}d<3Y%dڝT-Z@r,͎о}B S[ - պX.-Ÿ6r͂@[xuR7W8gJqc6 -,o7#Kn)zqjWAʦMԇ=%Tn$tҾ~s2Mq G[H` - 6‘y3Q_MM/|McWգYDӝ)+%1zHwmr[oRE4F?gC zYCm.qo+BN: m|0&HlFendstream -endobj -1504 0 obj << -/Type /Page -/Contents 1505 0 R -/Resources 1503 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1391 0 R -/Annots [ 1507 0 R 1508 0 R 1509 0 R 1510 0 R 1511 0 R 1512 0 R 1513 0 R 1514 0 R 1515 0 R 1516 0 R 1517 0 R 1518 0 R 1519 0 R 1520 0 R 1521 0 R 1522 0 R 1523 0 R 1524 0 R 1525 0 R 1526 0 R 1527 0 R 1528 0 R 1529 0 R 1530 0 R 1531 0 R 1532 0 R 1533 0 R 1534 0 R 1535 0 R 1536 0 R 1537 0 R 1538 0 R 1539 0 R 1540 0 R 1541 0 R 1542 0 R 1543 0 R 1544 0 R 1545 0 R 1546 0 R 1547 0 R 1548 0 R 1549 0 R 1550 0 R 1551 0 R 1552 0 R 1553 0 R 1554 0 R 1555 0 R 1556 0 R 1557 0 R 1558 0 R 1559 0 R 1560 0 R 1561 0 R 1562 0 R 1563 0 R 1564 0 R 1565 0 R 1566 0 R 1567 0 R 1568 0 R 1569 0 R 1570 0 R 1571 0 R 1572 0 R 1573 0 R 1574 0 R 1575 0 R 1576 0 R 1577 0 R 1578 0 R 1579 0 R 1580 0 R 1581 0 R 1582 0 R 1583 0 R 1584 0 R 1585 0 R 1586 0 R 1587 0 R 1588 0 R 1589 0 R 1590 0 R 1591 0 R 1592 0 R 1593 0 R 1594 0 R 1595 0 R 1596 0 R 1597 0 R 1598 0 R ] ->> endobj -1507 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 702.976 266.331 713.92] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -1508 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 702.976 281.275 713.92] -/Subtype /Link -/A << /S /GoTo /D (page.18) >> ->> endobj -1509 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 691.021 266.331 701.964] -/Subtype /Link -/A << /S /GoTo /D (page.42) >> ->> endobj -1510 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 691.021 281.275 701.964] -/Subtype /Link -/A << /S /GoTo /D (page.70) >> ->> endobj -1511 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 657.148 281.275 668.091] -/Subtype /Link -/A << /S /GoTo /D (page.67) >> ->> endobj -1512 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 647.21 281.275 656.136] -/Subtype /Link -/A << /S /GoTo /D (page.66) >> ->> endobj -1513 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 633.237 281.275 644.181] -/Subtype /Link -/A << /S /GoTo /D (page.66) >> ->> endobj -1514 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 623.3 281.275 632.226] -/Subtype /Link -/A << /S /GoTo /D (page.64) >> ->> endobj -1515 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 609.327 281.275 620.271] -/Subtype /Link -/A << /S /GoTo /D (page.65) >> ->> endobj -1516 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 597.372 281.275 608.316] -/Subtype /Link -/A << /S /GoTo /D (page.65) >> ->> endobj -1517 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 585.417 281.275 596.36] -/Subtype /Link -/A << /S /GoTo /D (page.66) >> ->> endobj -1518 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 573.461 281.275 584.405] -/Subtype /Link -/A << /S /GoTo /D (page.62) >> ->> endobj -1519 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 561.506 281.275 572.45] -/Subtype /Link -/A << /S /GoTo /D (page.63) >> ->> endobj -1520 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 549.551 281.275 560.495] -/Subtype /Link -/A << /S /GoTo /D (page.63) >> ->> endobj -1521 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 537.596 281.275 548.54] -/Subtype /Link -/A << /S /GoTo /D (page.64) >> ->> endobj -1522 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 525.641 281.275 536.585] -/Subtype /Link -/A << /S /GoTo /D (page.55) >> ->> endobj -1523 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 513.686 281.275 524.699] -/Subtype /Link -/A << /S /GoTo /D (page.61) >> ->> endobj -1524 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 501.73 281.275 512.674] -/Subtype /Link -/A << /S /GoTo /D (page.60) >> ->> endobj -1525 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 491.713 281.275 500.719] -/Subtype /Link -/A << /S /GoTo /D (page.59) >> ->> endobj -1526 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 479.838 281.275 488.764] -/Subtype /Link -/A << /S /GoTo /D (page.62) >> ->> endobj -1527 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 465.865 281.275 476.809] -/Subtype /Link -/A << /S /GoTo /D (page.60) >> ->> endobj -1528 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 453.91 281.275 464.854] -/Subtype /Link -/A << /S /GoTo /D (page.60) >> ->> endobj -1529 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [229.47 432.744 236.443 443.006] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -1530 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [239.432 432.744 251.387 443.006] -/Subtype /Link -/A << /S /GoTo /D (page.10) >> ->> endobj -1531 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 432.744 266.331 443.006] -/Subtype /Link -/A << /S /GoTo /D (page.25) >> ->> endobj -1532 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 432.744 281.275 443.006] -/Subtype /Link -/A << /S /GoTo /D (page.27) >> ->> endobj -1533 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 420.136 266.331 431.05] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -1534 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 420.136 281.275 431.05] -/Subtype /Link -/A << /S /GoTo /D (page.18) >> ->> endobj -1535 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 408.082 266.331 419.025] -/Subtype /Link -/A << /S /GoTo /D (page.22) >> ->> endobj -1536 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 408.082 281.275 419.025] -/Subtype /Link -/A << /S /GoTo /D (page.42) >> ->> endobj -1537 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 398.169 281.275 407.07] -/Subtype /Link -/A << /S /GoTo /D (page.17) >> ->> endobj -1538 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 384.171 281.275 395.115] -/Subtype /Link -/A << /S /GoTo /D (page.85) >> ->> endobj -1539 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 374.234 281.275 383.16] -/Subtype /Link -/A << /S /GoTo /D (page.61) >> ->> endobj -1540 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 360.361 266.331 371.23] -/Subtype /Link -/A << /S /GoTo /D (page.27) >> ->> endobj -1541 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 360.361 281.275 371.23] -/Subtype /Link -/A << /S /GoTo /D (page.30) >> ->> endobj -1542 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 348.306 266.331 359.319] -/Subtype /Link -/A << /S /GoTo /D (page.16) >> ->> endobj -1543 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 348.306 281.275 359.319] -/Subtype /Link -/A << /S /GoTo /D (page.32) >> ->> endobj -1544 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 336.351 266.331 347.364] -/Subtype /Link -/A << /S /GoTo /D (page.30) >> ->> endobj -1545 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 336.351 281.275 347.364] -/Subtype /Link -/A << /S /GoTo /D (page.70) >> ->> endobj -1546 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [244.413 325.148 251.387 335.409] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -1547 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 325.148 266.331 335.409] -/Subtype /Link -/A << /S /GoTo /D (page.24) >> ->> endobj -1548 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 325.148 281.275 335.409] -/Subtype /Link -/A << /S /GoTo /D (page.55) >> ->> endobj -1549 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 313.192 281.275 323.384] -/Subtype /Link -/A << /S /GoTo /D (page.63) >> ->> endobj -1550 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 277.327 266.331 287.519] -/Subtype /Link -/A << /S /GoTo /D (page.55) >> ->> endobj -1551 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 277.327 281.275 287.519] -/Subtype /Link -/A << /S /GoTo /D (page.60) >> ->> endobj -1552 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 264.62 281.275 275.563] -/Subtype /Link -/A << /S /GoTo /D (page.80) >> ->> endobj -1553 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 252.664 281.275 263.608] -/Subtype /Link -/A << /S /GoTo /D (page.45) >> ->> endobj -1554 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 240.709 281.275 251.653] -/Subtype /Link -/A << /S /GoTo /D (page.20) >> ->> endobj -1555 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [274.301 218.791 281.275 229.735] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -1556 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 208.879 281.275 217.78] -/Subtype /Link -/A << /S /GoTo /D (page.24) >> ->> endobj -1557 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 194.881 281.275 205.825] -/Subtype /Link -/A << /S /GoTo /D (page.31) >> ->> endobj -1558 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 182.926 281.275 193.895] -/Subtype /Link -/A << /S /GoTo /D (page.31) >> ->> endobj -1559 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [224.488 161.008 236.443 172.022] -/Subtype /Link -/A << /S /GoTo /D (page.19) >> ->> endobj -1560 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [239.432 161.008 251.387 172.022] -/Subtype /Link -/A << /S /GoTo /D (page.72) >> ->> endobj -1561 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 161.008 266.331 172.022] -/Subtype /Link -/A << /S /GoTo /D (page.77) >> ->> endobj -1562 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 161.008 281.275 172.022] -/Subtype /Link -/A << /S /GoTo /D (page.79) >> ->> endobj -1563 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 151.07 266.331 159.997] -/Subtype /Link -/A << /S /GoTo /D (page.72) >> ->> endobj -1564 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 151.07 281.275 159.997] -/Subtype /Link -/A << /S /GoTo /D (page.82) >> ->> endobj -1565 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 137.098 281.275 148.042] -/Subtype /Link -/A << /S /GoTo /D (page.72) >> ->> endobj -1566 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 127.16 281.275 136.156] -/Subtype /Link -/A << /S /GoTo /D (page.16) >> ->> endobj -1567 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 704.993 470.565 713.92] -/Subtype /Link -/A << /S /GoTo /D (page.62) >> ->> endobj -1568 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 691.021 470.565 701.964] -/Subtype /Link -/A << /S /GoTo /D (page.57) >> ->> endobj -1569 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 679.065 470.565 690.009] -/Subtype /Link -/A << /S /GoTo /D (page.54) >> ->> endobj -1570 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 657.148 470.565 668.091] -/Subtype /Link -/A << /S /GoTo /D (page.55) >> ->> endobj -1571 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 635.23 470.565 646.174] -/Subtype /Link -/A << /S /GoTo /D (page.42) >> ->> endobj -1572 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 615.29 470.565 624.256] -/Subtype /Link -/A << /S /GoTo /D (page.70) >> ->> endobj -1573 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 601.456 470.565 612.37] -/Subtype /Link -/A << /S /GoTo /D (page.69) >> ->> endobj -1574 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [448.648 589.501 455.621 600.415] -/Subtype /Link -/A << /S /GoTo /D (page.8) >> ->> endobj -1575 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 589.501 470.565 600.415] -/Subtype /Link -/A << /S /GoTo /D (page.51) >> ->> endobj -1576 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [428.722 577.546 440.678 588.46] -/Subtype /Link -/A << /S /GoTo /D (page.11) >> ->> endobj -1577 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 577.546 455.621 588.46] -/Subtype /Link -/A << /S /GoTo /D (page.69) >> ->> endobj -1578 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 577.546 470.565 588.46] -/Subtype /Link -/A << /S /GoTo /D (page.85) >> ->> endobj -1579 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [448.648 565.591 455.621 576.505] -/Subtype /Link -/A << /S /GoTo /D (page.8) >> ->> endobj -1580 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 565.591 470.565 576.505] -/Subtype /Link -/A << /S /GoTo /D (page.30) >> ->> endobj -1581 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 553.636 470.565 564.55] -/Subtype /Link -/A << /S /GoTo /D (page.69) >> ->> endobj -1582 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [433.704 541.681 440.678 552.595] -/Subtype /Link -/A << /S /GoTo /D (page.8) >> ->> endobj -1583 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 541.681 455.621 552.595] -/Subtype /Link -/A << /S /GoTo /D (page.30) >> ->> endobj -1584 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 541.681 470.565 552.595] -/Subtype /Link -/A << /S /GoTo /D (page.31) >> ->> endobj -1585 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [433.704 529.725 440.678 540.639] -/Subtype /Link -/A << /S /GoTo /D (page.8) >> ->> endobj -1586 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 529.725 455.621 540.639] -/Subtype /Link -/A << /S /GoTo /D (page.30) >> ->> endobj -1587 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 529.725 470.565 540.639] -/Subtype /Link -/A << /S /GoTo /D (page.31) >> ->> endobj -1588 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 517.77 470.565 528.614] -/Subtype /Link -/A << /S /GoTo /D (page.11) >> ->> endobj -1589 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 505.815 455.621 516.659] -/Subtype /Link -/A << /S /GoTo /D (page.30) >> ->> endobj -1590 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 505.815 470.565 516.659] -/Subtype /Link -/A << /S /GoTo /D (page.42) >> ->> endobj -1591 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 493.86 470.565 504.774] -/Subtype /Link -/A << /S /GoTo /D (page.69) >> ->> endobj -1592 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 481.905 455.621 492.774] -/Subtype /Link -/A << /S /GoTo /D (page.30) >> ->> endobj -1593 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 481.905 470.565 492.774] -/Subtype /Link -/A << /S /GoTo /D (page.42) >> ->> endobj -1594 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [428.722 469.95 440.678 480.864] -/Subtype /Link -/A << /S /GoTo /D (page.10) >> ->> endobj -1595 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 469.95 455.621 480.864] -/Subtype /Link -/A << /S /GoTo /D (page.68) >> ->> endobj -1596 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 469.95 470.565 480.864] -/Subtype /Link -/A << /S /GoTo /D (page.85) >> ->> endobj -1597 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [448.648 457.994 455.621 468.908] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -1598 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 457.994 470.565 468.908] -/Subtype /Link -/A << /S /GoTo /D (page.22) >> ->> endobj -1506 0 obj << -/D [1504 0 R /XYZ 125.858 740.998 null] ->> endobj -1503 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1389 0 obj << -/Length1 773 -/Length2 889 -/Length3 532 -/Length 1450 -/Filter /FlateDecode ->> -stream -xiPG ,\DCT'1C&)"D3rSp )a05lb $E$8`Yn I14TL& -xÃNfmk'.E)PO/ F<.0b'!$Zh|>;`hKfT&`qn={8hs5L}ꂃ6>8C)`#uj1w+JjN4vtgflY3ȼG-zX.th˟ѡ1Hi) GJMvyuB; -ďj6prIqYQFُԙ8Wy`O`O";~?rQI!b2pHUb $;)/7M{:4EG}F6Tk-(:_VZ3ko`PX{nsͼmiuOE( ltsY[ָViW(/ʎQy]HM~WNjNf8auDt᳇O)#¶7m1IJO+UQªz2%ϯL[P ̾o:ԳmahqWtY%:|wk\j8XЍ*{\+kTƸd)]ig,eu<$E x_8{N렪3UX ;M!ƍ{"uja/8&V q0l%+/;z^FsF, G^ֱ[ۺng;CK -6SDolx0۲uhft-Z|$#dՒE.Z%W  -~=|/=|fVðgߩ-_f/b K+0f3Odendstream -endobj -1390 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1599 0 R -/FirstChar 122 -/LastChar 122 -/Widths 1600 0 R -/BaseFont /YEQPDS+CMSY8 -/FontDescriptor 1388 0 R ->> endobj -1388 0 obj << -/Ascent 750 -/CapHeight 683 -/Descent -194 -/FontName /YEQPDS+CMSY8 -/ItalicAngle -14 -/StemV 89 -/XHeight 431 -/FontBBox [-30 -955 1185 779] -/Flags 4 -/CharSet (/daggerdbl) -/FontFile 1389 0 R ->> endobj -1600 0 obj -[472 ] -endobj -1599 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/daggerdbl/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -1330 0 obj << -/Length1 786 -/Length2 1209 -/Length3 532 -/Length 1784 -/Filter /FlateDecode ->> -stream -xR}ޕ~Sw -1f1x2,3:s8fd!&ljDITJT^j] -ՍVQlt{?y_s|{y??К'·8&fҙWL:B0$Cp2O li:på -s7&I`Bd1B(ą,SE`Dq0& lb3뇏qEr'*&HS4iH"C@)6~89 &7L-$'3 IT;KrL_\xޚ/,B䒅,_E0`CH'0!4aLۜ;6(dd6tI6璘<0!.B0:DB b$&@0ү e@F q2L;BX6KͣAWW;35L7R*ߤuT@!RV]hy{GoKP4>bI$k}dI2DN)^U23l:ݣWohOi(kRm&Vg0XehM 24ڪjtEY =#$c7+[T,1uZ^pɐ᳨wiË5'-_uͨ^ -:3 VIZueZK3A]eYJQoDio<5i+Ʒ?v^|U)Ǥ%`NcѪB !uRR*nӻ;J;W49#x q1NUz<˱xO#.S4GCSRL"KJmRu>]U=2"QM 7Yo~Sry/mr ^4L5=έ5ufXrkLnTK!خe3BD©U. +']u}[4GAǰ%5Rq&WHǕ?}АRfq\7{Nl-[_tJR~}cWz-ooiOb,(fMk̈́/YD ;oR:_&3MTT(ۤjɆ·!؋M'ēwTv?|(0Dp DsK.endstream -endobj -1331 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1601 0 R -/FirstChar 40 -/LastChar 41 -/Widths 1602 0 R -/BaseFont /AHEEDI+CMR9 -/FontDescriptor 1329 0 R ->> endobj -1329 0 obj << -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /AHEEDI+CMR9 -/ItalicAngle 0 -/StemV 74 -/XHeight 431 -/FontBBox [-39 -250 1036 750] -/Flags 4 -/CharSet (/parenleft/parenright) -/FontFile 1330 0 R ->> endobj -1602 0 obj -[400 400 ] -endobj -1601 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/parenleft/parenright/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -1603 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring/.notdef/breve/minus/.notdef/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl/notequal/infinity/lessequal/greaterequal/partialdiff/summation/product/pi/grave/quotesingle/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/.notdef/Euro/integral/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/Omega/radical/approxequal/.notdef/.notdef/.notdef/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/Delta/lozenge/Ydieresis/.notdef/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] ->> endobj -1135 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1603 0 R -/BaseFont /Courier-BoldOblique ->> endobj -1121 0 obj << -/Length1 773 -/Length2 1212 -/Length3 532 -/Length 1786 -/Filter /FlateDecode ->> -stream -xR{<_9ig)9[q Qڌwf^fw.0#dUܖɥmm$m"֪E"sľt:s}}>?Ӎ+ (~;Z.)}Ey}Eu?-)'wYo8YEލ9%͎6*9H6Eq$ak։;7ƭ[=q|кMg o[3LUZG7S>%v3ՊgwF>a;C-L6SNvk3l(t%~6lˏę~P__zZƌ~ggnWrO6X(+~"IP[u:50/$M> endobj -1120 0 obj << -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /NXMXSU+CMR6 -/ItalicAngle 0 -/StemV 83 -/XHeight 431 -/FontBBox [-20 -250 1193 750] -/Flags 4 -/CharSet (/one/two) -/FontFile 1121 0 R ->> endobj -1605 0 obj -[611 611 ] -endobj -1604 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/one/two/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -1118 0 obj << -/Length1 825 -/Length2 2210 -/Length3 532 -/Length 2810 -/Filter /FlateDecode ->> -stream -xRy<E)!"Yz7KXB&`좉QٚETBB",I\Րdm([*dK{{{|yRwvӷ"33q8 XB-,0h -LLP -mD"-`7̢:w+ȢtGi -1HlXQld@l2! -b#?d.*d՘: $Adb -7bjK:h?@P!`И\p 2Ȣ*fÁd -+aFPs -{%$;S8À?W kA}9 l{~^*L9L)^Ű?"%85BacY6tLH@` -D0B'A$lh@gp[A1a?qhch#C?'!_ \x 7HA( аz)G @B%,Hub]`Ht`">StJ51 -0^T`l3Ve;6%%{r]'{!9txsa+f)yn1"siY13+&z4g8yJbE^>}"d@t滋TpHq[FՇrJo:^KLrpk̗$:AmXfnl;7S ԋG2ZjKZfu#̷zdSCճR5[7K*ͬK 2k:|/SwsB%9w\j;U& kK\>W7*.x㛦܌]ƆDgt<ѿl Sɽ.l y]Ol%70bUL܍\~Z fFXə/ՂuGODž^zh0pqꥎ - yaI؝=KyC;iwn.rVJ7ν:۱`HliƇ^N1-]Zj_vR=p>w2RcG]#2P -Y߂M'=eZ&zOnI9"m╦T^VCo)5Dib)X+z:ﻟiCLb —|ݲzWfTx"IҲʡݎk _WȤ5ӟ_տaK[IuVL99Z7akuX-N!Μ2B{TO,))lTեq|2}%hؕ{yMOzK":9_׮,_Q9~6G1,d_vyeGs>{{\b"K(Bw5bSH˫9gᐠqUB YQr79xe9>Zmsf$P|1[yb1?fmiU >9/>Y5@inxie!U>aӄѾ5{Hɦ!dtO$T=עoKgH+Tv/[Tt+ps&=D g.^t -Ϧ-X -I~ b݆؜"翇+M̨=85r.sR$pC+#Ϻ(>ְpBtikGh73^3g+ʴ&ϟObcuJOXd oXc9O*+YKL`{Z>2r+܉My+5|0zarfِ -gF!ƛnJWI4j۲%uG֣'j]i<1-\)jy[o 3 u2)tdDEз ~swGܘvN<[[: sڵxQ )˺y!kt r3"aw+s8EG ,%kKd_h+,.^7ogeu/QH|=RVm(%}ۭXITą ⅺuQ5Z^WZ/tmN/LzfGӟ2ګtŝ|}`~ă#C.Qn/hUD=x@oK1Uޕ l=;DL -@s4+ʏ %шdu+{nCxEйnEhGJg B¤q߹i*m;f>"&$}喧V~ۆ ;ik-FDLf=4Wt!iz*K {%OzDUꬫGVȣLZ1 _Kv|1y8w 2CziD -IuLNʮV8|nܮ&TzHii5hpeb&ãg.;ZzJ"Ӧggfˤo։c{:*^M, 8ÔŸXٝ\vݴT A2k&~Sx|ѧ4|PޓbwH) '(A6n I-FeU/򬩽V\$WS ;G {y`C/Ͼc''1 -9oy{|&&\B?>RH-Rc+SsfQD y$Sx:4Vǚ>Ōt!V3[dR۸ߠ -X -Aendstream -endobj -1119 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1606 0 R -/FirstChar 78 -/LastChar 118 -/Widths 1607 0 R -/BaseFont /JGIRWH+CMMI9 -/FontDescriptor 1117 0 R ->> endobj -1117 0 obj << -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /JGIRWH+CMMI9 -/ItalicAngle -14 -/StemV 74 -/XHeight 431 -/FontBBox [-29 -250 1075 750] -/Flags 4 -/CharSet (/N/S/X/p/v) -/FontFile 1118 0 R ->> endobj -1607 0 obj -[822 0 0 0 0 628 0 0 0 0 849 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 516 0 0 0 0 0 499 ] -endobj -1606 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/N/.notdef/.notdef/.notdef/.notdef/S/.notdef/.notdef/.notdef/.notdef/X/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/p/.notdef/.notdef/.notdef/.notdef/.notdef/v/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -1070 0 obj << -/Length1 773 -/Length2 1203 -/Length3 532 -/Length 1774 -/Filter /FlateDecode ->> -stream -xRiXSWQ#j"&$DJ4*l!ɽn AAi AjTde֢"** -. E ӧ̯y?=-y":D}iEQdՕx2\ήt2` x Rvs$)D0>,\B0I@H$H  \ `4燍ĢC'NJDI)7iy("<(gAL@0AA"A"d!5`b.`''C Nbcx #H[hmނSPVvkη90m&[t;Ic<,D$D|}jQ ` 8R>8;I IpND-IsIqP+c*8a)<󝼼PudI$2Q?8Q 7Z HspMX$l~>XO$p.u~(Igi/]b}o.|M[¦˔z#KF,RfV&+"31XHr2aJɬQuju75|8zvӶ'?YjmO;!w1쯫:[K,ɡdZזֹp"6>slěK/ǟU'(ѳiC#zts' ;p-'aӛ~;q(Q Ľ,;U@*v{5| -OYVܾÒ*jۉ - Æ&Q.F 5 rS,?9?5V5"1y׎#u!Dx6nRo}{<4y-ЛKg2)1쳼_tT.y*/zȄZʼP`wFʰpԐx]QޘQhG.fDV_v֨ken"?J* l.lؖ&=͕vn<0gݖqUl -^M'WԯWq |C//|w4e^rݲ"٣!tҁ#9ٮqъLe6ZO/+wn凋C.mҲDEXnT~YzkN/j>+'s_}_6vV%hQ@[KlłfK [g['EkOWOŬdTx:Sj[X[{(iϖǂ6۝A]¹7U&2zuS&Lx2iҩ5+3]$iB|8-ٍzSQ۞K'E/Z+h9j1vаfL+oXQz> endobj -1069 0 obj << -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /SQMLIV+CMR7 -/ItalicAngle 0 -/StemV 79 -/XHeight 431 -/FontBBox [-27 -250 1122 750] -/Flags 4 -/CharSet (/one/two) -/FontFile 1070 0 R ->> endobj -1609 0 obj -[569 569 ] -endobj -1608 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/one/two/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -1059 0 obj << -/Length1 953 -/Length2 1888 -/Length3 532 -/Length 2546 -/Filter /FlateDecode ->> -stream -xVk<eB%!yJdfq]mŘygy1 -T*6d.j+RIl2nesWTr+ Ow=WOȚ 0[W/?  ==[HbCL؎XshMX4ol<D e{VLkȂ$p%CADdd5xVD`$Ȋ)HP 2i@*rLL@VH/I0a:Tʍ)7DoHk.'1 :ca,IYT8WqY'6a0H4" .HqPJGk8SKٷ&gkiqk; ޼p@^1cK, h4F(z?}fX< X$BtAb\0-*DT& V4b@0'r]"CgC0 @!WWLEdCvQp -ф +}קD8)$ dQBkݷarc)ACLLqx"8G_b?a@v~@ }LYRX %W7[n<[}DzhW^ UjT9*L6;ȺqdXzee|W/^be/#'XtķR&lKnQ0قJCn!rKiaH - =ƬtO Eo?8;~\='*''3F4h4w4&55\v BZ .(8cժ?&&ueBR;>h~9 :T2~5nS(ZVڭU"ʩ\Pzj2ҸpCLFG`" aY"7M ~:'6vmR!(Ip_RLffUUpǠ{)9QšoG+.%9Y(\yM %y>FȻW} Ī@7 a*Qu5߆ZGWŻxt1cĘxO>2>{Y.CQ;磖[Vml\ˬ7Fd8tԕ085W0e$qW|uZ;j*̳[̭$yC!vZ׋m+(GҠm'Ÿd?{Hk(wugʈOxmlG"!S>5.{Dh[k*E{>־My6]SAVΝM }/ɍ:tt"Dt*n?RbDߏMߟr7}xD·%a WDi=_vTdW;pȫU|eYykq|e+6NZ2#~q%QfB<%wt$?|unI+ Y짪ƝS&v`ƶMmn~,)L^ -&^9sc,֝lpCiItkR/wM}EV,o\?xBv-JN13<ɯSR"z-BT_/]n(#o똨Ձ7SӂM+M.iayQfazv|2 +JGOV6xT٧Y h2_.œ2&MO_A]fꌌPܖ˽w}8阗:3e8XFC,J / -…(t[H&WT~o/=έ߼_tc}:WSz/=FbtP|!ϋkU^­D^ -|K(/ϟVvVIuAJ' ۤ7qVPKv喺A拭sq^mƇmuV_#@לKMSsQ޶3?ܐz{7_@Qٺ?6q!Gͫ7];B/j\zedi2i9D8VqS>8 3Tjj/O/ 5ե,/&ቄQk4v׶/:#8ח5*yW> endobj -1058 0 obj << -/Ascent 750 -/CapHeight 683 -/Descent -194 -/FontName /NYEXAR+CMSY10 -/ItalicAngle -14 -/StemV 85 -/XHeight 431 -/FontBBox [-29 -960 1116 775] -/Flags 4 -/CharSet (/minus/multiply/circlecopyrt/ceilingleft/ceilingright/braceleft/braceright/bar/daggerdbl) -/FontFile 1059 0 R ->> endobj -1611 0 obj -[778 0 778 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 444 500 500 0 0 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 ] -endobj -1610 0 obj << -/Type /Encoding -/Differences [ 0 /minus/.notdef/multiply/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/circlecopyrt/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/ceilingleft/ceilingright/braceleft/braceright/.notdef/.notdef/bar/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/daggerdbl/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -1056 0 obj << -/Length1 957 -/Length2 3407 -/Length3 532 -/Length 4077 -/Filter /FlateDecode ->> -stream -xRy<OF#t62zs.'1=Z^(UH}Z9,} -0%eI$"@"%  -`phO5 IZ Oh(uHJ?蟌"D4v#fb545D &cjɃdoBJ`|P>o ԩ:?Q]PԲ@ jW^ah=Eے~N>a7 uh4 -4>GG{VduoH;_hX:-vtNU><üObkŀJwZy_&~|Ӏ9[Q[G6h^NUd]*}ZޅIaN{߇*؋q15 -–yqS~YS/B=e&;od8lʉjR|/}rAkNi{aWEp" o-{Q\@>}UAxS٦V[}1edʼnGMk[߳) =Ə8u${,y19y}6nF_w[> -T?cڿu\WؑUfI5JQHIr.iWreF MYnLY٘!sn6dSəXc<ӞL+ߪ#۝[ȕawmoȻqb#ۼyp)Y"?3$rD͉ CFɅOBxkfZO~Y<>U .q)O@v}![Ⱦ㋟U:kgG|Y0fm/jT]Ҹ=&~]i sP{kV<|ď)ʛļ=`aZZ&{/F - T'Y9Zý⣨4iؗ9Tl -T-v**$=!t +4$)DQږqcH1lQut$ Cjv2 qu]t1)̢^kE#iq=ZGs9Gh0rݣYZAix]cPKRm0*S[ TWM*2otnȐ5Xxn|L =" 탹ȽOz$nXl=x3f}nOvU2qګalF~Żv]5wwX6V^CViԓ"^0GDfLKRѓ<+-[rk}8Ȯl,c/= IE,f,zF|G>-^υKx_ ѵȮN ~?rK (8=`uU"gic fթko2ep%}cGu=bӱ3 -96nA7eB2z<9tʦWCS=BZk[llNqwT)j( 1XIN$-0|'of߁r1Xcz 9_XZmQb2=aypvPw%|KRW],Vpӑ] I5<ZC"A1"~!Ҷ[#Gp6~mo9զ/WRޯꏳS+Ojz$Kd6Rr := -|V 2.ÞX}]G}-5.F`>ch rboI -V -TnTF#dbXfq*?%➨(O1CiS9bTƈzu ^(l5Mk(I%'8pW}9`;W[}3fN:\팾sSOϔt^r#be"":<&Bnؖ]5 f9 P MƩk`2S9ӍZ}0Y.>'_yS(ֳyE蔙^#R}^\IIf%)\`Zd)mUNA+ >zW%. (~=Coѵ S5Wciœ8A'xF)~ջ1BE"LE˓=vs -d Jy[n.$ؾi8A51Y {?Ah;{yȥ,d+[vZhʫx -%Y?*(Vh+W+·kÈnVJe&M5[K.(s{G\/3Hfw.M;Y9]E)p3d ۽7M<&a9~XJggW2IdSU{RcCVM_%k7+6Td2UgnFGj\ 5RT:K@zu oIHYj'9NXR!P'W9XUka_!#6[•QQ|9ccg}7Op0}߬`7ǹ@E,gD ǏU-9h4f,f|Tqm.MKV_%́pV;Zcy/s -}<Bko<-R:`{qc#[ {/*|iWf - 㐫,е dS49dn-s\1븗>Mt樑zzmN_`u65+8ެNgپ_ Ն}lE~K3j$Uðҫ0U |.pMPt:Z}˲xn<#m* r&euI}!ܯfptN++?齢'?E#$x_%endstream -endobj -1057 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1612 0 R -/FirstChar 19 -/LastChar 111 -/Widths 1613 0 R -/BaseFont /IKIAIW+CMR10 -/FontDescriptor 1055 0 R ->> endobj -1055 0 obj << -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /IKIAIW+CMR10 -/ItalicAngle 0 -/StemV 69 -/XHeight 431 -/FontBBox [-251 -250 1009 969] -/Flags 4 -/CharSet (/acute/parenleft/parenright/one/two/three/four/five/six/g/l/o) -/FontFile 1056 0 R ->> endobj -1613 0 obj -[500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 389 389 0 0 0 0 0 0 0 500 500 500 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 0 0 278 0 0 500 ] -endobj -1612 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/acute/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/parenleft/parenright/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/one/two/three/four/five/six/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/g/.notdef/.notdef/.notdef/.notdef/l/.notdef/.notdef/o/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -791 0 obj << -/Length1 1034 -/Length2 4746 -/Length3 532 -/Length 5461 -/Filter /FlateDecode ->> -stream -xTg<\NID7C-zK2̌!w!Ѣ5j;9͹x{ϳz^kɮ/ oU($.P()'"ch JB | InIH9Eagy~%H-8D5N>b=y'' -.b@AR!!a@;˓: quW ĸMܿmx6h`ڒB@ [Wqur҆#H?3HgW,6 Tc@+Qu, a-s!A?x -E`[ Q6wo]]SU]wP@a yY R&tJ/Ʊꃰts}2'7 w,g"Z[{c 0ϐu2} b7'`ef";qZĈhQ a5Cdj6_uCW9 v9-Tg2{WVךD[Jhՠ{=.C"EO%ohLrbߌJfZH1Z(C#ŀKۅךe<>tu_J1 :k =$.%HTm -]57tfaJnM]^N=e[X8SW-oQbš+0) !»y^߷DXJ}_`rVL9 Wu%Vn3@Ow!$]Kߔia|C!*po -)n=t=:' -$"Su_GYhGźlSiN9I}:{2E&#:uMʂ~.]C5ygxDZMBU l}wmˇ$E|UwHƞzM~ƚQZG<*{(ĸ!6@h{T`bFy :(>l~݈6;bͭK-Cz)g?6r^okM+5X"OyfiYGdVur.CY%ߛ5=Q}m+D>̽~;7oX"ۑu Lp2Cٕ,>ysL9*+Vj,Zap -%SHMס}}읍m,2.Ѩn*QD&7yfd7R#<y` ue:| n䪗!K5Dp&E2-"BYyfPǾгe*k#?'#5sJ B8/^MPw8K{*Z,b+z#mwݚvs)6W#ixZJt˞'Wb>Q4W+y->򒈱6=[_p -T#?<- }y3cMJ꣬ RjBPUMcz -§*5Ů(p;ˤúU>fK*U)|LXSQD쇗Q8b%.FɅO_uq7SrQ*xuM~rm` A?9Tt6k?g8Wgr`ʚ/YIC^qc(*#EG$1n]澢#=H \"9^{HKEӘ[iWUY`sFPx0kAo7)EV3pz#|܅d3˗z ˯k8 L.:/2e͂|}oql[zh~5 \[ q޷(i[߳]$RH,xvݒ19չ~LҊSZ=k г/z0=34<\.ӻ/?mY:ݐni~x6:ϡ=+2ip6bsP1tGqӅWF|i9tA ꊎwV#) Ώ"(`oN 靺&|?).Sxe8FөrD6ר&5t([t bigvQt)cdI&?7Q]Y{{cDZ7u|z #$xIm,'Dzա̎ky!YZ)+Q׼|#x@O hlƤЭ^!:]^,V9m[~UEFG'pu=\Cύ":^pp.!EM<8H$z=.p7&i’ΠY-&B-"_3I46<נtiCO+>kd5 -VUdz K4OZW0Qު+Mͫfւ__a5{M[*Q Z_]r36˄V%7\p3 kӕ @9~iHX+;̫wk؟ϨѸ7ϩM(gT!dVc Yghsb Lר oS1һM@{ug6O}Ϳ3K}a7@@b`hP u Y꛳;p%=-VODr+x?-JGx-Aʵ!zErqV&`@ ǘ3W9_MOas{=]3{m ir]l1Iӛ\.'3JG'"awN|nכJ>/ :7^Ob#VATV[b9}w=u0scY~e^&6n$! =QIMh}(l.}u#)Y/zIy/ʃHg= pPM!PImސlY]C<ŁKTC5S3zϰ6|bF21nJdoϔ27%b$U~|ʠ犿&s+mu |PiT2 pD-F@+}-'SԵνH|/y$g:k -ݘwjxDT}+^ۑy=稵zZ_[3r]NCkq)U^|5YXYK9uN\p툈p7E:_݉.4hy:\^+:ɱ^|j݄f dU4f=م0TqYaOh2OuUN=.3*zOj2X~4!o,Ob2ҔfP7iAOgnqTFjQI#|NzsIr; r)2P}p򔃰ĖD9F$g`i 4zW{ \nbcw`ԅ[q0"N E#G 5endstream -endobj -792 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1614 0 R -/FirstChar 15 -/LastChar 118 -/Widths 1615 0 R -/BaseFont /PPYBGP+CMMI10 -/FontDescriptor 790 0 R ->> endobj -790 0 obj << -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /PPYBGP+CMMI10 -/ItalicAngle -14 -/StemV 72 -/XHeight 431 -/FontBBox [-32 -250 1048 750] -/Flags 4 -/CharSet (/epsilon1/iota/period/greater/E/M/N/R/S/U/X/a/b/d/h/n/p/v) -/FontFile 791 0 R ->> endobj -1615 0 obj -[406 0 0 0 354 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 778 0 0 0 0 0 0 738 0 0 0 0 0 0 0 970 803 0 0 0 759 613 0 683 0 0 828 0 0 0 0 0 0 0 0 529 429 0 520 0 0 0 576 0 0 0 0 0 600 0 503 0 0 0 0 0 485 ] -endobj -1614 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/epsilon1/.notdef/.notdef/.notdef/iota/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/period/.notdef/.notdef/.notdef/greater/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/E/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/M/N/.notdef/.notdef/.notdef/R/S/.notdef/U/.notdef/.notdef/X/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/a/b/.notdef/d/.notdef/.notdef/.notdef/h/.notdef/.notdef/.notdef/.notdef/.notdef/n/.notdef/p/.notdef/.notdef/.notdef/.notdef/.notdef/v/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -750 0 obj << -/Length1 797 -/Length2 912 -/Length3 532 -/Length 1485 -/Filter /FlateDecode ->> -stream -xRiTW)AA#L 4AD8yc&38 KEQRUK(ZŅV!jz:|߽\rQQ!B"*Dx..~,8gcLyH}bx=KjroR/I -:Ȓ8F[ -uF @  `Ll$<s@5$RjHDb;( FShr0Z$yPx4:7L HPL+0#)[O B@B-dn 0崆"~L S $9|)PcTChŘ^QE!sSÔIs }56fĒ) "j$׻g8C%^cYLCRb `ѰHH3q 0&cjE@b1RPboocxG__&%27@QO/ J 'FD $x1, im{WIc@Sm\U+D7m5?u,m+I"$En⎊6ګc񩛬٣...ٹ7jC䴰%F*g{ -s,\4)ahq7zWMV#'˛k >9 Qlx+MS^t"2nĕNӡx6Eg[<Ԑx`kL7CYU<F9{ªcGC>N@=uaQɱɶ&u#l_}pe{I-)GEþvYp#5lwYǝ2Dfr`c?<[:Q5/Q&~EA2M1=1mjbqW5 <:!r}y\:Nlj s~Q `V C_?!Sc9FZ_@Lendstream -endobj -751 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1616 0 R -/FirstChar 102 -/LastChar 103 -/Widths 1617 0 R -/BaseFont /ZTYMHJ+CMSY9 -/FontDescriptor 749 0 R ->> endobj -749 0 obj << -/Ascent 750 -/CapHeight 683 -/Descent -194 -/FontName /ZTYMHJ+CMSY9 -/ItalicAngle -14 -/StemV 87 -/XHeight 431 -/FontBBox [-30 -958 1146 777] -/Flags 4 -/CharSet (/braceleft/braceright) -/FontFile 750 0 R ->> endobj -1617 0 obj -[514 514 ] -endobj -1616 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/braceleft/braceright/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -730 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1603 0 R -/BaseFont /Courier ->> endobj -642 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1603 0 R -/BaseFont /Times-BoldItalic ->> endobj -512 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1603 0 R -/BaseFont /Times-Bold ->> endobj -509 0 obj << -/Length1 1663 -/Length2 11205 -/Length3 532 -/Length 12101 -/Filter /FlateDecode ->> -stream -xweTZ%wkwBp%݃{pwd73_tS{WծSk5*P։`ac RQcP9>b@C' ;[qC' /@hXY,<<<1;{wG 3s'& Z0rwG$@hmgouTN@5.*'#641H:~x-r@[`j054`- @7c_.z=  m>zd5v6+ ;}ܰ})ف@ƎNV%qt27tdؙ~43v}0^'C [ `b6tw; gf@p:XA쿺u `Z2"~p;}pY"05+2v&s: f# C;[kw I@2 "MzВ -6ώ|,C[ǞZ4ֆK)_okI&d[ix9Z$-܀&JNSC돦mW5:Z[?f[[?.ɿ0)Jj)AcY8 Q '5w{ 4L?Raeߐ gyC'G 73#33_q/0v&Ma h+3?\ΎSʿ~@aiΘ/25#ͩ -'g`L\r ؾV-?ϯ®75l2n}uGvw ۚ3xЛ;mn7I9X3|Vn+'1eV6G{?2)51Xmu`U?);/wc)\)# yFc -Ɗ\j?~Q%7߶ tïjy:ѽ+4sbj¬t(]`+~MI':,+Eg!j$ifܙ>Ѐ'a -tuۦ# %0Ů5>}w> ;ǖ1>EΗ*>feD-4"ZL.1#GIdVŷ 6qI -pO˅ !>3b7RgugcHAhkOQam5eϗsA 7ל#ys,CB]fW}I}QNm #ͣQkWJNȉ(O< , *T)8G-4sN>1<[5)RSo5ս$ߜq?o#K\0,-J@ ZTLG=3J֩HEΨ=Vcִ0ٓ3HZ?Ւ*ǓW9?E]iNI^*yuY Fle^^|%nS_2)oWX5h9( Zajem6ax- yat~ЎV^EJAa"!E(LA$g_AV^Ac_)V&?B?_!o:֟} -`S0) -RYauLr\=6"oqBİ!V2?IBJ O"u-_"WP\4#J=sYZKztOmшy}-Lvet5 E;q^]>ͬA61`{AƆ<m>]ʺ& 80W."WT!nkl};`Cj -ޕnbaäJZ Ԧȋ1lD<ݭlj>p|KV[v/e|=ǗQ=ᤇ_Dݮȯ_}+F$*SyIBT7$6}wk+aye`/}E$6/%5 -QĞה!J5KRa)9yawGz#C/ N:&<&!ʮ-촩ks@, pֵTiچǵ\.X#Ğ;!3/SSGwa#h<4(#4S6w.N-'dV]LU}_AiU5mbK1 V38'b,j`zjAQՉ{ 7|$eC,5O?I5Aq DEmf*;aY8s쯹xćt=xCOO75g\jE lcLx dhѠqMÛ>-_6S%MBFVY~X{r+ ShS~Djbq~If${qnGMz:"3X~ )p<*>A̙ve}ea|Lv%)ˇ]UHH0(z#lFo"|67,T.maD[j oSHgBDXزSABt/<@=+(#TG0S Ll"&Kxzɋ@VA4++YuT܎yό. >-oB[DK}ʹ̿;[W ^?`:en2uzzI)Q=ߏ*yY8<I:|DS]*qBfmMs -iyIk׶Ln럙Bb,n _Y2#JrƃCn<@g BD,j95iW2DEHy?*~"(Y[L֣5I_)9 8C<:rA4T^?bی!8׹Dv5^z=)u@!lzg ?4iDJoRz+ѱ47TtIY4R{%p7Sk1EQJIJ @cHtvj$i+# -YPQZP,UTOݽw`5 / 232ub5vaPtP(w [t>O3#ly7Ov~1[PDC 3nɐx8bVGF 4cÊNn80E.S6(`ə˥`DmjS#v$.^«oGclYМPDտH)3fI5@p7. Ȳpe=>r -HE\΂6\>U-A~۞P ҢgtcWpL L ] /3YI,;ae`.2E@J 7Nu3gO9bE`E~l/MIF=܉d-7 -P5r>%3 B0Qћ5P$T`FbeF)AHuakMs/V5]WB8DneMApIL=3$$8=br*1=Ű'Z+{FCtRv8*q$1~1HaVRx0 W\WV|h7X:醝?hU;2?ZU;Ugv(LAM7ugAk(ah$a=\Uo?&bMU2\ԎrhSPFa D54o(ztO䱺n8!ˈ'0[X>ټbYE^ A|y5LkRWFZ]]9Z .ZL!~PtYW5w Zu{Ir^n{ ķЯ6:uPɡEui,ZP̵j }VU,tJ?}Br -oȄ+?wX1`fb1K˽1e4NG* zz?0?hC ӔQeF癶9wFcL't}%хf=D$@D:xĻPBI=Q+ʙZvV 2Hf-Oϯ=8/>'ؗ A`0oß+-%uD]\g)}Hnot -R{T'*#3w2嗜E4Pލl9+gX3cb2gO>9ʮIyG 6f*]!*1?&ah{{ٳo_u|!(a q8sy 2kDL3+,ROy)0XBlU+`_~ 5I~_1қhpNb_mr~R%P- fWXR#F.+5h+ &F$сݛb3E9ؾѬk[,ϥ2G3*n ֞9Z>oXᐚi;"Xk|҂-iE095T/7:v;=CL-J`93@F#>.H z]'vz%CU08"%syq3Ɉ)ѤY9bTRzЩgLhj}*{Rrj^>nS[Mce0-_ҩ}.ew?5RoSq9}ky%/ۚylW 5Gţ`^^Qr /#נ>fI#^F59%NM\4#h g}ޚ䦊BBY o6MW%V1avbw xrk !w#,zV+ S._rٞl_xczLд^V cuSM; LPydq6*m^kPNr/Kp3Xsfw'x8 S)vy>t%ty5{i15sqacX ?E/?3`ތ[IA g4BM;?~h`F>̉ -dc4{(]_lR&m -La">*)^a踀8=M[=c٧&X$M,yzKmQ͡ZGt>lz.7݂ocCm_^r$wKh -ŭk7']s?ؖ%yʅzۮ6׳yx5P}\~2_ˏ"Ֆn\kh pq`=¹J5$U1)$Mm^?l|rGE+%J< x qhyPVPgj6#ʌ}Gi MB崘i8KH:9~[MHDbgIӴ@ ?J8S}I5}Sb.;SM̂8h+7ԍAwVPTR9d4'IЎΌƏ7= nIz 9IFRy5~RY:Ӝ)1;~Ee.ot-Rxu UEX+qx&֤LJs fiu@-d5VtRRB4OOxVvO)[N'OyL8p5Z.uB1+-ɢT 1QBH E21g[A*h u\ )ƃr&*)֨ij`K6Ǧ͊yPeL,RwPNCj̽coDR(TxlʖK hdv;iDSzXiDB+F43֬# -']3o.7o>qLޜ{ }s1ZFJ//͓;[6ɩxv!ǺYUs -u*qP!DOF/|c׽8> &VVAVh1{Z? -47pUݘ܋cRH 8ZmOrXVej U̹]]xϸXj<卮r .dp -FSO@+s+6.*Bv~~xkH`/Y*<g:u[3#r\ΩJrܝ\09ZXZliҽJ-Ia >O}\mOa&PvFݰAB*4aPN-3?ќgab/ OGcwEb1Gհ^k7-!z^QМkȳA QRJrLa E2KovEج [h -~m4jގ5pY%| 1dY.$ޫ㨐/1)$˨ŇH9cb|m$~UP^{V:]]c2`P&g;IC.ϊCv{3ݛꌽK+!ߢ}AI ` Լ.A%6 ɢ0ᛵJ֭&'ۮr;7Im˞=$Lf١RxxGCWQ309iň W9GjCɔ 'qJ5ĢY4FEWNP{0|AڣϧO|R+;b^;sV;lcl,`p8ٗðX_PJX^7"29ʺ:g#hؘQ:KݹRl)ϔ;J^<%|Y|{jԫ7[?8T9T2uS~/Ef VAY#W1`0` 23 ZM)Z%W{"K(N -DB>ꝶgV:,D'w pr|>r֢kr\2-x'&TF;Key+3m&W0L?ϦK ي8WFkQϳm?n|P85iSHTlr*J{2;,Ԑe/3=-vz5$#IIEU0LK"XOgՒn/'foJ4ro{'#Htk]ŋ -Q=-!׹O[^l~nuS^xM"F )evyo bpπartXBl[jnN\5|Vc^X!9M+ A^;TŎr 8fmqU‰4Cc"u߆ER7Ѭ͓7xdrl|!Hj݃xׁPAo+ xo)[WIv|Z\hψIJ %&~&SA7(fdNȥj8ob^+Kbض &5._t|O(nCCnGgGkK{b4 FR;ao=)e s -4t3p pC =gG*v2kAfNdf4Ј՛x`/C:kBfWiDn\mY~2yX2*d!/> A{N"Y2EKg=w%\C/YeTSe5 -g1wendstream -endobj -510 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1603 0 R -/FirstChar 48 -/LastChar 89 -/Widths 1618 0 R -/BaseFont /OFJXTO+NimbusRomNo9L-Regu-Slant_167 -/FontDescriptor 508 0 R ->> endobj -508 0 obj << -/Ascent 678 -/CapHeight 651 -/Descent -216 -/FontName /OFJXTO+NimbusRomNo9L-Regu-Slant_167 -/ItalicAngle -9 -/StemV 85 -/XHeight 450 -/FontBBox [-168 -281 1000 924] -/Flags 4 -/CharSet (/zero/one/two/three/four/five/six/seven/eight/nine/colon/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/X/Y) -/FontFile 509 0 R ->> endobj -1618 0 obj -[500 500 500 500 500 500 500 500 500 500 278 0 0 0 0 0 0 722 667 667 722 611 556 722 722 333 0 722 611 889 722 722 556 0 667 556 611 722 722 944 722 722 ] -endobj -502 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1603 0 R -/BaseFont /Times-Italic ->> endobj -500 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1603 0 R -/BaseFont /Times-Roman ->> endobj -503 0 obj << -/Type /Pages -/Count 6 -/Parent 1619 0 R -/Kids [494 0 R 505 0 R 556 0 R 603 0 R 647 0 R 726 0 R] ->> endobj -741 0 obj << -/Type /Pages -/Count 6 -/Parent 1619 0 R -/Kids [735 0 R 743 0 R 757 0 R 778 0 R 787 0 R 800 0 R] ->> endobj -821 0 obj << -/Type /Pages -/Count 6 -/Parent 1619 0 R -/Kids [810 0 R 823 0 R 837 0 R 855 0 R 879 0 R 884 0 R] ->> endobj -898 0 obj << -/Type /Pages -/Count 6 -/Parent 1619 0 R -/Kids [890 0 R 908 0 R 918 0 R 968 0 R 978 0 R 987 0 R] ->> endobj -1001 0 obj << -/Type /Pages -/Count 6 -/Parent 1619 0 R -/Kids [994 0 R 1003 0 R 1010 0 R 1014 0 R 1022 0 R 1032 0 R] ->> endobj -1042 0 obj << -/Type /Pages -/Count 6 -/Parent 1619 0 R -/Kids [1037 0 R 1044 0 R 1051 0 R 1065 0 R 1081 0 R 1087 0 R] ->> endobj -1095 0 obj << -/Type /Pages -/Count 6 -/Parent 1620 0 R -/Kids [1091 0 R 1097 0 R 1101 0 R 1105 0 R 1109 0 R 1113 0 R] ->> endobj -1127 0 obj << -/Type /Pages -/Count 6 -/Parent 1620 0 R -/Kids [1124 0 R 1129 0 R 1139 0 R 1145 0 R 1150 0 R 1154 0 R] ->> endobj -1165 0 obj << -/Type /Pages -/Count 6 -/Parent 1620 0 R -/Kids [1159 0 R 1167 0 R 1173 0 R 1179 0 R 1183 0 R 1190 0 R] ->> endobj -1197 0 obj << -/Type /Pages -/Count 6 -/Parent 1620 0 R -/Kids [1194 0 R 1199 0 R 1206 0 R 1212 0 R 1216 0 R 1222 0 R] ->> endobj -1234 0 obj << -/Type /Pages -/Count 6 -/Parent 1620 0 R -/Kids [1228 0 R 1236 0 R 1240 0 R 1244 0 R 1250 0 R 1254 0 R] ->> endobj -1265 0 obj << -/Type /Pages -/Count 6 -/Parent 1620 0 R -/Kids [1258 0 R 1267 0 R 1271 0 R 1275 0 R 1279 0 R 1284 0 R] ->> endobj -1302 0 obj << -/Type /Pages -/Count 6 -/Parent 1621 0 R -/Kids [1291 0 R 1304 0 R 1318 0 R 1325 0 R 1333 0 R 1343 0 R] ->> endobj -1353 0 obj << -/Type /Pages -/Count 6 -/Parent 1621 0 R -/Kids [1347 0 R 1355 0 R 1362 0 R 1368 0 R 1375 0 R 1379 0 R] ->> endobj -1391 0 obj << -/Type /Pages -/Count 6 -/Parent 1621 0 R -/Kids [1385 0 R 1393 0 R 1397 0 R 1402 0 R 1407 0 R 1504 0 R] ->> endobj -1619 0 obj << -/Type /Pages -/Count 36 -/Parent 1622 0 R -/Kids [503 0 R 741 0 R 821 0 R 898 0 R 1001 0 R 1042 0 R] ->> endobj -1620 0 obj << -/Type /Pages -/Count 36 -/Parent 1622 0 R -/Kids [1095 0 R 1127 0 R 1165 0 R 1197 0 R 1234 0 R 1265 0 R] ->> endobj -1621 0 obj << -/Type /Pages -/Count 18 -/Parent 1622 0 R -/Kids [1302 0 R 1353 0 R 1391 0 R] ->> endobj -1622 0 obj << -/Type /Pages -/Count 90 -/Kids [1619 0 R 1620 0 R 1621 0 R] ->> endobj -1623 0 obj << -/Type /Outlines -/First 7 0 R -/Last 463 0 R -/Count 4 ->> endobj -491 0 obj << -/Title 492 0 R -/A 489 0 R -/Parent 463 0 R -/Prev 479 0 R ->> endobj -487 0 obj << -/Title 488 0 R -/A 485 0 R -/Parent 479 0 R -/Prev 483 0 R ->> endobj -483 0 obj << -/Title 484 0 R -/A 481 0 R -/Parent 479 0 R -/Next 487 0 R ->> endobj -479 0 obj << -/Title 480 0 R -/A 477 0 R -/Parent 463 0 R -/Prev 467 0 R -/Next 491 0 R -/First 483 0 R -/Last 487 0 R -/Count -2 ->> endobj -475 0 obj << -/Title 476 0 R -/A 473 0 R -/Parent 467 0 R -/Prev 471 0 R ->> endobj -471 0 obj << -/Title 472 0 R -/A 469 0 R -/Parent 467 0 R -/Next 475 0 R ->> endobj -467 0 obj << -/Title 468 0 R -/A 465 0 R -/Parent 463 0 R -/Next 479 0 R -/First 471 0 R -/Last 475 0 R -/Count -2 ->> endobj -463 0 obj << -/Title 464 0 R -/A 461 0 R -/Parent 1623 0 R -/Prev 411 0 R -/First 467 0 R -/Last 491 0 R -/Count -3 ->> endobj -459 0 obj << -/Title 460 0 R -/A 457 0 R -/Parent 451 0 R -/Prev 455 0 R ->> endobj -455 0 obj << -/Title 456 0 R -/A 453 0 R -/Parent 451 0 R -/Next 459 0 R ->> endobj -451 0 obj << -/Title 452 0 R -/A 449 0 R -/Parent 411 0 R -/Prev 427 0 R -/First 455 0 R -/Last 459 0 R -/Count -2 ->> endobj -447 0 obj << -/Title 448 0 R -/A 445 0 R -/Parent 427 0 R -/Prev 443 0 R ->> endobj -443 0 obj << -/Title 444 0 R -/A 441 0 R -/Parent 427 0 R -/Prev 439 0 R -/Next 447 0 R ->> endobj -439 0 obj << -/Title 440 0 R -/A 437 0 R -/Parent 427 0 R -/Prev 435 0 R -/Next 443 0 R ->> endobj -435 0 obj << -/Title 436 0 R -/A 433 0 R -/Parent 427 0 R -/Prev 431 0 R -/Next 439 0 R ->> endobj -431 0 obj << -/Title 432 0 R -/A 429 0 R -/Parent 427 0 R -/Next 435 0 R ->> endobj -427 0 obj << -/Title 428 0 R -/A 425 0 R -/Parent 411 0 R -/Prev 415 0 R -/Next 451 0 R -/First 431 0 R -/Last 447 0 R -/Count -5 ->> endobj -423 0 obj << -/Title 424 0 R -/A 421 0 R -/Parent 415 0 R -/Prev 419 0 R ->> endobj -419 0 obj << -/Title 420 0 R -/A 417 0 R -/Parent 415 0 R -/Next 423 0 R ->> endobj -415 0 obj << -/Title 416 0 R -/A 413 0 R -/Parent 411 0 R -/Next 427 0 R -/First 419 0 R -/Last 423 0 R -/Count -2 ->> endobj -411 0 obj << -/Title 412 0 R -/A 409 0 R -/Parent 1623 0 R -/Prev 195 0 R -/Next 463 0 R -/First 415 0 R -/Last 451 0 R -/Count -3 ->> endobj -407 0 obj << -/Title 408 0 R -/A 405 0 R -/Parent 403 0 R ->> endobj -403 0 obj << -/Title 404 0 R -/A 401 0 R -/Parent 343 0 R -/Prev 399 0 R -/First 407 0 R -/Last 407 0 R -/Count -1 ->> endobj -399 0 obj << -/Title 400 0 R -/A 397 0 R -/Parent 343 0 R -/Prev 387 0 R -/Next 403 0 R ->> endobj -395 0 obj << -/Title 396 0 R -/A 393 0 R -/Parent 387 0 R -/Prev 391 0 R ->> endobj -391 0 obj << -/Title 392 0 R -/A 389 0 R -/Parent 387 0 R -/Next 395 0 R ->> endobj -387 0 obj << -/Title 388 0 R -/A 385 0 R -/Parent 343 0 R -/Prev 371 0 R -/Next 399 0 R -/First 391 0 R -/Last 395 0 R -/Count -2 ->> endobj -383 0 obj << -/Title 384 0 R -/A 381 0 R -/Parent 371 0 R -/Prev 379 0 R ->> endobj -379 0 obj << -/Title 380 0 R -/A 377 0 R -/Parent 371 0 R -/Prev 375 0 R -/Next 383 0 R ->> endobj -375 0 obj << -/Title 376 0 R -/A 373 0 R -/Parent 371 0 R -/Next 379 0 R ->> endobj -371 0 obj << -/Title 372 0 R -/A 369 0 R -/Parent 343 0 R -/Prev 347 0 R -/Next 387 0 R -/First 375 0 R -/Last 383 0 R -/Count -3 ->> endobj -367 0 obj << -/Title 368 0 R -/A 365 0 R -/Parent 347 0 R -/Prev 363 0 R ->> endobj -363 0 obj << -/Title 364 0 R -/A 361 0 R -/Parent 347 0 R -/Prev 359 0 R -/Next 367 0 R ->> endobj -359 0 obj << -/Title 360 0 R -/A 357 0 R -/Parent 347 0 R -/Prev 355 0 R -/Next 363 0 R ->> endobj -355 0 obj << -/Title 356 0 R -/A 353 0 R -/Parent 347 0 R -/Prev 351 0 R -/Next 359 0 R ->> endobj -351 0 obj << -/Title 352 0 R -/A 349 0 R -/Parent 347 0 R -/Next 355 0 R ->> endobj -347 0 obj << -/Title 348 0 R -/A 345 0 R -/Parent 343 0 R -/Next 371 0 R -/First 351 0 R -/Last 367 0 R -/Count -5 ->> endobj -343 0 obj << -/Title 344 0 R -/A 341 0 R -/Parent 195 0 R -/Prev 287 0 R -/First 347 0 R -/Last 403 0 R -/Count -5 ->> endobj -339 0 obj << -/Title 340 0 R -/A 337 0 R -/Parent 307 0 R -/Prev 335 0 R ->> endobj -335 0 obj << -/Title 336 0 R -/A 333 0 R -/Parent 307 0 R -/Prev 331 0 R -/Next 339 0 R ->> endobj -331 0 obj << -/Title 332 0 R -/A 329 0 R -/Parent 307 0 R -/Prev 327 0 R -/Next 335 0 R ->> endobj -327 0 obj << -/Title 328 0 R -/A 325 0 R -/Parent 307 0 R -/Prev 323 0 R -/Next 331 0 R ->> endobj -323 0 obj << -/Title 324 0 R -/A 321 0 R -/Parent 307 0 R -/Prev 319 0 R -/Next 327 0 R ->> endobj -319 0 obj << -/Title 320 0 R -/A 317 0 R -/Parent 307 0 R -/Prev 315 0 R -/Next 323 0 R ->> endobj -315 0 obj << -/Title 316 0 R -/A 313 0 R -/Parent 307 0 R -/Prev 311 0 R -/Next 319 0 R ->> endobj -311 0 obj << -/Title 312 0 R -/A 309 0 R -/Parent 307 0 R -/Next 315 0 R ->> endobj -307 0 obj << -/Title 308 0 R -/A 305 0 R -/Parent 287 0 R -/Prev 291 0 R -/First 311 0 R -/Last 339 0 R -/Count -8 ->> endobj -303 0 obj << -/Title 304 0 R -/A 301 0 R -/Parent 291 0 R -/Prev 299 0 R ->> endobj -299 0 obj << -/Title 300 0 R -/A 297 0 R -/Parent 291 0 R -/Prev 295 0 R -/Next 303 0 R ->> endobj -295 0 obj << -/Title 296 0 R -/A 293 0 R -/Parent 291 0 R -/Next 299 0 R ->> endobj -291 0 obj << -/Title 292 0 R -/A 289 0 R -/Parent 287 0 R -/Next 307 0 R -/First 295 0 R -/Last 303 0 R -/Count -3 ->> endobj -287 0 obj << -/Title 288 0 R -/A 285 0 R -/Parent 195 0 R -/Prev 199 0 R -/Next 343 0 R -/First 291 0 R -/Last 307 0 R -/Count -2 ->> endobj -283 0 obj << -/Title 284 0 R -/A 281 0 R -/Parent 199 0 R -/Prev 259 0 R ->> endobj -279 0 obj << -/Title 280 0 R -/A 277 0 R -/Parent 259 0 R -/Prev 275 0 R ->> endobj -275 0 obj << -/Title 276 0 R -/A 273 0 R -/Parent 259 0 R -/Prev 271 0 R -/Next 279 0 R ->> endobj -271 0 obj << -/Title 272 0 R -/A 269 0 R -/Parent 259 0 R -/Prev 267 0 R -/Next 275 0 R ->> endobj -267 0 obj << -/Title 268 0 R -/A 265 0 R -/Parent 259 0 R -/Prev 263 0 R -/Next 271 0 R ->> endobj -263 0 obj << -/Title 264 0 R -/A 261 0 R -/Parent 259 0 R -/Next 267 0 R ->> endobj -259 0 obj << -/Title 260 0 R -/A 257 0 R -/Parent 199 0 R -/Prev 219 0 R -/Next 283 0 R -/First 263 0 R -/Last 279 0 R -/Count -5 ->> endobj -255 0 obj << -/Title 256 0 R -/A 253 0 R -/Parent 219 0 R -/Prev 251 0 R ->> endobj -251 0 obj << -/Title 252 0 R -/A 249 0 R -/Parent 219 0 R -/Prev 247 0 R -/Next 255 0 R ->> endobj -247 0 obj << -/Title 248 0 R -/A 245 0 R -/Parent 219 0 R -/Prev 243 0 R -/Next 251 0 R ->> endobj -243 0 obj << -/Title 244 0 R -/A 241 0 R -/Parent 219 0 R -/Prev 239 0 R -/Next 247 0 R ->> endobj -239 0 obj << -/Title 240 0 R -/A 237 0 R -/Parent 219 0 R -/Prev 235 0 R -/Next 243 0 R ->> endobj -235 0 obj << -/Title 236 0 R -/A 233 0 R -/Parent 219 0 R -/Prev 231 0 R -/Next 239 0 R ->> endobj -231 0 obj << -/Title 232 0 R -/A 229 0 R -/Parent 219 0 R -/Prev 227 0 R -/Next 235 0 R ->> endobj -227 0 obj << -/Title 228 0 R -/A 225 0 R -/Parent 219 0 R -/Prev 223 0 R -/Next 231 0 R ->> endobj -223 0 obj << -/Title 224 0 R -/A 221 0 R -/Parent 219 0 R -/Next 227 0 R ->> endobj -219 0 obj << -/Title 220 0 R -/A 217 0 R -/Parent 199 0 R -/Prev 215 0 R -/Next 259 0 R -/First 223 0 R -/Last 255 0 R -/Count -9 ->> endobj -215 0 obj << -/Title 216 0 R -/A 213 0 R -/Parent 199 0 R -/Prev 203 0 R -/Next 219 0 R ->> endobj -211 0 obj << -/Title 212 0 R -/A 209 0 R -/Parent 203 0 R -/Prev 207 0 R ->> endobj -207 0 obj << -/Title 208 0 R -/A 205 0 R -/Parent 203 0 R -/Next 211 0 R ->> endobj -203 0 obj << -/Title 204 0 R -/A 201 0 R -/Parent 199 0 R -/Next 215 0 R -/First 207 0 R -/Last 211 0 R -/Count -2 ->> endobj -199 0 obj << -/Title 200 0 R -/A 197 0 R -/Parent 195 0 R -/Next 287 0 R -/First 203 0 R -/Last 283 0 R -/Count -5 ->> endobj -195 0 obj << -/Title 196 0 R -/A 193 0 R -/Parent 1623 0 R -/Prev 7 0 R -/Next 411 0 R -/First 199 0 R -/Last 343 0 R -/Count -3 ->> endobj -191 0 obj << -/Title 192 0 R -/A 189 0 R -/Parent 151 0 R -/Prev 187 0 R ->> endobj -187 0 obj << -/Title 188 0 R -/A 185 0 R -/Parent 151 0 R -/Prev 183 0 R -/Next 191 0 R ->> endobj -183 0 obj << -/Title 184 0 R -/A 181 0 R -/Parent 151 0 R -/Prev 179 0 R -/Next 187 0 R ->> endobj -179 0 obj << -/Title 180 0 R -/A 177 0 R -/Parent 151 0 R -/Prev 175 0 R -/Next 183 0 R ->> endobj -175 0 obj << -/Title 176 0 R -/A 173 0 R -/Parent 151 0 R -/Prev 155 0 R -/Next 179 0 R ->> endobj -171 0 obj << -/Title 172 0 R -/A 169 0 R -/Parent 155 0 R -/Prev 167 0 R ->> endobj -167 0 obj << -/Title 168 0 R -/A 165 0 R -/Parent 155 0 R -/Prev 163 0 R -/Next 171 0 R ->> endobj -163 0 obj << -/Title 164 0 R -/A 161 0 R -/Parent 155 0 R -/Prev 159 0 R -/Next 167 0 R ->> endobj -159 0 obj << -/Title 160 0 R -/A 157 0 R -/Parent 155 0 R -/Next 163 0 R ->> endobj -155 0 obj << -/Title 156 0 R -/A 153 0 R -/Parent 151 0 R -/Next 175 0 R -/First 159 0 R -/Last 171 0 R -/Count -4 ->> endobj -151 0 obj << -/Title 152 0 R -/A 149 0 R -/Parent 7 0 R -/Prev 127 0 R -/First 155 0 R -/Last 191 0 R -/Count -6 ->> endobj -147 0 obj << -/Title 148 0 R -/A 145 0 R -/Parent 127 0 R -/Prev 143 0 R ->> endobj -143 0 obj << -/Title 144 0 R -/A 141 0 R -/Parent 127 0 R -/Prev 139 0 R -/Next 147 0 R ->> endobj -139 0 obj << -/Title 140 0 R -/A 137 0 R -/Parent 127 0 R -/Prev 135 0 R -/Next 143 0 R ->> endobj -135 0 obj << -/Title 136 0 R -/A 133 0 R -/Parent 127 0 R -/Prev 131 0 R -/Next 139 0 R ->> endobj -131 0 obj << -/Title 132 0 R -/A 129 0 R -/Parent 127 0 R -/Next 135 0 R ->> endobj -127 0 obj << -/Title 128 0 R -/A 125 0 R -/Parent 7 0 R -/Prev 115 0 R -/Next 151 0 R -/First 131 0 R -/Last 147 0 R -/Count -5 ->> endobj -123 0 obj << -/Title 124 0 R -/A 121 0 R -/Parent 115 0 R -/Prev 119 0 R ->> endobj -119 0 obj << -/Title 120 0 R -/A 117 0 R -/Parent 115 0 R -/Next 123 0 R ->> endobj -115 0 obj << -/Title 116 0 R -/A 113 0 R -/Parent 7 0 R -/Prev 79 0 R -/Next 127 0 R -/First 119 0 R -/Last 123 0 R -/Count -2 ->> endobj -111 0 obj << -/Title 112 0 R -/A 109 0 R -/Parent 79 0 R -/Prev 107 0 R ->> endobj -107 0 obj << -/Title 108 0 R -/A 105 0 R -/Parent 79 0 R -/Prev 95 0 R -/Next 111 0 R ->> endobj -103 0 obj << -/Title 104 0 R -/A 101 0 R -/Parent 95 0 R -/Prev 99 0 R ->> endobj -99 0 obj << -/Title 100 0 R -/A 97 0 R -/Parent 95 0 R -/Next 103 0 R ->> endobj -95 0 obj << -/Title 96 0 R -/A 93 0 R -/Parent 79 0 R -/Prev 91 0 R -/Next 107 0 R -/First 99 0 R -/Last 103 0 R -/Count -2 ->> endobj -91 0 obj << -/Title 92 0 R -/A 89 0 R -/Parent 79 0 R -/Prev 87 0 R -/Next 95 0 R ->> endobj -87 0 obj << -/Title 88 0 R -/A 85 0 R -/Parent 79 0 R -/Prev 83 0 R -/Next 91 0 R ->> endobj -83 0 obj << -/Title 84 0 R -/A 81 0 R -/Parent 79 0 R -/Next 87 0 R ->> endobj -79 0 obj << -/Title 80 0 R -/A 77 0 R -/Parent 7 0 R -/Prev 35 0 R -/Next 115 0 R -/First 83 0 R -/Last 111 0 R -/Count -6 ->> endobj -75 0 obj << -/Title 76 0 R -/A 73 0 R -/Parent 35 0 R -/Prev 67 0 R ->> endobj -71 0 obj << -/Title 72 0 R -/A 69 0 R -/Parent 67 0 R ->> endobj -67 0 obj << -/Title 68 0 R -/A 65 0 R -/Parent 35 0 R -/Prev 63 0 R -/Next 75 0 R -/First 71 0 R -/Last 71 0 R -/Count -1 ->> endobj -63 0 obj << -/Title 64 0 R -/A 61 0 R -/Parent 35 0 R -/Prev 59 0 R -/Next 67 0 R ->> endobj -59 0 obj << -/Title 60 0 R -/A 57 0 R -/Parent 35 0 R -/Prev 55 0 R -/Next 63 0 R ->> endobj -55 0 obj << -/Title 56 0 R -/A 53 0 R -/Parent 35 0 R -/Prev 51 0 R -/Next 59 0 R ->> endobj -51 0 obj << -/Title 52 0 R -/A 49 0 R -/Parent 35 0 R -/Prev 47 0 R -/Next 55 0 R ->> endobj -47 0 obj << -/Title 48 0 R -/A 45 0 R -/Parent 35 0 R -/Prev 43 0 R -/Next 51 0 R ->> endobj -43 0 obj << -/Title 44 0 R -/A 41 0 R -/Parent 35 0 R -/Prev 39 0 R -/Next 47 0 R ->> endobj -39 0 obj << -/Title 40 0 R -/A 37 0 R -/Parent 35 0 R -/Next 43 0 R ->> endobj -35 0 obj << -/Title 36 0 R -/A 33 0 R -/Parent 7 0 R -/Prev 27 0 R -/Next 79 0 R -/First 39 0 R -/Last 75 0 R -/Count -9 ->> endobj -31 0 obj << -/Title 32 0 R -/A 29 0 R -/Parent 27 0 R ->> endobj -27 0 obj << -/Title 28 0 R -/A 25 0 R -/Parent 7 0 R -/Prev 11 0 R -/Next 35 0 R -/First 31 0 R -/Last 31 0 R -/Count -1 ->> endobj -23 0 obj << -/Title 24 0 R -/A 21 0 R -/Parent 19 0 R ->> endobj -19 0 obj << -/Title 20 0 R -/A 17 0 R -/Parent 11 0 R -/Prev 15 0 R -/First 23 0 R -/Last 23 0 R -/Count -1 ->> endobj -15 0 obj << -/Title 16 0 R -/A 13 0 R -/Parent 11 0 R -/Next 19 0 R ->> endobj -11 0 obj << -/Title 12 0 R -/A 9 0 R -/Parent 7 0 R -/Next 27 0 R -/First 15 0 R -/Last 19 0 R -/Count -2 ->> endobj -7 0 obj << -/Title 8 0 R -/A 5 0 R -/Parent 1623 0 R -/Next 195 0 R -/First 11 0 R -/Last 151 0 R -/Count -7 ->> endobj -1624 0 obj << -/Names [(Doc-Start) 498 0 R (Hfootnote.1) 797 0 R (Hfootnote.10) 1188 0 R (Hfootnote.11) 1204 0 R (Hfootnote.12) 1226 0 R (Hfootnote.13) 1233 0 R (Hfootnote.14) 1248 0 R (Hfootnote.15) 1264 0 R (Hfootnote.16) 1316 0 R (Hfootnote.17) 1340 0 R (Hfootnote.18) 1341 0 R (Hfootnote.19) 1352 0 R (Hfootnote.2) 798 0 R (Hfootnote.3) 914 0 R (Hfootnote.4) 976 0 R (Hfootnote.5) 1020 0 R (Hfootnote.6) 1030 0 R (Hfootnote.7) 1048 0 R (Hfootnote.8) 1137 0 R (Hfootnote.9) 1164 0 R (figure.1) 688 0 R (figure.10) 697 0 R (figure.11) 698 0 R (figure.12) 699 0 R (figure.13) 700 0 R (figure.14) 701 0 R (figure.15) 702 0 R (figure.16) 703 0 R (figure.17) 704 0 R (figure.18) 705 0 R (figure.19) 706 0 R (figure.2) 689 0 R (figure.20) 707 0 R (figure.21) 708 0 R (figure.22) 709 0 R (figure.23) 710 0 R (figure.24) 711 0 R (figure.25) 712 0 R (figure.26) 713 0 R (figure.27) 714 0 R (figure.28) 715 0 R (figure.29) 716 0 R (figure.3) 690 0 R (figure.30) 717 0 R (figure.31) 718 0 R (figure.32) 719 0 R (figure.33) 720 0 R (figure.34) 721 0 R (figure.35) 722 0 R (figure.36) 723 0 R (figure.37) 724 0 R (figure.4) 691 0 R (figure.5) 692 0 R (figure.6) 693 0 R (figure.7) 694 0 R (figure.8) 695 0 R (figure.9) 696 0 R (page.1) 497 0 R (page.10) 780 0 R (page.11) 789 0 R (page.12) 802 0 R (page.13) 812 0 R (page.14) 825 0 R (page.15) 839 0 R (page.16) 857 0 R (page.17) 881 0 R (page.18) 886 0 R (page.19) 892 0 R (page.2) 507 0 R (page.20) 910 0 R (page.21) 920 0 R (page.22) 970 0 R (page.23) 980 0 R (page.24) 989 0 R (page.25) 996 0 R (page.26) 1005 0 R (page.27) 1012 0 R (page.28) 1016 0 R (page.29) 1024 0 R (page.3) 558 0 R (page.30) 1034 0 R (page.31) 1039 0 R (page.32) 1046 0 R (page.33) 1053 0 R (page.34) 1067 0 R (page.35) 1083 0 R (page.36) 1089 0 R (page.37) 1093 0 R (page.38) 1099 0 R (page.39) 1103 0 R (page.4) 605 0 R (page.40) 1107 0 R (page.41) 1111 0 R (page.42) 1115 0 R (page.43) 1126 0 R (page.44) 1131 0 R (page.45) 1141 0 R (page.46) 1147 0 R (page.47) 1152 0 R (page.48) 1156 0 R (page.49) 1161 0 R (page.5) 649 0 R (page.50) 1169 0 R (page.51) 1175 0 R (page.52) 1181 0 R (page.53) 1185 0 R (page.54) 1192 0 R (page.55) 1196 0 R (page.56) 1201 0 R (page.57) 1208 0 R (page.58) 1214 0 R (page.59) 1218 0 R (page.6) 728 0 R (page.60) 1224 0 R (page.61) 1230 0 R (page.62) 1238 0 R (page.63) 1242 0 R (page.64) 1246 0 R (page.65) 1252 0 R (page.66) 1256 0 R (page.67) 1260 0 R (page.68) 1269 0 R (page.69) 1273 0 R (page.7) 737 0 R (page.70) 1277 0 R (page.71) 1281 0 R (page.72) 1286 0 R (page.73) 1293 0 R (page.74) 1306 0 R (page.75) 1320 0 R (page.76) 1327 0 R (page.77) 1335 0 R (page.78) 1345 0 R (page.79) 1349 0 R (page.8) 745 0 R (page.80) 1357 0 R (page.81) 1364 0 R (page.82) 1370 0 R (page.83) 1377 0 R (page.84) 1381 0 R (page.85) 1387 0 R (page.86) 1395 0 R (page.87) 1399 0 R (page.88) 1404 0 R (page.89) 1409 0 R (page.9) 759 0 R (page.90) 1506 0 R (part.1) 6 0 R (part.2) 194 0 R (part.3) 410 0 R (part.4) 462 0 R (section*.1) 513 0 R (section*.10) 814 0 R (section*.11) 815 0 R (section*.12) 816 0 R (section*.13) 817 0 R (section*.14) 819 0 R (section*.15) 820 0 R (section*.16) 826 0 R (section*.17) 827 0 R (section*.18) 828 0 R (section*.19) 830 0 R (section*.2) 650 0 R (section*.20) 831 0 R (section*.21) 832 0 R (section*.22) 833 0 R (section*.23) 834 0 R (section*.24) 835 0 R (section*.25) 840 0 R (section*.26) 841 0 R (section*.27) 842 0 R (section*.28) 843 0 R (section*.29) 844 0 R (section*.3) 747 0 R (section*.30) 845 0 R (section*.31) 847 0 R (section*.32) 849 0 R (section*.33) 851 0 R (section*.34) 858 0 R (section*.35) 859 0 R (section*.36) 893 0 R (section*.37) 911 0 R (section*.38) 921 0 R (section*.39) 924 0 R (section*.4) 784 0 R (section*.40) 974 0 R (section*.41) 982 0 R (section*.42) 984 0 R (section*.43) 991 0 R (section*.44) 997 0 R (section*.45) 998 0 R (section*.46) 1006 0 R (section*.47) 1007 0 R (section*.48) 1008 0 R (section*.49) 1027 0 R (section*.5) 803 0 R (section*.50) 1028 0 R (section*.51) 1029 0 R (section*.52) 1054 0 R (section*.53) 1061 0 R (section*.54) 1068 0 R (section*.55) 1084 0 R (section*.56) 1094 0 R (section*.57) 1116 0 R (section*.58) 1133 0 R (section*.59) 1176 0 R (section*.6) 805 0 R (section*.60) 1177 0 R (section*.61) 1287 0 R (section*.62) 1288 0 R (section*.63) 1289 0 R (section*.64) 1294 0 R (section*.65) 1296 0 R (section*.66) 1297 0 R (section*.67) 1298 0 R (section*.68) 1299 0 R (section*.69) 1300 0 R (section*.7) 807 0 R (section*.70) 1301 0 R (section*.71) 1307 0 R (section*.72) 1308 0 R (section*.73) 1309 0 R (section*.74) 1310 0 R (section*.75) 1337 0 R (section*.76) 1365 0 R (section*.77) 1366 0 R (section*.78) 1400 0 R (section*.79) 1410 0 R (section*.8) 808 0 R (section*.9) 813 0 R (section.1) 10 0 R (section.10) 342 0 R (section.11) 414 0 R (section.12) 426 0 R (section.13) 450 0 R (section.14) 466 0 R (section.15) 478 0 R (section.16) 490 0 R (section.2) 26 0 R (section.3) 34 0 R (section.4) 78 0 R (section.5) 114 0 R (section.6) 126 0 R (section.7) 150 0 R (section.8) 198 0 R (section.9) 286 0 R (subsection.1.1) 14 0 R (subsection.1.2) 18 0 R (subsection.10.1) 346 0 R (subsection.10.2) 370 0 R (subsection.10.3) 386 0 R (subsection.10.4) 398 0 R (subsection.10.5) 402 0 R (subsection.11.1) 418 0 R (subsection.11.2) 422 0 R (subsection.12.1) 430 0 R (subsection.12.2) 434 0 R (subsection.12.3) 438 0 R (subsection.12.4) 442 0 R (subsection.12.5) 446 0 R (subsection.13.1) 454 0 R (subsection.13.2) 458 0 R (subsection.14.1) 470 0 R (subsection.14.2) 474 0 R (subsection.15.1) 482 0 R (subsection.15.2) 486 0 R (subsection.2.1) 30 0 R (subsection.3.1) 38 0 R (subsection.3.2) 42 0 R (subsection.3.3) 46 0 R (subsection.3.4) 50 0 R (subsection.3.5) 54 0 R (subsection.3.6) 58 0 R (subsection.3.7) 62 0 R (subsection.3.8) 66 0 R (subsection.3.9) 74 0 R (subsection.4.1) 82 0 R (subsection.4.2) 86 0 R (subsection.4.3) 90 0 R (subsection.4.4) 94 0 R (subsection.4.5) 106 0 R (subsection.4.6) 110 0 R (subsection.5.1) 118 0 R (subsection.5.2) 122 0 R (subsection.6.1) 130 0 R (subsection.6.2) 134 0 R (subsection.6.3) 138 0 R (subsection.6.4) 142 0 R (subsection.6.5) 146 0 R (subsection.7.1) 154 0 R (subsection.7.2) 174 0 R (subsection.7.3) 178 0 R (subsection.7.4) 182 0 R (subsection.7.5) 186 0 R (subsection.7.6) 190 0 R (subsection.8.1) 202 0 R (subsection.8.2) 214 0 R (subsection.8.3) 218 0 R (subsection.8.4) 258 0 R (subsection.8.5) 282 0 R (subsection.9.1) 290 0 R (subsection.9.2) 306 0 R (subsubsection.1.2.1) 22 0 R (subsubsection.10.1.1) 350 0 R (subsubsection.10.1.2) 354 0 R (subsubsection.10.1.3) 358 0 R (subsubsection.10.1.4) 362 0 R (subsubsection.10.1.5) 366 0 R (subsubsection.10.2.1) 374 0 R (subsubsection.10.2.2) 378 0 R (subsubsection.10.2.3) 382 0 R (subsubsection.10.3.1) 390 0 R (subsubsection.10.3.2) 394 0 R (subsubsection.10.5.1) 406 0 R (subsubsection.3.8.1) 70 0 R (subsubsection.4.4.1) 98 0 R (subsubsection.4.4.2) 102 0 R (subsubsection.7.1.1) 158 0 R (subsubsection.7.1.2) 162 0 R (subsubsection.7.1.3) 166 0 R (subsubsection.7.1.4) 170 0 R (subsubsection.8.1.1) 206 0 R (subsubsection.8.1.2) 210 0 R (subsubsection.8.3.1) 222 0 R (subsubsection.8.3.2) 226 0 R (subsubsection.8.3.3) 230 0 R (subsubsection.8.3.4) 234 0 R (subsubsection.8.3.5) 238 0 R (subsubsection.8.3.6) 242 0 R (subsubsection.8.3.7) 246 0 R (subsubsection.8.3.8) 250 0 R (subsubsection.8.3.9) 254 0 R (subsubsection.8.4.1) 262 0 R (subsubsection.8.4.2) 266 0 R (subsubsection.8.4.3) 270 0 R (subsubsection.8.4.4) 274 0 R (subsubsection.8.4.5) 278 0 R (subsubsection.9.1.1) 294 0 R (subsubsection.9.1.2) 298 0 R (subsubsection.9.1.3) 302 0 R (subsubsection.9.2.1) 310 0 R (subsubsection.9.2.2) 314 0 R (subsubsection.9.2.3) 318 0 R (subsubsection.9.2.4) 322 0 R (subsubsection.9.2.5) 326 0 R (subsubsection.9.2.6) 330 0 R (subsubsection.9.2.7) 334 0 R (subsubsection.9.2.8) 338 0 R] -/Limits [(Doc-Start) (subsubsection.9.2.8)] ->> endobj -1625 0 obj << -/Kids [1624 0 R] ->> endobj -1626 0 obj << -/Dests 1625 0 R ->> endobj -1627 0 obj << -/Type /Catalog -/Pages 1622 0 R -/Outlines 1623 0 R -/Names 1626 0 R -/PageMode /UseOutlines -/OpenAction 493 0 R -/PTEX.Fullbanner (This is pdfTeX, Version 3.141592-1.11b) ->> endobj -1628 0 obj << -/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.11b)/Keywords() -/CreationDate (D:20100418173909+10'00') ->> endobj -xref -0 1629 -0000000001 65535 f -0000000002 00000 f -0000000003 00000 f -0000000004 00000 f -0000000499 00000 f -0000000009 00000 n -0000054028 00000 n -0000549861 00000 n -0000000051 00000 n -0000000092 00000 n -0000054088 00000 n -0000549752 00000 n -0000000137 00000 n -0000000164 00000 n -0000054149 00000 n -0000549678 00000 n -0000000215 00000 n -0000000247 00000 n -0000058329 00000 n -0000549567 00000 n -0000000298 00000 n -0000000331 00000 n -0000084621 00000 n -0000549506 00000 n -0000000387 00000 n -0000000430 00000 n -0000088176 00000 n -0000549383 00000 n -0000000476 00000 n -0000000514 00000 n -0000088236 00000 n -0000549322 00000 n -0000000565 00000 n -0000000597 00000 n -0000111277 00000 n -0000549199 00000 n -0000000643 00000 n -0000000683 00000 n -0000111338 00000 n -0000549125 00000 n -0000000734 00000 n -0000000779 00000 n -0000114938 00000 n -0000549038 00000 n -0000000830 00000 n -0000000865 00000 n -0000119133 00000 n -0000548951 00000 n -0000000916 00000 n -0000000966 00000 n -0000134164 00000 n -0000548864 00000 n -0000001017 00000 n -0000001055 00000 n -0000193705 00000 n -0000548777 00000 n -0000001106 00000 n -0000001147 00000 n -0000202281 00000 n -0000548690 00000 n -0000001198 00000 n -0000001232 00000 n -0000210260 00000 n -0000548603 00000 n -0000001283 00000 n -0000001318 00000 n -0000213922 00000 n -0000548479 00000 n -0000001369 00000 n -0000001413 00000 n -0000213984 00000 n -0000548418 00000 n -0000001469 00000 n -0000001499 00000 n -0000214046 00000 n -0000548344 00000 n -0000001550 00000 n -0000001608 00000 n -0000218721 00000 n -0000548219 00000 n -0000001654 00000 n -0000001688 00000 n -0000218783 00000 n -0000548145 00000 n -0000001739 00000 n -0000001778 00000 n -0000218908 00000 n -0000548058 00000 n -0000001829 00000 n -0000001883 00000 n -0000226991 00000 n -0000547971 00000 n -0000001934 00000 n -0000001978 00000 n -0000227116 00000 n -0000547845 00000 n -0000002029 00000 n -0000002073 00000 n -0000231348 00000 n -0000547769 00000 n -0000002129 00000 n -0000002174 00000 n -0000231410 00000 n -0000547692 00000 n -0000002231 00000 n -0000002275 00000 n -0000235378 00000 n -0000547601 00000 n -0000002327 00000 n -0000002371 00000 n -0000239450 00000 n -0000547523 00000 n -0000002423 00000 n -0000002471 00000 n -0000260258 00000 n -0000547394 00000 n -0000002518 00000 n -0000002557 00000 n -0000260321 00000 n -0000547315 00000 n -0000002609 00000 n -0000002635 00000 n -0000272910 00000 n -0000547236 00000 n -0000002687 00000 n -0000002715 00000 n -0000276474 00000 n -0000547106 00000 n -0000002762 00000 n -0000002790 00000 n -0000276537 00000 n -0000547027 00000 n -0000002842 00000 n -0000002875 00000 n -0000287796 00000 n -0000546934 00000 n -0000002927 00000 n -0000002976 00000 n -0000287858 00000 n -0000546841 00000 n -0000003028 00000 n -0000003064 00000 n -0000291989 00000 n -0000546748 00000 n -0000003116 00000 n -0000003157 00000 n -0000295469 00000 n -0000546669 00000 n -0000003209 00000 n -0000003249 00000 n -0000299567 00000 n -0000546553 00000 n -0000003296 00000 n -0000003321 00000 n -0000299630 00000 n -0000546435 00000 n -0000003373 00000 n -0000003419 00000 n -0000299693 00000 n -0000546356 00000 n -0000003476 00000 n -0000003514 00000 n -0000304506 00000 n -0000546263 00000 n -0000003571 00000 n -0000003628 00000 n -0000308531 00000 n -0000546170 00000 n -0000003685 00000 n -0000003749 00000 n -0000308594 00000 n -0000546091 00000 n -0000003806 00000 n -0000003847 00000 n -0000308656 00000 n -0000545998 00000 n -0000003899 00000 n -0000003939 00000 n -0000312505 00000 n -0000545905 00000 n -0000003991 00000 n -0000004040 00000 n -0000312568 00000 n -0000545812 00000 n -0000004092 00000 n -0000004128 00000 n -0000313971 00000 n -0000545719 00000 n -0000004180 00000 n -0000004209 00000 n -0000314034 00000 n -0000545640 00000 n -0000004261 00000 n -0000004292 00000 n -0000317481 00000 n -0000545509 00000 n -0000004336 00000 n -0000004377 00000 n -0000317544 00000 n -0000545391 00000 n -0000004424 00000 n -0000004458 00000 n -0000317607 00000 n -0000545273 00000 n -0000004510 00000 n -0000004552 00000 n -0000317670 00000 n -0000545194 00000 n -0000004609 00000 n -0000004650 00000 n -0000317733 00000 n -0000545115 00000 n -0000004707 00000 n -0000004744 00000 n -0000317796 00000 n -0000545022 00000 n -0000004796 00000 n -0000004830 00000 n -0000320623 00000 n -0000544890 00000 n -0000004882 00000 n -0000004925 00000 n -0000320686 00000 n -0000544811 00000 n -0000004982 00000 n -0000005034 00000 n -0000323290 00000 n -0000544718 00000 n -0000005091 00000 n -0000005145 00000 n -0000323353 00000 n -0000544625 00000 n -0000005202 00000 n -0000005250 00000 n -0000326984 00000 n -0000544532 00000 n -0000005307 00000 n -0000005355 00000 n -0000327047 00000 n -0000544439 00000 n -0000005412 00000 n -0000005469 00000 n -0000331114 00000 n -0000544346 00000 n -0000005526 00000 n -0000005582 00000 n -0000334437 00000 n -0000544253 00000 n -0000005639 00000 n -0000005695 00000 n -0000334500 00000 n -0000544160 00000 n -0000005752 00000 n -0000005807 00000 n -0000337654 00000 n -0000544081 00000 n -0000005864 00000 n -0000005903 00000 n -0000337717 00000 n -0000543949 00000 n -0000005955 00000 n -0000005992 00000 n -0000337780 00000 n -0000543870 00000 n -0000006049 00000 n -0000006097 00000 n -0000337843 00000 n -0000543777 00000 n -0000006154 00000 n -0000006205 00000 n -0000340721 00000 n -0000543684 00000 n -0000006262 00000 n -0000006293 00000 n -0000344724 00000 n -0000543591 00000 n -0000006350 00000 n -0000006387 00000 n -0000347613 00000 n -0000543512 00000 n -0000006444 00000 n -0000006493 00000 n -0000347676 00000 n -0000543433 00000 n -0000006545 00000 n -0000006586 00000 n -0000347739 00000 n -0000543301 00000 n -0000006633 00000 n -0000006672 00000 n -0000347802 00000 n -0000543183 00000 n -0000006724 00000 n -0000006785 00000 n -0000347865 00000 n -0000543104 00000 n -0000006842 00000 n -0000006873 00000 n -0000351283 00000 n -0000543011 00000 n -0000006930 00000 n -0000006969 00000 n -0000351346 00000 n -0000542932 00000 n -0000007026 00000 n -0000007064 00000 n -0000355445 00000 n -0000542814 00000 n -0000007116 00000 n -0000007160 00000 n -0000355508 00000 n -0000542735 00000 n -0000007217 00000 n -0000007258 00000 n -0000359063 00000 n -0000542642 00000 n -0000007315 00000 n -0000007374 00000 n -0000362504 00000 n -0000542549 00000 n -0000007431 00000 n -0000007466 00000 n -0000362567 00000 n -0000542456 00000 n -0000007523 00000 n -0000007560 00000 n -0000366697 00000 n -0000542363 00000 n -0000007617 00000 n -0000007663 00000 n -0000366760 00000 n -0000542270 00000 n -0000007720 00000 n -0000007761 00000 n -0000370412 00000 n -0000542177 00000 n -0000007818 00000 n -0000007853 00000 n -0000370475 00000 n -0000542098 00000 n -0000007910 00000 n -0000007948 00000 n -0000370538 00000 n -0000541980 00000 n -0000007996 00000 n -0000008051 00000 n -0000370601 00000 n -0000541862 00000 n -0000008104 00000 n -0000008155 00000 n -0000370663 00000 n -0000541783 00000 n -0000008213 00000 n -0000008252 00000 n -0000370726 00000 n -0000541690 00000 n -0000008310 00000 n -0000008349 00000 n -0000373919 00000 n -0000541597 00000 n -0000008407 00000 n -0000008445 00000 n -0000373982 00000 n -0000541504 00000 n -0000008503 00000 n -0000008542 00000 n -0000374045 00000 n -0000541425 00000 n -0000008600 00000 n -0000008638 00000 n -0000374108 00000 n -0000541293 00000 n -0000008691 00000 n -0000008738 00000 n -0000374171 00000 n -0000541214 00000 n -0000008796 00000 n -0000008847 00000 n -0000374234 00000 n -0000541121 00000 n -0000008905 00000 n -0000008942 00000 n -0000377868 00000 n -0000541042 00000 n -0000009000 00000 n -0000009037 00000 n -0000377931 00000 n -0000540910 00000 n -0000009090 00000 n -0000009138 00000 n -0000377994 00000 n -0000540831 00000 n -0000009196 00000 n -0000009232 00000 n -0000378057 00000 n -0000540752 00000 n -0000009290 00000 n -0000009334 00000 n -0000378120 00000 n -0000540659 00000 n -0000009387 00000 n -0000009432 00000 n -0000381324 00000 n -0000540541 00000 n -0000009485 00000 n -0000009526 00000 n -0000381387 00000 n -0000540476 00000 n -0000009584 00000 n -0000009619 00000 n -0000384018 00000 n -0000540343 00000 n -0000009663 00000 n -0000009700 00000 n -0000384081 00000 n -0000540225 00000 n -0000009748 00000 n -0000009776 00000 n -0000384144 00000 n -0000540146 00000 n -0000009829 00000 n -0000009883 00000 n -0000387327 00000 n -0000540067 00000 n -0000009936 00000 n -0000009994 00000 n -0000391212 00000 n -0000539935 00000 n -0000010042 00000 n -0000010081 00000 n -0000395344 00000 n -0000539856 00000 n -0000010134 00000 n -0000010172 00000 n -0000399201 00000 n -0000539763 00000 n -0000010225 00000 n -0000010293 00000 n -0000403885 00000 n -0000539670 00000 n -0000010346 00000 n -0000010387 00000 n -0000407819 00000 n -0000539577 00000 n -0000010440 00000 n -0000010515 00000 n -0000412158 00000 n -0000539498 00000 n -0000010568 00000 n -0000010619 00000 n -0000416066 00000 n -0000539380 00000 n -0000010667 00000 n -0000010700 00000 n -0000416192 00000 n -0000539301 00000 n -0000010753 00000 n -0000010793 00000 n -0000420256 00000 n -0000539222 00000 n -0000010846 00000 n -0000010884 00000 n -0000423739 00000 n -0000539103 00000 n -0000010928 00000 n -0000010961 00000 n -0000427130 00000 n -0000538985 00000 n -0000011009 00000 n -0000011047 00000 n -0000427193 00000 n -0000538906 00000 n -0000011100 00000 n -0000011136 00000 n -0000430500 00000 n -0000538827 00000 n -0000011189 00000 n -0000011232 00000 n -0000433809 00000 n -0000538695 00000 n -0000011280 00000 n -0000011325 00000 n -0000433872 00000 n -0000538616 00000 n -0000011378 00000 n -0000011417 00000 n -0000433935 00000 n -0000538537 00000 n -0000011470 00000 n -0000011505 00000 n -0000438525 00000 n -0000538458 00000 n -0000011553 00000 n -0000011601 00000 n -0000013082 00000 n -0000013325 00000 n -0000011653 00000 n -0000013201 00000 n -0000013263 00000 n -0000000501 00000 f -0000536014 00000 n -0000000511 00000 f -0000535920 00000 n -0000536107 00000 n -0000022756 00000 n -0000015766 00000 n -0000013410 00000 n -0000022632 00000 n -0000535425 00000 n -0000523017 00000 n -0000535240 00000 n -0000000641 00000 f -0000522925 00000 n -0000022694 00000 n -0000016225 00000 n -0000016373 00000 n -0000016523 00000 n -0000016680 00000 n -0000016836 00000 n -0000016997 00000 n -0000017149 00000 n -0000017306 00000 n -0000017458 00000 n -0000017615 00000 n -0000017772 00000 n -0000017929 00000 n -0000018085 00000 n -0000018242 00000 n -0000018397 00000 n -0000018554 00000 n -0000018711 00000 n -0000018871 00000 n -0000019028 00000 n -0000019180 00000 n -0000019336 00000 n -0000019493 00000 n -0000019650 00000 n -0000019806 00000 n -0000019967 00000 n -0000020127 00000 n -0000020284 00000 n -0000020440 00000 n -0000020592 00000 n -0000020749 00000 n -0000020905 00000 n -0000021057 00000 n -0000021214 00000 n -0000021371 00000 n -0000021528 00000 n -0000021685 00000 n -0000021841 00000 n -0000021993 00000 n -0000022150 00000 n -0000022310 00000 n -0000022471 00000 n -0000032578 00000 n -0000025214 00000 n -0000022867 00000 n -0000032516 00000 n -0000025689 00000 n -0000025849 00000 n -0000026006 00000 n -0000026163 00000 n -0000026319 00000 n -0000026476 00000 n -0000026631 00000 n -0000026780 00000 n -0000026932 00000 n -0000027087 00000 n -0000027248 00000 n -0000027409 00000 n -0000027565 00000 n -0000027722 00000 n -0000027882 00000 n -0000028043 00000 n -0000028204 00000 n -0000028365 00000 n -0000028526 00000 n -0000028687 00000 n -0000028848 00000 n -0000029009 00000 n -0000029169 00000 n -0000029326 00000 n -0000029487 00000 n -0000029648 00000 n -0000029809 00000 n -0000029970 00000 n -0000030130 00000 n -0000030286 00000 n -0000030438 00000 n -0000030594 00000 n -0000030755 00000 n -0000030915 00000 n -0000031076 00000 n -0000031233 00000 n -0000031394 00000 n -0000031555 00000 n -0000031716 00000 n -0000031877 00000 n -0000032038 00000 n -0000032199 00000 n -0000032359 00000 n -0000041328 00000 n -0000034851 00000 n -0000032689 00000 n -0000041266 00000 n -0000035286 00000 n -0000035439 00000 n -0000035597 00000 n -0000035759 00000 n -0000035920 00000 n -0000036082 00000 n -0000036242 00000 n -0000036404 00000 n -0000036561 00000 n -0000036723 00000 n -0000036885 00000 n -0000037047 00000 n -0000037205 00000 n -0000037367 00000 n -0000037529 00000 n -0000037687 00000 n -0000037845 00000 n -0000038007 00000 n -0000038156 00000 n -0000038309 00000 n -0000038466 00000 n -0000038623 00000 n -0000038775 00000 n -0000038932 00000 n -0000039090 00000 n -0000039248 00000 n -0000039406 00000 n -0000039562 00000 n -0000039715 00000 n -0000039873 00000 n -0000040031 00000 n -0000040179 00000 n -0000040332 00000 n -0000040490 00000 n -0000040648 00000 n -0000000729 00000 f -0000522827 00000 n -0000040801 00000 n -0000040957 00000 n -0000041114 00000 n -0000050118 00000 n -0000043967 00000 n -0000041452 00000 n -0000049994 00000 n -0000050056 00000 n -0000044394 00000 n -0000044545 00000 n -0000044695 00000 n -0000044846 00000 n -0000044997 00000 n -0000045148 00000 n -0000045298 00000 n -0000045449 00000 n -0000045600 00000 n -0000045751 00000 n -0000045903 00000 n -0000046055 00000 n -0000046207 00000 n -0000046358 00000 n -0000046510 00000 n -0000046661 00000 n -0000046813 00000 n -0000046964 00000 n -0000047116 00000 n -0000047267 00000 n -0000047418 00000 n -0000047569 00000 n -0000047720 00000 n -0000047872 00000 n -0000048023 00000 n -0000048175 00000 n -0000048327 00000 n -0000048479 00000 n -0000048630 00000 n -0000048782 00000 n -0000048934 00000 n -0000049085 00000 n -0000049237 00000 n -0000049389 00000 n -0000049541 00000 n -0000049692 00000 n -0000049843 00000 n -0000058205 00000 n -0000058267 00000 n -0000063182 00000 n -0000074610 00000 n -0000079051 00000 n -0000079112 00000 n -0000084560 00000 n -0000084682 00000 n -0000111399 00000 n -0000111461 00000 n -0000114999 00000 n -0000119194 00000 n -0000129558 00000 n -0000188834 00000 n -0000188896 00000 n -0000198098 00000 n -0000198221 00000 n -0000202220 00000 n -0000206609 00000 n -0000206793 00000 n -0000218845 00000 n -0000227053 00000 n -0000231473 00000 n -0000248420 00000 n -0000256833 00000 n -0000256896 00000 n -0000284341 00000 n -0000291927 00000 n -0000304443 00000 n -0000331177 00000 n -0000381261 00000 n -0000391275 00000 n -0000395282 00000 n -0000412095 00000 n -0000416129 00000 n -0000420066 00000 n -0000423086 00000 n -0000054210 00000 n -0000053355 00000 n -0000050229 00000 n -0000053966 00000 n -0000001134 00000 f -0000522738 00000 n -0000053510 00000 n -0000053667 00000 n -0000053815 00000 n -0000058390 00000 n -0000057530 00000 n -0000054321 00000 n -0000058143 00000 n -0000057685 00000 n -0000057835 00000 n -0000057986 00000 n -0000536225 00000 n -0000063243 00000 n -0000062120 00000 n -0000058514 00000 n -0000063058 00000 n -0000062291 00000 n -0000063120 00000 n -0000062448 00000 n -0000520379 00000 n -0000518611 00000 n -0000520215 00000 n -0000062598 00000 n -0000062749 00000 n -0000062901 00000 n -0000066283 00000 n -0000074672 00000 n -0000066128 00000 n -0000063380 00000 n -0000074548 00000 n -0000074092 00000 n -0000074242 00000 n -0000074397 00000 n -0000067781 00000 n -0000068041 00000 n -0000068078 00000 n -0000068464 00000 n -0000068829 00000 n -0000069215 00000 n -0000069603 00000 n -0000070003 00000 n -0000070089 00000 n -0000072788 00000 n -0000073048 00000 n -0000073291 00000 n -0000073540 00000 n -0000073822 00000 n -0000079236 00000 n -0000078225 00000 n -0000074811 00000 n -0000078989 00000 n -0000078388 00000 n -0000078537 00000 n -0000078688 00000 n -0000079174 00000 n -0000078839 00000 n -0000084868 00000 n -0000083716 00000 n -0000079386 00000 n -0000084498 00000 n -0000516071 00000 n -0000510325 00000 n -0000515907 00000 n -0000083879 00000 n -0000084032 00000 n -0000084186 00000 n -0000084347 00000 n -0000084744 00000 n -0000084806 00000 n -0000088545 00000 n -0000087653 00000 n -0000085018 00000 n -0000088114 00000 n -0000088297 00000 n -0000087800 00000 n -0000088359 00000 n -0000087957 00000 n -0000088421 00000 n -0000088483 00000 n -0000091508 00000 n -0000090717 00000 n -0000088669 00000 n -0000091012 00000 n -0000091074 00000 n -0000091136 00000 n -0000091198 00000 n -0000091260 00000 n -0000091322 00000 n -0000090856 00000 n -0000091384 00000 n -0000091446 00000 n -0000536343 00000 n -0000094373 00000 n -0000093460 00000 n -0000091632 00000 n -0000093754 00000 n -0000093816 00000 n -0000093878 00000 n -0000093940 00000 n -0000093599 00000 n -0000094002 00000 n -0000094063 00000 n -0000094125 00000 n -0000094187 00000 n -0000094249 00000 n -0000094311 00000 n -0000097907 00000 n -0000096665 00000 n -0000094497 00000 n -0000097289 00000 n -0000097351 00000 n -0000097412 00000 n -0000097474 00000 n -0000097536 00000 n -0000097597 00000 n -0000097659 00000 n -0000096820 00000 n -0000097721 00000 n -0000096977 00000 n -0000097783 00000 n -0000097133 00000 n -0000097845 00000 n -0000099879 00000 n -0000105260 00000 n -0000111523 00000 n -0000099732 00000 n -0000098031 00000 n -0000111092 00000 n -0000111154 00000 n -0000111215 00000 n -0000110791 00000 n -0000110942 00000 n -0000100923 00000 n -0000101183 00000 n -0000101220 00000 n -0000101587 00000 n -0000101977 00000 n -0000102063 00000 n -0000104762 00000 n -0000105005 00000 n -0000106440 00000 n -0000106700 00000 n -0000106737 00000 n -0000107116 00000 n -0000107508 00000 n -0000107594 00000 n -0000110293 00000 n -0000110536 00000 n -0000115060 00000 n -0000114585 00000 n -0000111675 00000 n -0000114876 00000 n -0000114724 00000 n -0000119256 00000 n -0000118780 00000 n -0000115197 00000 n -0000119071 00000 n -0000118919 00000 n -0000123095 00000 n -0000129620 00000 n -0000122932 00000 n -0000119380 00000 n -0000129434 00000 n -0000129496 00000 n -0000128829 00000 n -0000128981 00000 n -0000129132 00000 n -0000129283 00000 n -0000536461 00000 n -0000124488 00000 n -0000124748 00000 n -0000124785 00000 n -0000125146 00000 n -0000125546 00000 n -0000125632 00000 n -0000128331 00000 n -0000128574 00000 n -0000134287 00000 n -0000133584 00000 n -0000129772 00000 n -0000134040 00000 n -0000134102 00000 n -0000133731 00000 n -0000133885 00000 n -0000134225 00000 n -0000137022 00000 n -0000162715 00000 n -0000189020 00000 n -0000136875 00000 n -0000134411 00000 n -0000188710 00000 n -0000188772 00000 n -0000188407 00000 n -0000188558 00000 n -0000188958 00000 n -0000138172 00000 n -0000138432 00000 n -0000139099 00000 n -0000139136 00000 n -0000139184 00000 n -0000139615 00000 n -0000140222 00000 n -0000140380 00000 n -0000140528 00000 n -0000140614 00000 n -0000143313 00000 n -0000144019 00000 n -0000144283 00000 n -0000144526 00000 n -0000144769 00000 n -0000145058 00000 n -0000145291 00000 n -0000145581 00000 n -0000145872 00000 n -0000146142 00000 n -0000155065 00000 n -0000163870 00000 n -0000164130 00000 n -0000164797 00000 n -0000164834 00000 n -0000164882 00000 n -0000165313 00000 n -0000165916 00000 n -0000166074 00000 n -0000166222 00000 n -0000166308 00000 n -0000169007 00000 n -0000169713 00000 n -0000169977 00000 n -0000170220 00000 n -0000170463 00000 n -0000170752 00000 n -0000170985 00000 n -0000171275 00000 n -0000171566 00000 n -0000171836 00000 n -0000180758 00000 n -0000193889 00000 n -0000192873 00000 n -0000189185 00000 n -0000193643 00000 n -0000193036 00000 n -0000193185 00000 n -0000193337 00000 n -0000193765 00000 n -0000193491 00000 n -0000193827 00000 n -0000198344 00000 n -0000197427 00000 n -0000194013 00000 n -0000198036 00000 n -0000197582 00000 n -0000198159 00000 n -0000197733 00000 n -0000198282 00000 n -0000197884 00000 n -0000202404 00000 n -0000201709 00000 n -0000198481 00000 n -0000202158 00000 n -0000201856 00000 n -0000202342 00000 n -0000202007 00000 n -0000206855 00000 n -0000206096 00000 n -0000202541 00000 n -0000206547 00000 n -0000206669 00000 n -0000206731 00000 n -0000206245 00000 n -0000206395 00000 n -0000536579 00000 n -0000210513 00000 n -0000210073 00000 n -0000207005 00000 n -0000210196 00000 n -0000210321 00000 n -0000210385 00000 n -0000210449 00000 n -0000214108 00000 n -0000213735 00000 n -0000210638 00000 n -0000213858 00000 n -0000219034 00000 n -0000218024 00000 n -0000214246 00000 n -0000218657 00000 n -0000218186 00000 n -0000218349 00000 n -0000218502 00000 n -0000218970 00000 n -0000223123 00000 n -0000222334 00000 n -0000219172 00000 n -0000222803 00000 n -0000222487 00000 n -0000222648 00000 n -0000222867 00000 n -0000222931 00000 n -0000222995 00000 n -0000223059 00000 n -0000227178 00000 n -0000226631 00000 n -0000223261 00000 n -0000226927 00000 n -0000226775 00000 n -0000231535 00000 n -0000230821 00000 n -0000227316 00000 n -0000231284 00000 n -0000230974 00000 n -0000231132 00000 n -0000536703 00000 n -0000235505 00000 n -0000235017 00000 n -0000231686 00000 n -0000235314 00000 n -0000235161 00000 n -0000235441 00000 n -0000242672 00000 n -0000239640 00000 n -0000238928 00000 n -0000235643 00000 n -0000239386 00000 n -0000239513 00000 n -0000507763 00000 n -0000503400 00000 n -0000507598 00000 n -0000500703 00000 n -0000497871 00000 n -0000500538 00000 n -0000239576 00000 n -0000239081 00000 n -0000239234 00000 n -0000248544 00000 n -0000242549 00000 n -0000239792 00000 n -0000248356 00000 n -0000248480 00000 n -0000495539 00000 n -0000493481 00000 n -0000495376 00000 n -0000243980 00000 n -0000244241 00000 n -0000244280 00000 n -0000244667 00000 n -0000245069 00000 n -0000245156 00000 n -0000247856 00000 n -0000248100 00000 n -0000252880 00000 n -0000252455 00000 n -0000248738 00000 n -0000252752 00000 n -0000252816 00000 n -0000252599 00000 n -0000256959 00000 n -0000256646 00000 n -0000253058 00000 n -0000256769 00000 n -0000260384 00000 n -0000260007 00000 n -0000257084 00000 n -0000260130 00000 n -0000260194 00000 n -0000536828 00000 n -0000263381 00000 n -0000263194 00000 n -0000260509 00000 n -0000263317 00000 n -0000266427 00000 n -0000266240 00000 n -0000263506 00000 n -0000266363 00000 n -0000269694 00000 n -0000269507 00000 n -0000266579 00000 n -0000269630 00000 n -0000272973 00000 n -0000272723 00000 n -0000269819 00000 n -0000272846 00000 n -0000276600 00000 n -0000276223 00000 n -0000273098 00000 n -0000276346 00000 n -0000276410 00000 n -0000491082 00000 n -0000487986 00000 n -0000490917 00000 n -0000485654 00000 n -0000483584 00000 n -0000485491 00000 n -0000279868 00000 n -0000279681 00000 n -0000276779 00000 n -0000279804 00000 n -0000536953 00000 n -0000284530 00000 n -0000283818 00000 n -0000279993 00000 n -0000284277 00000 n -0000283971 00000 n -0000284402 00000 n -0000000000 00000 f -0000483482 00000 n -0000284122 00000 n -0000284466 00000 n -0000287921 00000 n -0000287274 00000 n -0000284682 00000 n -0000287732 00000 n -0000287427 00000 n -0000287580 00000 n -0000292052 00000 n -0000291567 00000 n -0000288073 00000 n -0000291863 00000 n -0000291711 00000 n -0000295532 00000 n -0000295282 00000 n -0000292190 00000 n -0000295405 00000 n -0000299756 00000 n -0000299206 00000 n -0000295657 00000 n -0000299503 00000 n -0000299350 00000 n -0000304632 00000 n -0000303919 00000 n -0000299894 00000 n -0000304379 00000 n -0000304072 00000 n -0000304224 00000 n -0000304569 00000 n -0000537078 00000 n -0000308719 00000 n -0000308002 00000 n -0000304770 00000 n -0000308467 00000 n -0000308155 00000 n -0000308313 00000 n -0000312631 00000 n -0000312191 00000 n -0000308844 00000 n -0000312314 00000 n -0000312378 00000 n -0000312442 00000 n -0000314097 00000 n -0000313784 00000 n -0000312782 00000 n -0000313907 00000 n -0000317923 00000 n -0000316956 00000 n -0000314236 00000 n -0000317417 00000 n -0000317109 00000 n -0000317261 00000 n -0000317859 00000 n -0000320748 00000 n -0000320436 00000 n -0000318035 00000 n -0000320559 00000 n -0000323416 00000 n -0000323103 00000 n -0000320873 00000 n -0000323226 00000 n -0000537203 00000 n -0000327173 00000 n -0000326460 00000 n -0000323541 00000 n -0000326920 00000 n -0000326613 00000 n -0000326767 00000 n -0000327110 00000 n -0000331240 00000 n -0000330583 00000 n -0000327298 00000 n -0000331050 00000 n -0000330736 00000 n -0000330897 00000 n -0000334563 00000 n -0000334250 00000 n -0000331405 00000 n -0000334373 00000 n -0000337906 00000 n -0000337126 00000 n -0000334701 00000 n -0000337590 00000 n -0000337279 00000 n -0000337437 00000 n -0000340847 00000 n -0000340358 00000 n -0000338031 00000 n -0000340657 00000 n -0000340502 00000 n -0000340784 00000 n -0000344850 00000 n -0000344200 00000 n -0000340985 00000 n -0000344660 00000 n -0000344353 00000 n -0000344507 00000 n -0000344787 00000 n -0000537328 00000 n -0000347928 00000 n -0000347426 00000 n -0000344988 00000 n -0000347549 00000 n -0000351408 00000 n -0000351096 00000 n -0000348066 00000 n -0000351219 00000 n -0000355635 00000 n -0000355081 00000 n -0000351573 00000 n -0000355381 00000 n -0000355225 00000 n -0000355571 00000 n -0000359126 00000 n -0000358876 00000 n -0000355800 00000 n -0000358999 00000 n -0000362629 00000 n -0000362317 00000 n -0000359291 00000 n -0000362440 00000 n -0000366887 00000 n -0000366004 00000 n -0000362768 00000 n -0000366633 00000 n -0000366166 00000 n -0000366320 00000 n -0000366470 00000 n -0000366823 00000 n -0000537453 00000 n -0000370789 00000 n -0000370225 00000 n -0000367025 00000 n -0000370348 00000 n -0000374297 00000 n -0000373732 00000 n -0000370927 00000 n -0000373855 00000 n -0000378183 00000 n -0000377681 00000 n -0000374449 00000 n -0000377804 00000 n -0000381450 00000 n -0000380902 00000 n -0000378347 00000 n -0000381197 00000 n -0000381046 00000 n -0000384399 00000 n -0000383831 00000 n -0000381588 00000 n -0000383954 00000 n -0000384207 00000 n -0000384271 00000 n -0000384335 00000 n -0000387454 00000 n -0000386576 00000 n -0000384524 00000 n -0000386879 00000 n -0000386943 00000 n -0000386720 00000 n -0000387007 00000 n -0000387071 00000 n -0000387135 00000 n -0000387199 00000 n -0000387263 00000 n -0000387390 00000 n -0000537578 00000 n -0000391402 00000 n -0000389943 00000 n -0000387592 00000 n -0000390893 00000 n -0000390957 00000 n -0000391021 00000 n -0000391085 00000 n -0000391148 00000 n -0000390123 00000 n -0000390282 00000 n -0000390438 00000 n -0000390591 00000 n -0000390743 00000 n -0000391338 00000 n -0000395407 00000 n -0000394601 00000 n -0000391555 00000 n -0000395218 00000 n -0000394763 00000 n -0000394915 00000 n -0000395068 00000 n -0000399263 00000 n -0000398841 00000 n -0000395586 00000 n -0000399137 00000 n -0000398985 00000 n -0000479257 00000 n -0000477189 00000 n -0000479094 00000 n -0000404140 00000 n -0000403195 00000 n -0000399429 00000 n -0000403821 00000 n -0000403357 00000 n -0000403948 00000 n -0000403512 00000 n -0000403665 00000 n -0000404012 00000 n -0000404076 00000 n -0000407882 00000 n -0000407632 00000 n -0000404305 00000 n -0000407755 00000 n -0000412285 00000 n -0000411570 00000 n -0000408007 00000 n -0000412031 00000 n -0000411723 00000 n -0000411879 00000 n -0000412221 00000 n -0000537703 00000 n -0000416255 00000 n -0000415384 00000 n -0000412423 00000 n -0000416002 00000 n -0000415546 00000 n -0000415699 00000 n -0000415850 00000 n -0000420319 00000 n -0000419879 00000 n -0000416393 00000 n -0000420002 00000 n -0000420128 00000 n -0000420192 00000 n -0000423148 00000 n -0000422395 00000 n -0000420484 00000 n -0000423022 00000 n -0000422557 00000 n -0000422710 00000 n -0000422863 00000 n -0000423802 00000 n -0000423552 00000 n -0000423288 00000 n -0000423675 00000 n -0000427256 00000 n -0000426596 00000 n -0000423888 00000 n -0000427066 00000 n -0000426749 00000 n -0000426903 00000 n -0000430563 00000 n -0000430313 00000 n -0000427381 00000 n -0000430436 00000 n -0000474846 00000 n -0000473110 00000 n -0000474680 00000 n -0000537828 00000 n -0000433998 00000 n -0000433622 00000 n -0000430716 00000 n -0000433745 00000 n -0000435825 00000 n -0000435574 00000 n -0000434136 00000 n -0000435697 00000 n -0000435761 00000 n -0000438588 00000 n -0000438165 00000 n -0000435950 00000 n -0000438461 00000 n -0000438309 00000 n -0000455957 00000 n -0000441081 00000 n -0000438700 00000 n -0000455829 00000 n -0000455893 00000 n -0000442044 00000 n -0000442194 00000 n -0000442345 00000 n -0000442495 00000 n -0000442644 00000 n -0000442794 00000 n -0000442944 00000 n -0000443095 00000 n -0000443245 00000 n -0000443394 00000 n -0000443543 00000 n -0000443691 00000 n -0000443841 00000 n -0000443991 00000 n -0000444141 00000 n -0000444290 00000 n -0000444440 00000 n -0000444590 00000 n -0000444740 00000 n -0000444890 00000 n -0000445041 00000 n -0000445191 00000 n -0000445341 00000 n -0000445490 00000 n -0000445640 00000 n -0000445789 00000 n -0000445939 00000 n -0000446088 00000 n -0000446238 00000 n -0000446388 00000 n -0000446538 00000 n -0000446688 00000 n -0000446837 00000 n -0000446987 00000 n -0000447137 00000 n -0000447287 00000 n -0000447437 00000 n -0000447587 00000 n -0000447736 00000 n -0000447886 00000 n -0000448035 00000 n -0000448185 00000 n -0000448335 00000 n -0000448485 00000 n -0000448634 00000 n -0000448784 00000 n -0000448935 00000 n -0000449085 00000 n -0000449235 00000 n -0000449384 00000 n -0000449534 00000 n -0000449684 00000 n -0000449834 00000 n -0000449985 00000 n -0000450135 00000 n -0000450284 00000 n -0000450433 00000 n -0000450583 00000 n -0000450734 00000 n -0000450884 00000 n -0000451034 00000 n -0000451185 00000 n -0000451335 00000 n -0000451485 00000 n -0000451635 00000 n -0000451785 00000 n -0000451935 00000 n -0000452085 00000 n -0000452235 00000 n -0000452384 00000 n -0000452534 00000 n -0000452683 00000 n -0000452833 00000 n -0000452982 00000 n -0000453132 00000 n -0000453282 00000 n -0000453431 00000 n -0000453581 00000 n -0000453731 00000 n -0000453881 00000 n -0000454032 00000 n -0000454182 00000 n -0000454332 00000 n -0000454482 00000 n -0000454632 00000 n -0000454782 00000 n -0000454931 00000 n -0000455081 00000 n -0000455231 00000 n -0000455381 00000 n -0000455530 00000 n -0000455680 00000 n -0000472985 00000 n -0000458172 00000 n -0000456056 00000 n -0000472921 00000 n -0000459135 00000 n -0000459284 00000 n -0000459433 00000 n -0000459584 00000 n -0000459734 00000 n -0000459884 00000 n -0000460033 00000 n -0000460183 00000 n -0000460331 00000 n -0000460481 00000 n -0000460631 00000 n -0000460780 00000 n -0000460930 00000 n -0000461079 00000 n -0000461229 00000 n -0000461378 00000 n -0000461528 00000 n -0000461678 00000 n -0000461827 00000 n -0000461977 00000 n -0000462127 00000 n -0000462277 00000 n -0000462426 00000 n -0000462575 00000 n -0000462726 00000 n -0000462877 00000 n -0000463027 00000 n -0000463176 00000 n -0000463325 00000 n -0000463476 00000 n -0000463626 00000 n -0000463775 00000 n -0000463925 00000 n -0000464074 00000 n -0000464224 00000 n -0000464373 00000 n -0000464524 00000 n -0000464674 00000 n -0000464825 00000 n -0000464975 00000 n -0000465125 00000 n -0000465276 00000 n -0000465426 00000 n -0000465576 00000 n -0000465727 00000 n -0000465877 00000 n -0000466026 00000 n -0000466176 00000 n -0000466326 00000 n -0000466476 00000 n -0000466625 00000 n -0000466775 00000 n -0000466925 00000 n -0000467076 00000 n -0000467227 00000 n -0000467378 00000 n -0000467528 00000 n -0000467678 00000 n -0000467827 00000 n -0000467977 00000 n -0000468126 00000 n -0000468275 00000 n -0000468425 00000 n -0000468575 00000 n -0000468725 00000 n -0000468874 00000 n -0000469023 00000 n -0000469172 00000 n -0000469322 00000 n -0000469472 00000 n -0000469622 00000 n -0000469772 00000 n -0000469921 00000 n -0000470071 00000 n -0000470221 00000 n -0000470370 00000 n -0000470520 00000 n -0000470671 00000 n -0000470821 00000 n -0000470971 00000 n -0000471122 00000 n -0000471272 00000 n -0000471421 00000 n -0000471572 00000 n -0000471722 00000 n -0000471871 00000 n -0000472022 00000 n -0000472172 00000 n -0000472322 00000 n -0000472472 00000 n -0000472621 00000 n -0000472771 00000 n -0000475080 00000 n -0000475055 00000 n -0000479503 00000 n -0000479474 00000 n -0000481615 00000 n -0000485887 00000 n -0000485858 00000 n -0000491404 00000 n -0000491291 00000 n -0000495772 00000 n -0000495743 00000 n -0000501277 00000 n -0000500991 00000 n -0000508253 00000 n -0000508022 00000 n -0000516591 00000 n -0000516326 00000 n -0000520626 00000 n -0000520597 00000 n -0000535747 00000 n -0000537953 00000 n -0000538075 00000 n -0000538201 00000 n -0000538300 00000 n -0000538382 00000 n -0000549973 00000 n -0000557862 00000 n -0000557903 00000 n -0000557943 00000 n -0000558135 00000 n -trailer -<< -/Size 1629 -/Root 1627 0 R -/Info 1628 0 R -/ID [ ] ->> -startxref -558299 -%%EOF diff --git a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Doc/gppg.pdf b/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Doc/gppg.pdf deleted file mode 100644 index a127aaf41..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Doc/gppg.pdf +++ /dev/null @@ -1,6156 +0,0 @@ -%PDF-1.4 -5 0 obj -<< /S /GoTo /D (section.1) >> -endobj -8 0 obj -(Overview) -endobj -9 0 obj -<< /S /GoTo /D (subsection.1.1) >> -endobj -12 0 obj -(Installing GPPG) -endobj -13 0 obj -<< /S /GoTo /D (subsection.1.2) >> -endobj -16 0 obj -(Running GPPG) -endobj -17 0 obj -<< /S /GoTo /D (subsection.1.3) >> -endobj -20 0 obj -(Using GPPG Parsers) -endobj -21 0 obj -<< /S /GoTo /D (subsection.1.4) >> -endobj -24 0 obj -(Outputs) -endobj -25 0 obj -<< /S /GoTo /D (subsection.1.5) >> -endobj -28 0 obj -(Scanner Interface) -endobj -29 0 obj -<< /S /GoTo /D (subsection.1.6) >> -endobj -32 0 obj -(Instantiating the Parser Object) -endobj -33 0 obj -<< /S /GoTo /D (subsection.1.7) >> -endobj -36 0 obj -(Using GPPG Parsers with Non-LEX Scanners) -endobj -37 0 obj -<< /S /GoTo /D (section.2) >> -endobj -40 0 obj -(Input Grammar) -endobj -41 0 obj -<< /S /GoTo /D (subsection.2.1) >> -endobj -44 0 obj -(Input Grammar Structure) -endobj -45 0 obj -<< /S /GoTo /D (subsection.2.2) >> -endobj -48 0 obj -(Declarations) -endobj -49 0 obj -<< /S /GoTo /D (subsubsection.2.2.1) >> -endobj -52 0 obj -(Declaring Tokens) -endobj -53 0 obj -<< /S /GoTo /D (subsubsection.2.2.2) >> -endobj -56 0 obj -(Token Precedence) -endobj -57 0 obj -<< /S /GoTo /D (subsubsection.2.2.3) >> -endobj -60 0 obj -(Declaring Non-Terminal Symbol Types) -endobj -61 0 obj -<< /S /GoTo /D (subsection.2.3) >> -endobj -64 0 obj -(Extensions to the Declaration Grammar) -endobj -65 0 obj -<< /S /GoTo /D (subsubsection.2.3.1) >> -endobj -68 0 obj -(Declaring an Output Filepath) -endobj -69 0 obj -<< /S /GoTo /D (subsubsection.2.3.2) >> -endobj -72 0 obj -(Creating a Token Definitions File) -endobj -73 0 obj -<< /S /GoTo /D (subsubsection.2.3.3) >> -endobj -76 0 obj -(Choosing the Namespace ---) -endobj -77 0 obj -<< /S /GoTo /D (subsubsection.2.3.4) >> -endobj -80 0 obj -(Naming Types) -endobj -81 0 obj -<< /S /GoTo /D (subsubsection.2.3.5) >> -endobj -84 0 obj -(Defining a Semantic Value Type) -endobj -85 0 obj -<< /S /GoTo /D (subsubsection.2.3.6) >> -endobj -88 0 obj -(Choosing the Semantic Value Type Name ---) -endobj -89 0 obj -<< /S /GoTo /D (subsubsection.2.3.7) >> -endobj -92 0 obj -(Choosing the Location Type Name ---) -endobj -93 0 obj -<< /S /GoTo /D (subsubsection.2.3.8) >> -endobj -96 0 obj -(Partial Types) -endobj -97 0 obj -<< /S /GoTo /D (subsubsection.2.3.9) >> -endobj -100 0 obj -(Using Declarations ---) -endobj -101 0 obj -<< /S /GoTo /D (subsubsection.2.3.10) >> -endobj -104 0 obj -(Colorizing Scanners and maxParseToken) -endobj -105 0 obj -<< /S /GoTo /D (subsubsection.2.3.11) >> -endobj -108 0 obj -(Colorizing Scanners and Managed Babel) -endobj -109 0 obj -<< /S /GoTo /D (subsection.2.4) >> -endobj -112 0 obj -(Production Rules) -endobj -113 0 obj -<< /S /GoTo /D (subsubsection.2.4.1) >> -endobj -116 0 obj -(Semantic Action Syntax) -endobj -117 0 obj -<< /S /GoTo /D (subsubsection.2.4.2) >> -endobj -120 0 obj -(Controlling Precedence) -endobj -121 0 obj -<< /S /GoTo /D (subsubsection.2.4.3) >> -endobj -124 0 obj -(Mid-Rule Actions) -endobj -125 0 obj -<< /S /GoTo /D (subsubsection.2.4.4) >> -endobj -128 0 obj -(Right-Hand-Side Syntax) -endobj -129 0 obj -<< /S /GoTo /D (subsection.2.5) >> -endobj -132 0 obj -(Semantic Actions) -endobj -133 0 obj -<< /S /GoTo /D (subsubsection.2.5.1) >> -endobj -136 0 obj -(Default Semantic Action) -endobj -137 0 obj -<< /S /GoTo /D (subsection.2.6) >> -endobj -140 0 obj -(Location Tracking) -endobj -141 0 obj -<< /S /GoTo /D (subsubsection.2.6.1) >> -endobj -144 0 obj -(Location Actions) -endobj -145 0 obj -<< /S /GoTo /D (subsubsection.2.6.2) >> -endobj -148 0 obj -(Default Location Type) -endobj -149 0 obj -<< /S /GoTo /D (subsubsection.2.6.3) >> -endobj -152 0 obj -(Supplying a Different Location Type) -endobj -153 0 obj -<< /S /GoTo /D (subsubsection.2.6.4) >> -endobj -156 0 obj -(Special Behavior for Empty Productions) -endobj -157 0 obj -<< /S /GoTo /D (section.3) >> -endobj -160 0 obj -(Errors, Diagnostics and Warnings) -endobj -161 0 obj -<< /S /GoTo /D (subsection.3.1) >> -endobj -164 0 obj -(Error Messages) -endobj -165 0 obj -<< /S /GoTo /D (subsubsection.3.1.1) >> -endobj -168 0 obj -(Non-Terminating Diagnostics) -endobj -169 0 obj -<< /S /GoTo /D (subsection.3.2) >> -endobj -172 0 obj -(Warning Messages) -endobj -173 0 obj -<< /S /GoTo /D (subsection.3.3) >> -endobj -176 0 obj -(Non-Terminating Grammars) -endobj -177 0 obj -<< /S /GoTo /D (subsection.3.4) >> -endobj -180 0 obj -(Parser Conflict Messages) -endobj -181 0 obj -<< /S /GoTo /D (subsubsection.3.4.1) >> -endobj -184 0 obj -(Reduce/Reduce Conflicts) -endobj -185 0 obj -<< /S /GoTo /D (subsubsection.3.4.2) >> -endobj -188 0 obj -(Shift/Reduce Conflicts) -endobj -189 0 obj -<< /S /GoTo /D (subsection.3.5) >> -endobj -192 0 obj -(Conflict Diagnostics) -endobj -193 0 obj -<< /S /GoTo /D (subsubsection.3.5.1) >> -endobj -196 0 obj -(The Report Option) -endobj -197 0 obj -<< /S /GoTo /D (section.4) >> -endobj -200 0 obj -(Error Handling in GPPG Parsers) -endobj -201 0 obj -<< /S /GoTo /D (subsection.4.1) >> -endobj -204 0 obj -(Parser Action) -endobj -205 0 obj -<< /S /GoTo /D (subsection.4.2) >> -endobj -208 0 obj -(Overriding the Default Error Handling) -endobj -209 0 obj -<< /S /GoTo /D (section.5) >> -endobj -212 0 obj -(Advanced Topics) -endobj -213 0 obj -<< /S /GoTo /D (subsection.5.1) >> -endobj -216 0 obj -(Runtime Shift-Reduce Engine) -endobj -217 0 obj -<< /S /GoTo /D (subsubsection.5.1.1) >> -endobj -220 0 obj -(Using the Runtime DLL) -endobj -221 0 obj -<< /S /GoTo /D (subsubsection.5.1.2) >> -endobj -224 0 obj -(Using the Source Code File) -endobj -225 0 obj -<< /S /GoTo /D (subsection.5.2) >> -endobj -228 0 obj -(Applications with Multiple Parsers) -endobj -229 0 obj -<< /S /GoTo /D (subsubsection.5.2.1) >> -endobj -232 0 obj -(Parsers in Separate Assemblies) -endobj -233 0 obj -<< /S /GoTo /D (subsubsection.5.2.2) >> -endobj -236 0 obj -(All Parsers in a Shared Assembly) -endobj -237 0 obj -<< /S /GoTo /D (subsubsection.5.2.3) >> -endobj -240 0 obj -(Single-Assembly Applications) -endobj -241 0 obj -<< /S /GoTo /D (subsection.5.3) >> -endobj -244 0 obj -(Multiple Parser Instances) -endobj -245 0 obj -<< /S /GoTo /D (subsubsection.5.3.1) >> -endobj -248 0 obj -(Sharing Parser Tables) -endobj -249 0 obj -<< /S /GoTo /D (section.6) >> -endobj -252 0 obj -(Notes) -endobj -253 0 obj -<< /S /GoTo /D (subsection.6.1) >> -endobj -256 0 obj -(Copyright) -endobj -257 0 obj -<< /S /GoTo /D (subsection.6.2) >> -endobj -260 0 obj -(Bug Reports) -endobj -261 0 obj -<< /S /GoTo /D (section.7) >> -endobj -264 0 obj -(Examples) -endobj -265 0 obj -<< /S /GoTo /D (subsection.7.1) >> -endobj -268 0 obj -(Integer Calculator) -endobj -269 0 obj -<< /S /GoTo /D (subsubsection.7.1.1) >> -endobj -272 0 obj -(Running the Program) -endobj -273 0 obj -<< /S /GoTo /D (subsection.7.2) >> -endobj -276 0 obj -(Real Number Calculator) -endobj -277 0 obj -<< /S /GoTo /D (subsubsection.7.2.1) >> -endobj -280 0 obj -(Running the Program) -endobj -281 0 obj -<< /S /GoTo /D (section.8) >> -endobj -284 0 obj -(Appendix A: GPPG Special Symbols) -endobj -285 0 obj -<< /S /GoTo /D (subsection.8.1) >> -endobj -288 0 obj -(Keyword Commands) -endobj -289 0 obj -<< /S /GoTo /D (subsection.8.2) >> -endobj -292 0 obj -(Semantic Action Symbols) -endobj -293 0 obj -<< /S /GoTo /D (section.9) >> -endobj -296 0 obj -(Appendix B: Shift-Reduce Parsing Refresher) -endobj -297 0 obj -<< /S /GoTo /D (subsection.9.1) >> -endobj -300 0 obj -(Some Definitions) -endobj -301 0 obj -<< /S /GoTo /D (subsection.9.2) >> -endobj -304 0 obj -(How Shift-Reduce Parsing Works) -endobj -305 0 obj -<< /S /GoTo /D (subsection.9.3) >> -endobj -308 0 obj -(What Can Go Wrong) -endobj -309 0 obj -<< /S /GoTo /D [310 0 R /Fit ] >> -endobj -312 0 obj << -/Length 1664 -/Filter /FlateDecode ->> -stream -xڥXێH}WXG"M_}yE0,^$ࡓxk;k; vL ]!nWu]OUu8HH2E,ϳhhLK& jS-\rs+rxD$Lf 1|;{BHL -Es4nm1_H뛛k ۶+@)ꢵ}?޾"5S:q"%3"s?pqjB5w,̅1 weS{=ijߖ_J.be@'&b S&x2N}l>?C\}C~K*"-XSTL>#sEcL2; d.G)炈L/g)kdfJ%L8~_ތ@GΤJ*ǝW#9#Äv,ç̀n7i#NS0"1ށ]n|sŵJ "T1ݷehۣq]a Kd0O>h&ı ɡT`o=P#9|enqmp @8+%ִ=blKi\&VNI"R~uWhoFMߗG3N*_,v" "^-KMgE"ynIus g@HwNbdP{όP0ˆtТ.bla.5aFIk2c[yb?4˪%Q<9OLѕڳ!z'A -" 8‹}UˇZ1Pd5Xx{)DaZIIZiRp_y6R?M(!b -=yYfZwX$ߍc{wp>{H>,d~7hQak)5$lxF8hqsz@gN]1J? -H E/WR=&:+lp"~}-7M?u"wO ݂>-u$̂-|ڗfPH<Ȋ݃_>fMAyt07J0w0{f9͎nE}* -}[,&L&|&I &aUIlxJII E綧XBvݳsn >3˻ݲh0HhJևqӢ(G7L  -O}^uz2r[1T?no0=RwdR{edީ3˻0_hFx%cH|- &?GF]%3.!exhy&&Z] xPui7uӕ{pC管~H|oZ㜮!\L'֏:G.Ȧf-!i.4דzO -k.(oW0thZeGqB9əI$fP/@N+endstream -endobj -310 0 obj << -/Type /Page -/Contents 312 0 R -/Resources 311 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 319 0 R ->> endobj -313 0 obj << -/D [310 0 R /XYZ 125.858 740.998 null] ->> endobj -314 0 obj << -/D [310 0 R /XYZ 125.858 716.092 null] ->> endobj -311 0 obj << -/Font << /F32 316 0 R /F34 318 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -322 0 obj << -/Length 2512 -/Filter /FlateDecode ->> -stream -xr$Bg\^VYl\,Eᮕ04 N*>rE7C#U9Y]W3>o~&b4Lg_i1Ymhvup?/߽]L9WJh*政|gg3PԶfMÛ#]q˄Zvm]TJ&d*8wMoTVc},/\k6f -cնk:~PZŸN~>?}xmY3!bL/C׺53U5λB}A=ҩ 4jԄ*.G?n:JG;iIJ2-yFp9j\;ނQfϥ87)'ŒͶl'S?ѰsߠIP>:巎]U4zC#A8d)jTjƫ&"7vsfN2OaFpEH%  %"B[NVݢBW܃nEWvMNTl2M* -JTK5 9FR+fxv - :sfaFmRǎюѴsNBijZJ .*&MwBǕ*(7mF~>Rؕ|mvnnSLqES/P)&WciHRK9nLXyG/+AQ&p8IR-$ԄU ;2Z2UD<KUg׿Wy -k=G݋1"ޅ(9E,řVv}XϦ*LfJ$ZR) R!DtSJO0_M\8.VDqp^ywnÒ@p ')90Q[gT9.kzo0p#l{.2H‰ OB.d".Mt}( _-I{ׄ:6SjɤB&LHĄ&dV@ rȸrMzƗp|>JrjFCt\_ua)9x518l@PZ@ fu.Wf=>اQJ"&p$MJr@E:&IY\NCVfI(,bh9gQ!,`lIv/ڛf"WbUzqvQui)EWO97t=Fʁ{rNKe㆔'6OoW뭟Ay4;XW8pӕK_Wpk&oK|\>۟*Ч&O zցKO %RVT&|>"Ia||gbch#ȞHtwV 9C [GIΤO.w4+̔!)9`gdDTuj҄ .xp-kVٔYU~ż{hSGqsi ZDp#`HR"q!}g<+|^YWYm4d _Y^zY\uq֚XLr0B),/_k=ɚBx-+endstream -endobj -321 0 obj << -/Type /Page -/Contents 322 0 R -/Resources 320 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 319 0 R -/Annots [ 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R 345 0 R 346 0 R 347 0 R 348 0 R 349 0 R 350 0 R 351 0 R 352 0 R 353 0 R 354 0 R 355 0 R 356 0 R 357 0 R 358 0 R 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R 373 0 R 374 0 R 375 0 R ] ->> endobj -330 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 682.682 182.545 691.723] -/Subtype /Link -/A << /S /GoTo /D (section.1) >> ->> endobj -331 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 668.754 231.402 679.698] -/Subtype /Link -/A << /S /GoTo /D (subsection.1.1) >> ->> endobj -332 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 656.799 228.084 667.743] -/Subtype /Link -/A << /S /GoTo /D (subsection.1.2) >> ->> endobj -333 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 644.844 248.677 655.788] -/Subtype /Link -/A << /S /GoTo /D (subsection.1.3) >> ->> endobj -334 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 632.889 196.264 643.832] -/Subtype /Link -/A << /S /GoTo /D (subsection.1.4) >> ->> endobj -335 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 622.951 234.59 631.877] -/Subtype /Link -/A << /S /GoTo /D (subsection.1.5) >> ->> endobj -336 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 608.978 285.478 619.922] -/Subtype /Link -/A << /S /GoTo /D (subsection.1.6) >> ->> endobj -337 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 597.023 348.452 607.967] -/Subtype /Link -/A << /S /GoTo /D (subsection.1.7) >> ->> endobj -338 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 575.235 211.257 586.119] -/Subtype /Link -/A << /S /GoTo /D (section.2) >> ->> endobj -339 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 563.15 265.424 574.094] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.1) >> ->> endobj -340 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 553.133 215.063 562.139] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.2) >> ->> endobj -341 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 539.24 266.799 550.184] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.2.1) >> ->> endobj -342 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 529.327 269.001 538.228] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.2.2) >> ->> endobj -343 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 515.329 354.2 526.273] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.2.3) >> ->> endobj -344 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 505.392 322.977 514.318] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.3) >> ->> endobj -345 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 491.419 313.085 502.363] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.1) >> ->> endobj -346 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 479.464 329.632 490.408] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.2) >> ->> endobj -347 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 467.509 310.315 478.453] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.3) >> ->> endobj -348 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 455.554 254.734 466.497] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.4) >> ->> endobj -349 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 443.598 325.289 454.542] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.5) >> ->> endobj -350 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 431.643 375.102 442.587] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.6) >> ->> endobj -351 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 419.688 348.263 430.632] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.7) >> ->> endobj -352 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 407.733 248.498 418.677] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.8) >> ->> endobj -353 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 395.778 285.688 406.722] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.9) >> ->> endobj -354 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 383.823 359.311 394.791] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.10) >> ->> endobj -355 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 371.867 360.208 382.836] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.11) >> ->> endobj -356 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 361.93 233.623 370.856] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.4) >> ->> endobj -357 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 347.957 293.449 358.901] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.4.1) >> ->> endobj -358 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 336.002 290.39 346.946] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.4.2) >> ->> endobj -359 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 326.064 268.821 334.991] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.4.3) >> ->> endobj -360 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 312.092 294.833 323.035] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.4.4) >> ->> endobj -361 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 302.074 235.277 311.08] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.5) >> ->> endobj -362 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 290.119 295.55 299.125] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.5.1) >> ->> endobj -363 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 276.226 238.236 287.17] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.6) >> ->> endobj -364 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 266.288 265.494 275.215] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.6.1) >> ->> endobj -365 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 252.316 286.445 263.26] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.6.2) >> ->> endobj -366 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 240.361 343.301 251.304] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.6.3) >> ->> endobj -367 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 228.405 357.996 239.349] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.6.4) >> ->> endobj -368 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 206.617 286.395 217.501] -/Subtype /Link -/A << /S /GoTo /D (section.3) >> ->> endobj -369 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 194.532 226.958 205.476] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.1) >> ->> endobj -370 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 182.577 315.157 193.521] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.3.1.1) >> ->> endobj -371 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 170.622 239.999 181.566] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.2) >> ->> endobj -372 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 158.667 278.285 169.611] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.3) >> ->> endobj -373 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 146.712 265.284 157.656] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.4) >> ->> endobj -374 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 136.774 297.593 145.7] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.3.4.1) >> ->> endobj -375 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 124.819 287.092 133.745] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.3.4.2) >> ->> endobj -323 0 obj << -/D [321 0 R /XYZ 125.858 740.998 null] ->> endobj -329 0 obj << -/D [321 0 R /XYZ 125.858 695.552 null] ->> endobj -320 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F34 318 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -378 0 obj << -/Length 2446 -/Filter /FlateDecode ->> -stream -xMs6+|OyflǻNfR*hY+*J4HE=$ iKh|%Q&, 2}6_KG58I`~Jгd_4[kt{3'L&OW/wg8u5I9.gʈTf 鄝"e M>oI{ڏeX՛m9ߘ#2$9eN im&_d(=LC$LeT8z?=b]7~QE(iqFc/'ذ&U+'L~ /fLn:2?bYVݧꪂeplUښz,#& $,Mu"G,x -#dRvن)-.]B 2JF6meѐ|!r+ 64?}18)>ֶP|,ڐ-m5\ ;PPox y@{rkSD7&\,y>glTIW<dTL,}mOvrW,vs?z,+3y"I g¼736Dcr9"ISտluEeP!lx{;-Sk_teoGAyC)Gz׸tP/+Hr 2!rCFQ,XP9sӞLu+aqz,\6ۧOfw<X*7# -|i&!r>s"Jam)yo- eYÿeΊ!CÑFq$$Gy$Rb<!ܵyӶ,"@-g'KÎ -iAh`r"iFR'40,I_fK)_4b#pEyFxBR,n3U'7f ;0uIS^z87LsC|P /ub -`TԎ07 -<<=C_)nzR .s_~fܔOD!;owJhpx8Fpp6x8r.09WoaLĆo-lӎ3ӺqEpbr얔$wWƲTs ` r[[A)z13B_ oΤ "ǵ,,PK=?? j;|s> GB`r"-Ut\+ry9O2&N9q㸼MV>.-*3))If&7 <=Cהpm hw3fr^բf? sS -|Nżt:}^KsJG\8TJJiLnnwzʫ|uz:gd~` /gӆ* s˔,.R/M:yqbQXByb{r DO-ƚ]#;^xho'3-SvrS~Z1oIªvΜq JŃڴAA B|@h Хc|UVJ6r~5=r1FqLx*1!r@Vro]lumq4i7b((.trݾi͞P3Hb/iޖ~Gxe î̚")I:c/)誔 R QFC{_Уj=ӖSxܦsmt7\q8p "(|q[ş{~Z'l{8 Wsl5ϖfݶ?lohԮׅ=^\ڗ+3bUT%,[qSb!@SxW/ -^{x\$9O2IG’O]Zz1 *8ӎgb g96402sհn*o\ N.nSOqGFQhAC4LCӜd:Z~8/Gd0̲iEizD݈pQDm@P9O$RFXۀ\Dە@y XLm`z8SL΃A<@G`aC:l$rf 5mx:z풌#heog8EPP9,&Q1y8eHh͡RXƼ -3y2@Z/t{8]LE<]puk;6^:Nsy~U1.f-!҄œY!lo':~y'a $J-o&wCStSXs_}q݆Lu7 <}&"ͮ -5oA9$)endstream -endobj -377 0 obj << -/Type /Page -/Contents 378 0 R -/Resources 376 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 319 0 R -/Annots [ 380 0 R 381 0 R 382 0 R 385 0 R 386 0 R 387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 394 0 R 395 0 R 396 0 R 397 0 R 398 0 R 399 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R ] ->> endobj -380 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 702.976 246.355 713.92] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.5) >> ->> endobj -381 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 691.021 271.86 701.964] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.3.5.1) >> ->> endobj -382 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 669.232 283.207 680.116] -/Subtype /Link -/A << /S /GoTo /D (section.4) >> ->> endobj -385 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 659.085 219.068 668.091] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.1) >> ->> endobj -386 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 645.192 318.295 656.136] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.2) >> ->> endobj -387 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 623.404 214.126 634.288] -/Subtype /Link -/A << /S /GoTo /D (section.5) >> ->> endobj -388 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 611.319 284.811 622.263] -/Subtype /Link -/A << /S /GoTo /D (subsection.5.1) >> ->> endobj -389 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 599.364 292.661 610.308] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.5.1.1) >> ->> endobj -390 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 587.409 306.729 598.353] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.5.1.2) >> ->> endobj -391 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 575.454 303.759 586.398] -/Subtype /Link -/A << /S /GoTo /D (subsection.5.2) >> ->> endobj -392 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 563.499 320.676 574.443] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.5.2.1) >> ->> endobj -393 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 551.544 330.091 562.487] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.5.2.2) >> ->> endobj -394 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 539.588 318.634 550.532] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.5.2.3) >> ->> endobj -395 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 527.633 265.832 538.577] -/Subtype /Link -/A << /S /GoTo /D (subsection.5.3) >> ->> endobj -396 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 515.678 283.078 526.622] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.5.3.1) >> ->> endobj -397 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 495.733 165.589 504.774] -/Subtype /Link -/A << /S /GoTo /D (section.6) >> ->> endobj -398 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 481.805 205.021 492.749] -/Subtype /Link -/A << /S /GoTo /D (subsection.6.1) >> ->> endobj -399 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 469.85 214.804 480.794] -/Subtype /Link -/A << /S /GoTo /D (subsection.6.2) >> ->> endobj -400 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 448.062 183.312 458.946] -/Subtype /Link -/A << /S /GoTo /D (section.7) >> ->> endobj -401 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 435.977 236.771 446.921] -/Subtype /Link -/A << /S /GoTo /D (subsection.7.1) >> ->> endobj -402 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 424.022 282.38 434.966] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.7.1.1) >> ->> endobj -403 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 414.084 262.106 423.01] -/Subtype /Link -/A << /S /GoTo /D (subsection.7.2) >> ->> endobj -404 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 400.112 282.38 411.055] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.7.2.1) >> ->> endobj -405 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 378.323 296.537 389.207] -/Subtype /Link -/A << /S /GoTo /D (section.8) >> ->> endobj -406 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 366.239 249.165 377.182] -/Subtype /Link -/A << /S /GoTo /D (subsection.8.1) >> ->> endobj -407 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 354.283 268.771 365.227] -/Subtype /Link -/A << /S /GoTo /D (subsection.8.2) >> ->> endobj -408 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 332.495 332.76 343.379] -/Subtype /Link -/A << /S /GoTo /D (section.9) >> ->> endobj -409 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 322.348 234.181 331.354] -/Subtype /Link -/A << /S /GoTo /D (subsection.9.1) >> ->> endobj -410 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 308.455 299.376 319.399] -/Subtype /Link -/A << /S /GoTo /D (subsection.9.2) >> ->> endobj -411 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 296.5 249.653 307.444] -/Subtype /Link -/A << /S /GoTo /D (subsection.9.3) >> ->> endobj -413 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 240.61 251.854 251.554] -/Subtype /Link -/A << /S /GoTo /D (figure.1) >> ->> endobj -414 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 230.632 276.921 239.598] -/Subtype /Link -/A << /S /GoTo /D (figure.2) >> ->> endobj -415 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 216.699 324.461 227.643] -/Subtype /Link -/A << /S /GoTo /D (figure.3) >> ->> endobj -416 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 206.787 303.789 215.688] -/Subtype /Link -/A << /S /GoTo /D (figure.4) >> ->> endobj -417 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 194.807 254.784 203.733] -/Subtype /Link -/A << /S /GoTo /D (figure.5) >> ->> endobj -418 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 182.851 314.409 191.778] -/Subtype /Link -/A << /S /GoTo /D (figure.6) >> ->> endobj -419 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 170.896 303.909 179.822] -/Subtype /Link -/A << /S /GoTo /D (figure.7) >> ->> endobj -420 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 156.924 314.798 167.867] -/Subtype /Link -/A << /S /GoTo /D (figure.8) >> ->> endobj -421 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 144.968 373.467 155.937] -/Subtype /Link -/A << /S /GoTo /D (figure.9) >> ->> endobj -422 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 133.013 289.234 143.982] -/Subtype /Link -/A << /S /GoTo /D (figure.10) >> ->> endobj -423 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 123.036 326.025 132.027] -/Subtype /Link -/A << /S /GoTo /D (figure.11) >> ->> endobj -379 0 obj << -/D [377 0 R /XYZ 125.858 740.998 null] ->> endobj -412 0 obj << -/D [377 0 R /XYZ 125.858 252.799 null] ->> endobj -376 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F45 384 0 R /F34 318 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -437 0 obj << -/Length 3159 -/Filter /FlateDecode ->> -stream -xڝZ۶fRg?t&vlOZqkNR$aL*I|뻋) v.Nq' Y&wqY&w;w/[k6E^ܿ ]H='=~\FpW߮Cw~y燿޿UZ -g RF"~͔Iy'h%_ւtbK~(=u g+V74j7pW嗓^UfJW5 ڣ]Vt6PuõaFRY1 Dp2=χd6M(@4 őt8Jo9;q|ǣɏnqs;')Ք-IZWkW_W~0a߀(4g8U&*+wনA0k˰ZX$?̨w܂Ҟ/-m710j2| TxU9izWsU=6 Z{3hNBtjUdCԺx SNƌtEBBSƫSFrTìeݫCy `LNylΝT5n^L[Y5C;P3Xt. :}&D /yro_gm#Q՟;a XģvQG%GQWF&oDbo:q,U} -TMLf|uFMLlB%,HB\.Ϯ0H!dt)$,CSW*DބIL|@h[)%\klR7v'X/ Fe.m;1M~v\ybOD)&;CGi^K`>a@B&!y.hg@%R)E`ތ?;,2[`Bخ("qXN>`RyT:oUH%JΨ$2>p`LGKǞ̫)]In/uC,ȗX.ǡGL\fyP - λ T>U*bq:H5ɏYyEubDţ -#.)x4`kс[ yu~ز# P*vW*1‡S+S=4FTfȞjJD<TD'%oA@?mN^)fW%su;hFn!!"ph]I(mĶ%2bQnGyt%|6:N@!v x r0h|Dv *BO&n??,zXP*@2R IaS^6_?[V@ -{AkJnh"^o4:#jw!;tQ5iR">@@ridt'0Sd dtSH' -A9'Onf>DwAFB͒ٞlvg(k -<ȏ@{cLtCܯy e~e -= -;[p:L? q4hKr pےוYJ|5zΌvXC+04hf`Mm=8f-/@gSE$}%<ߟv HͭYrG6$q91Sȸy:}e@| Y'~Gɴ4"0 l݈g(lu]ͺ@' ~i,M1u4+}?<.Hļ|?9?eM&Hy'|4{Rc{ٙf8A")w-hGkRU@+5pcj64[`BUQ'E4jHEw5Z!Tv-fٵuDͻր==dqN&bX@aWMv<{GAљ Do)t Yp\ -ߎNvLv~w&l>t^ٶFwyhVmOksR,X%=zΖEmɭY%j--Q4v{SMb%ȒlsDinYBK]8拺CT9Lhϩ&6Q@(+}[P5/efYK:-/QZPkϳAٕN*nN17~!;X_:_5lөI'Wk՚R♻kܾ[nM Wסn(C_5r 40fy[ lH]u ٙ\dOX>(xE,KmZ'%j^jjiڮ_J#Sl2ɰ^swP%ٴ (@\I:{`W5j)1.}.'qC7L߈dehAC4`((c/ Կendstream -endobj -436 0 obj << -/Type /Page -/Contents 437 0 R -/Resources 435 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 319 0 R -/Annots [ 439 0 R 440 0 R 443 0 R 444 0 R ] ->> endobj -439 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [198.952 573.113 205.926 584.057] -/Subtype /Link -/A << /S /GoTo /D (section.2) >> ->> endobj -440 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [441.72 561.158 448.694 572.101] -/Subtype /Link -/A << /S /GoTo /D (section.9) >> ->> endobj -443 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [260.811 272.59 287.71 283.459] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.11) >> ->> endobj -444 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [321.443 240.61 335.889 251.554] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.4) >> ->> endobj -438 0 obj << -/D [436 0 R /XYZ 125.858 740.998 null] ->> endobj -6 0 obj << -/D [436 0 R /XYZ 125.858 716.092 null] ->> endobj -10 0 obj << -/D [436 0 R /XYZ 125.858 547.584 null] ->> endobj -14 0 obj << -/D [436 0 R /XYZ 125.858 380.834 null] ->> endobj -435 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F34 318 0 R /F45 384 0 R /F57 442 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -447 0 obj << -/Length 3107 -/Filter /FlateDecode ->> -stream -xڭZKW *zgmld@QԈkdHʳC9 QWE A@AR$I]ȇgF1'D?>y|難D$yx:-z:SRz.O~6&vZo= a"0FD6D P:6DD2|p4(џ%R~ 8DhrZ -.khF83>{O -Èo& >~?zہl21"c,(q/ }ַ<$&V8bm|KKSPQy{)Y3.#> VY΂#&t.@Jkިq}emҶq',-NZNnDn ɇj!:GЎEXDg1=džDgQxߑ;&Yv5n<{* - ww -ݝBe]EL'vrx-{)XOd[HpALJ<=- <8PA[Sh.4;[uuީWƅeռKǡ>cL6Ey=چ{.XWکq_0DoQJїxFG;vm+z)ʒ+>d99дtѪ!9y'~W+LPXRRQPdtMNgoꯨH%>8dޫ8G+r1KPs==ӴaBgϱoS |Z0m\6dMo?S)?^{q-0Ia"TJv skVU@k>'pݟA#r8UL Ҵ5AQ+|"I@ ٱюuYg#/V}פ&{-md|Mspe R+xʮ7yV`P&p>;5>7;kM[`FvǏ{K^+gH < P!5*1̚/xǁZƄcҲ~٩.5e(}tsĊjK" x0~!5ɬqA(n^Ȁp}OT#R㪾?+Y%)&r4N!x^Z o@'.G\s?2`$+`cbZn:-kpӱB,'H\AZBes$N(΀DžHсEi})'znsUw+v%!x`@6O ۵JGm,IiZ<īPrJty6"H9{ f_Ts`4=^k6VR7dx^rgEG `So:z @|w`C{)*ּƈB.ᆟ/ ">N tF%A -kSG@jfiv9~HGJyG2HyqIǥoRra61ADq8j#۱{K4e_ aD:O`m/}ԣ]5LpV}z(-vIiٙ6QN lX{?To`9YP!=Gʌc|KۼNؒ9(qzp=`x8Ǩ\cNԤ;Mxc6خ[Qy[w -7I:]+JAAR)!{6WkbQ3e@hf:}@UV][#]V/!JU͈8vj sv5]\24Fd.ʕEX͎V)CӼNK9PlF6YDb!\𓐯 0G&:(c"Gsp POd݅ -* 0Xr8u>2Zi"TʡB(ˆ{Gd8qQXA_}$t/۞ZGp\ WD.'T1|\{`QROkNÑǰwQmVSt2iyzd.w,|{ߚIRx@Wp| &EFEO;9Ľ6MT݈tu8h ;wu hw1VTM!va/l\;nPKpº,m,L87ņwyLE5Yh4Z6½s|~2jO^Ďforsۚ3rI|o﵅2q( N 5R۪iNA].]TuH(ٮTS -XT)Н؀{`(ڌ1v] - df79'9r:_i endstream -endobj -446 0 obj << -/Type /Page -/Contents 447 0 R -/Resources 445 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 319 0 R -/Annots [ 449 0 R 450 0 R 451 0 R ] ->> endobj -449 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [245.239 577.644 259.685 588.588] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.5) >> ->> endobj -450 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [158.258 494.778 172.704 505.722] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.3) >> ->> endobj -451 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [240.191 482.823 254.636 493.767] -/Subtype /Link -/A << /S /GoTo /D (subsection.1.6) >> ->> endobj -448 0 obj << -/D [446 0 R /XYZ 125.858 740.998 null] ->> endobj -18 0 obj << -/D [446 0 R /XYZ 125.858 564.267 null] ->> endobj -22 0 obj << -/D [446 0 R /XYZ 125.858 285.335 null] ->> endobj -445 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F57 442 0 R /F34 318 0 R /F42 328 0 R /F45 384 0 R /F52 454 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -457 0 obj << -/Length 3400 -/Filter /FlateDecode ->> -stream -xk -E6'ɴ(N @\H򁢨;aW3;|8p"wgggf3 bo"$7!<Կy蟏_}&aᧀow< _<~շRY$a;\fp@2 &K 6;ř)5,,:ل,͓}3DL"R$Ld\Gh7sas/l39m"->qDρ,(jDĂi딒 - -.dŸJL'!űf-$qOq 'E=>)P^8~+4ܻ8(Z7vhAw}S_<{giU[VѲ}Q`l9 vi:9 E^jdYE "\p {ž€XzwI-WtϽs]+P2zq{Kڔ`a앢>:MJىD1.L0+ -]$aPe]UKq&[;tlex"3W8]YwCn9ޔw+W#Z`Dk13xaՉd$$Iت9 x5z $k.uAF! Mhh>ЦDM2$M1M~}psB&`  ١{->{ܔwjz  -=99* G?eIBV cn 9>KYp; s}^=yHnl&OS0cb8("GD ! hJkRkJ=Hrs 7^ll8-O|cUb5"C|4\t"[dDL(`}CCU" )>7*ߊ m&NnĸM&#O' Y2iVPnVx;eS$cPS!fHK2 ۾+ v#}-oOWl~8Up]cOwT7 [Xp,S *X]%}>c yZU -˻j9:-r\w+}ɤVT^*W%F%'zsJ/ᣱd#ge}N=+8Ѻq,Weƞ+4☫xE8+@,(P] eY޶~ _xEy*=QJvU ~BEѤ;MŜʕ*wAII* &yFځ{k9mQ-:Nwci=d VSq>S1ܵz}hZ禯D qկcDe'x) [2{K(ί\Y;o]-~Iqꗈks%^Uho_O4׏UMby6&4}]?SZ ΍yVY"%E,Gc)m&NJ'ja?Tse$jPIr_|Ux7YW땗Ghl9oV=ıޤCMqp<7;|Ç9>ME;v 6а`KΕFAIeX'+=z=_x$g0YضITdn;< v{_b!м/lsSHc?_B7>eHl+G=Z{Y=+_>{B&eoOM$3 ,6dPb8/zO};&wzH]ǜ'J/vNjcWOOz T/R+' -|;ڷ,m-cz8>|Mw`2.;9XbugxR(=A|&>]%(ĬkHWy~hi{,YHj]7_ntYQjV* ]M -endstream -endobj -456 0 obj << -/Type /Page -/Contents 457 0 R -/Resources 455 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 319 0 R -/Annots [ 459 0 R 460 0 R 461 0 R ] ->> endobj -459 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [441.279 620.45 448.252 631.394] -/Subtype /Link -/A << /S /GoTo /D (figure.1) >> ->> endobj -460 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [303.282 343.703 310.256 354.672] -/Subtype /Link -/A << /S /GoTo /D (section.5) >> ->> endobj -461 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [461.101 200.864 468.075 211.808] -/Subtype /Link -/A << /S /GoTo /D (figure.2) >> ->> endobj -458 0 obj << -/D [456 0 R /XYZ 125.858 740.998 null] ->> endobj -424 0 obj << -/D [456 0 R /XYZ 273.814 513.033 null] ->> endobj -26 0 obj << -/D [456 0 R /XYZ 125.858 246.443 null] ->> endobj -455 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F57 442 0 R /F34 318 0 R /F52 454 0 R /F42 328 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -464 0 obj << -/Length 3342 -/Filter /FlateDecode ->> -stream -xZݏ߿6f!RRZHCؖ#wY;V=\p3E 9Ùo>lO-""Hd9^}udh=/>{E*RgO/joVV.{*7o6[mL"bpY^=D.֥BȈX@G"MꄄS('b{}H и4DI@".v*_5TZ%6W4 - ӕOE-,᫷okFDI7=D Fx1)h* '~G00Bxg4h9~>ܽGT - N~hÍZ&kuc䄊:ajo_H]űPִcE&vLhج.KX7UiiszF"NEشVz%bÙ 483s@?,upMxhfy7B~.;\{ûsvB,\4uOǻ^]p8B8p4]LhP?9`H!*qO$R 1` @|`O^?+Ә -y(AF<@3r':էkepByVhcIsFEBS}ۘlz݈dah}vMk`DZaT -9_(<۩8جzgk Ԅu=YJe | 1RiKc=0p`׺ǍuUPk;g ’K>J'O ijK1JMMʼn>/pi1A-h2;˺ g\XU'~Kw~ p>XЛNsbo|C} N&|VNL©3%JD"vc\{; <|[ԛK]~T>dͧp5W-ܼT/9(i<>н@۫{Hxq]g7~/dx%dzvȗ6BN>ЌG8ג _!|WE.A1dةhzZA[aRb VD6&3xA-s^5׀?uޮHgm(⽽IJc1'⁞6&x ث*Hߗ+0ՏA0qd:Ct s\* F,mq¶>.pŎTkDWU^ATJຒ^O-k#_&i4E𙝮ATP`mMFWLkn(IkI}<$)|]bʝ}Il84྅11sjcf!N#pCvhoѰeU>xȯGU\Ȃ寨$+ݻF:쿁̄2<ό ->RutVzWdkKU:ce8 XTs} Mp@IL8942섳%}ǰ2xnu%vSflex]Ұ)ۄN&:n cc0K,M xp q |u]Ёɧ.N׎|YmDB32o7YquCt3ؾV -xб](rbN h8VqH>۝olHPtX pjSrx6IWUA۶8J*at◘_ӎiSiK,?{`&.g`sbt ]xΉTH%z). ȿO_{qpదyQ3ϧ.JhgP~.^P%u\onֺn\]]q -+x &2[Pr#%\P{O˜NU;coN5;Ĵ7փ]ci($Bd"\Kz5Ndhl-YK !A MYhm  |OpἽ6p˦)YZ - DaH -oqxr7OKW] TYLLJv >(endstream -endobj -463 0 obj << -/Type /Page -/Contents 464 0 R -/Resources 462 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 470 0 R -/Annots [ 466 0 R 467 0 R 468 0 R 469 0 R ] ->> endobj -466 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [388.301 488.993 410.218 499.937] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.5) >> ->> endobj -467 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [373.4 429.218 380.374 440.161] -/Subtype /Link -/A << /S /GoTo /D (figure.4) >> ->> endobj -468 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [236.093 419.28 250.539 428.206] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.6) >> ->> endobj -469 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [223.65 263.888 230.624 272.789] -/Subtype /Link -/A << /S /GoTo /D (section.4) >> ->> endobj -465 0 obj << -/D [463 0 R /XYZ 125.858 740.998 null] ->> endobj -425 0 obj << -/D [463 0 R /XYZ 261.28 711.29 null] ->> endobj -30 0 obj << -/D [463 0 R /XYZ 125.858 202.493 null] ->> endobj -462 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F57 442 0 R /F52 454 0 R /F42 328 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -473 0 obj << -/Length 3549 -/Filter /FlateDecode ->> -stream -xڭZm~@?DjDR/lrE.E@V+K$f;o%KkbEp^:Z",V sj{|HlhWw/^~mS.1Bwz0 }ǻFaëo}a?|c2 3MwMcʀMlUhU(bd(kܰ8]e}BA~ n6}f̩(LV21H;á|?x]"KqY85ghxA2ĘUbG M{Ƣ73H 'ͷۼ1S&2ʸxe-W WMZz)Y z$zcuL%zdu9 QOD0!S!]1 u-lgWT[1\oc~{@[&v -,>I7`mxѫ9kb3@; -S--XoSep# -MO Wlkl-%=E-Qұ+l=$ xz^wJ \$ h,s(Ӓ -ZwH r{tE26>zqG/>2Fm+X}~@zt*NU9v>D\ XV2u({R1j}v~ͼn<Z7*#YEWxYϲ.Q$9h;02T0s~I*v+P;5=総fM;l]%s,1$YDu^ѥ>htcn ID9[YJƸw`z490 u8gUQGZz~q%0?s>f.s#nBS$8w ӟ?@V޴m~@kԲ1?3(CnM 嘔NfFBtcc|!YmUb[{CnQZs<ƩtMПVJ>r*KKӫ9έ5 -^50A.p,~iD'̑˔1gv( `ͼt\bP1J fJ옞@.8ӌa 9τ]2z. cH]:u# b{?U &$ "2myɌ;&6G\ wц-*A|bFk'IQ9^c˂e/mM'\swȕ<~yKJΛ邖848;=/[Mᅓ,ARVG3'g>^IЛT8GĴuGF9yiEQuûuj\g.tD-^|@K||hX\pܵ+Of  Xˑ5Rx4 q4`߿]Xhgw19#]K;0H8Pl?/PN@П[ͳ| 1ACGٝۢU~[oa W"z(h`nlL~ -e$3 -ƉI6X'gqҳoE3_y˥K s^҂Cnz&6| -ٔV->IlT{T?QU - ղPr! ZjՓW\89Cy16;iQ{#iqڹt"F9M̬؇t;} ;ۢLX|!QʮzF -Ji7THq,$j,QWr`z@[2TYgWpWO=W/29HtܛU Z@އ֧޶/M~NBD -~%OŲݾK=((%f38L v8Bw%|YDZ}_ְWk_/b7`*|jX;n٩ uPmaa:%UG;~NJ>{$mǜr=z-kL;T31"JPQw&pԓJ{_jA -{TΆmjSp:v;E 9]WM{W,z5ceE/K-.zeMR\xp &&Iee -`ʤ"?P೔!g e@#dAԼ22 n`+?Jm;1[(ܩ E?(Fˈf7@Ϊ? UetEqP(0@@tqxu"geʉAawpOxB;5E/Kyͮ9[5#bΛmS=C "okj _.R@od=1)@`j.^OHuN|ߜ]뀘Rk|oS @i:H JDd-%pڳyl[Sޫ˛ t2</M3#bPi(4Aj=7~O?f_-ND 4Y#r\@ΐ=B5pBI]H\鈆ÅK7jf֓0_H+5`t҂\p$ɬ83,z˕6Qb$_BAw -̢fP{BGFmWMf']!"> endobj -474 0 obj << -/D [472 0 R /XYZ 125.858 740.998 null] ->> endobj -34 0 obj << -/D [472 0 R /XYZ 125.858 421.81 null] ->> endobj -38 0 obj << -/D [472 0 R /XYZ 125.858 315.828 null] ->> endobj -471 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F57 442 0 R /F52 454 0 R /F34 318 0 R /F42 328 0 R /F45 384 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -477 0 obj << -/Length 2304 -/Filter /FlateDecode ->> -stream -xYYܸ~h 0iԙ}]p5{Gbw ѱb:Fjgę`b]+ w\, ],M]Vw'xKna|4J]O}?D{>_~)K87śQ JYUӭY9?fTӏ9Mj=ݥs]guU[zQm_dC`KKS}e}O]nU_4v{z@U45硧s+ 9KmQnСןuf0Yuf^tR=]? Xv32W4UtʲA;aohi;q-[MoҘq_,췂|T5]. .̫ԕuŎ2*^"/hiL,3z׊>(wsk {,E?#G3.r{ycn# i@>e7 10P¹-L./0(?a+r_4f=&Au=M5&7?Mvpl-`AidЬ.s}QbPaJ\ JrI'1mؐ$e `"uש&E8Kf$Cvp\#@^SR%\un#JJLȧ0<$e[2[J#Zuhz@ rI-z0%Pk R6y\Dlr Ɖ#xGzLYU]pOQy 5!FZegu_jvl -G3$ sșKPUeL+a+S.]oX9m5@@!D1n)-)6;Y`Brdf͠)7P'½3=M0|ݬ35tz.Q0r.2mT̲/[B`G]n7Phb5 ں*6^(8+Y*cD>qp9;DHc!q`x7'^,q#,OEDIXD{k{T@v13.remqO<'N3wl /)c{HpϢGYTvaz`/" I40.yע*<iCRtz?V,v5M6{vǔ -HjsMrSioBȵ`w/_nHi (1ɼPcSҔq)˙Hå)s%@GJi\)cnVV.߆ys$qkCMbM^[Z0X -w:뙐I#&?Muˆ$GƮ2f4Xd=1qX8CBC$ ZWCK*0|5TܛTcZG~fYT -I# -eCKO4ݒjqGkr]YzB=}\C㊪:U`0 -VP~DPN/ %3= *Dzj|7z(]nbX$5G= lfVEYgN ']E 7wz1<\,&c[$iы -t Yay2@$؇7w +^Jc0ku 6dD:}Da9u/Vko =kڜ+w;- 7]5?rn@.Z^.΋oez@$OkL!cObņ.AںTB"#^DfC.^a;f@\g;܌] X`q/ ~4 x!<ñ9~V]du>~|t~É4<כlQ -,) P ыj"WOo ZyPTY4L}h1ǧFNendstream -endobj -476 0 obj << -/Type /Page -/Contents 477 0 R -/Resources 475 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 470 0 R -/Annots [ 479 0 R 480 0 R 481 0 R ] ->> endobj -479 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [287.281 250.806 301.727 261.75] -/Subtype /Link -/A << /S /GoTo /D (subsection.8.1) >> ->> endobj -480 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [366.142 236.302 386.067 246.283] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.5) >> ->> endobj -481 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [352.621 225.343 372.546 235.324] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.4.2) >> ->> endobj -478 0 obj << -/D [476 0 R /XYZ 125.858 740.998 null] ->> endobj -42 0 obj << -/D [476 0 R /XYZ 125.858 510.074 null] ->> endobj -46 0 obj << -/D [476 0 R /XYZ 125.858 320.295 null] ->> endobj -475 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F42 328 0 R /F57 442 0 R /F52 454 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -484 0 obj << -/Length 2603 -/Filter /FlateDecode ->> -stream -xZm~BpaTKmӤN#PEID(R&);*;˗#Spvv?2`Q-,Ez=,}{#ӬD<}"fq݄fRւsYeyJ+1o -77:YƟT ahX2Րfz(Xbq*0 -d&V *=v'M>uz@ z i=d4p|-NI{ 6C֑dpDfۼ*/,W,͜e%2+qERDLpסW\&Ǭ9%i;IP*Cp#pF}ӗJmE48y{ *I6{ɑ}}NB| nVwyE^a{PN]"i͛כ7?cRygΞWH+t>O:{'YV.z^{%?7yB>x+a;>}{S**Oqi ``gE1QqkF#)~ͥl_݁iMZv|Yڿ(b$HkfqL8M`_߬b٨r6={e3 e4`, ѓ)͂q) 0CEWa2,()3 Ƴ)J=4z vY t6fprK# % -qB\! rPVksϊPZ^fa!YIH8(滕 |t$i -"m*|C!GB[_VBm0MJ(V?}x9>+Gv@M\,y6#h*J`oS 1,6.KɘlU)#3:=(۽̛vFX3#yymv8, i8?LYAXzQUC k83z brz48Vx__kc\+L (x¬#ƞ `g-dJLj91 |ҢDXThtj!>ۂ?ÂPD(I!%g0PoAqo: j=L+bp  -@3((ToFbP0wkrw29E!O ؂wB,DC)"E.(VyW9Cx TP!')FHҤ9(쾪̝j_phn O8D#)ޟN3cI־IKbG[mlJ44]94bDo!C, -BIKvP{DX07N݈\H) -T52f>rGQۊ~˪1Y6Ɠ56(s ő۸U u$I?`vUCgQ#(OXӄ{Kwpx ai?y lhK©Bl6}c%\@#W<ⰭZCJ~m 6 K}YVVމ K5-|0]F'?!) -: 4{&8)&0M o[,\mޜ -ʞc8KAr -c8AGr 0gV1,|2k5ǩ#dd]]52 w#}r 29k=rĶsŅ&Yqڝ l<7ɨaZ8S؀u]NNQZ-7HLLQh?}h2zou 6KƐ)* __Nݗ>sog'o_<4>$͸_=` 2}mh 4:F]9_7j  2endstream -endobj -483 0 obj << -/Type /Page -/Contents 484 0 R -/Resources 482 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 470 0 R -/Annots [ 486 0 R 487 0 R ] ->> endobj -486 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [416.345 575.633 430.791 586.577] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.3) >> ->> endobj -487 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [462.097 190.529 468.075 203.049] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.1) >> ->> endobj -485 0 obj << -/D [483 0 R /XYZ 125.858 740.998 null] ->> endobj -50 0 obj << -/D [483 0 R /XYZ 125.858 562.059 null] ->> endobj -488 0 obj << -/D [483 0 R /XYZ 140.204 137.313 null] ->> endobj -482 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F57 442 0 R /F34 318 0 R /F42 328 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -491 0 obj << -/Length 2969 -/Filter /FlateDecode ->> -stream -xڕZ[~8R,;Ɓ5b.=J"L?s[y 灻ݙoYzPaIŁ_Cy~<gJl]g/_4zVAy_6L__˫_7uGQgq+HdzwqZIZ|QQgt!my>dA꫰~hZ|#u`ڲ4"8z+IwWFidY_y܏#ӏ""IH{8NU xW|Tk;GAbOZ 0k(ndZdSM?3*ȡr/Lp9[dg3h'׉#? -J'++E>Imf~~> F6E9'e}ueS=ZrQO^NZvgOX[ ˎ>ug.jW?-Wҝ!&ʶ黶29Eg# `RvŊZX l+iz"X[cصÅ_;&gtvoޝePJy"tuiR[u(ABׅ߶ (, #  -#*X5<"U셈]=*ӛ"*{M ow,O]8jp6ݯ\1s`%E$\/a4kv~^Y` dMcY_"t -8WDhYF<}uéEt -279RqH֜zSUZ KhǶ|blܶ‘KZ$^4,xQX}lЎq%|A)t # -ly}ٸHN+4W $h;8hc/;C? -g &T -JXdQ(SbE.B?{ *$Pŗ{7Ԇ[x \iMwWy1Q9iۏdi(O"dv|l&#{b"'| j)灵9+V'줪pst2Ix mYUu&A(a%q41nbg(9'/R? 2^smlݫgtN7ivJ{~ -=^e[i\ >A|~KVLoWEG1y1{CK全 +aX~;AZzoZ=$ txǝ(K!7ҍ+c"ҵ}-Zc,b UAl k*{v7GJ-J\>(FUA64йָ, uH >< -%"(SH4QsUW(^2K.Ł -Lr%g C&)R)ǔ8-ىq̜CA 9\ 0Ko.!x5>$BAtta4`E<#|!fLC`]IޗVcqCO(,/`ͬMUܒ@ǖH -`E'x N(,z=?Rmػ^ ~9j~/{VP4,t+O1`ݜep'ВNpcqM%\D1{ 5 0(rѵ^l+;d`mfN|I XSo|j}||߆B2ɴ,Wএa@]^h* e'?SmmR.ցTO? ,D!,0qެેKvMEWac?ޕ\qvR7CK%]SEݴg㘖򓤘C(+CS dT -Q40ϸy -Ys4=$ ӞN|6GñZ梊Oo:8{WLdHK(WMR4h!h1}!EKo)ZkNC[K8@V~e+M0wvܯ!;ctxsqP6;}T^^yIi F2B{{`ُt?.ܦ(4Η/͟Yd~\F[?/Ѽ Gklw(EK-&\|_,r/rg^ad. sNn~K&A% .&~SPv]3ʏwhBi>51)K Džo4DQDl"V&F5,ff p A%wީ-Ehu")uQ'0xRf -2ܛAd^uz> endobj -493 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [313.293 418.667 335.211 429.611] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.4.2) >> ->> endobj -492 0 obj << -/D [490 0 R /XYZ 125.858 740.998 null] ->> endobj -54 0 obj << -/D [490 0 R /XYZ 125.858 653.536 null] ->> endobj -58 0 obj << -/D [490 0 R /XYZ 125.858 405.093 null] ->> endobj -489 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F57 442 0 R /F42 328 0 R /F34 318 0 R /F11 496 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -499 0 obj << -/Length 2309 -/Filter /FlateDecode ->> -stream -xڭYݏHq\P$^}j ܵpr7w3ԇCq"G3Ù|i*r%WYW]zI&̈́ow~JEWۇߑZodvQ&~>~Ygo?i5YRD|S*xv"I a⮢fZI) -cfƩ Mf]Ƒ}˿Kmu,RWNeGWJ&WtH AHA,蟗|ii-heXjxZPoJe&EV"Wfj¥ϙv3!4*=RoI<03^_XdűzzL8A% xѓwv_wvN*t1qP? V\)ٹѴ){GRCE~eTm*~} (qP\mL.  kp t=8Fx>2E|=;ui $Lqߘި2YQv \bOguh+x`$+| s꾃8My{Z7>$X}S2[S/{,aj|F(ќiڞvQski?{}|sݘ3?ꑢs! %َ)ʞ >GOr뇵2у烣NnXNQRLgXH]cׅt`yer}_,M&M,̤}D ;p4A濴>nqc=?@}x@"gӗ5sggzee4?[ƪ<[_sEo\(Jŝ {o\I鍉h ٝ#!tEE.#57PdRjG X!RH [wQ(5N3mRrݺ<Թ9{C(J0|} -.VF&2('k^=i(DGvA; 僓h%Fr9lH"؄B)M$S -,=(8IH%0CG@Wv B y֯ 4u%_AAjdG;@!Qn|wmP29%гVPdPTh? -V䞷W/`lVs:C񋓜h=Y"YgC±b}}?ca ;!L^XH+ .݇{G5ϴI*G*C.Ǟ[# mImpqtR2ȍ)tmry^9B_b{[P iBZ=RܜT -F3Pﺵ8v] -"|SB iM$4,M_hM>MMwXAqyT;wXn'>q ;hjlG{C؃{>ZgOX `ҳ/k]o"10BO] PA4.G>jj3H&BZ Ao8d O17 :L#8[a}G&3lvWMN|RC74Q? 0_5-0=ݛB*|жnA͟/>Tv sʷh [(ө* !pqڅA,C3 G^RẐqxe c'դL9Xǖ|fG ugTfSW Y"!ĠVmxM"N`],[R2"%5\vP# 6];S!gze3T{by%S[B4||-0缟-"̰كzx{P[{>I N_Je?ߠ8=-|SݻWj4nЄog{Z+,~)C"aZdUlS-j9 -a%®! -]7'Ob27xD.(k!X;Qbu^u߸i]1 ڗIk/h{IDD<49ifendstream -endobj -498 0 obj << -/Type /Page -/Contents 499 0 R -/Resources 497 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 470 0 R ->> endobj -500 0 obj << -/D [498 0 R /XYZ 125.858 740.998 null] ->> endobj -62 0 obj << -/D [498 0 R /XYZ 125.858 716.092 null] ->> endobj -66 0 obj << -/D [498 0 R /XYZ 125.858 699.183 null] ->> endobj -70 0 obj << -/D [498 0 R /XYZ 125.858 421.905 null] ->> endobj -74 0 obj << -/D [498 0 R /XYZ 125.858 321.905 null] ->> endobj -501 0 obj << -/D [498 0 R /XYZ 125.858 290.622 null] ->> endobj -78 0 obj << -/D [498 0 R /XYZ 125.858 252.042 null] ->> endobj -497 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F57 442 0 R /F34 318 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -504 0 obj << -/Length 3518 -/Filter /FlateDecode ->> -stream -xڭZm b" ͛Ak$hiv{ElkBlɕ%X/  gFԐ3|![!M6a`mr;݄$O}yZFa4\oDoFp͏_k%RA-p7B[)tdEA=H>V0 -?YZ.7lUsX\ Ke8^.aej?NL$@lqj6zEV۴hxwLk&̋I&OlO#UymdE`!27ߍW20&f^oZ Jw2Z( 'ZeVY"`ދ=J%gT\at&yؖ4>~U:x,a-V5 5^"=~H Q>͌ڴ2VN(z^Ȗ 0VY8Qb37Z՗݁h1"8'WM_Xyy<(a~ڀȽ7tuG["h @ Nn#c 1Gw'"Q c7r.lKhg6&X"{Ac7۲EEzKr<>Q9 /55"ƒ*[pvh#C -D;]j=ViW8@6k>8ը(fpCV52AE .G;QxTHQww&H퇒'iyMCۙ57Gܼ;ey1p`Lǫyoc :2cSs@`H5X3BMB$dR`hU&c'ae,~M P ֡/m-u+۝R!b`Cɔ - GDȋGJ?w zV/~դÔE'?ە՞&9!>l\Oݱ󌗑3P?(Q@K8GУ槟᫉`MG+:2J@ʡnb >pJ?DHbsC$nv.EJx *=NiEΌzW2A`+V`QMV{_\S"@ -;i+Ѿl[QiGzp yn -X^4YLV_ $۬{zb *,%!}lW>.)&Wd5&0BgASfiܾUUV߱V1Z$L39GuvAš -]A$Fӓ9o˷ReD!?L8vSe= GOɡ&I_\_ Ov:jki=8#Luė9~5k3]j6l!:(k12r_6NN;6Rpe3$'Dj&CQ7ysi>3kV~ pV7xL[ -YW/٥  -[ -~gq,]l8vFn*}m9\P.hz&* /niM#lٳ* LeҔj:nt ^kE0:Aj"$s7ʋX,$\@.8-@z}3I|6 nz CX:0,Z)bp}IG'G2\Oe{ e'6t P32G5`K_.ܾݑ/izfmtŚ%`I 0K7jL xFP& ׼P 弔&Yf7i*A(^ "^f:<} -L*="뉐 x!& Ջqؑi^>O%A={.p^K,ZGCeŷC9 --ť{E El:ocK#Ŧy2Q_y5p]uiR;xIpыӑi^>O%A~zP롂x_xE5*~n:y0 tgu$MON/OsxA/?vA &+Q!t߉6Qt ̥F -_ -\bo|&;o#^]uAhU'%Vau(<`>((-JNbbcpg ̵em ;:LW|@fxQ+Bd(IP nܧ߭i.:աKI$<+) 87 /z'stU*hVy&FMʨ6)m84)P4AUq35@ߥϝHKMjOVEFE{7ԕ|a_}8m -q$>{ee$~>dr(t BJld@.Z뗺K"Z1e513Ш9@y^81K;J_ -&ա=&LDpVzFArqxTU>X2,q3Jh:-!| -;aV1!e9RRL? t^ p?A~mk8kMh c RvTnv!d!eWo  7)Taj2Nr)x~18Ʃo[F\}s(˺-X-~Dž_{5c%-X}rpRBF#o3! ;Xxxt+ >^ei5okܦ(E> [[~̞Z׳{p&Qbڂ-{|#h +y2)QwlG 驀ȉß%4*ຓt~Лx0Tr9DODL"Te*~ɿn~5wp T6T .I'ǛO|*(x8=‚(TW5jp9FTVd[j2pl#{#Bdt)Sj[ZΝ>Z2pR (!Ǐ QP^\],"[TqXKwy]5־sZCE&7ߓTEMŒ ԓT'Dendstream -endobj -503 0 obj << -/Type /Page -/Contents 504 0 R -/Resources 502 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 511 0 R -/Annots [ 506 0 R 507 0 R ] ->> endobj -506 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [204.689 320.569 210.666 333.09] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.2) >> ->> endobj -507 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [142.854 310.656 157.3 319.558] -/Subtype /Link -/A << /S /GoTo /D (subsection.7.2) >> ->> endobj -505 0 obj << -/D [503 0 R /XYZ 125.858 740.998 null] ->> endobj -82 0 obj << -/D [503 0 R /XYZ 125.858 571.472 null] ->> endobj -86 0 obj << -/D [503 0 R /XYZ 125.858 212.064 null] ->> endobj -508 0 obj << -/D [503 0 R /XYZ 125.858 180.781 null] ->> endobj -509 0 obj << -/D [503 0 R /XYZ 125.858 168.079 null] ->> endobj -510 0 obj << -/D [503 0 R /XYZ 140.204 139.255 null] ->> endobj -502 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F57 442 0 R /F42 328 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -514 0 obj << -/Length 2994 -/Filter /FlateDecode ->> -stream -xڕY[6~?ayэا- MN>Ȗ#D\In %9AԈùCZ),Vi$jw 6FN$dpKc{ Z:6V'0PƱ6}u<%l꣔6\#;ySU]ho0mTvz=WНw_yNr#W6NS0Idq&Z`欐u.G˜fMue,Vtl, -my!& Q+a( VT3I1ؕ{9 [#,FUQ4SgT]`T޷ݑV18pedI^aqy!ڼVCwÝ'rGGKC/{l '>;Nصv7=2BpiGأm -}(P6Oe!Exlވ8RNcS/(&\+1KdܕW̅*7)Z(XjʯኖOo4Bࡽ`#fZW)C*y v[~{?g eJӯgH,6VXlhM:g ,t+ 'd|ÛKaM&ϤPrLAgb5)x!+QYEw\%wt@yŭ`0š z/^N+^*]-I$ӮHd2cZhZr P@KH Sck?syw`z -cÍNuEﱐ-*I$EQ!Y bnvXR5\h[?U3̪}OSaR puǒhrZl*\5QAiIPf2b& 1D: :$'̄ 6ݹH| H567Z$T!9G$c8Gq UιgeIa䥔L1%L/'f32Bz]#1iƨ[_U8u^TᯮEO..,xC?ȅ3Gpu$u,beSBsf[˾e.X4z$uӿ2,n(NqXD۸oYp[h؈44,0}8JL.WێRA7jfL_{j,*Ba6\\i;&e˯E<;umqv-j -+WxYϛ]' KΌWjh,e h,0`JB1 um;}{֛'SNX fZ35KԕH^@օ.Œ[H)G&n$D91Е(-2΅ OJhG_1g@LqvSڀKny]=i7V"V -tO*; ^>M;)(Qy^߽H(iÛJF*f<N+)H!S"SzUF`:xL}\Bs&@'hCrHJRNuȎo~@\e{bڲ7-eisrx^!,~Z 63CQ[?)X3EO+݀h!',{P[%r- cұmTx24.ϛvxh"ၳU0endstream -endobj -513 0 obj << -/Type /Page -/Contents 514 0 R -/Resources 512 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 511 0 R -/Annots [ 517 0 R 519 0 R ] ->> endobj -517 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [157.24 491.668 171.686 500.595] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.6) >> ->> endobj -519 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [255.122 231.121 261.1 243.641] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.3) >> ->> endobj -515 0 obj << -/D [513 0 R /XYZ 125.858 740.998 null] ->> endobj -90 0 obj << -/D [513 0 R /XYZ 125.858 581.805 null] ->> endobj -516 0 obj << -/D [513 0 R /XYZ 125.858 550.523 null] ->> endobj -94 0 obj << -/D [513 0 R /XYZ 125.858 478.094 null] ->> endobj -98 0 obj << -/D [513 0 R /XYZ 125.858 299.365 null] ->> endobj -518 0 obj << -/D [513 0 R /XYZ 125.858 268.082 null] ->> endobj -520 0 obj << -/D [513 0 R /XYZ 140.204 154.094 null] ->> endobj -512 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F57 442 0 R /F42 328 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -523 0 obj << -/Length 3001 -/Filter /FlateDecode ->> -stream -xڥZKܶW%eNJON"Iɥh7!J1Kr‡qǧ p%wص71.4KuzeYz73If;!ًWd,3nHl<n:^͛msRDeWrr7JLƴɞT*؃KiebøFet2QFf,MAP"4KRy3h,I5c=v{TUeSwuQGedRD{BށI~mM)lx$*boы?wLD m]cEп+C^ݤō:0454gYaZT&ћmnk0dSOTQeId?(+@`562z۰rSf(lI]ӹmP=>743N؈8*$3tm7ugji} `쎁ǍБOhqυJQw+"eL%pH U+vDbnڞPBr)NXx&>2m)L$Ưl ځDz#0/DZsAȲ&WM'5zXFB{mY^-q -1:ÚU&z,4Y;yz0R6`* /ǽRfCTVmՅFmg5ں犠 a9`ho랑Ni̤Lf*A$:/ؼB3й3 7>w9pq(nai='?!okf -p2fbnEP$` 3̏HA~e}hZ88 Yph %SiQqMX:^NudsFPlir"^Ǧ~ 6%>uG,O:Em :j6?羵 &`` qUo&L6D֌N x+4;Ի]͂$MЬa $L9B q+C<@0r{ԝ&%FM2mQ4qu 2׫ĐUW,@Lڡ 8gLQf1ӀzM aXo޾/Tb{4&Z#Z=(*ݱOq11L9SC)O,O1IUf:6K0c|u㺒u{W$ 9VR@e -v8^W4O;^._o xd|Y*ɍjtTvxn9ݜή/nߓ(߹kX>H=~wml79Rl6m SP\5FQv#D>b`^s5κ5^&L9N^E /a~S?tJD'x2.endstream -endobj -522 0 obj << -/Type /Page -/Contents 523 0 R -/Resources 521 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 511 0 R ->> endobj -524 0 obj << -/D [522 0 R /XYZ 125.858 740.998 null] ->> endobj -102 0 obj << -/D [522 0 R /XYZ 125.858 669.576 null] ->> endobj -106 0 obj << -/D [522 0 R /XYZ 125.858 492.764 null] ->> endobj -110 0 obj << -/D [522 0 R /XYZ 125.858 328.007 null] ->> endobj -521 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F57 442 0 R /F34 318 0 R /F42 328 0 R /F45 384 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -527 0 obj << -/Length 3065 -/Filter /FlateDecode ->> -stream -xZݏ ߿blCv=$i\=z43n1|XN8*)`Eeq(E"͊ -yn/4 -f"[n8u֠E0Z]W汫-w@-ߛ̞K}IZWԵ8 yUóU_Ȱd(,g#hɌYvؿŠH(ҔFd!$8ނI|*-u];̺uLE94 NQ?s{W[rAe| -@԰C~tv"Kbވ$3+<4%MA%`୙V{_I`-G"8QnN @4uJTB 7z]ZO6l`&B?4O6[j>6-TL1^UFI5ЀL ;Dqjpܽ'nz?]CSE`3_1f!2t@ CD9ƉRP%Cc\_"q MT!" aɸkZ)=R~JBԞ~KYv{۠ɳqAp A,^Gih;x鎁+g"q{h3!$+怳9bG$=@(2.G ; Iu 3}3em,Ow_ɍu{`a!vU6k3CU^,KJ~kʯ57b 7i}93tvqz#>a"{(T3MN*wgL, b_GcHnݦɠ&ˋ3M -!71IHn;:ш ^;-|k.=;8x܆Xk^^g53/@q4 |58T$6y(\-n{ם3T.<pAp4h+t E57h!#|4Zo'&lڭRu]-iپp[Q5arܡJBu9ToB|-DT,tyN̈Z-|z$6lY |QPYĐ:mayw3f%5+DX`V-ؓ,EG;M\!ܘ޿!LF/cQc|.8+S>kB )nA/ᩈ}yqm?hk1/o;4an'ya;Vͮ}?QkvW7R"Hs"i so00D9)@SŤrRY!?Qnvd,SN4's+Ou/I&˒$\5I qv.6u<4܇ѨXE^+_ߌ9UqBLz ꥊz. vǮ^#V-rXK1o]"OG8v۰xro^:\93,C -ݲd\9ŲApTkcQWHI;XJw$ʗEId>u4WYC>iU3d1K\!?;6^"{o0Gsӆ#&k .He쉧.=9:{ Xj'l`A7f9mXŌcZ՘..U5gk0a-ś Ϧ`EH!wsׯBٝW2"LE-O틥,qg8mc|DŽO 8 MM- k̔,};~w&bC~ -63@qͱLFM$|W)%pÓ+s! 6ޗlϋƮNK40"y],xi)'V7y@¬=Aq  -?=p|{ ڡbE1_Wx"J Ef@{̈́eQ\U!Ptu\X<˟Ks\AʥBU5>e\K>҃5EQCuDG@?uC^*(%,} -W"1c=^2 $Q{&]댓t_~endstream -endobj -526 0 obj << -/Type /Page -/Contents 527 0 R -/Resources 525 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 511 0 R -/Annots [ 529 0 R 530 0 R 531 0 R 532 0 R ] ->> endobj -529 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [356.983 526.264 362.96 538.784] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.4) >> ->> endobj -530 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [236.552 454.533 250.998 465.476] -/Subtype /Link -/A << /S /GoTo /D (subsection.8.2) >> ->> endobj -531 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [399.818 454.533 414.264 465.476] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.5) >> ->> endobj -532 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [226.383 349.551 240.829 360.52] -/Subtype /Link -/A << /S /GoTo /D (subsection.7.1) >> ->> endobj -528 0 obj << -/D [526 0 R /XYZ 125.858 740.998 null] ->> endobj -114 0 obj << -/D [526 0 R /XYZ 125.858 569.85 null] ->> endobj -118 0 obj << -/D [526 0 R /XYZ 125.858 440.958 null] ->> endobj -533 0 obj << -/D [526 0 R /XYZ 140.204 142.951 null] ->> endobj -525 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F42 328 0 R /F57 442 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -536 0 obj << -/Length 2657 -/Filter /FlateDecode ->> -stream -xZݏ/E6VH]E"٢MhmZ8[r%9 gHS(Aΐ+WJ&&Mʴ"_m>Lq4媈To=%BDMbD|\+L W )BElbqJXz1@d!L̬6i2y=TaS=J2b -UZt:LY\(`ˆVHT&R%q>斉UγY:jS2& "A9mG}az0DYwCںmB"Nm_uþn&$]m_}&aet~ -ؓ}6}0IZF@my+7nsה)m) J4'˘/rˤ^ée&yԿ^P#`ܺ3|:wsKk?xljkO]aqȄ["e5pEUتuW4t jشa@EtA G)vB$["0Ԣ$!@ mn:@Hv|sKAŲ1{)En^)d(fk:b"-LƬa6JV584yl`A<'1xP&*zP}ݘNcLb idf!n!=AY%*%!dB"Lk1'`/AjD)78!ݼ6Ud{. ZH [3|$MjYH TgIUs+)`Yު5Ob9-B\ZD]][ܣ\"ǽ7쵼 ?MQRt~drd"0sth}-T=#(>"& x`+'Etd`݌VϕC ƀI X,w ը8U C7TY6%iP'f 5FK>1kŗ4ԼpHIk+7q4X 9tf=1G}[٭Qc|ٍ3 L2; W(.PJr}KJd ܷ#"Y6QފƢf*oxK#˚zlSZMtA]V< > endobj -538 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [266.509 370.403 288.427 381.347] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.2.2) >> ->> endobj -537 0 obj << -/D [535 0 R /XYZ 125.858 740.998 null] ->> endobj -534 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F57 442 0 R /F34 318 0 R /F52 454 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -541 0 obj << -/Length 2844 -/Filter /FlateDecode ->> -stream -xڭZݏ۸_}?$J^\""ݢMd^ 'K$ow3%KC׈3q? U"${&y=logduY~xzSMOVkqiVI/>Gk59_ %i¤HUELBq*rzΚLxjھoޑ@(urЉތoD %|ϧ<6".LHm..W eםYmSc]n{,~kݨ/V7]_n;:~{tp_`i"8i\dq:L{x;[$fXfěX4 cJF9}=]_'aPtT/+G 6d׊ǦeS[XK`T~PhJV/_SIcU(36X[]S0˙@ ׍pn|5FF|WۻmW#:>tsr-Dz [Pgus`!yd+a۶&𡍫ܥD<I\X%P ؛yxA"vI&b<kz seH`2agcp00莧wl@l>g=msw^ K1"<#h\7eZD*|A!\Q*!I>`]T] -M΀x%LH_bGRIWo͡ xoŶlmc"ve0K!75C*@ PJ(FVDMW [MoAf3vZ nlۖ9I?z?gfwϒPMSC2B0#1S <iGhY5%VwzRqtP~ 9Jk)sJPDd7Yr -+$d=dlf[)9X ,Z xkx1|4 -+ sP>3>1e_ς%!E#X0c JuT㬷=,='D;Ӥ70SZTR*sYT8(2!dGnOm /{dz,6z7Vh_wD^]g71.-]I+d.Ru畝谐 "@S_s'T8v3TJT>@P,f}#Fm ={O2=:8};7&PvB_0(3e ,f֐+*\v/o*|\3{RyF s(G0WU'֜^@lعQn3~#pPl|X&:ҳ+ioryJ<^{tT/s>FU\pCRSσq~D:GY%H4"v^JOrޒv=,^`c0| dg(LS -I)a>Uhxd%(+( W}[|LE0>J'kaӇ\fJAw lTƣrpM> endobj -542 0 obj << -/D [540 0 R /XYZ 125.858 740.998 null] ->> endobj -122 0 obj << -/D [540 0 R /XYZ 125.858 555.424 null] ->> endobj -539 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F57 442 0 R /F42 328 0 R /F52 454 0 R /F11 496 0 R /F14 545 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -548 0 obj << -/Length 2747 -/Filter /FlateDecode ->> -stream -xڥYY~_ mH@dr̦"$<%-,9:Se?,dh}Oi4JWYw{ex3?<)wy#gv{ۛ?~>:?3u8"3ٛu<6J+m>ЙdWk ;{-tw+mz=經csg9fgmEMmΣdSk[Ǚ8^kEmEnPea`xLrrߍ"E>_0)?Lc<|,HEAU ܧ@ق_2]Cv#pF_Ta6?\T[t0qP} {tUisdy NB<\^mƤZY,ƙ?Z1*Jeҹ?Pq/L)= tL]Y!CSlK8]ރ ] n<VǪg -$RN O -l߃Me)Ȣ㕐 ˲S5 lD/[4z{ʛ*H6}{ɖZ ˸Z {c^@hӋ>Wy`x.tnNrMG՝*]I&̔g"L|q6y-(M*KΚd$ pG9>_%c#~ʒTo󙦼B4hr,h<վDj5Vk(c-ؼ(k/I\ Ί Bs Ws!6YhBPrjG =.S!`e!|yEm.ho1Z>LH&M&Vᅍ -U(su8_ /)!U1R -&룘 LA!`_ fŒPTԄ:vUKۢ6 -`0TG -=A!y ڳ$[V}oxAyE1'?$E1vLM‚YY !WVwяT|*҂U$.e&}=6]Y|a1ճuTJ8mv!bV`L;ȹK( +4&̂Rq>Xip15tq@2Y6;,'Gka%f-o)$#p]ƝXރ%.CO4ЛN]F'GLۜ -@?tY'`RhTeӊ`l^t -c#ҡ15C@j-d*qeoDJ;tL)nl$V~:,lx26$%*rE: TIEu,@Y "&fe]!p$hRB!QG\PZsJIETSRqueD/<*+llbөwhʑ G-b),/sI"y׻\qd$=?H/^Y g$uӿ?@B:a I趌 ς1R7?:~0abr&8xv4 -ce*F 8MǵVd4yZNCs*-gZA'*o kcA'6揶!q:|d&́1Y8cC -#: }?u$.o)3L8xto>0|Bp%xg2;RcF0Z@T Fa#Bj+U莑 -$%-˟+-2 hV OO|ծ*[h7IW_;?wZk}F%9H}X7ӠjL}$7-~aITX.y%M`x==Ѐl0R @wϳuǽ:D4fV")#uY:` -WOg*VpA%  -O9#Ѱv6PRs|i:RҨKB>"h\TgEaq/&M}dde9zb< abn}FPl?PAK1 !6'냙|1 -z -{tס5vM* Ċ i!⟖ 8Q&K跷P=4Mg%ҭz}%JѪj%a-k&xK~^iHZ>\ΎC -Z8EyӸ -YDžW :F|N%_to<#j_%eU_:pq|,ȸ@xb4VQ5Urz.!=;M3Cw/En1E@n: )/ܵZi##pਚ7h\PeND~"ɟlrPrw%;9򠲊P0jױ7gendstream -endobj -547 0 obj << -/Type /Page -/Contents 548 0 R -/Resources 546 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 551 0 R -/Annots [ 550 0 R ] ->> endobj -550 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [404.805 159.514 411.779 170.458] -/Subtype /Link -/A << /S /GoTo /D (figure.2) >> ->> endobj -549 0 obj << -/D [547 0 R /XYZ 125.858 740.998 null] ->> endobj -126 0 obj << -/D [547 0 R /XYZ 125.858 569.85 null] ->> endobj -130 0 obj << -/D [547 0 R /XYZ 125.858 476.824 null] ->> endobj -134 0 obj << -/D [547 0 R /XYZ 125.858 322.03 null] ->> endobj -138 0 obj << -/D [547 0 R /XYZ 125.858 193.138 null] ->> endobj -546 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F57 442 0 R /F42 328 0 R /F11 496 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -554 0 obj << -/Length 2946 -/Filter /FlateDecode ->> -stream -xZ[6~? ԬHJ7$6E&g:2mkWIyЖ,;npL73PɅT|%6_xWIVYHw_H -k~3~c+q7_TG߽}˟VZk%f=cԸXɅB!ӵXQ?q4L_˕NTtsQñtpZhWpLJ~wv,Op&K"6uEW:~ -ڭl6M}ǽkPSWH'yY]8rWO؆U fEh~.,Ԑر;ʰAPe1TЩem66x<'ҰkaSp( -o,(SB#?\H4F aJAr*8@ -,opKGkvLd#ǙxfBv1ZlwұlR16W xGxOb zB ib1\߽yX(*,,H_ #Q&M0ǒ d|/琅noߎQHLj*hHOp6+LJ*+<T -`?S\T2^LuBM*$BWAS^ SW|7rT!>f6D,N=[ fVR`2ʈ<3a 84#pC#@(|9saF7CL>D -šכ[:zY D/ dӵ{CqoO`!vU 5Ih, bLtpyLDa>'52«26*̣c!74kc=$$A-t^ Ey9:ˢ{ҾuZeUP=#æc!ztzRڇI.-`qjVYjv];A[IF[1 T!H\_L9P8"j\ZwV_SQQ,:o'jtn%Cbzt5OQ_=KQ}^JhTģaIO*[mS?`6[ A΢Cѳa -I`b8Lse|_Ο8>R}vK,BD0et,MU -Fq&vTfBO6Q'?*Ώh`N@[]ų?\/?M]U;j ~P>z}cػaT -j$(E~A5ypw~75fbB'ZdR<~2~ endstream -endobj -553 0 obj << -/Type /Page -/Contents 554 0 R -/Resources 552 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 551 0 R -/Annots [ 556 0 R 557 0 R ] ->> endobj -556 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [295.763 691.021 302.737 701.964] -/Subtype /Link -/A << /S /GoTo /D (figure.3) >> ->> endobj -557 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [153.365 226.229 160.339 237.173] -/Subtype /Link -/A << /S /GoTo /D (figure.4) >> ->> endobj -555 0 obj << -/D [553 0 R /XYZ 125.858 740.998 null] ->> endobj -426 0 obj << -/D [553 0 R /XYZ 237.51 675.26 null] ->> endobj -142 0 obj << -/D [553 0 R /XYZ 125.858 537.188 null] ->> endobj -146 0 obj << -/D [553 0 R /XYZ 125.858 293.726 null] ->> endobj -150 0 obj << -/D [553 0 R /XYZ 125.858 212.655 null] ->> endobj -552 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F57 442 0 R /F52 454 0 R /F42 328 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -560 0 obj << -/Length 3593 -/Filter /FlateDecode ->> -stream -xێ}}(jk.@6 6A>I46Jr6sxŒ9E5Eϕ،qE2͌$ϳjCgx ydZnGn?b(/%Wtw|'-~w( !n^޶\H$B.INLƉdĨi,fDQ9[<'BV>( ӟseR0:/8bw\My<,{/W/%&9;c&όqt Q搽':[W7[S|tuxݼGG$aCT~[G!²h>K0cf,X NV{HF2 -!L^e`/ڹG0h/ݮ\-^yN5r3Wb`~g$I^"BQ [>_d98KZ$Mu} Į VO'h,PD hc - 4߮!z2}B}T`De(EP@20fL%Y8$m`)Uyt^|7ĘbTh7DL< -$¹kd2S -bRič.RFںXW6a] ڭuh;;cTِpھŠ@/3cvrB&$a$0M$Ӥm[ Ѷtd@4m]aňu]}u<2XJ9L YyeqNҖ`Dz: Jn-G,Z)Oc֕!#꤂m*ȧo]t5F1ka^eD )81W\ !|7zdLVW`' h㣂@6'Ԫ ؄r:rRhuU XAӠ'<\u>_Sԧ05V)N&Iztz-O>i.M}L&5at%&l(8Dt(v8B?εB_*ϳt^06*};2"DMe*qsrEeIӽ@t|5N|bMۃ1Dc z;|܋2.5B"f d/2$S!lPUg:MNrݏQ( 4+)M* AnU*,rm}w82""VEݢaձ,ژyVBrY?y(axuYuZ-\΄Ke5c`b)FB?׍{k%f(].*^:Y3e2;$zj_;[g8nw~p 濔pm8sx[uy؅׵hE@Xko}sF d9>:@&X:_S~شZP$,SqB*(tڌfpϗӬEMQTl^# \M61P w so .!^T[XOW{5`S ž&d(~$A]1|^I@|x $&oɲq}^f[4FG'rLS?Bf=تhzO]9#-kl' 8*7?mw!!ϹSc'꣟؟W[?h&"b qFEGSȘbx};& ՞LݯlkG?!p+<Y*x,$z0h:r}'}/A/d, 4^7cyX*6t4lDMPga -쁓be:ج{%T"P3>PK-]{%$bi[băq?Y9▸bIxGq5[!{1i_m -X- -O - -g$zKޢ //"6B:N`b$gdY6`YA63>|ll#Xk[IQ1c-Z, -:Ar튻T.1Tw5F pF+.:6b}u{o<^Ci#(yv$2֗b/ pW.`zm c 9'6mUA7&[Wf#J{&5R(LEMA*9aR}OuT4XH9vS -}1_\lm!)Mh9Fc/9o8I5PNX ݾVxuhy@o[*`v8_^'v@vjc>J{D\XNUPGBjiw|`]ؕ6N 0v_<xv{J ǠW}ơ+AQ9tJʅ4 ͮ_Y!TSCxa` H&]QHsOh 3a\&/ i@mmCc5!.l|\9c. -#H/3+]HkyA,kB_'Y2t&ddw% -˒PE;"G.*w)ׅIQqƤz$,SDQ++.`M[ T_fendstream -endobj -559 0 obj << -/Type /Page -/Contents 560 0 R -/Resources 558 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 551 0 R -/Annots [ 562 0 R 563 0 R ] ->> endobj -562 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [342.891 417.377 348.868 429.898] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.5) >> ->> endobj -563 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [171.905 145.023 177.883 157.544] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.6) >> ->> endobj -561 0 obj << -/D [559 0 R /XYZ 125.858 740.998 null] ->> endobj -427 0 obj << -/D [559 0 R /XYZ 247.846 711.29 null] ->> endobj -154 0 obj << -/D [559 0 R /XYZ 125.858 320.117 null] ->> endobj -564 0 obj << -/D [559 0 R /XYZ 140.204 139.628 null] ->> endobj -565 0 obj << -/D [559 0 R /XYZ 140.204 129.9 null] ->> endobj -558 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F57 442 0 R /F34 318 0 R /F52 454 0 R /F42 328 0 R /F11 496 0 R /F14 545 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -568 0 obj << -/Length 2816 -/Filter /FlateDecode ->> -stream -xڭZY~_`m` ̍LfFag2m+#"dY}$U*AłßX8,IEV}D4뇻X$, a7auVk9_u Wo⫕X~~ƿ?~pTjadiO]]]MSx6&U_&A,04ڟҽqd7Υ 6O@^0+(,L5GRB#<ܼδS $xg"$릣]C2r!\D Le@p XriCti ܢ%+Eg1 ijLf戼1I0_ii/)šŀ@v1$1|y&*$rZduӴYo =Kbg@^֗LiӧbդOm#a^Bh; lJ$[ 1頚[9}k-fO <A -S/$'`&,rFwk -t ku&>\&>k#p'NL$/s0- r<%Bƥf/=(@v*зX]) -aՆ&V`PR`[vw0,Y3! = PW fˮxe[ƍ0*<'h{@ApʊֽP]ntSYgНtY}AS ׁ(q'ծ{]rJ#N -5 Dy`hWEJ<:.l>[S/ Q$E:Y(nj)ȿ.cY u@3Y|c}_6Bp6DTy@lxXo_r9ut9 ?k'J0}XEztYf]f 1.v[4oRs֔d  8Z1˲S#&>;a?o$M%u "D j"kLc/s1n\ڽQATķu4GDKH3zp -$6i8'tڸjɱP>_\]Jg[GgYu{YxT(y'!9\.\Νwsǧԍ,UrcR&FFIa<0#D$aF,jnc#zg`6AČA@4 (OVrgua9՚O9arSRO3tdI: -g9UQAߍph{KF0;Z6|4Z_;bN{j}w|m7 D^M@ػm͂ӠRAg/S[#o/-hR[`Uݝ_ƍ+g:[4ˍ?F,Qbd㈉0-Q ΚZvxrGN771?Pͩ0!s9s(/hԸǃWn˧ٷyy,|GSW;` RWK<_H'?~/@ax1g"Ih@켸}5۶a<@x⿟OAqq@cyTtn!ߵnwc<} 8uӑhm"­ȭ.tbɶ@;,U]#O2EQKco mXD_a) ӡK]}߅hR{YLTףRi"1dendstream -endobj -567 0 obj << -/Type /Page -/Contents 568 0 R -/Resources 566 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 551 0 R ->> endobj -569 0 obj << -/D [567 0 R /XYZ 125.858 740.998 null] ->> endobj -158 0 obj << -/D [567 0 R /XYZ 125.858 716.092 null] ->> endobj -162 0 obj << -/D [567 0 R /XYZ 125.858 595.404 null] ->> endobj -566 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F34 318 0 R /F57 442 0 R /F14 545 0 R /F45 384 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -572 0 obj << -/Length 2740 -/Filter /FlateDecode ->> -stream -xڵZݏ۸_/l i @7Zm!J%ߐCJdy}Mqf.?zGYL8KED<+No,}zC-l<?>[oX>ܿ>?= '߯YS3zO?s6~sNR{3k7E8oJEFɀ$BY>JήHni4K%~,{՝ewSكȽQkTF$IÌQG3cK3BE0+c5%L),]k@UgTzM{}_S4 Kiwutݧ(.-eָğUdA!-IcFY}SU͚ūN[4-> 9Tݓ$ #^-zќ~A/^F-R|6;Rm6󕌑$ohfGr - O@1Lt0Jl};c*K2KЩleol(;8mcoЅ* pX]鈍1W;KG %|[v$}AFe4Ou_hqY.Q;#D$ms!g^<;ϡ$$aI%$Jhgin8!dmhAp7GMWΒjwKo{|dIlu_J0!tlk6'НWVP8F piZ;+tiT3/Js1~\8^ M vG=nWeYY^ 'zDhԽnZqw9[Ya/qV T$8Q1rF ,]jU9kwƉ -1ԉ<Eb-Yd)+uGhiGc3G9VSsGLfHaA=4~=sY=1{Q^hHbEgTg *c7hf :k< R'ʲOUErtMU*e/cf+^<-{N!5$L"Zf*w,jx{! 2Y|wG3=Lw.X2 zb(}[3uFd#"NvO{ڠJxL;㕳w`^/[ %^)l|8|,yňѢ~Pw⼽C 0r,nhf2Az"-ȿsM+/M LEQ7wacj,\A&k]nd$2]۞0-{z˜L9=U҆]nL×2"@ݷv43|0g!۞uЄ_s^Džnfe["~V#Ѳ, *1ja)-Hg7Yt43AҀ0!4HĠᐞX\G6 %> - -3wvAa7v}x`h+raiʹE?S- 'bѢ8/%8 @{\\KmC:c$r3 _>=q A{Ip|uh Nq4 l: nb&*ip>g.*uE#5z1LM -qDĤ~bwe ہmF2"#vS -Qn]0lR@˼&yQ'PfP\W͢[`mةqaoPXf8냠O2˿[uk/]ѭZ9ޒM q#rM,J~WeA=u].fjEM@ϸO5<[(c1ۧ@ M*c|_9^=~A+&Gp+y&0?,'Y+A+s Hx y̿eIz>ۿ/`֞ZpL8r曶FPj:d&҅,끃q/•L> endobj -573 0 obj << -/D [571 0 R /XYZ 125.858 740.998 null] ->> endobj -166 0 obj << -/D [571 0 R /XYZ 125.858 220.535 null] ->> endobj -570 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F57 442 0 R /F34 318 0 R /F14 545 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -576 0 obj << -/Length 2777 -/Filter /FlateDecode ->> -stream -xڽYY~_1/@zx`mӣ`PaRQd@Z쇬z/AEޯyo5XǬ)hPnAGfg,Y5t.FXwxd2K!u9yL3z=Hkq?k@X8^Ea/J$QL;Cd=Trb6?W3k "Q V8f%.e4:-k9i!*k+qW跰&7tHv& _(&!ag" -vaXdU<~/‹/MW+s>3:8М$vh+Ĺ/& ;0g9[2r'..BɳCXr)#(cԃ{ƒT""P\|E$2}~kJ'q2c뜄;>a"㕬sm -T8/{6 R|`aJp ;Ά! ?U:}"zAnǪ٦ z%ENrZӵ0^張ok|y/e LRB_&5MAn=)a"& : -m3ujjmLc+|r$@ -LˆZ+El$R8Ʉ؞E%m?Ю]W X jP 7G۪鄀hc!²Mfg.hNؾy[BITcqlKr)kd Gc]T(4Z>.C[ZtHs3iK[6\XH-(͹㧵Pv4c Re@C;cVUl~GVB4V]hAtӅ 2SY2[lso.ɷPhp[uSYtd ӑ>Ę{880"0!{ŠJF]q |BҺm'b> S@ 銖{~BEGholíFX```a(Tos?2;W':pYa'v}(3џn6@h- |/p1r|YTbL+( oDh -5tcwu|ƿYz@tjaVնdg{!0mgP2gn;+ Smtu璊`ɩ~iNNs - \_@Bf97N wh6 -Nt -V -[&:(uK5 NX=kےӍ=R{zVRH enWO^]l ;0_rP+[~l -ȌxnMj^*w 1ϕ t!$>D7hPO6`-s.A_*;]ŵHWV\C )Dp4VSZ$Z /NfaNW.PÁKS~ -][{Q`&%+lmmӆ6wR\[hv"tըio:KV !T%zU^wt)0} 14(/hm/JUlankr%w?Z6WTVgR-L/+KjQLc:2k^$mh$y8.q.ӥ;Ѧ+_^q?ͳb.Lן(]r35BoX2:M@hfa[bҌ^`c5|eq QBQ*+wh6FZBE9]0"O>93h#D&'v8س-{"5|j#xhAxՈendstream -endobj -575 0 obj << -/Type /Page -/Contents 576 0 R -/Resources 574 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 551 0 R ->> endobj -577 0 obj << -/D [575 0 R /XYZ 125.858 740.998 null] ->> endobj -170 0 obj << -/D [575 0 R /XYZ 125.858 559.937 null] ->> endobj -574 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F42 328 0 R /F57 442 0 R /F45 384 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -580 0 obj << -/Length 2848 -/Filter /FlateDecode ->> -stream -xZ[s6~K&TB/ݧdd麳w`ԒT98/D G _\hdiXo 4?NdeV7g)HY/\xۏ* ~xr%t|5V?/S%Po?z'E?*0Bn*JUyĂsj=ZV1.RZ ;2yyyC_gmV7өτE˕TqpC7,vدmvϖJ -mUUU4lB\vvvn0mvIz_c1 -2z-ʸꚞɚoooMc\GkkpnuVP -4jtOXOuoUus<7 j'3 ª -z7KNHdDmά_PAUIdnàr\;XRD|Uy3޾Qx`Q9Ayep@8[z{[נ#/I$IY18t:9U,M˄Q?g.6 Y$Ct= 88W?*UB'B!E%'}aBc!T I@őMbR5gJ_'- |1'(-p!?a'^=8_;Jp/^\-P-Qw}e~G1oڟv- xV?;$d:I&))mal{-N:JG~vJqr^)q"έVFpZySdi)4TF_IԀLy D|a5@_Cx eF6)~F_*KW+w! c*+܉<*f^HSĤNB+EE4QP|r*Bx -nf(̆*Z1"/ Y~{|Cv$wR\-[IXc׭0(-:u]W[Z[euuxPK^rfU;w~88@o ӫ%` IU1{s}_UavWWCϷ޻B{[W#ZAcnv8r"Bw#D&nʪ%һ)fm}p"U4 D cxjypI@*=s1>*Bc=& +U^.0*/qL&`M;d{^k0;wE§#a'r6% >;=^ްOl=a1tʄlJ*AGXu>1Zp`5ua9M`/BIٙMA y)XFj@]XoY}Fgv1f%f¹1G5d>eFQ'ñk]*taQ &/;vS@ -BYÃGEFƌ'ɣ.Vݦ}ȇ|.wu8N0z)cLqj` -^%gOʩi$w'"gA,gvuvbF; NN+iWe -IJv5;76eevu[L{g,=z/=4)R⫒O?phHq -=ޓ[4:68K'jU t:>TW]U[ -/(irm\r[m{Zy9os656 -3uٴh}of'b]_fO$ު&C-=lKmvor':^A.HK ?i{KO6DC!{L='춀E t&xg6H&G5`Y5Kˋ1#wTP?w0J:7.j%0Ea/ڒd4[iI}2/F YѸ#ov׻{:}2 h} a[Qq#o@ lf WxU# U CkzFX̹XAS.&u1>jYRAy19PKOwQ.&'iM2:6rd".P6Ѵf)}"Ҋva|5:;xk g]>;œ3XH?>u򲫁uBQ|D}+x~BE֨s >}!"@?!;Z><nC~%1kT?z^|z_y5 %T󧊰3]lݙu7]vX(ЫO1@ڬg/$E5A#WSLޟ~F{/<2"-/y2(f0dضD 4{ȫU<;챬Z5SAU pC@'j+Gn0!]AtwF&"BφCRA6}=(/(t$t~5F%s؇v;؊Jd wwH6Tw$=SSfcܰJE B{p*slq02˞Z(oZ^}COݵT?N|2Auanq{L[(4zk S_&!@ͣJ%Yl7Aq}endstream -endobj -579 0 obj << -/Type /Page -/Contents 580 0 R -/Resources 578 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 583 0 R -/Annots [ 582 0 R ] ->> endobj -582 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [236.125 660.386 243.099 671.329] -/Subtype /Link -/A << /S /GoTo /D (figure.5) >> ->> endobj -581 0 obj << -/D [579 0 R /XYZ 125.858 740.998 null] ->> endobj -174 0 obj << -/D [579 0 R /XYZ 125.858 716.092 null] ->> endobj -428 0 obj << -/D [579 0 R /XYZ 272.349 644.625 null] ->> endobj -578 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F57 442 0 R /F34 318 0 R /F52 454 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -586 0 obj << -/Length 2467 -/Filter /FlateDecode ->> -stream -xZKs6WrR#x*dJ]U{́ R8ۍHU[>FC>|qfYkfU<{W\]W|fMa}"a18n7qwÜG?Qs./RTYP θSY%ĞU;tWb9Zl+NTԮUBAʷPhe& k P)StIBē{{>V7'u blȥAn H$`V ]Bʔ\]SV=@ E4D_QPO؍uC-56n_`eoGkk@, @I,= JDѳ,N & -oʼ9{zw敚_Oԩ 㠴B)T'\AN"SdFORR;I)$BWТjEUm\fA >?1;9:T{5+.GV\_dX(x6UbV(*R_<3r}tW/(xVutыx06ѾA%sLi5yMPC{=pyWѮ$=oP횬\y]#fΏ/s._v>!)HC9'}á5c.أjbl=2vooȮ*](;ԯXM_|Ϋp5`lvR'55?oX}n#;!lމ c2ʪ|C\.kgpoH&H(@X5r۞7>O_m|+Rgu9'źXͶDUuSx^1ȔZCpxvr -Xe4Y4&Bӎ3Nå9/W> endobj -588 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [191.829 567.359 198.803 578.303] -/Subtype /Link -/A << /S /GoTo /D (figure.6) >> ->> endobj -589 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [461.101 335.071 468.075 346.015] -/Subtype /Link -/A << /S /GoTo /D (figure.7) >> ->> endobj -587 0 obj << -/D [585 0 R /XYZ 125.858 740.998 null] ->> endobj -178 0 obj << -/D [585 0 R /XYZ 125.858 716.092 null] ->> endobj -182 0 obj << -/D [585 0 R /XYZ 125.858 610.946 null] ->> endobj -429 0 obj << -/D [585 0 R /XYZ 242.536 551.599 null] ->> endobj -186 0 obj << -/D [585 0 R /XYZ 125.858 378.657 null] ->> endobj -430 0 obj << -/D [585 0 R /XYZ 247.786 307.355 null] ->> endobj -584 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F34 318 0 R /F57 442 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -592 0 obj << -/Length 3051 -/Filter /FlateDecode ->> -stream -xڕZ_ܸ ϧطzbK۷4w9lqv@fȌ==MHٲ;",QD?TEwLDwYӻnCdh_}Gw(Rub\=Pma&/O7[O㗇/O& -~HB/Od.B)=GІ -nw+ %Tv= 綯Y{qMљ7# -S8qR? dX')V:O(kZ<\j;|ײk -Y Q58NzXbOuSu[8zrH &v1,?hΰ=֌3Af2-| awPr=^)@᷿T]\vEk]нap4偻캠q?rrz.m$7d) #5av2p3beVVm\TGލブ)F㫣0<ЂLbziQ,8~c%!RO3([\NҘ]ǮgiW옜d(fpfugnQd#rL#DZZ;7}06.K c]9h>HG=;u3X9#ei ˵7m?ehSH3qJT K=jV*/G8 I^}qљuT$2u-"g'Ŷ>q9dN2qBҨ;!j {jLӧQf\w-I<Џ\)r(48cᎬ ΄&] ,Ĵ{SnxEXNc;QMG "nijp7HAds>T8z\Afʙ?j)6Y `rTu9WG7AĂ͘C"_^:S3z|80rvH,޲B"Um+޴BGs -oJsVf1RYpL{*YeVJNZ0!]~8lC6gaw@JCM8A,ÙwOu #SLd8na{'v5h!Es4D8&4jCgѷەu)h"zۈݒ6BڪyҨ+ 'UUz, -CX802"!$1.jZNh 2Vo:g(s ЄCe0u%.9ƏM)K9]iK2,ySL֍/ݗˊr$ET;Ht8ѯ-3#w3K܇kHe%iƳddӦ[>u/@^BsV,}ϻx,!C`!֡zW:\`șBr2Dl m:+niSu,Jc/=ϗIɕA?`8Io&(,aEMPt47A4KikK{h-xZ:cS*fMM?3l|ӎojnq_M-MKl*6l˂)vR`}`׵'jqyDmV0dl:8Yڥ+rr1ekhnF"`]pޒKbc0 rj+r,/J50Ԋ1&$+.boÇIwc;RGLRT a݊Ff/vXv -H7܆^ k'Ü+!0} p`ٰJeSZEZ\rG^i2%93<1Y{wY#x#[ -4?"dXu1.@zR!pi>1i䥝=OWr6Ŕ ץGU8OV2*p{S5Bj!+n6Ջ IoPEǷ{zEL7.tF0, 7NcEz պמ~0o㛊WYe[9~ -qV'7E?c ~P= (ǒTSrd3[3AWD\*J\M,TGKHC_̮&yͦci2dX[x1qTFl_xSt᫯!ev97 LFd~y endstream -endobj -591 0 obj << -/Type /Page -/Contents 592 0 R -/Resources 590 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 583 0 R -/Annots [ 594 0 R 595 0 R ] ->> endobj -594 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [153.91 224.022 160.883 234.966] -/Subtype /Link -/A << /S /GoTo /D (figure.8) >> ->> endobj -595 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [336.614 212.067 343.588 223.011] -/Subtype /Link -/A << /S /GoTo /D (figure.5) >> ->> endobj -593 0 obj << -/D [591 0 R /XYZ 125.858 740.998 null] ->> endobj -190 0 obj << -/D [591 0 R /XYZ 125.858 593.76 null] ->> endobj -194 0 obj << -/D [591 0 R /XYZ 125.858 486.787 null] ->> endobj -590 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F42 328 0 R /F57 442 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -598 0 obj << -/Length 2392 -/Filter /FlateDecode ->> -stream -x[o6_@7}(^]>(g[>Y7MI&na+ gv2!TLd1:<. ^} $mhҀ臻wWL4ҒM{f$lqrys38vR?~o&>|[7$~tL O?}vӻ+FcHq 143w;HH=*ƁHcyF)D8Ha.I*F]BU A({xz -4e'u^Vy(0ueQϽx`mF]5e*)6eUmEa,7s\LSĩ/+ı-.-3 ͙/ ~?#duA50{ni,Vn۬b%m؜Bp2cRʤ+OZO $iQ0E/' ̋S܄{S-T =CvJ`1D,зN“h9"))ɺX.V^Qc7rlSutAʄ]2ϋm}!A,Vźv$ M&{ga&-DFuҿpBԝ&ǣsD NpVd8:)EL_LSnr;_<ߺ37x*͓$u~oR!éN]F[Փ+1d7ޖNGqTc BF0j ywycݵ'+Е྿Rp&wJH:[ =|[aJw]^_U9yX?l O,/&ӁyL49Ҫe.ލxWNMU|5S͹`0#rsݼ\#ft >C<׍pk5f h5_m^\ ܪa#;/\vWlk`gn3 #cq`,ѿ绯]?MMR[6=|7 -NY$})$$ܔcȂ2.w?ԡh> endobj -600 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [385.386 433.203 392.36 444.146] -/Subtype /Link -/A << /S /GoTo /D (figure.9) >> ->> endobj -599 0 obj << -/D [597 0 R /XYZ 125.858 740.998 null] ->> endobj -431 0 obj << -/D [597 0 R /XYZ 242.342 711.29 null] ->> endobj -432 0 obj << -/D [597 0 R /XYZ 213.007 417.417 null] ->> endobj -596 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F42 328 0 R /F57 442 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -603 0 obj << -/Length 3150 -/Filter /FlateDecode ->> -stream -xڍ˒6r2 b;JRo=@4"Uק_嚃F -SwJWy[w)kÛ>Qp~y{˻/+B_*"{ӽ)??~}/}_R'TBH|`@]U ~:/@Mwݗ@SwyUwA恾S&/M}Ε.,E`8L<&y`R+\ FmYF6"w?*>ˋV=hJ+y3mty"wef[qE@YN׀}s@)~@k ;!;͗K۞z:x9Jp OGxoɗǚcKE#}~v DSR(ܺLà|2;Mh֟EUxxEO4U,`u8x.I..|o-pH]^WO!2xtLjWdVMB@qf[VxS6ʆ$vEz!Z$A- 3OK Ȁ|EA kVz'.B:g۾ !º{G)F}2#-@c>&<  -0(=|'$ {UenWt^;/n?6#ZBe.P8+M#ƒn2L Q0j6޸.L׻j8O[ɝ7h! gP'|5r| -wn}N8#) -6֬]V%yPlB!415Y_jMO`GnhK@p\ -Jy+g~Ze &OaD^tۺjcXl1>=7Dö^zn8kqi=u㼬,@MynϷrп2(w;J(|-ٙ*(APVf`>:/g|#~XcVKtfZN]FNX !AXEvCĠ޹-.=!:`o8A@P} BAwG&HȯIG;Q$9!"q}'$} U*z#-re T2Mc|̓G̬*^t'kj&a`B>|'TnyIKDyd( -)82:+8&ek\\'~Q.AW4ꊥ7ʳ5 WJ*\Ku7޲ X5Ƽ '/P!_(ަϜkҠD E(_ -U?T2T%3&Jz9F8-ha *qNjn\JіҁS3wB؜u8!TRX_0in6WoAwJx Dԯ RU³e|*xB4jL9!t9q9yVSv]h8О|$:ɇP`E 01A8|0?W/LLwd  Ɛ$`Y҉@=ըDA#ױTDʽQY x,f @Nt;_LhФ03 &㾪2 hL=4E:͎7l46:o <66Y_x| -*)w!R?Q 綹>pcmu;Av{; ;=9+-1Oi0rD<7Em=wjG-=oijǁ :0 -D4!`宨BJGj f&,̸4SN11U?hTh(:.S:Mv-9d4CBu۶rF d 9 .{*$(ľP - oS/$Ѕ:4jtp6kd'Iwd&HrVJ`D>Μܾ:Ek6CR{Z烕ڨL;T+T;+:|{ċ,{ -iT⼊ nU* bD iQR  -;ÆPlڭzcGӔ화:N`4=)C b3:^/LCz$MU೛, MFT< K}^:_G;2/DQLv[(%م$ =}Dr?ׇ䋓P.azB`.dnMXQL"SG5ngIjf>΄ƋDMg&SA.)¿?tEnʛGgm="endstream -endobj -602 0 obj << -/Type /Page -/Contents 603 0 R -/Resources 601 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 583 0 R -/Annots [ 605 0 R ] ->> endobj -605 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [359.634 648.082 366.608 659.025] -/Subtype /Link -/A << /S /GoTo /D (figure.2) >> ->> endobj -604 0 obj << -/D [602 0 R /XYZ 125.858 740.998 null] ->> endobj -198 0 obj << -/D [602 0 R /XYZ 125.858 716.092 null] ->> endobj -202 0 obj << -/D [602 0 R /XYZ 125.858 692.898 null] ->> endobj -206 0 obj << -/D [602 0 R /XYZ 125.858 443.225 null] ->> endobj -601 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F45 384 0 R /F34 318 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -608 0 obj << -/Length 2970 -/Filter /FlateDecode ->> -stream -xڭZm۸_- k$zmޚCz&{m^QȒl'K$'%n!"Gp晇TMjd+_i/޾Xdgev^|FT<{z |_meH.Ծ ^~opR'JT$}xa4JEQVfiw *G"ӹm{Y9 R影U"U]DYXk3ThtcY\sy\/%tN:^.ǥZfݱl.h5a]/ڗەy՗Nggn*7y[pК|s m$^K$X*X$; [∌ycU N&pbmʎGMs8eҁ`YbA@_/O#Xw)`gEew i5И| _e>6,k>j guVl#>Z*ؑqN^~!e/HNͷ CU lihoӚ^jg=^i3 Gߨz[5UYÊ\_*94"nQE۲b}io'CidzE[R`ƃ79b`wy{ er-RҀ#aħEA_X& G fTwf2qϖ !>66Ԏ}? sĝ'}hOXJc{&+ -*ZX}Z(h -Om?I d"g7aQa] -pC?Ue!ި:PիY -/lBB7bޡXRArV(xohzY"-␧Cad)q,>ZtO1G A#X{%P#$zª@:O`Z\2xV5C|Ia4@5C}{mFP%Wj ɺn̂Uǔ -7Yլ$"~-{ZhLD(ok -kX,l>HX5H`~N-lVT& c -vk4ٍv#tכ43۴!aXh]6k\p'2z3&N t'gʺr>KwK4UP*HzyVC-x"AL!@ xj\VXf= -:UQb>B\G@ a@6(@ -7C{"^='>FoF#-b'AGEM:LK/+&HA޴+i*$:$@&6$jypc}Na` )mw1D@gfxNn:%<1b=9%2G; KX4WǦQKB¹ -B,"#0d-D0-Fyo&󟀩KՕz -߽~XA0%hјgrNgVY1kÎ@cpHSa ^w+SR1V52 t@J VRCʍnŧ/#jRu4tҧLLOi©b3 -vԈRpR|jff.m]9"d0s[TGCG Ac_LS}|aO,RilOo?|x8)DՐMQa#vLkZ{p]R餗D ŻXjKAETw7 &er;Ua(I1| 2{i`7?_aD(=OךߛDHRKР]ϯc=b**#_%T1AHU Զ}QEݥ%sw!.ohVb'a k-2%f6HVBv@ŷ F FJZl1~{pA1{"WEMm DPbX`k$2; [z2yq ,wF%UBDx[ٱm.Vcsu.Js2(PE6!I<tG|c;G1̘vz <?ÆYL:CW$ gHjpR`>K #N7Tj^ѩ# YQ;{2Mǝ~<)ķdB^!T$~4*en1"Nb}Hf{AkM1y I+ R7̪1\bP|^RtbET᧜Z]$ Ws5.Y2,o)uv +IY=fSV|kqI(v7s?ѹef,Ԇ o"z2x̳l6xog[ ^w6 ^mWpMj'xvWsIio$JNjAd3k CמM?gGDL׌#yBh3įN"GXș`?`ȋ4gi Ip}FO{΂xie/?' -<ͮ.&l}h2 ;(>%RFFY cN -8 A lt$a/03=9{Mw*_!> endobj -610 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [212.725 519.863 219.699 530.806] -/Subtype /Link -/A << /S /GoTo /D (figure.2) >> ->> endobj -611 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [345.235 519.863 352.209 530.806] -/Subtype /Link -/A << /S /GoTo /D (figure.3) >> ->> endobj -612 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [140.075 508.007 147.049 518.876] -/Subtype /Link -/A << /S /GoTo /D (figure.4) >> ->> endobj -609 0 obj << -/D [607 0 R /XYZ 125.858 740.998 null] ->> endobj -210 0 obj << -/D [607 0 R /XYZ 125.858 716.092 null] ->> endobj -214 0 obj << -/D [607 0 R /XYZ 125.858 692.898 null] ->> endobj -218 0 obj << -/D [607 0 R /XYZ 125.858 563.449 null] ->> endobj -222 0 obj << -/D [607 0 R /XYZ 125.858 327.633 null] ->> endobj -606 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F34 318 0 R /F45 384 0 R /F57 442 0 R /F51 615 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -618 0 obj << -/Length 2674 -/Filter /FlateDecode ->> -stream -xڅYK۸W̑JY\37gmodXIqɑPN&> \efя?M)<7M{:O bi+AN+wmt|ӏ>~9J_~?Y8)(BwRAa>r0\(ESV;?t׺ʳj538CuK})ɺpRA80.V)lȖ]*h) L*&IcUF9_IbuqZh.e+@ -+14{Ğ3gv^P{m;&768`k`u}Uu3?P\uunk uۅ|_75o#&~ωVi1RaPf\0ӮXi#.N*We \!MV3Yr؜ K NtуP4B;(B L B+m) :>se`$ -Ka9Yl -ciz(}] U)v \>/mȭ.t' b7-d7"Q_7pb?Y~H -jKn7bpG,Dưc 0B祫 q!Fet9RDov_c&4#UC /-Ph#!/%O3sd1C0vxS";zqQV/LnqA4g r\F)V[+O"jZ i霴u Ј]KH zFьX#zY=@ڝLTg=YXgUa6?n9*zv+zES7M2@yS·6:]X o(0͕*1ٙ$$P;TSNIϫRL썖?{^چƩ/B+D??@™.endstream -endobj -617 0 obj << -/Type /Page -/Contents 618 0 R -/Resources 616 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 620 0 R ->> endobj -619 0 obj << -/D [617 0 R /XYZ 125.858 740.998 null] ->> endobj -226 0 obj << -/D [617 0 R /XYZ 125.858 716.092 null] ->> endobj -230 0 obj << -/D [617 0 R /XYZ 125.858 531.245 null] ->> endobj -234 0 obj << -/D [617 0 R /XYZ 125.858 342.577 null] ->> endobj -616 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F57 442 0 R /F34 318 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -623 0 obj << -/Length 2546 -/Filter /FlateDecode ->> -stream -xڝYK6W̑|u6g+( -H m(qR.&h4>|ݍQwSwJawyeYW>d֏^ uWe=n=d(Mo?nb}q'%,b#^}O2L1,TPѶl8gλqi4 -[WZw ĸBlɐuEB(]{/DϙQDLe %* -d~/Z4"GE㉕YVfl%JMh#vT)t(Of:vjh/09 ucY( rKH<ː/JNnɴ hӮ*aMtxi15z 0+;Н1h&>:6*L  !w^W|˔QxQȽ3]IlyB8K`V Wy͒|g6,Kb:`ߧ 'd(Wn$LmBt2oVp4qA//SY1i+lt|W yI@rxގ{FLoJPV*әTCEsxDq ,aRz-1$N0X+,'C)3_^'T9|2dz䁾z$ThhsYq.S`zەh -8c"@3Gz`1=3@Sj8P6XaV-(K2.Єxp,¢(k* - -kzVc(O `o|<=c`rAL}N3' -VIruXdj4)ÒP44aW10K;`&J<\tY)JJ#QЊ f a~gղ[ Y tea:OP9HaQ30 ;iBs y6TiZܳfN+>rς(0| >$RVuݝ{`EsZ`'1o8 -pѠ9|_{\xP 0(>K/Yz?Nbo}/5 WľGt\< B+&ӀM8tw!gq🫮̗WY@u\U{u(i| -Q̌~N쪛' -ֹɸ ?}#+KT7"DIa?`zuJINa/+ &ۈHG;߭sy{@t4/"IdJ,O?]8sX#uN?txN -k_,X"ɟ_JHտF l -Hendstream -endobj -622 0 obj << -/Type /Page -/Contents 623 0 R -/Resources 621 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 620 0 R ->> endobj -624 0 obj << -/D [622 0 R /XYZ 125.858 740.998 null] ->> endobj -238 0 obj << -/D [622 0 R /XYZ 125.858 716.092 null] ->> endobj -242 0 obj << -/D [622 0 R /XYZ 125.858 611.708 null] ->> endobj -246 0 obj << -/D [622 0 R /XYZ 125.858 481.586 null] ->> endobj -250 0 obj << -/D [622 0 R /XYZ 125.858 352.336 null] ->> endobj -254 0 obj << -/D [622 0 R /XYZ 125.858 325.983 null] ->> endobj -258 0 obj << -/D [622 0 R /XYZ 125.858 265.701 null] ->> endobj -262 0 obj << -/D [622 0 R /XYZ 125.858 194.234 null] ->> endobj -621 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F34 318 0 R /F14 545 0 R /F57 442 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -627 0 obj << -/Length 2221 -/Filter /FlateDecode ->> -stream -xڵ]~*gH3@׻&${H^m %q~}g8,{w?hH=CoB 1lF!lS_#,w(; ū,O t_7H;a?_s7?l׫RvI)YpK/܏gGI$=dOl8gy EN18|v'0xbUߚ%!#c wҰC0vD<ҥN:$ˮK"cTM#?S -WmCvCrxR=ȴq@rDq+Pd(fRovI שS i xA>N4ѷj.CO ज़+[̖gq8&UvjJe)#Gьu3V4 H9LKAg B)lP֢bOmCB֏n`'0 pK/h9+6|BREMu$M0w߾_oPπq|ƶvt9*GA[r; @) -vda+y3Q:狑Ѽ[ 0vol3\;pGΟ!JmAG KڱNrt3옠zr {IYۻҝnlߙHk R+߿eК_"aɆ(ct\@S UUa:ZydyZs<)EbVw9o EsL}dS?cyTy資|fCKWCեvnv]TZBwcи,ZySE1Uzei..Г4iMGs"xߠ˻0FzǶՕ!. -r0fvԵ2y^!:qS73>y,㎧,>5nOp}f]|{é:riwBĊG%#[\آkGr};:{Ë5nm0L^̛Xn"G )Rrɵ<2L/o1U*uk-O\ ICw{=a` - -ZLI_ t8ƶ;^=VF?NƓZh]U @\j -߶^ԕས {,Ce0I-̷[HK#B %YzCv`"~EC&?rN`E^,zEĭG%YW8LP ܂N9-Up`\XL$m1-HX.Md&vI[B|չ.Dg~jVin|Ŏqv]cG&5UC/MFly=&ˌۂU&Xv6)*[,mW}>}+3ƳtzfOlY"蟀> endobj -628 0 obj << -/D [626 0 R /XYZ 125.858 740.998 null] ->> endobj -266 0 obj << -/D [626 0 R /XYZ 125.858 716.092 null] ->> endobj -270 0 obj << -/D [626 0 R /XYZ 125.858 527.26 null] ->> endobj -625 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F34 318 0 R /F57 442 0 R /F77 630 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -633 0 obj << -/Length 3313 -/Filter /FlateDecode ->> -stream -xZ[~?@֌Hdli -Aulueɑ䜸E{ᐲdEmԐ3; ?*q/"I/Ã҂zLJ?"IO/Zz|OW/_~|ϵZOO/{~ L`䩅" }^(J>,iZ[~}:l۟ev*Ӯn{K,B>nj[6Z[첎-o6rs+UdܹE~^޴E]X'—t%]n֗NmO҆,CT-p,, ualCZuEƟ^`?vc.@Q,hB}j2J;dXno!_?:0 Yy:*jj#-0hZEZ:G'9T 6BIKEg1 -h6ڴwܶ'XȢ)wU.jǝiҳ[و;-'{($_HyܧkîE#mr3-K#eZ:6E)R db0Ae))É|H &A lَE10PiWSAkĵ~"DiYoBS"C($~LRX_N 3A93Bz2R*1[U 0sƶ#gPGRh ,q#L˶րAu/?* $G JM!}+nbw2jߑJۼ9$^3QBĿŐ$F2OR|3Z1 "ß38)6YsWRCh2R g b>"-_wi{Bk5#ңH::YAzn>䂎:\ ȟ1#! ܣ'<O-3k!dqxо>vAʃH ZZܲz4i[ 6T -:눼 " lw"{6>A܄G OiZf"FNJ"!GbC G' ɚ*B?D #~z!#x^XwЋbQ/Pŀ])+MkϨpQ?^O?"O/~or>D_|||- w ݋3NI8e@vagxxs$c SN$!b+s^1^$DS CwnoWpS%$+R0ڥJ|:P$<>iݭZlT7<W`qۜ; ]`wR OrjS0jj+|x!W3Ҳ䪚߬՞Y7[(iwEE_m Z - bA[Di_S*qٌ?uĖ)b<,!KcS /rT/ 42[G@U9F(rEBP?e44. So~봜Q/$wΪTN"lJACTG{%mV[j+M~ȭ< @̖gNHD8FخIIH}t:I ex=o(㝜 H~,^ j 4ywj*sWŒjJJrHLZS[YK^xuQX J^w߻IMF8+`IzۡBzL(cALCB1AU6FUHzeR7BYrz)SPޫi_vvTLveuAY t{M=^K5'v1]+Xg_^T'jpEζi"Ss6w~oUt|KqD}՚K&I?i=&/uAe87A͉/!u%wKI59I2XCWnͷ#O&6ǼYzh\dy5egnO6锛4Yvҷ-p#}'̓Np8Zp((Uq0nԒc'te4^ۙͤ|5iפJyiGҪr(unI~y_1썽䨮bEUvƁOf~1KhnϷFt{LAS.2'X^s2]+/Exg g]6'Df8VEWHt(gFģQGlEǗ!H~7m *K 18dOM}vV5J'rFߘPs>C]Z g|SePb3G9BĈ8G]7~#+e~Y@[=O'Æ81sƙ_]<ݾ|T# >=l?3)شqYWaZl&8 to .yqεۗ2Ht'd2.0 >'‹IQ٩|%N0r=p}`{蹇cN4DEP x0ߺ];x#f,7~7f?/Lê.Gh_}Jh/> endobj -635 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [196.462 588.655 208.417 599.598] -/Subtype /Link -/A << /S /GoTo /D (figure.10) >> ->> endobj -636 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [315.084 588.655 337.002 599.598] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.5) >> ->> endobj -637 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [331.398 323.359 343.353 334.303] -/Subtype /Link -/A << /S /GoTo /D (figure.11) >> ->> endobj -634 0 obj << -/D [632 0 R /XYZ 125.858 740.998 null] ->> endobj -274 0 obj << -/D [632 0 R /XYZ 125.858 716.092 null] ->> endobj -433 0 obj << -/D [632 0 R /XYZ 257.615 573.128 null] ->> endobj -278 0 obj << -/D [632 0 R /XYZ 125.858 214.26 null] ->> endobj -631 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F34 318 0 R /F57 442 0 R /F77 630 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -640 0 obj << -/Length 1887 -/Filter /FlateDecode ->> -stream -xZ[o6~0a.VtXx$dMP;yT~Cd*z8Fb=iD<$*0Ql6: #xv4[iD0Ɠ? F˧cHqz, ]̎4HH `م))`"ҴH11#l )XxQ'۹GHkiJVJD &-ūuat)Ö b;xj{tT' CzI#.6,/avjojs }bSe67d j̕ lTd57K.Ap, -eno#f^sY ،% -G^#c#+9L`d .!.ÁO)֬'i8K5Z#?qƵȇpBBTT28+@h8 t&(U-H:7qgaG#.ݢJ!! E8 -_i{HKߋaPO0h|qpnnh5!t{̞O(-nmG vyGbG);>חdggj 2eǬcic[Z+[:+5hRr,Ev^axӈ&*qVTBakt PƝi0WD<&G>,b:|ڭv1N#M]Qa=hoj0c_ H\$<[M|1}v0tOk(7ޟ@^6{;($tGۥ=:U~|K{[?_dYn+N%޲ps5wY!`]盥61F qWe/(Lfw> dik<6۾h@V~osJ<8@sg#l:49̳maRJsPʨי;sϟR,ܪG`s3RX W4endstream -endobj -639 0 obj << -/Type /Page -/Contents 640 0 R -/Resources 638 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 620 0 R ->> endobj -641 0 obj << -/D [639 0 R /XYZ 125.858 740.998 null] ->> endobj -434 0 obj << -/D [639 0 R /XYZ 239.219 711.265 null] ->> endobj -638 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F57 442 0 R /F52 454 0 R /F77 630 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -644 0 obj << -/Length 3149 -/Filter /FlateDecode ->> -stream -x[YoH~@FcX`sxa?b2ԶI-Iߪ>8h*W]Uݦ2Ib/"$*XC׻+jݘ7ի]$$ nDv2^iﯯ?kfj߭u#(b8;3'"Hi\}r7o܌i2Q"∫-_"L 1cق -E= eIAc!}' =$採f -)ߔC`Κ -I$Z Lj3nO==h,CDXgđġ`?]/d_qi[_\eז9RzPLɎ/֡HH,i2G1Pr"X6P0T[AEl2NI69l"+GHACK8}^\IϢ\e͎U.`]Ƽ&'$0f򛝺 -UjUG7j5`V(yf ?'3BPk=2RiL9|4|o!8 -MZ"Պ%%1cOı*j ,J;5 |KenWCiә)\(WUd%R%emZ2#?֊R76 ޕ/T-( F!Yot>6f8T6+ڞy#4"Yޕi, [lJ8zȬ8j8&2.㈰H{HLCkҝ}&'k>daY{Yul -+>Tm pijQO*aZ :l*ZxHQ?C i]R5هyې(\P˂˷f -V.H Imos}@1g1pN0Em=+U*ը!#ޮ, <3ϱ.x= u™oglϼ%gB O7Νٗ[}:4˰qlϡq48(+ 淛f,SUD,*i,G=XJ S;=Vì&<9$t(;^ -i՗BSҪ.h}HjV;'UyP^HB']`LJlʖծL|RGط(nt`;zl1WM-i>>/:~@c, 5gTsS}E߳qgG.Ė<@ `o qEli;WiQN+܌! -QRW <_&9VUU K)O]/WƯ " `IN7?\`G";do{b - b / Z7Js;4;\ FWjHjgcV#֦e ˘鍲'T 31f +YӨBr}""b -&+9 ]HuZ ⅞mzԮS=#O%oӣsL- e"|G;}]t @Fצi!(9| !,WX}4_n˝2yjoܰ=;iB3Gc ,IʿV?#nP}xXKs/-]>|0Uy$/&'1iqcs M}ŝ ihD8<0oɢf̮W P'ԛDcR롡 :8ZK±:aC)EDb]sXa ;$2Ns(}>(7b=b>@1gK~Ù9f%mTgBm[n” -1^fbib½,cU4ebNĿSW#lZTA,`cuVO% ٕ1jo2{GfA.6;rfBU9wly,Sm_6lf[r!GODŽ?@ME5`ig~ l*/6fU:˶cl*#"Nt,0^d^έ/L@{}2B##1>΂RcO\endstream -endobj -643 0 obj << -/Type /Page -/Contents 644 0 R -/Resources 642 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 620 0 R -/Annots [ 649 0 R 650 0 R ] ->> endobj -649 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [288.398 489.043 302.844 501.417] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.2) >> ->> endobj -650 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.551 381.681 465.469 392.625] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.4.2) >> ->> endobj -645 0 obj << -/D [643 0 R /XYZ 125.858 740.998 null] ->> endobj -282 0 obj << -/D [643 0 R /XYZ 125.858 716.092 null] ->> endobj -286 0 obj << -/D [643 0 R /XYZ 125.858 692.898 null] ->> endobj -642 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F45 384 0 R /F57 442 0 R /F34 318 0 R /F11 496 0 R /F14 545 0 R /F8 648 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -653 0 obj << -/Length 2650 -/Filter /FlateDecode ->> -stream -x͛mo8W= ^ӵlѽlMAX,$I,m -E8 %B.( -[K yKtO2?`ȋA_AxQ?X8jIh(N2x:4m'(484 QzryR$br΂(_j(pV)W_yZ\ڞ۵jкq_i1nPNVBUe76W:Mt\yqvio݈$˸CO -V$k9 ՞ .~(J]Х4C>] YMKV6 p{ WoSEFDǏR7ś&|H%V6\_㝨qb$sKe%@uKP*fiUSo cy[Rdž颮FЬ2Y&Sv/ ? ->i1C!OiO~Q~%FZ6hr PDmhky:g}κв`}C -b=6 ZgH. $XT,l\j@P渣7ݘ]9N`X1L+ohJ:߈V>K{>kL!8 r!?K3v^ʛb -=Ӟr \/D58iv:-9!{):VޫoJ+d~/CO:pF*XHmmr,&#_#M: 8Vh&a:FJ|d e+,(DTأ2x. |>I-4FC2XNA?'qZFoV{ɅDT@g>{rAʽL/!ˆyZ'MVmon{? 7Қ$ #謇ts 8 D:*;$ d|hrh4 xk!;5d (!;9Zg<PN0Fe]W [k -5Qx_ɆmmѢmojv) MiP*>Cg8߬tc>4PHeٜQbsHLJ8ìu!| a{?0::R ;/9}<=kNYUa^hd|vyMVQUC>l zJYU@@a -gks f_F6~qj=v,3Q0᥊IU״>#&hbyt -wJ_鼧>}Nf0i~O}n2{VX ckI2_S|vug2dQ}Z Ӎ>(Oa~6\O.?A>P4aF˷zϼAYh׌= 'Nol.g93A9* CU܉z[l>s),4G08i%`+eBA,W7fkϺ!V]fj]1=}̿g3D~PCQH[ug y L}!1%,KL@bD C6Leb#ϺMc1I]l,H -yv˧ϗ{7őj9EG{M(~Hlo.zuͫQ[g 9˗E ,Ce_{QOdm#V1[>nE m v]!Tb ѭ|1t'iz,w%qrӧhd{LLA&~zJ`aX(ޭy3to6 ?Hݤ -T5k@bނX_~ M82M8BH4Kស=ڤU '}YQ|"j'Y;8{_pCr¥c9o߮ ߔ1jpR뫱:?~=4a˸jk-](#)vL6yAFC?c=endstream -endobj -652 0 obj << -/Type /Page -/Contents 653 0 R -/Resources 651 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 658 0 R -/Annots [ 656 0 R 657 0 R ] ->> endobj -656 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [228.533 646.801 250.451 659.175] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.5) >> ->> endobj -657 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [316.561 456.308 323.535 467.277] -/Subtype /Link -/A << /S /GoTo /D (figure.2) >> ->> endobj -654 0 obj << -/D [652 0 R /XYZ 125.858 740.998 null] ->> endobj -655 0 obj << -/D [652 0 R /XYZ 125.858 697.377 null] ->> endobj -290 0 obj << -/D [652 0 R /XYZ 125.858 511.285 null] ->> endobj -651 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F57 442 0 R /F34 318 0 R /F11 496 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -661 0 obj << -/Length 3578 -/Filter /FlateDecode ->> -stream -xڅZY~ׯ<2á+oYZSb`O_c ~N(H.ae]qyޝ%Cv~n2[uYld۝ -pO?~vpLov?n3>|?a~q[cL Go,1K0 nu^]}|dY݃; -S&o> wnUq]Z7VAEqx6Бl(Ks%tjn)#X@AwVTDxDrJ &2;&LJtvsg{;2ᅢWnM;v۾*nalkdo2|-=8b&Ȟ׻R8OeU8$ 7jڃkdY`7W8Ȝ"9 -3q -^x{^v)dktU}xsz6$l;8 952! )*-nb:-ƛ7Ϲ%ɦuEs>? HQVԤ+ֺZHm0| "%%&﫾gnzţwQ$17Tpm H()v]/s:`г!ԍ * -^(}#PHxpvCN[[n'iNr%-u>%:Vvk ڌҙYW }př[2&&o pL%ʄ"JR6?A̙ZÄEJ)lacB.'hҝ>,UUُ\".Դ՚+H mo>ֲit/WQ 'e7@gns lQ4;8LiHѴM}1$l=f̎7MjxZ4(mĖ T.Fԝpl;F2R6`bI  -dpɅ=.FY, q)0T]WjQ 騗}LU?l39F|ILpp}I&fo/ 2̡V:#9Ĩh3*H[pK o%AF'$ဂ/f |[~wd$s홲0HL:c)ӧN-? I >gτc;bU$Kf|9h/ZxMF?1'j", ؋oKዖ/KADA pkߏ59p1;;HݻB!4U}z?0V3kCEf?V,1cFy( W<2!\ H;ÃAػ#z|D|F?Yأ5Y0 -" !;Ճb2ٌ̱GZ'亵&!!.{E $>))gcO::Y"/"( )t]/v+ZȗSb_1v.?0 }M3a'[{Yp$d$#^9[ęN1M2A@$d4ynji ->{➀{8.yWUBZ`抒h6Kz].]m~-d/StF9I]y\|Ihf:(@##'4F#[ϥ$izpMOAdBn,$DNhefnPD‘U{gߙ/E"S"ap&_V<KfU3 ,tf $ƳufYMYu_a-X@̈́A͝5u{~W -]`NFy`,Ad=_3A$ +Y+a$ӯjK5I=|I |I$RBOu AFcPN5[~ &u ^(oW&+,DzPgT 1t+zz-JF@\fJ Z f(uwhjsǟ3I -Gtv}`My!ObfeEJ>#^|pTWvEYW W]),⮂k'#VF^<#sMAbʏW9]`nZU [CV[$HU:<6$NOM_xxfj0(I-Lr7+q:]+6IOv|w 1Xx$62J+!D+K6{izlJw2L]o]98_B^.&dFM2 dWGn>Kݖh(H^ Xh)x@˙ppE`[X8 -å*6)NJ)~ CxW+<'Ç""i?wLN瀗ӿ:+͊pR?t_;|1U -(~Ev\jIu W4I$QX_Kx\Ht#llzNƌX˖pf]]i+ jِbuAV7 a%p]e8ao'FJ/bf^4Cq;A'7O\Lkw?-*|3, YAB9?{uendstream -endobj -660 0 obj << -/Type /Page -/Contents 661 0 R -/Resources 659 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 658 0 R ->> endobj -662 0 obj << -/D [660 0 R /XYZ 125.858 740.998 null] ->> endobj -294 0 obj << -/D [660 0 R /XYZ 125.858 716.092 null] ->> endobj -298 0 obj << -/D [660 0 R /XYZ 125.858 692.898 null] ->> endobj -659 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F34 318 0 R /F14 545 0 R /F11 496 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -665 0 obj << -/Length 2948 -/Filter /FlateDecode ->> -stream -xڅYY~G hgf3 1 =]enm^eM˗}z"_qj:X<_~^>?<ۧGc^f(3\a;0ƙٻskn7=h{d_9ۮgT̋asW߲zq즻VS< 8ͼdsN‚[Vض5]cA$mgހhZ 2 PN[Ody: ZEN@<^@+ȢեUʝ,/  ^O_0i#Mq*)6rdrA::bWsbL#qw&o.;.G0h0w~ r^ݩ\sw#~ekrJ$%vlc6:$ ˞GH<ē R:lDT**DDM+Kq #@DJ?!k3SȻ=1^A"ǥl1n4̠ƈ0렿jlW1a|H[ؒCu8?5TEd\EYvLrwdq \'hJ -@pO]8cœ=mLPRhL>q&X-u`ŐC2M(G1{}*d /̪ҎBѿrL-c>Ipxdy Q`dVRt*d( JiPnvE^ -YLthG*++b("ڝip+ YJCPC>e{IFU~/RG섨oPQpCL)* ,UƠޗp9M"HxiĜ > p8WF0&/y#3mP|܃cGR^1ep^ -q4'Y*H<$a29`dơJQr5f twrQ.fkzJb厣OvMF' 0F{~)zXFy6gRS-;9)jrDnvIu{^Oqk6.uμ4 -o`ȋ$"^As-0䨋 :TFu1)uDC(>m&v^z q*1> endobj -667 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [337.95 321.033 359.868 331.977] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.4.2) >> ->> endobj -666 0 obj << -/D [664 0 R /XYZ 125.858 740.998 null] ->> endobj -302 0 obj << -/D [664 0 R /XYZ 125.858 462.254 null] ->> endobj -668 0 obj << -/D [664 0 R /XYZ 125.858 230.976 null] ->> endobj -663 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F11 496 0 R /F34 318 0 R /F42 328 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -671 0 obj << -/Length 2753 -/Filter /FlateDecode ->> -stream -xڕY[۸~ϯG)ҾdSi0b 4}ez,]]F5(.] Kmyݕ>dƍx~y~cAB& -puç>cQIguV>pg?} _~zjVkl G{x%h`wvhmg:TOP=m_éh廵2=t[5b3Vq^s`?S; FV8/pgDd󪟔Π,P6'SM;ٞfφTQfZ[HN@#[cX'nz>d^&$TÇN(fnGC:f6TJPvɥ\%:hxZ'68N m!B ށ11aLD:FȽ @>^;t qY3v[mvMO8P[U-ˮS@}YR*e -!p߽z>, Xy@o@#}Xf,B ꅏ7&NĨZ%(@% l=/s:vgL\co1Ua)q)(CS.q), \9󢫲25%kaNtjQup S5ƅBcD0[C.M C]:^1pd ; lCR,gw&A9,.$uIf9g U3ҡGkH1uy ζ2O+?oyb#ǽ[%FX(=ۚւ)ؠjz7H۱K6zeq" 䉉+tز}f -ώ*JzV!,d5-0E_$vo<X4xTg?Jz;WpEW\DW |z);0=q!\;Y\p pq8ϵ8mܹ'$fj"HDNp)ȸeekO*P#w-~!=޾2X#)X+A3_?pz T'8!IhClՄ P/RwQ-BuQ p5H^|h4F<$[2rckw @oN ObWe -+Q?/{^Zۑ89S%GAOZ1ANM -ξxBBM/`==X1x(FT=))'%lkj+A\)JJ9%;Lj|n}gVvtx ֋OM@endstream -endobj -670 0 obj << -/Type /Page -/Contents 671 0 R -/Resources 669 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 658 0 R ->> endobj -672 0 obj << -/D [670 0 R /XYZ 125.858 740.998 null] ->> endobj -673 0 obj << -/D [670 0 R /XYZ 125.858 699.265 null] ->> endobj -674 0 obj << -/D [670 0 R /XYZ 125.858 534.508 null] ->> endobj -675 0 obj << -/D [670 0 R /XYZ 125.858 475.459 null] ->> endobj -306 0 obj << -/D [670 0 R /XYZ 125.858 400.984 null] ->> endobj -669 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F11 496 0 R /F34 318 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -678 0 obj << -/Length 432 -/Filter /FlateDecode ->> -stream -x}RM0Wp4'ĽvnzXEJ1`d4*$308@&n6HBlyڠ/hDW|c8P4ȫ;aBpH_ˆp? җS\);_}"KwYz|KgqGYJ)LF ÎIy cV]}]g-"Aba-9Nj0 E'U2 T!FՓV Gʾr~tW?80hFC.ꮷ53D4Lp_16FY:#@g,20(J@ި^Aqe%_2:/ɚ-jrSr6;Ph|xOv2A"v9endstream -endobj -677 0 obj << -/Type /Page -/Contents 678 0 R -/Resources 676 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 658 0 R -/Annots [ 680 0 R 681 0 R ] ->> endobj -680 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [232.547 679.818 246.993 690.009] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.4) >> ->> endobj -681 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [297.572 679.818 312.018 690.009] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.5) >> ->> endobj -679 0 obj << -/D [677 0 R /XYZ 125.858 740.998 null] ->> endobj -676 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -684 0 obj << -/Length 2060 -/Filter /FlateDecode ->> -stream -x[[o6~ϯ Do k+`yAG, ~xŦb(81-~<9ΡpQaŋtskևh` -o7}H@c')/ Z@`-{( ~Xoyw? @}SԔ,X"<XCKzI&Ek9 >\i4Rz҇ |Xt+~ro Xʶ-7~WUR7Y!xPP!#"]vx9iY\[?֜Ud+QtUС=se~5OXτ:P@CN4]E` VM4h*+ Guɗe-^D';и] ΅;I\ s[{3B +/SY}]y qtS%$3xQ{""²kΜnqQΫ}q Ai/öJ[O0>n|ɚ!˳EB?q,6K:c :7If1 bw|0@<b#j080$@sʚ*O^4 A4͠%3 k8 -7UbqRa!gA!$Lt=%~߮r26]d>˧C,h(|eEFuiSRrc=Jb"gsh - un\6@ -߱],y"<\r(s`-IM%96emSli'Z>'ak;GmF-̓ [s0qPngץy7H-b~l1QVuR]F\FuX.=cG*W9PZIQS>PuL,@8KA5ce cE7gm&|.Ҍ%#.:Շ?`M͊Dzޘ?@zp#V|mwI -Iid48bLO;nJL4A-ݗ逈iAx]Xژ+h 2;p !c5ʺ݂F44fOl%2Krnik|e 99{hIr+lZ+㍂C1<H. -`bW=u'Z7HtGYV5OVtg{v^(^?_7XN@VяXx梽~GGlF5{aP].+M.מ:.Pxtn2fv6 -try}]j/4ZZ]'źKR0~<څ5Td4y/H0ap|90́mS)緔YFpo^<[3p]$oLzr)5&׿5G BP=D!=/c uendstream -endobj -683 0 obj << -/Type /Page -/Contents 684 0 R -/Resources 682 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 658 0 R -/Annots [ 687 0 R 688 0 R 689 0 R 690 0 R 691 0 R 692 0 R 693 0 R 694 0 R 695 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R 701 0 R 702 0 R 703 0 R 704 0 R 705 0 R 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R 711 0 R 712 0 R 713 0 R 714 0 R 715 0 R 716 0 R 717 0 R 718 0 R 719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R 726 0 R 727 0 R 728 0 R 729 0 R 730 0 R 731 0 R 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R 737 0 R 738 0 R 739 0 R 740 0 R 741 0 R 742 0 R 743 0 R 744 0 R 745 0 R 746 0 R 747 0 R 748 0 R 749 0 R 750 0 R 751 0 R 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R 757 0 R 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R 767 0 R 768 0 R 769 0 R 770 0 R 771 0 R 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R 777 0 R 778 0 R 779 0 R 780 0 R 781 0 R 782 0 R 783 0 R 784 0 R 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R ] ->> endobj -687 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [264.339 667.877 271.313 678.094] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -688 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [274.301 667.877 281.275 678.094] -/Subtype /Link -/A << /S /GoTo /D (page.7) >> ->> endobj -689 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 645.207 281.275 656.221] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -690 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 623.289 281.275 634.303] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -691 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 611.334 281.275 622.278] -/Subtype /Link -/A << /S /GoTo /D (page.16) >> ->> endobj -692 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 599.379 281.275 610.323] -/Subtype /Link -/A << /S /GoTo /D (page.18) >> ->> endobj -693 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 587.424 281.275 598.368] -/Subtype /Link -/A << /S /GoTo /D (page.17) >> ->> endobj -694 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 567.444 266.331 576.45] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -695 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 567.444 281.275 576.45] -/Subtype /Link -/A << /S /GoTo /D (page.15) >> ->> endobj -696 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 553.551 281.275 564.495] -/Subtype /Link -/A << /S /GoTo /D (page.14) >> ->> endobj -697 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 541.596 281.275 552.539] -/Subtype /Link -/A << /S /GoTo /D (page.12) >> ->> endobj -698 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 529.64 281.275 540.584] -/Subtype /Link -/A << /S /GoTo /D (page.12) >> ->> endobj -699 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 517.685 281.275 528.629] -/Subtype /Link -/A << /S /GoTo /D (page.12) >> ->> endobj -700 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 505.73 281.275 516.674] -/Subtype /Link -/A << /S /GoTo /D (page.12) >> ->> endobj -701 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 493.775 281.275 504.719] -/Subtype /Link -/A << /S /GoTo /D (page.14) >> ->> endobj -702 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 481.82 281.275 492.764] -/Subtype /Link -/A << /S /GoTo /D (page.13) >> ->> endobj -703 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 469.865 281.275 480.808] -/Subtype /Link -/A << /S /GoTo /D (page.14) >> ->> endobj -704 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 457.909 266.331 468.853] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -705 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 457.909 281.275 468.853] -/Subtype /Link -/A << /S /GoTo /D (page.10) >> ->> endobj -706 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 435.992 266.331 447.005] -/Subtype /Link -/A << /S /GoTo /D (page.16) >> ->> endobj -707 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 435.992 281.275 447.005] -/Subtype /Link -/A << /S /GoTo /D (page.18) >> ->> endobj -708 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 424.789 266.331 435.05] -/Subtype /Link -/A << /S /GoTo /D (page.16) >> ->> endobj -709 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 424.789 281.275 435.05] -/Subtype /Link -/A << /S /GoTo /D (page.27) >> ->> endobj -710 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 412.834 266.331 423.025] -/Subtype /Link -/A << /S /GoTo /D (page.5) >> ->> endobj -711 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 412.834 281.275 423.025] -/Subtype /Link -/A << /S /GoTo /D (page.29) >> ->> endobj -712 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 402.064 281.275 411.07] -/Subtype /Link -/A << /S /GoTo /D (page.29) >> ->> endobj -713 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 388.171 281.275 399.115] -/Subtype /Link -/A << /S /GoTo /D (page.29) >> ->> endobj -714 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 364.261 281.275 375.204] -/Subtype /Link -/A << /S /GoTo /D (page.33) >> ->> endobj -715 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 354.323 281.275 363.249] -/Subtype /Link -/A << /S /GoTo /D (page.34) >> ->> endobj -716 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 330.388 281.275 341.401] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -717 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [274.301 320.41 281.275 329.376] -/Subtype /Link -/A << /S /GoTo /D (page.4) >> ->> endobj -718 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 306.477 281.275 317.421] -/Subtype /Link -/A << /S /GoTo /D (page.26) >> ->> endobj -719 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 294.522 281.275 305.466] -/Subtype /Link -/A << /S /GoTo /D (page.22) >> ->> endobj -720 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 270.612 281.275 281.556] -/Subtype /Link -/A << /S /GoTo /D (page.37) >> ->> endobj -721 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 258.657 281.275 269.6] -/Subtype /Link -/A << /S /GoTo /D (page.36) >> ->> endobj -722 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 246.702 281.275 257.645] -/Subtype /Link -/A << /S /GoTo /D (page.24) >> ->> endobj -723 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 234.746 281.275 245.76] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -724 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 212.928 266.331 223.842] -/Subtype /Link -/A << /S /GoTo /D (page.20) >> ->> endobj -725 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 212.928 281.275 223.842] -/Subtype /Link -/A << /S /GoTo /D (page.30) >> ->> endobj -726 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [274.301 190.911 281.275 201.924] -/Subtype /Link -/A << /S /GoTo /D (page.8) >> ->> endobj -727 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 180.973 281.275 189.899] -/Subtype /Link -/A << /S /GoTo /D (page.10) >> ->> endobj -728 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 169.043 281.275 177.944] -/Subtype /Link -/A << /S /GoTo /D (page.11) >> ->> endobj -729 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 157.063 281.275 165.989] -/Subtype /Link -/A << /S /GoTo /D (page.20) >> ->> endobj -730 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 145.108 281.275 154.034] -/Subtype /Link -/A << /S /GoTo /D (page.20) >> ->> endobj -731 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 131.135 281.275 142.079] -/Subtype /Link -/A << /S /GoTo /D (page.21) >> ->> endobj -732 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [234.451 119.932 241.425 130.123] -/Subtype /Link -/A << /S /GoTo /D (page.5) >> ->> endobj -733 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [244.413 119.932 251.387 130.123] -/Subtype /Link -/A << /S /GoTo /D (page.7) >> ->> endobj -734 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 119.932 266.331 130.123] -/Subtype /Link -/A << /S /GoTo /D (page.14) >> ->> endobj -735 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 119.932 281.275 130.123] -/Subtype /Link -/A << /S /GoTo /D (page.19) >> ->> endobj -736 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [448.648 667.125 455.621 678.069] -/Subtype /Link -/A << /S /GoTo /D (page.7) >> ->> endobj -737 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 667.125 470.565 678.069] -/Subtype /Link -/A << /S /GoTo /D (page.20) >> ->> endobj -738 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 655.17 470.565 666.114] -/Subtype /Link -/A << /S /GoTo /D (page.20) >> ->> endobj -739 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 619.304 470.565 630.318] -/Subtype /Link -/A << /S /GoTo /D (page.39) >> ->> endobj -740 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [428.722 608.101 440.678 618.293] -/Subtype /Link -/A << /S /GoTo /D (page.11) >> ->> endobj -741 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 608.101 455.621 618.293] -/Subtype /Link -/A << /S /GoTo /D (page.17) >> ->> endobj -742 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 608.101 470.565 618.293] -/Subtype /Link -/A << /S /GoTo /D (page.26) >> ->> endobj -743 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 597.436 470.565 606.338] -/Subtype /Link -/A << /S /GoTo /D (page.27) >> ->> endobj -744 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 573.576 470.565 584.445] -/Subtype /Link -/A << /S /GoTo /D (page.15) >> ->> endobj -745 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 563.538 470.565 572.465] -/Subtype /Link -/A << /S /GoTo /D (page.15) >> ->> endobj -746 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 551.583 470.565 560.51] -/Subtype /Link -/A << /S /GoTo /D (page.18) >> ->> endobj -747 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 537.611 470.565 548.554] -/Subtype /Link -/A << /S /GoTo /D (page.31) >> ->> endobj -748 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [438.685 515.693 445.659 526.706] -/Subtype /Link -/A << /S /GoTo /D (page.8) >> ->> endobj -749 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [448.648 515.693 455.621 526.706] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -750 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 515.693 470.565 526.706] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -751 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [448.648 503.738 455.621 514.751] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -752 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 503.738 470.565 514.751] -/Subtype /Link -/A << /S /GoTo /D (page.25) >> ->> endobj -753 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 491.782 470.565 502.726] -/Subtype /Link -/A << /S /GoTo /D (page.25) >> ->> endobj -754 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 479.827 470.565 490.841] -/Subtype /Link -/A << /S /GoTo /D (page.24) >> ->> endobj -755 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [463.592 445.954 470.565 456.898] -/Subtype /Link -/A << /S /GoTo /D (page.4) >> ->> endobj -756 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 433.999 470.565 444.943] -/Subtype /Link -/A << /S /GoTo /D (page.15) >> ->> endobj -757 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [423.741 422.044 430.715 433.058] -/Subtype /Link -/A << /S /GoTo /D (page.7) >> ->> endobj -758 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [433.704 422.044 440.678 433.058] -/Subtype /Link -/A << /S /GoTo /D (page.8) >> ->> endobj -759 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 422.044 455.621 433.058] -/Subtype /Link -/A << /S /GoTo /D (page.13) >> ->> endobj -760 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 422.044 470.565 433.058] -/Subtype /Link -/A << /S /GoTo /D (page.15) >> ->> endobj -761 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [448.648 410.089 455.621 421.033] -/Subtype /Link -/A << /S /GoTo /D (page.5) >> ->> endobj -762 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 410.089 470.565 421.033] -/Subtype /Link -/A << /S /GoTo /D (page.27) >> ->> endobj -763 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 376.216 470.565 387.16] -/Subtype /Link -/A << /S /GoTo /D (page.27) >> ->> endobj -764 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 366.278 470.565 375.204] -/Subtype /Link -/A << /S /GoTo /D (page.18) >> ->> endobj -765 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [453.629 352.306 460.603 363.249] -/Subtype /Link -/A << /S /GoTo /D (page.5) >> ->> endobj -766 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [463.592 352.306 470.565 363.249] -/Subtype /Link -/A << /S /GoTo /D (page.7) >> ->> endobj -767 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 340.35 455.621 351.294] -/Subtype /Link -/A << /S /GoTo /D (page.29) >> ->> endobj -768 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 340.35 470.565 351.294] -/Subtype /Link -/A << /S /GoTo /D (page.30) >> ->> endobj -769 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 330.438 470.565 339.339] -/Subtype /Link -/A << /S /GoTo /D (page.22) >> ->> endobj -770 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 318.378 470.565 327.384] -/Subtype /Link -/A << /S /GoTo /D (page.29) >> ->> endobj -771 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 305.237 455.621 315.429] -/Subtype /Link -/A << /S /GoTo /D (page.11) >> ->> endobj -772 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 305.237 470.565 315.429] -/Subtype /Link -/A << /S /GoTo /D (page.13) >> ->> endobj -773 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 292.53 470.565 303.543] -/Subtype /Link -/A << /S /GoTo /D (page.39) >> ->> endobj -774 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 282.592 470.565 291.588] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -775 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 268.619 470.565 279.633] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -776 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 244.709 455.621 255.653] -/Subtype /Link -/A << /S /GoTo /D (page.15) >> ->> endobj -777 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 244.709 470.565 255.653] -/Subtype /Link -/A << /S /GoTo /D (page.19) >> ->> endobj -778 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 223.543 455.621 233.805] -/Subtype /Link -/A << /S /GoTo /D (page.17) >> ->> endobj -779 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 223.543 470.565 233.805] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -780 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [428.722 211.588 440.678 221.85] -/Subtype /Link -/A << /S /GoTo /D (page.18) >> ->> endobj -781 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 211.588 455.621 221.85] -/Subtype /Link -/A << /S /GoTo /D (page.26) >> ->> endobj -782 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 211.588 470.565 221.85] -/Subtype /Link -/A << /S /GoTo /D (page.40) >> ->> endobj -783 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 198.881 470.565 209.894] -/Subtype /Link -/A << /S /GoTo /D (page.39) >> ->> endobj -784 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 186.926 470.565 197.869] -/Subtype /Link -/A << /S /GoTo /D (page.32) >> ->> endobj -785 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [453.629 165.76 460.603 175.952] -/Subtype /Link -/A << /S /GoTo /D (page.5) >> ->> endobj -786 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [463.592 165.76 470.565 175.952] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -787 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [463.592 153.053 470.565 163.996] -/Subtype /Link -/A << /S /GoTo /D (page.8) >> ->> endobj -788 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 143.035 470.565 152.041] -/Subtype /Link -/A << /S /GoTo /D (page.19) >> ->> endobj -789 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 131.08 470.565 140.086] -/Subtype /Link -/A << /S /GoTo /D (page.19) >> ->> endobj -685 0 obj << -/D [683 0 R /XYZ 125.858 740.998 null] ->> endobj -686 0 obj << -/D [683 0 R /XYZ 125.858 680.241 null] ->> endobj -682 0 obj << -/Font << /F42 328 0 R /F34 318 0 R /F32 316 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -792 0 obj << -/Length 1063 -/Filter /FlateDecode ->> -stream -xYKoHWptq7q]Eh36900,~ xȃֳiSt}诪H@@H1: nֻ E^& x@#-YmZǛϫ_e^1װJ\\\j$>a+0a;u٤egQLGTiqgܲiIm[DymZ7m\'XRLi!vb:v[KE1t#GWLOpS^va0r8䋋#K恎{i\m;7U,ߴ`!c.QB\]]V0fyfOƒHO8?p:Jj삾 msg‡(aZGxueɽ&W7{hx%T"THu\@'nUj=tMVuUiL4h'A|&!O;|KńNy-Ү:/owiAHxڶv-tGPY@Nl%c~̣PW\9qs³Y4b)1?FeA4pI,q]gڇ4YÞ61< 9wڡD/Q GBy6>)l؞I3\l*%~utHBPĄۥ҂?c= %b8|z*mOuFE8.+L -UL_Rp;tk)KRM6v}9CՓYELE,2> endobj -794 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [264.339 679.065 271.313 690.009] -/Subtype /Link -/A << /S /GoTo /D (page.5) >> ->> endobj -795 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [274.301 679.065 281.275 690.009] -/Subtype /Link -/A << /S /GoTo /D (page.7) >> ->> endobj -796 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 669.128 281.275 678.124] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -797 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 657.173 281.275 666.169] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -798 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 643.952 266.331 654.214] -/Subtype /Link -/A << /S /GoTo /D (page.17) >> ->> endobj -799 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 643.952 281.275 654.214] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -800 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [239.432 631.997 251.387 642.258] -/Subtype /Link -/A << /S /GoTo /D (page.18) >> ->> endobj -801 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 631.997 266.331 642.258] -/Subtype /Link -/A << /S /GoTo /D (page.26) >> ->> endobj -802 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 631.997 281.275 642.258] -/Subtype /Link -/A << /S /GoTo /D (page.40) >> ->> endobj -803 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 619.29 281.275 630.303] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -804 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [249.395 607.434 256.369 618.303] -/Subtype /Link -/A << /S /GoTo /D (page.4) >> ->> endobj -805 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 607.434 266.331 618.303] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -806 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 607.434 281.275 618.303] -/Subtype /Link -/A << /S /GoTo /D (page.33) >> ->> endobj -807 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 583.424 281.275 594.438] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -808 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [256.866 559.514 263.84 570.527] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -809 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [266.828 559.514 278.784 570.527] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -810 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 537.596 266.331 548.61] -/Subtype /Link -/A << /S /GoTo /D (page.8) >> ->> endobj -811 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 537.596 281.275 548.61] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -812 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 526.393 266.331 536.585] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -813 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 526.393 281.275 536.585] -/Subtype /Link -/A << /S /GoTo /D (page.10) >> ->> endobj -814 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [274.301 515.703 281.275 524.629] -/Subtype /Link -/A << /S /GoTo /D (page.5) >> ->> endobj -815 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 501.73 266.331 512.674] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -816 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 501.73 281.275 512.674] -/Subtype /Link -/A << /S /GoTo /D (page.10) >> ->> endobj -817 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 489.775 266.331 500.719] -/Subtype /Link -/A << /S /GoTo /D (page.11) >> ->> endobj -818 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 489.775 281.275 500.719] -/Subtype /Link -/A << /S /GoTo /D (page.16) >> ->> endobj -819 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [239.432 477.82 251.387 488.764] -/Subtype /Link -/A << /S /GoTo /D (page.16) >> ->> endobj -820 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 477.82 266.331 488.764] -/Subtype /Link -/A << /S /GoTo /D (page.24) >> ->> endobj -821 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 477.82 281.275 488.764] -/Subtype /Link -/A << /S /GoTo /D (page.33) >> ->> endobj -822 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [274.301 467.882 281.275 476.809] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -823 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 453.91 266.331 464.923] -/Subtype /Link -/A << /S /GoTo /D (page.11) >> ->> endobj -824 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 453.91 281.275 464.923] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -825 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [244.413 431.992 251.387 442.936] -/Subtype /Link -/A << /S /GoTo /D (page.5) >> ->> endobj -826 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 431.992 266.331 442.936] -/Subtype /Link -/A << /S /GoTo /D (page.11) >> ->> endobj -827 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 431.992 281.275 442.936] -/Subtype /Link -/A << /S /GoTo /D (page.24) >> ->> endobj -828 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [239.432 420.789 251.387 431.05] -/Subtype /Link -/A << /S /GoTo /D (page.13) >> ->> endobj -829 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 420.789 266.331 431.05] -/Subtype /Link -/A << /S /GoTo /D (page.14) >> ->> endobj -830 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 420.789 281.275 431.05] -/Subtype /Link -/A << /S /GoTo /D (page.34) >> ->> endobj -831 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 408.082 266.331 419.095] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -832 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 408.082 281.275 419.095] -/Subtype /Link -/A << /S /GoTo /D (page.23) >> ->> endobj -833 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 386.164 281.275 397.177] -/Subtype /Link -/A << /S /GoTo /D (page.39) >> ->> endobj -834 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [239.432 364.998 246.406 375.19] -/Subtype /Link -/A << /S /GoTo /D (page.4) >> ->> endobj -835 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [249.395 364.998 256.369 375.19] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -836 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 364.998 266.331 375.19] -/Subtype /Link -/A << /S /GoTo /D (page.8) >> ->> endobj -837 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 364.998 281.275 375.19] -/Subtype /Link -/A << /S /GoTo /D (page.16) >> ->> endobj -838 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 352.291 281.275 363.235] -/Subtype /Link -/A << /S /GoTo /D (page.29) >> ->> endobj -839 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 340.336 281.275 351.279] -/Subtype /Link -/A << /S /GoTo /D (page.29) >> ->> endobj -840 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [244.413 328.381 251.387 339.324] -/Subtype /Link -/A << /S /GoTo /D (page.7) >> ->> endobj -841 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 328.381 266.331 339.324] -/Subtype /Link -/A << /S /GoTo /D (page.29) >> ->> endobj -842 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 328.381 281.275 339.324] -/Subtype /Link -/A << /S /GoTo /D (page.34) >> ->> endobj -843 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 316.425 266.331 327.369] -/Subtype /Link -/A << /S /GoTo /D (page.7) >> ->> endobj -844 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 316.425 281.275 327.369] -/Subtype /Link -/A << /S /GoTo /D (page.20) >> ->> endobj -845 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [249.395 292.515 256.369 303.459] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -846 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 292.515 266.331 303.459] -/Subtype /Link -/A << /S /GoTo /D (page.7) >> ->> endobj -847 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 292.515 281.275 303.459] -/Subtype /Link -/A << /S /GoTo /D (page.10) >> ->> endobj -793 0 obj << -/D [791 0 R /XYZ 125.858 740.998 null] ->> endobj -790 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F42 328 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -647 0 obj << -/Length1 794 -/Length2 1208 -/Length3 532 -/Length 1788 -/Filter /FlateDecode ->> -stream -xRkXW͈Г-%H(P$E\!`0La\JWrTk`KxCa5T"r)uYs>;3y~ywXBq%FMT{ `sxT -S(,,F<4Es;i+KQ8&l"'PXGB8/b a)‰ 4T b`@^D,Iަ!4e\P&x7ߐK&S(KdX`hI²Yo/L$F'xI cX%@8[@g|vK3]q0&KɺPSpRB}X0ht(?Rہ!3kT̙&|ܻD޼*S<4䥜Toc7L=w 8Yc/Us=GϷg1B䢠8x2<=bۙq:v}blLNU|o - xö'{~@;rmNñȻ/nyq'6(CH[1"O""co{PGyQ\+:)kOg&`wۄjVY^1LMU0 KJߤ4E~Lc̥Go1YQeO;%O -Cx.NVk wM̚'IYѦܪ+ 9)e =?O=#Dm*HMq??9vV^kcA:jM\V]e~FC͔}$6V+/W+eĭ yzX2O3& -LA^( q6 *sI^lzwAg~#bJ{fٗljHD+z4㼳YEluOA_F՞)u 9DS̍7M֗}hnm'6a5- /Øk~֝8-ZQщkkr m=h,3;B<ёz|^R-bW/[#ןΆ]3Ŵ*֚=UimBqC%fwT5/r0&-RJ)K+mfVܝ*.Э5&J&^*o|ZVKXV{Qy ܡ:SI~D{gi])- -7e+K2Wov1VF^+b:c6g Z j4'?y AZZ0yL e+G_^;iO;9嗱{=֝j= ?/;lV[ōwEEر=T;W>Oכ㝻~mgơN}{Wnp|PKnn-ڇin6A//i? {vSl$TvRcFӳD?31I37|Mu%!BT)C?@QLGw[endstream -endobj -648 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 849 0 R -/FirstChar 40 -/LastChar 41 -/Widths 850 0 R -/BaseFont /WOCBLC+CMR10 -/FontDescriptor 646 0 R ->> endobj -646 0 obj << -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /WOCBLC+CMR10 -/ItalicAngle 0 -/StemV 69 -/XHeight 431 -/FontBBox [-251 -250 1009 969] -/Flags 4 -/CharSet (/parenleft/parenright) -/FontFile 647 0 R ->> endobj -850 0 obj -[389 389 ] -endobj -849 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/parenleft/parenright/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -851 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring/.notdef/breve/minus/.notdef/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl/notequal/infinity/lessequal/greaterequal/partialdiff/summation/product/pi/grave/quotesingle/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/.notdef/Euro/integral/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/Omega/radical/approxequal/.notdef/.notdef/.notdef/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/Delta/lozenge/Ydieresis/.notdef/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] ->> endobj -630 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 851 0 R -/BaseFont /Courier-BoldOblique ->> endobj -614 0 obj << -/Length1 768 -/Length2 1162 -/Length3 532 -/Length 1731 -/Filter /FlateDecode ->> -stream -x}8TiӮdPK慆MxɊZsp2s83AY,2ds@; pLdGН;%F" 8g@g2v1;3 ;.H"8r9!P6$C*8EDI@!@`#1H,sHN mX,x?JD - -XcZ$c$#\u: Q/ox; \PC| "lFl4Y`c#0*/z aa<7Qhp*A`Tĉ\'D/&Q7A - rY?b$hk*"HF*zYQ,3DPg0@ -H"QS).Rm`.NnN*6#pI=3T4'pbY b0h6/dU>k.A$9.;\yRZh*-?|ԅ2e]Bv;Y7{HwZO52XnR׽o}0Pc3si{I|%8b@f3bz0Y3+95!VlIRtIo>t0 /,8߾&pZO0܉AG&ы+¾fnt^n?}s׸_aG x1qY8퇡B ov[:Khޣ|.^NMQˉdz梍+Њ`7wǖ\*iz˚^1c-̖j[6y~ᵅn?/$)+^Y&V-ubK_j73?ɶ5gxYS;=koEFy՘b 岡#Ż~u7bjcfhY!`#5e-;,{QTׯTɪ7>]{c_[骮sAI۟錷Ų7naYAp&Ƴ6.yu++y;0Xp?4.hZ/6lvio gHW+};ࢯ֧I93mluͶaQVԗ4_?dC`WH*oWVU:j+ԦKrCޱƂ7}.n:σ$O]ݮk3CsCobelɭ-ѳ_Z~f܏J4\xe?~bVUv5$ѯj_w6PLdePS6^mT½[SeBh:Ө'Dߩ?׳/6w1zq.TWDKæ.^e6a{L/'7/hEK<|EhC€C B!"/endstream -endobj -615 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 852 0 R -/FirstChar 110 -/LastChar 110 -/Widths 853 0 R -/BaseFont /GGRVTC+CMMI9 -/FontDescriptor 613 0 R ->> endobj -613 0 obj << -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /GGRVTC+CMMI9 -/ItalicAngle -14 -/StemV 74 -/XHeight 431 -/FontBBox [-29 -250 1075 750] -/Flags 4 -/CharSet (/n) -/FontFile 614 0 R ->> endobj -853 0 obj -[620 ] -endobj -852 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/n/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -544 0 obj << -/Length1 867 -/Length2 1216 -/Length3 532 -/Length 1831 -/Filter /FlateDecode ->> -stream -xUkTgP#U,Ҁ ܚ$D$ -r ȪX$&8LbD EYBPYXTVD -X, /GEEtݵ?wٙ?s;gD< ĕ$bA.Z q &1\ &Q<=!૖8.G9\L`D8L<%0VpLD `(r98$Р CH0%=(X)ŁT[V4(DΔH@IJy2R[SPJCrVLtw8B&QP~L]N G%Z1Lr U(`B,?`IDb$< JR(&bbCVu1%"Yd })L 8,KѲ%K0 p Lp2AT)T P-R$uPlRM -D"sCGq pp)*#k{pm - )xx7;1FW,N U}-ŨPT"NYmmnŎҴ3GOmR*&$D-E{:B,sY=klq\WxtUv:7=ygoݜ7C6:v.o67H_x9s=|=vO66y!~IO -9uHg% #4Tuk7XI#i0vg:>$:}KIʄ~uPVԈ:_cO{ö~aͷy7 ΓqzyFgTYv 2(sGu+sl\E =k+"ocCMìKZ?q#[;ۗn+YIWҲ"3~ݨu魱-⸜'Fwyz c8EeKGKt vuc#Kܺq<]IG0^ǁ׾V2 CkeBOdmLk?u/Ƚoƀ~l~|oz윘+u7O9|Ms7 +{m*>1gSgx -f.m h%~vdܒQۜv=q!GyH߽$ww._? +beg}9{OO]*P_O`plP靎i*yͪRەGLF͋~i -|AK//7 Xv[f;rq CTa4F?XAst^RT2r+^WExKxi US+VD!VaD4Vb#׸yɝWzL/+~yn"Z#\_'gTt[ %.]$dGW;x :kj{i+/.g̲k6Z֢ OQ(m5zz޲؇[KfcšREӟIjFݒcc=t|`32S{W3^>&swA"4vKkBYbw̐QQ}xkgy"z0׬M×L5׮jzT~b-x"?l|`n1_}T+rvmXf;|]Z FIc\/0BI;'fOltn@|rh///{1mU2ug9C&H\h <1endstream -endobj -545 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 854 0 R -/FirstChar 13 -/LastChar 103 -/Widths 855 0 R -/BaseFont /LUEZJT+CMSY10 -/FontDescriptor 543 0 R ->> endobj -543 0 obj << -/Ascent 750 -/CapHeight 683 -/Descent -194 -/FontName /LUEZJT+CMSY10 -/ItalicAngle -14 -/StemV 85 -/XHeight 431 -/FontBBox [-29 -960 1116 775] -/Flags 4 -/CharSet (/circlecopyrt/bullet/arrowright/braceleft/braceright) -/FontFile 544 0 R ->> endobj -855 0 obj -[1000 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 500 ] -endobj -854 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/circlecopyrt/.notdef/bullet/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/arrowright/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/braceleft/braceright/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -495 0 obj << -/Length1 898 -/Length2 2892 -/Length3 532 -/Length 3528 -/Filter /FlateDecode ->> -stream -xyP,rX~+ !X>ȿPmw-,(X-]@K'>}߅ndbp}>r;S zY CF)xĐ;%Ϙj{&>iN34fsZ[M !V_oubaIâBԊ.`y}9:  埞 Ә&GXz.|hpk|豞# JS9٠7fm)%NI b#iy?jbec߷Ҥ[ -lRU4/Fj|R{~ҡ >7M37?&`(tj>zks$M5eٳ7Z{K#舉ά+h'5EȪЋ~/3BP>}cťj^i$Ēo\ԗQQs=ᦲkFҩ >9> -)媓aAF%gȾs&ݽknJ$yw)Qiف# -ФM'Ahf[i#YfU4-%Fqf{voEHm(? I':8!jn]ՠG;^ўezؗ5wbg=Oi -o Y5j?ˊN*?~㣴~h'RCc3 e\xðNNKܠгG} \۳h=]U!7SKoYqrNMC\\9d%,25Ip!Gm0 cYQOjJ[QB!R1 -M1*90= V`x]Uh|ubP/$Y-(RRg]]GJ\Dɞ3KLC-,Xqef څFnMy}/z ׺SpwCCsRAY`lWWVKzhBRU -1.vƴۜs(xQ^#;H[Xʔ -s ~޾٢7]gO|QIZ -}vq')bjuw} t/ZB1T2^K®,RkxQy0mGs9HuR -kȇf.̱{L`n@A7M; -9;9pKW~H;j&ց'ZJz_BsF H$ za=x}BoFEEX ZU(??{_ؐFך)$fvCcczW7R%e -ZD' .]%,,eŸw(^k6>]i :P–bԤ!*mK;{'eI]#O'].2a;hx/PDZՁMc`jsNJ (7#ǭ¦0q5WS2BK9x?Wn.k+'KfڷBI;է6>)}~:؛dicM[AAҋxG~[Ebܜ^'ryp'IMO8.jIz;f{g4+ ̙н EDNJiTlk!&eĵV{Qc%Pa1Kgt,@dwYiάː%glU7JNre( ~'y5uDjhUHi=!3='m. UsёGkz݉CҳW6 ߬=oWSRf2'~۽|frC荁4A/u4=Rb^ճ$ܖ -LAQy>p9 W3w⊃mIOm;/aUwl(n'`[e1hރ_~*lbP>V^*z&r_0}Vi~;'yE<1qVˢ2a~)8};y+_?qz*[)iM7NUТS:sCeOՉ9ox(a8j(HKuendstream -endobj -496 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 856 0 R -/FirstChar 65 -/LastChar 120 -/Widths 857 0 R -/BaseFont /MCKLGE+CMMI10 -/FontDescriptor 494 0 R ->> endobj -494 0 obj << -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /MCKLGE+CMMI10 -/ItalicAngle -14 -/StemV 72 -/XHeight 431 -/FontBBox [-32 -250 1048 750] -/Flags 4 -/CharSet (/A/B/C/D/N/a/b/c/n/x) -/FontFile 495 0 R ->> endobj -857 0 obj -[750 758 715 828 0 0 0 0 0 0 0 0 0 803 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 529 429 433 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 572 ] -endobj -856 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/A/B/C/D/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/N/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/a/b/c/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/n/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/x/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -453 0 obj << -/Length1 816 -/Length2 988 -/Length3 532 -/Length 1571 -/Filter /FlateDecode ->> -stream -xR{XLidEZ_91YzD4!y\NssȨ6D[`ZRyȺD-EZjnf^{*s};|~Ip*Q$P7(Y -P±!9c@]]Qॊ "7M JHLq#҄#A DB!@BI ȨyK.}'b@0J8( -pBʀpA~!RFZ+!ÚYS\ p({dr1 6 JT1ir0u!qBg09!"#8SxpA"i$a؏ClM7xN@;0^FLZ _k6#,> ˗R8AFp*hSsVJ 8$ce y$ŰG(7T1`!Ӈ@hL -PW=<0>b]*PtT 4''h LChLsc#Pv B)]Ck|Uvf؅5D06YTlwq4qҮ}'Rݜ ,*1S'l7?`u͖ntKF[.Y_4T0r 8a&gXX3uO wzJ 2KMޅurVqy*suH -xyQ/+Lw.u^c˜I[ep;h"^d[DͻȲ5A]mJUIlkE*0*U b}kk&״0jEzȕsJsI+çpeϖ/ &>xQ{zwcYsmq%&5V[5bn+ת𹋣qgw65J[ԛf+BW-mz&%ďz6,lHgVi9Qoujʆ-%[ܔS!ϒFSZzw"ufIF/ ::RjVE֯PśTtT$Y=xɣRxޜ:%#v][ZW_5 [鲏wlDXi0fmbɌƹf-I$*1GS(H[=IbQ]6b'ﳍ>˞QsŰ - -> endobj -452 0 obj << -/Ascent 750 -/CapHeight 683 -/Descent -194 -/FontName /ERKLRN+CMSY9 -/ItalicAngle -14 -/StemV 87 -/XHeight 431 -/FontBBox [-30 -958 1146 777] -/Flags 4 -/CharSet (/bullet/braceleft/braceright) -/FontFile 453 0 R ->> endobj -859 0 obj -[514 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 514 514 ] -endobj -858 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/bullet/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/braceleft/braceright/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -442 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 851 0 R -/BaseFont /Courier ->> endobj -384 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 851 0 R -/BaseFont /Times-BoldItalic ->> endobj -328 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 851 0 R -/BaseFont /Times-Bold ->> endobj -325 0 obj << -/Length1 1663 -/Length2 11249 -/Length3 532 -/Length 12149 -/Filter /FlateDecode ->> -stream -xzUT\[&5h- ]wwnBp wwk9Wz>M暣LIQ d;32L\T@v - ^9F ]ΉDE%;[ō|M@h -`c"Q@`+ Kg&==J2x@ -9!U@%`ne (ɈhEl̬w)@hS_91c8N@S+c[Y99`c{8V.f%.7na{S99;Q%NVj dWIa޵VNg_L3+'[c``pq `1WwNTޠ#+g'9+{LSVH͊9u@ kfޓ06z̀H - ;Hozk+G%tU0{v } @ע5/>vV'L-"02q#rr)Y9Z̍mߛ\ w_,,S2T@{-ᝯ `VVUT_7,rq>j@Ӕ/@QQ;~Se?`+w.  ;_ob/0 H}Cortʈ7X.`!޻/4EZ[f9 B|u(W+umV=01{-igז;xGCA#c~'٠%H3lFnFEcgsTYŠxpvGOMykRӁYSpxDwK?kgmBD*~WHlB! -hO;"2};_T)-!5ͷ/Å?v$V?(bIW}c!;/raDr֍ KIQ흏NZiIdDn|kW~|j`dܙ9 .鑭AXlB彛´iPR&9B]0r&CGb=8J6!ee#i*B" I] )q?xR _yo |s2N OVhNYF.S#yTl6\X@ukUR6m>f@rɒT³Ia-FM ?زIb ? 6t{FM hXȩsi0Q1\8(S7Oq`UuOLqB3f-2fqF.Egx3BJ6%*v R?hn!wwC3C3szNAmݝO,ޓ iA*l Y2ۆOϲ:?zqc]+ OTldN'';={y3 - {TzJtĪW'NGz %ax oM-f2XU}}>FmA;PPrT -iʖanKS[LOtL޺OޫK]*|} -z >gzVxV*),mwzKm>BN\S[6i>x9q->Dz/0:eq @W :zU=fߞE=`K.(Jƭڮwg4cɆ1gUꥠ-o)Ipsn"got|vP-{QlЧX6lP"ˣޖe$}J7恽pxuKSbtnBzW -`*GUZoUf -Rɔ r1\w!M‡ -18hP[cJyj5_;py ȩAin>L&le9&VdkU?G'gj[=9#b~H1H -͚U,N]2?mmj.) Ap-ՒAt6 +sӗj*QdGZ>,8ӏ]i ]IMfO0a¹/Ֆkj[>LjJ^bhCp(IW Ȯ`-]/s0Kjɣ_bsKOXJ* z6ab1ا)͝BfHUB\R|n6Me]GZi"xqU‡pE,0wfЛ~NMh(r32bK؇1MK99D{6 eMI.2.OtpVvVߵMv/ĭ$~zѸbD%4gxr8X(3>Rvdy\ptY݉w}Z"dCY|ʸov1 nM;1v7-WТy  { '/zDN"f%q{J34E~y=˛~[IZ Ao hZ)HiYd;MD\RoԮ?ի]LfPA뺩V(:oyMTZ\n^H`"+qbZ0`eGnj3(wFnXfTeP5p|>cb"%:nP/A̵Jb XA='Rh-J9RQ?89.y}M?Lֹ x84RdR*hgg:j3 uPJvٲ'.`ĝSUVU -rQ*b. -Mkb"k@u^H,A-kqڌN[-?q?}^4蕅~6 `@&rq\OCsKP= -YfK+h+ԔӫMT/ -5^YQhW0Tw=\a-wŌRitW;P=RBL9 D8AW7y>Z*M)Ry1gcuXKr)7@"65^}&c -7q6CT*b9wq6eB?m^C__0C] Mŗ^yAG?4ѩY> ~QνlJq9+InUEĭ#=n^+p׺888Y -e,Djo9sopg1RRm/Dycc7r?b>T:`?sQ",}&GpV]+}:6!="< ,'29#Qs~)WpID4pLlpji:m0OL_ 7mxdj`A~;K&c9AP يg[E)4芏He.K1A|rRH9͏+-bXG ׂa3< -dM #p:h>5;r3VjFb(肺FFJiHޒX\dVZ5Y8Iz?ЋFZ&חE[ [8A&_yj!W(?g@[l?#o'RMme~ﰑ'WnƁD'Aa'L0Jml#S71/Fu\Z'oz%f4~g[98+X6#w-J=iaw-RߟzKHl0Gz`)x :OJLJًmqrC_#sk j B*J:ܕCH04" I/83NaKb(aXijJqw(h߻v߈,aU]]Q+f)*wqNτu,^2n&P |UAg]]dd@mFC*д0 ג*#ƂBp)}D}Vts -Ef"PXWSgf1ʦ qay]ME+A"cR8=?zcކ4  Î3WH%pfGԉf~&XC}B`, -9'[ReGhGo^}΅N\MT)Cǻ9нl-l?3m ss~oz2zr"+MӑМl! -I -3NµUVgqR%y5S׼16CK nl__Ӈ_fws lt# -Y9hQt -fU"}nE+ &[HтO5)>@՗8@?QTb8m+HU ~.| l)p{Y-w,M4dGnjU'ֵt - #vMDoH_v |k-W6Q`CWdP?+PlRǟ C"ܔm͜9]pHÇuk/i-Ú##{m柢3u &Ƙ&pTPO_jn>C^2 ֬beY1`~P:^6d@.r^ҋהE?dNj~[@^py%'Rǹp%Zrub -_,ZȳfMu6<XVAMghwK(R:1/&_tFOPjZD"96{&Zv4PufLB3r0<%dH-״U=8'CgbZԽiCN&"}X!&Os&3 XȒ$&wnz -7b!ў?G -E'ѢOI53ad7\UB'5ҖMoJӔb@_hM Q&Xڂc;(!m΀?j8!e{{:a'3ҭSYR9.up\t,vm\piǙe9+SI>Cq AEC8X#XxIMݧs fn4t5JH^W֞7jݤA|YmD f? NwhZbO̪cB|ORްgc٦Jb(AQ $Sx숄ApY1E?J8rmnԷ i UA1%bZ}K]c8R4LW9ݺ]V6ٴU#ȿ&JI5 l \K~2*QEǟ祈9 sV>c\Cfv9gee? +*>nnsj}KJ7 ٧dRHE/ظ|zn.[&>/?cmGm &fz]ki#`~W󅘶vďd-p,"{ [ÿUNJZbS3YH~7Q\#[^QaY>wAR:b_OX+[`Sf=;&=P@[2,4مTvkHv  eHdۜ>Ѱ|->Jkhb> ޭ% qSڟa67 AmUydNi8X~qɛ.7&Fu$ -}!}CĘNS~\u[ɤEA +~=^t.DϩB(JHyї@#z1 ڭ4~$Db" -&#3Lr$Bz31HEɊ5 YPpյ,L%O`T@n$WSkBhxӓ>JfϬQ:6|7Gr@50{sc71;^}80c;6~UaHPe#b<,da7ISǻ jMr ƌ;q2VI|z{r,9Ns:~dFC_1iVhBPNsTFM#p&ǤL|l]>ړ/=rFd~qoْW_;c^eN=&AϨc͗M;ȃ&}ldN WrڅTQAu_v_dؕ5$voS`g*Dh̑U!GX_/wDb=$Mܬ,6/RJS?E=HI|fEESՋPc*{vM~=!zɋ õ9䞇.aB&&tjj(EL2+;w/6h_{ՃѥiZnL*'/dp͍qC> 'LJ^JZ=6ݸG͸uʅOǧocym7!pҴ0Ђ2ըXJ-B7ɂ׆F{tERqs;A_nVw_uO)[M~_$X /E.R:oik~9%ixcOb-E#_VV}?ݶ Lf4A︁ ERZ@uKȺ?){uR3[kvp dR=^[-Wp-~zw*/0(*P0, T&XNٙ*?KnSb,S#yB??P_6sÎ܎l[9HMȘt\JY,}t(?1LS-1VX=k2(@OE>y"[E>n>7,ϙYi"Kί;L 3Qϙo'4&ܑI(Ӄ[" Qļ+KiMR.*.}/ wkX;Dվ -רr?~s崜ϳ8O ;;c󻊮,yASrm|ˈR$*悭]2c$`W5gsޣ8eO,=\(8b|G]E s}=2w%/aȫů#d,7[{n:5≊B]*O_k x3Nק|szUNUMLV*NizD'YKUU1'x$ikU,$Zk%HzR^#."̆S u}.,V:Z[+~70$T:"*_lg3v0os_ݝFHW]+368^/۳|r! ̀JB?jχDҺME[+jťw1џ.K,ǹRsR<JNXc6:&~{q~IOLẍ̭~} O"73i*NJvB־{wAku|\dsUipA<]r.: (OTbǡr`E%0M6]:j{zƑ"e`gȑW,!^ɗ"' T? ~ -Jd[Ż]Ң8TsrqF3 8W+w:/T8QZURQl!dڥhãOqn܈ѭn| )N/(ӌZ騪nITd|<~G\FS̪!079SYsQ 4Z.Y6fJ|Uۼx>9;`4xZPL pq;IxYS+ay6cZ-d }ܔKӧVZ+ԋT>>rav8ǴO4g"ž>ta9Uy٬y'xr4'3&d5tY`,Jjh~⚞LX -<ʕ.EKrm7N-y@@ -J9F:P-6ӘΑ&]W_A9fD2Bo" "ޝuO/ z_v+,IOC41z'A7*:gliq@c?/uv1iAKS|?IL4Qa|U8S{(_1fi+ (-5sa Id+rZ gz;l?9{SөMOެf^4|oDehB 1!pV2HHOw洔sg]BS/E4t\h7}![sLAK9g ߦ`-x Zzu\a<+0c(ZRO뼞_ $""Ktuo4^n8+a#../g#hxV^:?`j 4;6H1xendstream -endobj -326 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 851 0 R -/FirstChar 44 -/LastChar 89 -/Widths 860 0 R -/BaseFont /QSNEWT+NimbusRomNo9L-Regu-Slant_167 -/FontDescriptor 324 0 R ->> endobj -324 0 obj << -/Ascent 678 -/CapHeight 651 -/Descent -216 -/FontName /QSNEWT+NimbusRomNo9L-Regu-Slant_167 -/ItalicAngle -9 -/StemV 85 -/XHeight 450 -/FontBBox [-168 -281 1000 924] -/Flags 4 -/CharSet (/comma/hyphen/one/two/three/four/five/six/seven/eight/nine/colon/A/B/C/D/E/F/G/H/I/L/M/N/O/P/R/S/T/U/V/W/X/Y) -/FontFile 325 0 R ->> endobj -860 0 obj -[250 333 0 0 0 500 500 500 500 500 500 500 500 500 278 0 0 0 0 0 0 722 667 667 722 611 556 722 722 333 0 0 611 889 722 722 556 0 667 556 611 722 722 944 722 722 ] -endobj -318 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 851 0 R -/BaseFont /Times-Italic ->> endobj -316 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 851 0 R -/BaseFont /Times-Roman ->> endobj -319 0 obj << -/Type /Pages -/Count 6 -/Parent 861 0 R -/Kids [310 0 R 321 0 R 377 0 R 436 0 R 446 0 R 456 0 R] ->> endobj -470 0 obj << -/Type /Pages -/Count 6 -/Parent 861 0 R -/Kids [463 0 R 472 0 R 476 0 R 483 0 R 490 0 R 498 0 R] ->> endobj -511 0 obj << -/Type /Pages -/Count 6 -/Parent 861 0 R -/Kids [503 0 R 513 0 R 522 0 R 526 0 R 535 0 R 540 0 R] ->> endobj -551 0 obj << -/Type /Pages -/Count 6 -/Parent 861 0 R -/Kids [547 0 R 553 0 R 559 0 R 567 0 R 571 0 R 575 0 R] ->> endobj -583 0 obj << -/Type /Pages -/Count 6 -/Parent 861 0 R -/Kids [579 0 R 585 0 R 591 0 R 597 0 R 602 0 R 607 0 R] ->> endobj -620 0 obj << -/Type /Pages -/Count 6 -/Parent 861 0 R -/Kids [617 0 R 622 0 R 626 0 R 632 0 R 639 0 R 643 0 R] ->> endobj -658 0 obj << -/Type /Pages -/Count 6 -/Parent 862 0 R -/Kids [652 0 R 660 0 R 664 0 R 670 0 R 677 0 R 683 0 R] ->> endobj -848 0 obj << -/Type /Pages -/Count 1 -/Parent 862 0 R -/Kids [791 0 R] ->> endobj -861 0 obj << -/Type /Pages -/Count 36 -/Parent 863 0 R -/Kids [319 0 R 470 0 R 511 0 R 551 0 R 583 0 R 620 0 R] ->> endobj -862 0 obj << -/Type /Pages -/Count 7 -/Parent 863 0 R -/Kids [658 0 R 848 0 R] ->> endobj -863 0 obj << -/Type /Pages -/Count 43 -/Kids [861 0 R 862 0 R] ->> endobj -864 0 obj << -/Type /Outlines -/First 7 0 R -/Last 295 0 R -/Count 9 ->> endobj -307 0 obj << -/Title 308 0 R -/A 305 0 R -/Parent 295 0 R -/Prev 303 0 R ->> endobj -303 0 obj << -/Title 304 0 R -/A 301 0 R -/Parent 295 0 R -/Prev 299 0 R -/Next 307 0 R ->> endobj -299 0 obj << -/Title 300 0 R -/A 297 0 R -/Parent 295 0 R -/Next 303 0 R ->> endobj -295 0 obj << -/Title 296 0 R -/A 293 0 R -/Parent 864 0 R -/Prev 283 0 R -/First 299 0 R -/Last 307 0 R -/Count -3 ->> endobj -291 0 obj << -/Title 292 0 R -/A 289 0 R -/Parent 283 0 R -/Prev 287 0 R ->> endobj -287 0 obj << -/Title 288 0 R -/A 285 0 R -/Parent 283 0 R -/Next 291 0 R ->> endobj -283 0 obj << -/Title 284 0 R -/A 281 0 R -/Parent 864 0 R -/Prev 263 0 R -/Next 295 0 R -/First 287 0 R -/Last 291 0 R -/Count -2 ->> endobj -279 0 obj << -/Title 280 0 R -/A 277 0 R -/Parent 275 0 R ->> endobj -275 0 obj << -/Title 276 0 R -/A 273 0 R -/Parent 263 0 R -/Prev 267 0 R -/First 279 0 R -/Last 279 0 R -/Count -1 ->> endobj -271 0 obj << -/Title 272 0 R -/A 269 0 R -/Parent 267 0 R ->> endobj -267 0 obj << -/Title 268 0 R -/A 265 0 R -/Parent 263 0 R -/Next 275 0 R -/First 271 0 R -/Last 271 0 R -/Count -1 ->> endobj -263 0 obj << -/Title 264 0 R -/A 261 0 R -/Parent 864 0 R -/Prev 251 0 R -/Next 283 0 R -/First 267 0 R -/Last 275 0 R -/Count -2 ->> endobj -259 0 obj << -/Title 260 0 R -/A 257 0 R -/Parent 251 0 R -/Prev 255 0 R ->> endobj -255 0 obj << -/Title 256 0 R -/A 253 0 R -/Parent 251 0 R -/Next 259 0 R ->> endobj -251 0 obj << -/Title 252 0 R -/A 249 0 R -/Parent 864 0 R -/Prev 211 0 R -/Next 263 0 R -/First 255 0 R -/Last 259 0 R -/Count -2 ->> endobj -247 0 obj << -/Title 248 0 R -/A 245 0 R -/Parent 243 0 R ->> endobj -243 0 obj << -/Title 244 0 R -/A 241 0 R -/Parent 211 0 R -/Prev 227 0 R -/First 247 0 R -/Last 247 0 R -/Count -1 ->> endobj -239 0 obj << -/Title 240 0 R -/A 237 0 R -/Parent 227 0 R -/Prev 235 0 R ->> endobj -235 0 obj << -/Title 236 0 R -/A 233 0 R -/Parent 227 0 R -/Prev 231 0 R -/Next 239 0 R ->> endobj -231 0 obj << -/Title 232 0 R -/A 229 0 R -/Parent 227 0 R -/Next 235 0 R ->> endobj -227 0 obj << -/Title 228 0 R -/A 225 0 R -/Parent 211 0 R -/Prev 215 0 R -/Next 243 0 R -/First 231 0 R -/Last 239 0 R -/Count -3 ->> endobj -223 0 obj << -/Title 224 0 R -/A 221 0 R -/Parent 215 0 R -/Prev 219 0 R ->> endobj -219 0 obj << -/Title 220 0 R -/A 217 0 R -/Parent 215 0 R -/Next 223 0 R ->> endobj -215 0 obj << -/Title 216 0 R -/A 213 0 R -/Parent 211 0 R -/Next 227 0 R -/First 219 0 R -/Last 223 0 R -/Count -2 ->> endobj -211 0 obj << -/Title 212 0 R -/A 209 0 R -/Parent 864 0 R -/Prev 199 0 R -/Next 251 0 R -/First 215 0 R -/Last 243 0 R -/Count -3 ->> endobj -207 0 obj << -/Title 208 0 R -/A 205 0 R -/Parent 199 0 R -/Prev 203 0 R ->> endobj -203 0 obj << -/Title 204 0 R -/A 201 0 R -/Parent 199 0 R -/Next 207 0 R ->> endobj -199 0 obj << -/Title 200 0 R -/A 197 0 R -/Parent 864 0 R -/Prev 159 0 R -/Next 211 0 R -/First 203 0 R -/Last 207 0 R -/Count -2 ->> endobj -195 0 obj << -/Title 196 0 R -/A 193 0 R -/Parent 191 0 R ->> endobj -191 0 obj << -/Title 192 0 R -/A 189 0 R -/Parent 159 0 R -/Prev 179 0 R -/First 195 0 R -/Last 195 0 R -/Count -1 ->> endobj -187 0 obj << -/Title 188 0 R -/A 185 0 R -/Parent 179 0 R -/Prev 183 0 R ->> endobj -183 0 obj << -/Title 184 0 R -/A 181 0 R -/Parent 179 0 R -/Next 187 0 R ->> endobj -179 0 obj << -/Title 180 0 R -/A 177 0 R -/Parent 159 0 R -/Prev 175 0 R -/Next 191 0 R -/First 183 0 R -/Last 187 0 R -/Count -2 ->> endobj -175 0 obj << -/Title 176 0 R -/A 173 0 R -/Parent 159 0 R -/Prev 171 0 R -/Next 179 0 R ->> endobj -171 0 obj << -/Title 172 0 R -/A 169 0 R -/Parent 159 0 R -/Prev 163 0 R -/Next 175 0 R ->> endobj -167 0 obj << -/Title 168 0 R -/A 165 0 R -/Parent 163 0 R ->> endobj -163 0 obj << -/Title 164 0 R -/A 161 0 R -/Parent 159 0 R -/Next 171 0 R -/First 167 0 R -/Last 167 0 R -/Count -1 ->> endobj -159 0 obj << -/Title 160 0 R -/A 157 0 R -/Parent 864 0 R -/Prev 39 0 R -/Next 199 0 R -/First 163 0 R -/Last 191 0 R -/Count -5 ->> endobj -155 0 obj << -/Title 156 0 R -/A 153 0 R -/Parent 139 0 R -/Prev 151 0 R ->> endobj -151 0 obj << -/Title 152 0 R -/A 149 0 R -/Parent 139 0 R -/Prev 147 0 R -/Next 155 0 R ->> endobj -147 0 obj << -/Title 148 0 R -/A 145 0 R -/Parent 139 0 R -/Prev 143 0 R -/Next 151 0 R ->> endobj -143 0 obj << -/Title 144 0 R -/A 141 0 R -/Parent 139 0 R -/Next 147 0 R ->> endobj -139 0 obj << -/Title 140 0 R -/A 137 0 R -/Parent 39 0 R -/Prev 131 0 R -/First 143 0 R -/Last 155 0 R -/Count -4 ->> endobj -135 0 obj << -/Title 136 0 R -/A 133 0 R -/Parent 131 0 R ->> endobj -131 0 obj << -/Title 132 0 R -/A 129 0 R -/Parent 39 0 R -/Prev 111 0 R -/Next 139 0 R -/First 135 0 R -/Last 135 0 R -/Count -1 ->> endobj -127 0 obj << -/Title 128 0 R -/A 125 0 R -/Parent 111 0 R -/Prev 123 0 R ->> endobj -123 0 obj << -/Title 124 0 R -/A 121 0 R -/Parent 111 0 R -/Prev 119 0 R -/Next 127 0 R ->> endobj -119 0 obj << -/Title 120 0 R -/A 117 0 R -/Parent 111 0 R -/Prev 115 0 R -/Next 123 0 R ->> endobj -115 0 obj << -/Title 116 0 R -/A 113 0 R -/Parent 111 0 R -/Next 119 0 R ->> endobj -111 0 obj << -/Title 112 0 R -/A 109 0 R -/Parent 39 0 R -/Prev 63 0 R -/Next 131 0 R -/First 115 0 R -/Last 127 0 R -/Count -4 ->> endobj -107 0 obj << -/Title 108 0 R -/A 105 0 R -/Parent 63 0 R -/Prev 103 0 R ->> endobj -103 0 obj << -/Title 104 0 R -/A 101 0 R -/Parent 63 0 R -/Prev 99 0 R -/Next 107 0 R ->> endobj -99 0 obj << -/Title 100 0 R -/A 97 0 R -/Parent 63 0 R -/Prev 95 0 R -/Next 103 0 R ->> endobj -95 0 obj << -/Title 96 0 R -/A 93 0 R -/Parent 63 0 R -/Prev 91 0 R -/Next 99 0 R ->> endobj -91 0 obj << -/Title 92 0 R -/A 89 0 R -/Parent 63 0 R -/Prev 87 0 R -/Next 95 0 R ->> endobj -87 0 obj << -/Title 88 0 R -/A 85 0 R -/Parent 63 0 R -/Prev 83 0 R -/Next 91 0 R ->> endobj -83 0 obj << -/Title 84 0 R -/A 81 0 R -/Parent 63 0 R -/Prev 79 0 R -/Next 87 0 R ->> endobj -79 0 obj << -/Title 80 0 R -/A 77 0 R -/Parent 63 0 R -/Prev 75 0 R -/Next 83 0 R ->> endobj -75 0 obj << -/Title 76 0 R -/A 73 0 R -/Parent 63 0 R -/Prev 71 0 R -/Next 79 0 R ->> endobj -71 0 obj << -/Title 72 0 R -/A 69 0 R -/Parent 63 0 R -/Prev 67 0 R -/Next 75 0 R ->> endobj -67 0 obj << -/Title 68 0 R -/A 65 0 R -/Parent 63 0 R -/Next 71 0 R ->> endobj -63 0 obj << -/Title 64 0 R -/A 61 0 R -/Parent 39 0 R -/Prev 47 0 R -/Next 111 0 R -/First 67 0 R -/Last 107 0 R -/Count -11 ->> endobj -59 0 obj << -/Title 60 0 R -/A 57 0 R -/Parent 47 0 R -/Prev 55 0 R ->> endobj -55 0 obj << -/Title 56 0 R -/A 53 0 R -/Parent 47 0 R -/Prev 51 0 R -/Next 59 0 R ->> endobj -51 0 obj << -/Title 52 0 R -/A 49 0 R -/Parent 47 0 R -/Next 55 0 R ->> endobj -47 0 obj << -/Title 48 0 R -/A 45 0 R -/Parent 39 0 R -/Prev 43 0 R -/Next 63 0 R -/First 51 0 R -/Last 59 0 R -/Count -3 ->> endobj -43 0 obj << -/Title 44 0 R -/A 41 0 R -/Parent 39 0 R -/Next 47 0 R ->> endobj -39 0 obj << -/Title 40 0 R -/A 37 0 R -/Parent 864 0 R -/Prev 7 0 R -/Next 159 0 R -/First 43 0 R -/Last 139 0 R -/Count -6 ->> endobj -35 0 obj << -/Title 36 0 R -/A 33 0 R -/Parent 7 0 R -/Prev 31 0 R ->> endobj -31 0 obj << -/Title 32 0 R -/A 29 0 R -/Parent 7 0 R -/Prev 27 0 R -/Next 35 0 R ->> endobj -27 0 obj << -/Title 28 0 R -/A 25 0 R -/Parent 7 0 R -/Prev 23 0 R -/Next 31 0 R ->> endobj -23 0 obj << -/Title 24 0 R -/A 21 0 R -/Parent 7 0 R -/Prev 19 0 R -/Next 27 0 R ->> endobj -19 0 obj << -/Title 20 0 R -/A 17 0 R -/Parent 7 0 R -/Prev 15 0 R -/Next 23 0 R ->> endobj -15 0 obj << -/Title 16 0 R -/A 13 0 R -/Parent 7 0 R -/Prev 11 0 R -/Next 19 0 R ->> endobj -11 0 obj << -/Title 12 0 R -/A 9 0 R -/Parent 7 0 R -/Next 15 0 R ->> endobj -7 0 obj << -/Title 8 0 R -/A 5 0 R -/Parent 864 0 R -/Next 39 0 R -/First 11 0 R -/Last 35 0 R -/Count -7 ->> endobj -865 0 obj << -/Names [(Doc-Start) 314 0 R (Hfootnote.1) 488 0 R (Hfootnote.2) 510 0 R (Hfootnote.3) 520 0 R (Hfootnote.4) 533 0 R (Hfootnote.5) 564 0 R (Hfootnote.6) 565 0 R (figure.1) 424 0 R (figure.10) 433 0 R (figure.11) 434 0 R (figure.2) 425 0 R (figure.3) 426 0 R (figure.4) 427 0 R (figure.5) 428 0 R (figure.6) 429 0 R (figure.7) 430 0 R (figure.8) 431 0 R (figure.9) 432 0 R (page.1) 313 0 R (page.10) 485 0 R (page.11) 492 0 R (page.12) 500 0 R (page.13) 505 0 R (page.14) 515 0 R (page.15) 524 0 R (page.16) 528 0 R (page.17) 537 0 R (page.18) 542 0 R (page.19) 549 0 R (page.2) 323 0 R (page.20) 555 0 R (page.21) 561 0 R (page.22) 569 0 R (page.23) 573 0 R (page.24) 577 0 R (page.25) 581 0 R (page.26) 587 0 R (page.27) 593 0 R (page.28) 599 0 R (page.29) 604 0 R (page.3) 379 0 R (page.30) 609 0 R (page.31) 619 0 R (page.32) 624 0 R (page.33) 628 0 R (page.34) 634 0 R (page.35) 641 0 R (page.36) 645 0 R (page.37) 654 0 R (page.38) 662 0 R (page.39) 666 0 R (page.4) 438 0 R (page.40) 672 0 R (page.41) 679 0 R (page.42) 685 0 R (page.43) 793 0 R (page.5) 448 0 R (page.6) 458 0 R (page.7) 465 0 R (page.8) 474 0 R (page.9) 478 0 R (section*.1) 329 0 R (section*.10) 673 0 R (section*.11) 674 0 R (section*.12) 675 0 R (section*.13) 686 0 R (section*.2) 412 0 R (section*.3) 501 0 R (section*.4) 508 0 R (section*.5) 509 0 R (section*.6) 516 0 R (section*.7) 518 0 R (section*.8) 655 0 R (section*.9) 668 0 R (section.1) 6 0 R (section.2) 38 0 R (section.3) 158 0 R (section.4) 198 0 R (section.5) 210 0 R (section.6) 250 0 R (section.7) 262 0 R (section.8) 282 0 R (section.9) 294 0 R (subsection.1.1) 10 0 R (subsection.1.2) 14 0 R (subsection.1.3) 18 0 R (subsection.1.4) 22 0 R (subsection.1.5) 26 0 R (subsection.1.6) 30 0 R (subsection.1.7) 34 0 R (subsection.2.1) 42 0 R (subsection.2.2) 46 0 R (subsection.2.3) 62 0 R (subsection.2.4) 110 0 R (subsection.2.5) 130 0 R (subsection.2.6) 138 0 R (subsection.3.1) 162 0 R (subsection.3.2) 170 0 R (subsection.3.3) 174 0 R (subsection.3.4) 178 0 R (subsection.3.5) 190 0 R (subsection.4.1) 202 0 R (subsection.4.2) 206 0 R (subsection.5.1) 214 0 R (subsection.5.2) 226 0 R (subsection.5.3) 242 0 R (subsection.6.1) 254 0 R (subsection.6.2) 258 0 R (subsection.7.1) 266 0 R (subsection.7.2) 274 0 R (subsection.8.1) 286 0 R (subsection.8.2) 290 0 R (subsection.9.1) 298 0 R (subsection.9.2) 302 0 R (subsection.9.3) 306 0 R (subsubsection.2.2.1) 50 0 R (subsubsection.2.2.2) 54 0 R (subsubsection.2.2.3) 58 0 R (subsubsection.2.3.1) 66 0 R (subsubsection.2.3.10) 102 0 R (subsubsection.2.3.11) 106 0 R (subsubsection.2.3.2) 70 0 R (subsubsection.2.3.3) 74 0 R (subsubsection.2.3.4) 78 0 R (subsubsection.2.3.5) 82 0 R (subsubsection.2.3.6) 86 0 R (subsubsection.2.3.7) 90 0 R (subsubsection.2.3.8) 94 0 R (subsubsection.2.3.9) 98 0 R (subsubsection.2.4.1) 114 0 R (subsubsection.2.4.2) 118 0 R (subsubsection.2.4.3) 122 0 R (subsubsection.2.4.4) 126 0 R (subsubsection.2.5.1) 134 0 R (subsubsection.2.6.1) 142 0 R (subsubsection.2.6.2) 146 0 R (subsubsection.2.6.3) 150 0 R (subsubsection.2.6.4) 154 0 R (subsubsection.3.1.1) 166 0 R (subsubsection.3.4.1) 182 0 R (subsubsection.3.4.2) 186 0 R (subsubsection.3.5.1) 194 0 R (subsubsection.5.1.1) 218 0 R (subsubsection.5.1.2) 222 0 R (subsubsection.5.2.1) 230 0 R (subsubsection.5.2.2) 234 0 R (subsubsection.5.2.3) 238 0 R (subsubsection.5.3.1) 246 0 R (subsubsection.7.1.1) 270 0 R (subsubsection.7.2.1) 278 0 R] -/Limits [(Doc-Start) (subsubsection.7.2.1)] ->> endobj -866 0 obj << -/Kids [865 0 R] ->> endobj -867 0 obj << -/Dests 866 0 R ->> endobj -868 0 obj << -/Type /Catalog -/Pages 863 0 R -/Outlines 864 0 R -/Names 867 0 R -/PageMode /UseOutlines -/OpenAction 309 0 R -/PTEX.Fullbanner (This is pdfTeX, Version 3.141592-1.11b) ->> endobj -869 0 obj << -/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.11b)/Keywords() -/CreationDate (D:20100418122440+10'00') ->> endobj -xref -0 870 -0000000001 65535 f -0000000002 00000 f -0000000003 00000 f -0000000004 00000 f -0000000315 00000 f -0000000009 00000 n -0000033722 00000 n -0000243907 00000 n -0000000054 00000 n -0000000080 00000 n -0000033782 00000 n -0000243835 00000 n -0000000130 00000 n -0000000164 00000 n -0000033843 00000 n -0000243749 00000 n -0000000215 00000 n -0000000246 00000 n -0000037916 00000 n -0000243663 00000 n -0000000297 00000 n -0000000334 00000 n -0000037977 00000 n -0000243577 00000 n -0000000385 00000 n -0000000411 00000 n -0000042400 00000 n -0000243491 00000 n -0000000462 00000 n -0000000498 00000 n -0000046923 00000 n -0000243405 00000 n -0000000549 00000 n -0000000599 00000 n -0000050931 00000 n -0000243332 00000 n -0000000650 00000 n -0000000709 00000 n -0000050991 00000 n -0000243206 00000 n -0000000755 00000 n -0000000787 00000 n -0000054283 00000 n -0000243132 00000 n -0000000838 00000 n -0000000880 00000 n -0000054344 00000 n -0000243008 00000 n -0000000931 00000 n -0000000962 00000 n -0000057745 00000 n -0000242934 00000 n -0000001018 00000 n -0000001053 00000 n -0000061404 00000 n -0000242847 00000 n -0000001109 00000 n -0000001144 00000 n -0000061465 00000 n -0000242773 00000 n -0000001200 00000 n -0000001254 00000 n -0000064233 00000 n -0000242646 00000 n -0000001305 00000 n -0000001361 00000 n -0000064294 00000 n -0000242572 00000 n -0000001417 00000 n -0000001464 00000 n -0000064355 00000 n -0000242485 00000 n -0000001520 00000 n -0000001572 00000 n -0000064416 00000 n -0000242398 00000 n -0000001628 00000 n -0000001673 00000 n -0000064539 00000 n -0000242311 00000 n -0000001729 00000 n -0000001760 00000 n -0000068839 00000 n -0000242224 00000 n -0000001816 00000 n -0000001865 00000 n -0000068900 00000 n -0000242137 00000 n -0000001921 00000 n -0000001981 00000 n -0000072862 00000 n -0000242050 00000 n -0000002037 00000 n -0000002091 00000 n -0000072985 00000 n -0000241963 00000 n -0000002147 00000 n -0000002179 00000 n -0000073046 00000 n -0000241874 00000 n -0000002235 00000 n -0000002277 00000 n -0000076617 00000 n -0000241783 00000 n -0000002335 00000 n -0000002392 00000 n -0000076679 00000 n -0000241705 00000 n -0000002450 00000 n -0000002507 00000 n -0000076741 00000 n -0000241575 00000 n -0000002559 00000 n -0000002595 00000 n -0000080933 00000 n -0000241496 00000 n -0000002652 00000 n -0000002694 00000 n -0000080994 00000 n -0000241403 00000 n -0000002751 00000 n -0000002793 00000 n -0000087584 00000 n -0000241310 00000 n -0000002850 00000 n -0000002886 00000 n -0000090988 00000 n -0000241231 00000 n -0000002943 00000 n -0000002985 00000 n -0000091049 00000 n -0000241100 00000 n -0000003037 00000 n -0000003073 00000 n -0000091111 00000 n -0000241035 00000 n -0000003130 00000 n -0000003173 00000 n -0000091172 00000 n -0000240918 00000 n -0000003225 00000 n -0000003262 00000 n -0000094968 00000 n -0000240839 00000 n -0000003319 00000 n -0000003355 00000 n -0000095030 00000 n -0000240746 00000 n -0000003412 00000 n -0000003453 00000 n -0000095092 00000 n -0000240653 00000 n -0000003510 00000 n -0000003565 00000 n -0000099542 00000 n -0000240574 00000 n -0000003622 00000 n -0000003680 00000 n -0000102966 00000 n -0000240443 00000 n -0000003727 00000 n -0000003779 00000 n -0000103028 00000 n -0000240325 00000 n -0000003831 00000 n -0000003865 00000 n -0000106241 00000 n -0000240260 00000 n -0000003922 00000 n -0000003969 00000 n -0000109478 00000 n -0000240167 00000 n -0000004021 00000 n -0000004057 00000 n -0000112957 00000 n -0000240074 00000 n -0000004109 00000 n -0000004153 00000 n -0000116276 00000 n -0000239942 00000 n -0000004205 00000 n -0000004249 00000 n -0000116338 00000 n -0000239863 00000 n -0000004306 00000 n -0000004349 00000 n -0000116462 00000 n -0000239784 00000 n -0000004406 00000 n -0000004448 00000 n -0000120351 00000 n -0000239666 00000 n -0000004500 00000 n -0000004540 00000 n -0000120412 00000 n -0000239601 00000 n -0000004597 00000 n -0000004634 00000 n -0000127250 00000 n -0000239469 00000 n -0000004681 00000 n -0000004731 00000 n -0000127312 00000 n -0000239390 00000 n -0000004783 00000 n -0000004816 00000 n -0000127374 00000 n -0000239311 00000 n -0000004868 00000 n -0000004925 00000 n -0000131280 00000 n -0000239179 00000 n -0000004972 00000 n -0000005007 00000 n -0000131342 00000 n -0000239061 00000 n -0000005059 00000 n -0000005106 00000 n -0000131404 00000 n -0000238982 00000 n -0000005163 00000 n -0000005204 00000 n -0000131466 00000 n -0000238903 00000 n -0000005261 00000 n -0000005307 00000 n -0000134613 00000 n -0000238771 00000 n -0000005359 00000 n -0000005413 00000 n -0000134675 00000 n -0000238692 00000 n -0000005470 00000 n -0000005520 00000 n -0000134737 00000 n -0000238599 00000 n -0000005577 00000 n -0000005629 00000 n -0000137730 00000 n -0000238520 00000 n -0000005686 00000 n -0000005734 00000 n -0000137792 00000 n -0000238402 00000 n -0000005786 00000 n -0000005831 00000 n -0000137854 00000 n -0000238337 00000 n -0000005888 00000 n -0000005929 00000 n -0000137916 00000 n -0000238205 00000 n -0000005976 00000 n -0000006001 00000 n -0000137978 00000 n -0000238126 00000 n -0000006053 00000 n -0000006082 00000 n -0000138040 00000 n -0000238047 00000 n -0000006134 00000 n -0000006165 00000 n -0000138102 00000 n -0000237915 00000 n -0000006212 00000 n -0000006240 00000 n -0000140783 00000 n -0000237797 00000 n -0000006292 00000 n -0000006330 00000 n -0000140845 00000 n -0000237732 00000 n -0000006387 00000 n -0000006426 00000 n -0000145119 00000 n -0000237614 00000 n -0000006478 00000 n -0000006520 00000 n -0000145243 00000 n -0000237549 00000 n -0000006577 00000 n -0000006616 00000 n -0000151545 00000 n -0000237417 00000 n -0000006663 00000 n -0000006715 00000 n -0000151607 00000 n -0000237338 00000 n -0000006767 00000 n -0000006803 00000 n -0000155158 00000 n -0000237259 00000 n -0000006855 00000 n -0000006898 00000 n -0000159196 00000 n -0000237141 00000 n -0000006945 00000 n -0000007007 00000 n -0000159258 00000 n -0000237062 00000 n -0000007059 00000 n -0000007095 00000 n -0000162847 00000 n -0000236969 00000 n -0000007147 00000 n -0000007197 00000 n -0000166295 00000 n -0000236890 00000 n -0000007249 00000 n -0000007286 00000 n -0000009082 00000 n -0000009325 00000 n -0000007338 00000 n -0000009201 00000 n -0000009263 00000 n -0000000317 00000 f -0000235554 00000 n -0000000327 00000 f -0000235461 00000 n -0000235646 00000 n -0000019925 00000 n -0000012002 00000 n -0000009410 00000 n -0000019801 00000 n -0000234953 00000 n -0000222499 00000 n -0000234770 00000 n -0000000383 00000 f -0000222408 00000 n -0000019863 00000 n -0000012501 00000 n -0000012653 00000 n -0000012810 00000 n -0000012967 00000 n -0000013124 00000 n -0000013281 00000 n -0000013437 00000 n -0000013594 00000 n -0000013751 00000 n -0000013903 00000 n -0000014059 00000 n -0000014216 00000 n -0000014376 00000 n -0000014537 00000 n -0000014696 00000 n -0000014853 00000 n -0000015014 00000 n -0000015175 00000 n -0000015336 00000 n -0000015497 00000 n -0000015658 00000 n -0000015819 00000 n -0000015980 00000 n -0000016141 00000 n -0000016302 00000 n -0000016464 00000 n -0000016626 00000 n -0000016782 00000 n -0000016943 00000 n -0000017103 00000 n -0000017264 00000 n -0000017425 00000 n -0000017581 00000 n -0000017741 00000 n -0000017897 00000 n -0000018058 00000 n -0000018218 00000 n -0000018379 00000 n -0000018540 00000 n -0000018692 00000 n -0000018849 00000 n -0000019010 00000 n -0000019167 00000 n -0000019324 00000 n -0000019481 00000 n -0000019640 00000 n -0000029514 00000 n -0000022562 00000 n -0000020036 00000 n -0000029390 00000 n -0000023021 00000 n -0000023177 00000 n -0000023337 00000 n -0000000441 00000 f -0000222311 00000 n -0000023489 00000 n -0000023646 00000 n -0000023803 00000 n -0000023955 00000 n -0000024112 00000 n -0000024273 00000 n -0000024434 00000 n -0000024591 00000 n -0000024752 00000 n -0000024913 00000 n -0000025074 00000 n -0000025231 00000 n -0000025392 00000 n -0000025544 00000 n -0000025701 00000 n -0000025857 00000 n -0000026009 00000 n -0000026166 00000 n -0000026326 00000 n -0000026482 00000 n -0000026642 00000 n -0000026794 00000 n -0000026951 00000 n -0000027108 00000 n -0000027259 00000 n -0000027416 00000 n -0000027573 00000 n -0000029452 00000 n -0000027728 00000 n -0000027878 00000 n -0000028029 00000 n -0000028180 00000 n -0000028331 00000 n -0000028482 00000 n -0000028633 00000 n -0000028784 00000 n -0000028935 00000 n -0000029086 00000 n -0000029238 00000 n -0000042338 00000 n -0000046863 00000 n -0000094908 00000 n -0000099481 00000 n -0000113019 00000 n -0000116400 00000 n -0000116524 00000 n -0000123421 00000 n -0000123482 00000 n -0000145181 00000 n -0000147589 00000 n -0000033904 00000 n -0000032877 00000 n -0000029638 00000 n -0000033660 00000 n -0000033040 00000 n -0000033192 00000 n -0000000629 00000 f -0000222223 00000 n -0000033343 00000 n -0000033504 00000 n -0000038038 00000 n -0000037228 00000 n -0000034041 00000 n -0000037854 00000 n -0000037383 00000 n -0000037540 00000 n -0000037697 00000 n -0000219684 00000 n -0000217833 00000 n -0000219523 00000 n -0000042461 00000 n -0000041668 00000 n -0000038188 00000 n -0000042276 00000 n -0000041823 00000 n -0000041973 00000 n -0000042125 00000 n -0000046984 00000 n -0000046020 00000 n -0000042598 00000 n -0000046801 00000 n -0000046183 00000 n -0000046345 00000 n -0000046494 00000 n -0000046650 00000 n -0000235763 00000 n -0000051052 00000 n -0000050750 00000 n -0000047121 00000 n -0000050869 00000 n -0000054405 00000 n -0000053586 00000 n -0000051202 00000 n -0000054221 00000 n -0000053741 00000 n -0000053897 00000 n -0000054059 00000 n -0000057868 00000 n -0000057225 00000 n -0000054542 00000 n -0000057683 00000 n -0000057372 00000 n -0000057529 00000 n -0000057806 00000 n -0000061526 00000 n -0000061041 00000 n -0000057992 00000 n -0000061342 00000 n -0000061180 00000 n -0000215417 00000 n -0000211607 00000 n -0000215255 00000 n -0000064600 00000 n -0000064052 00000 n -0000061663 00000 n -0000064171 00000 n -0000064477 00000 n -0000069147 00000 n -0000068322 00000 n -0000064724 00000 n -0000068777 00000 n -0000068469 00000 n -0000068622 00000 n -0000068961 00000 n -0000069023 00000 n -0000069085 00000 n -0000235880 00000 n -0000073231 00000 n -0000072345 00000 n -0000069271 00000 n -0000072800 00000 n -0000072923 00000 n -0000072492 00000 n -0000073107 00000 n -0000072648 00000 n -0000073169 00000 n -0000076803 00000 n -0000076436 00000 n -0000073355 00000 n -0000076555 00000 n -0000081118 00000 n -0000080085 00000 n -0000076940 00000 n -0000080871 00000 n -0000080248 00000 n -0000080401 00000 n -0000080558 00000 n -0000080715 00000 n -0000081056 00000 n -0000084342 00000 n -0000083979 00000 n -0000081242 00000 n -0000084280 00000 n -0000084118 00000 n -0000087646 00000 n -0000087403 00000 n -0000084479 00000 n -0000087522 00000 n -0000209025 00000 n -0000206912 00000 n -0000208863 00000 n -0000091234 00000 n -0000090636 00000 n -0000087809 00000 n -0000090926 00000 n -0000090775 00000 n -0000235997 00000 n -0000095154 00000 n -0000094397 00000 n -0000091371 00000 n -0000094846 00000 n -0000094544 00000 n -0000094695 00000 n -0000099726 00000 n -0000098964 00000 n -0000095291 00000 n -0000099419 00000 n -0000099111 00000 n -0000099265 00000 n -0000099604 00000 n -0000099666 00000 n -0000103090 00000 n -0000102785 00000 n -0000099889 00000 n -0000102904 00000 n -0000106303 00000 n -0000106060 00000 n -0000103240 00000 n -0000106179 00000 n -0000109540 00000 n -0000109297 00000 n -0000106440 00000 n -0000109416 00000 n -0000113081 00000 n -0000112605 00000 n -0000109677 00000 n -0000112895 00000 n -0000112744 00000 n -0000236114 00000 n -0000116586 00000 n -0000115765 00000 n -0000113218 00000 n -0000116214 00000 n -0000115912 00000 n -0000116063 00000 n -0000120474 00000 n -0000119841 00000 n -0000116710 00000 n -0000120289 00000 n -0000119988 00000 n -0000120138 00000 n -0000123544 00000 n -0000123070 00000 n -0000120598 00000 n -0000123359 00000 n -0000123209 00000 n -0000127436 00000 n -0000126898 00000 n -0000123668 00000 n -0000127188 00000 n -0000127037 00000 n -0000131528 00000 n -0000130610 00000 n -0000127560 00000 n -0000131218 00000 n -0000130765 00000 n -0000130916 00000 n -0000131067 00000 n -0000204589 00000 n -0000202576 00000 n -0000204427 00000 n -0000134799 00000 n -0000134432 00000 n -0000131678 00000 n -0000134551 00000 n -0000236231 00000 n -0000138164 00000 n -0000137549 00000 n -0000134923 00000 n -0000137668 00000 n -0000140906 00000 n -0000140602 00000 n -0000138301 00000 n -0000140721 00000 n -0000000000 00000 f -0000202476 00000 n -0000145304 00000 n -0000144436 00000 n -0000141043 00000 n -0000145057 00000 n -0000144591 00000 n -0000144743 00000 n -0000144905 00000 n -0000147651 00000 n -0000147408 00000 n -0000145441 00000 n -0000147527 00000 n -0000151669 00000 n -0000151017 00000 n -0000147788 00000 n -0000151483 00000 n -0000198254 00000 n -0000196186 00000 n -0000198094 00000 n -0000151164 00000 n -0000151321 00000 n -0000155220 00000 n -0000154574 00000 n -0000151844 00000 n -0000155034 00000 n -0000155096 00000 n -0000154721 00000 n -0000154883 00000 n -0000236348 00000 n -0000159320 00000 n -0000159015 00000 n -0000155357 00000 n -0000159134 00000 n -0000162971 00000 n -0000162485 00000 n -0000159457 00000 n -0000162785 00000 n -0000162624 00000 n -0000162909 00000 n -0000166357 00000 n -0000165928 00000 n -0000163095 00000 n -0000166047 00000 n -0000166109 00000 n -0000166171 00000 n -0000166233 00000 n -0000167516 00000 n -0000166993 00000 n -0000166481 00000 n -0000167454 00000 n -0000167140 00000 n -0000167297 00000 n -0000186169 00000 n -0000169754 00000 n -0000167614 00000 n -0000186045 00000 n -0000186107 00000 n -0000170709 00000 n -0000170858 00000 n -0000171007 00000 n -0000171156 00000 n -0000171305 00000 n -0000171454 00000 n -0000171603 00000 n -0000171752 00000 n -0000171900 00000 n -0000172048 00000 n -0000172197 00000 n -0000172346 00000 n -0000172494 00000 n -0000172643 00000 n -0000172791 00000 n -0000172940 00000 n -0000173088 00000 n -0000173237 00000 n -0000173386 00000 n -0000173535 00000 n -0000173685 00000 n -0000173834 00000 n -0000173983 00000 n -0000174131 00000 n -0000174280 00000 n -0000174429 00000 n -0000174577 00000 n -0000174726 00000 n -0000174875 00000 n -0000175024 00000 n -0000175173 00000 n -0000175321 00000 n -0000175470 00000 n -0000175619 00000 n -0000175768 00000 n -0000175915 00000 n -0000176064 00000 n -0000176212 00000 n -0000176362 00000 n -0000176511 00000 n -0000176660 00000 n -0000176809 00000 n -0000176958 00000 n -0000177107 00000 n -0000177256 00000 n -0000177405 00000 n -0000177554 00000 n -0000177703 00000 n -0000177853 00000 n -0000178002 00000 n -0000178151 00000 n -0000178300 00000 n -0000178448 00000 n -0000178597 00000 n -0000178747 00000 n -0000178897 00000 n -0000179046 00000 n -0000179195 00000 n -0000179344 00000 n -0000179493 00000 n -0000179641 00000 n -0000179790 00000 n -0000179939 00000 n -0000180088 00000 n -0000180237 00000 n -0000180386 00000 n -0000180535 00000 n -0000180684 00000 n -0000180833 00000 n -0000180982 00000 n -0000181131 00000 n -0000181280 00000 n -0000181429 00000 n -0000181579 00000 n -0000181728 00000 n -0000181877 00000 n -0000182026 00000 n -0000182174 00000 n -0000182323 00000 n -0000182472 00000 n -0000182621 00000 n -0000182770 00000 n -0000182918 00000 n -0000183067 00000 n -0000183216 00000 n -0000183366 00000 n -0000183515 00000 n -0000183663 00000 n -0000183812 00000 n -0000183961 00000 n -0000184111 00000 n -0000184260 00000 n -0000184410 00000 n -0000184559 00000 n -0000184708 00000 n -0000184857 00000 n -0000185005 00000 n -0000185154 00000 n -0000185303 00000 n -0000185451 00000 n -0000185599 00000 n -0000185748 00000 n -0000185897 00000 n -0000196075 00000 n -0000187410 00000 n -0000186267 00000 n -0000196013 00000 n -0000187973 00000 n -0000188122 00000 n -0000188271 00000 n -0000188420 00000 n -0000188569 00000 n -0000188719 00000 n -0000188868 00000 n -0000189018 00000 n -0000189168 00000 n -0000189317 00000 n -0000189465 00000 n -0000189614 00000 n -0000189763 00000 n -0000189912 00000 n -0000190061 00000 n -0000190209 00000 n -0000190359 00000 n -0000190507 00000 n -0000190655 00000 n -0000190804 00000 n -0000190953 00000 n -0000191102 00000 n -0000191250 00000 n -0000191398 00000 n -0000191548 00000 n -0000191697 00000 n -0000191846 00000 n -0000191995 00000 n -0000192143 00000 n -0000192292 00000 n -0000192441 00000 n -0000192589 00000 n -0000192738 00000 n -0000192888 00000 n -0000193037 00000 n -0000193186 00000 n -0000193335 00000 n -0000193483 00000 n -0000193632 00000 n -0000193781 00000 n -0000193930 00000 n -0000194078 00000 n -0000194226 00000 n -0000194374 00000 n -0000194522 00000 n -0000194671 00000 n -0000194820 00000 n -0000194969 00000 n -0000195119 00000 n -0000195268 00000 n -0000195417 00000 n -0000195566 00000 n -0000195715 00000 n -0000195864 00000 n -0000236465 00000 n -0000198499 00000 n -0000198471 00000 n -0000200610 00000 n -0000204812 00000 n -0000204788 00000 n -0000209489 00000 n -0000209275 00000 n -0000215787 00000 n -0000215635 00000 n -0000220113 00000 n -0000219909 00000 n -0000235281 00000 n -0000236542 00000 n -0000236660 00000 n -0000236745 00000 n -0000236815 00000 n -0000244016 00000 n -0000247504 00000 n -0000247543 00000 n -0000247581 00000 n -0000247769 00000 n -trailer -<< -/Size 870 -/Root 868 0 R -/Info 869 0 R -/ID [<72D7838B14B6618DC37BE082EA2234A6> <72D7838B14B6618DC37BE082EA2234A6>] ->> -startxref -247932 -%%EOF diff --git a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Gplex.exe b/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Gplex.exe deleted file mode 100644 index 51a522e22..000000000 Binary files a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Gplex.exe and /dev/null differ diff --git a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Gppg.exe b/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Gppg.exe deleted file mode 100644 index edca40198..000000000 Binary files a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Gppg.exe and /dev/null differ diff --git a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/QUT.ShiftReduceParser.dll b/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/QUT.ShiftReduceParser.dll deleted file mode 100644 index bb22154ea..000000000 Binary files a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/QUT.ShiftReduceParser.dll and /dev/null differ diff --git a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/ShiftReduceParser.dll b/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/ShiftReduceParser.dll deleted file mode 100644 index 4e113ba04..000000000 Binary files a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/ShiftReduceParser.dll and /dev/null differ diff --git a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/gplexx.frame b/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/gplexx.frame deleted file mode 100644 index b2a2affcf..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/gplexx.frame +++ /dev/null @@ -1,623 +0,0 @@ -// -// Experimental embedded frame -// Version 1.1.3 of 18-April-2010 -// -## Derived from gplex.frame version of 2-September-2006. -## Code page support for files without a BOM. -## Left and Right Anchored state support. -## Start condition stack. Two generic params. -## Using fixed length context handling for right anchors -// -##-->defines - -using System; -using System.IO; -using System.Text; -using System.Globalization; -using System.Collections.Generic; -using System.Runtime.Serialization; -using System.Diagnostics.CodeAnalysis; - -##-->version290 -##-->usingDcl -{ - ///

- /// Summary Canonical example of GPLEX automaton - /// - -#if STANDALONE - // - // These are the dummy declarations for stand-alone GPLEX applications - // normally these declarations would come from the parser. - // If you declare /noparser, or %option noparser then you get this. - // - -##-->translate $public enum $Tokens - { - EOF = 0, maxParseToken = int.MaxValue - // must have at least these two, values are almost arbitrary - } - -##-->translate $public abstract class $ScanBase - { - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yylex")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yylex")] - public abstract int yylex(); - - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yywrap")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yywrap")] - protected virtual bool yywrap() { return true; } - -#if BABEL - protected abstract int CurrentSc { get; set; } - // EolState is the 32-bit of state data persisted at - // the end of each line for Visual Studio colorization. - // The default is to return CurrentSc. You must override - // this if you want more complicated behavior. - public virtual int EolState { - get { return CurrentSc; } - set { CurrentSc = value; } - } - } - -##-->translate $public interface IColorScan - { - void SetSource(string source, int offset); - int GetNext(ref int state, out int start, out int end); -#endif // BABEL - } - -#endif // STANDALONE - - // If the compiler can't find the scanner base class maybe you - // need to run GPPG with the /gplex option, or GPLEX with /noparser -#if BABEL -##-->translate $public sealed partial class $Scanner : $ScanBase, IColorScan - { - private ScanBuff buffer; - int currentScOrd; // start condition ordinal - - protected override int CurrentSc - { - // The current start state is a property - // to try to avoid the user error of setting - // scState but forgetting to update the FSA - // start state "currentStart" - // - get { return currentScOrd; } // i.e. return YY_START; - set { currentScOrd = value; // i.e. BEGIN(value); - currentStart = startState[value]; } - } -#else // BABEL -##-->translate $public sealed partial class $Scanner : $ScanBase - { - private ScanBuff buffer; - int currentScOrd; // start condition ordinal -#endif // BABEL - - /// - /// The input buffer for this scanner. - /// - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public ScanBuff Buffer { get { return buffer; } } - - private static int GetMaxParseToken() { -##-->translate System.Reflection.FieldInfo f = typeof($Tokens).GetField("maxParseToken"); - return (f == null ? int.MaxValue : (int)f.GetValue(null)); - } - - static int parserMax = GetMaxParseToken(); - - enum Result {accept, noMatch, contextFound}; - -##-->consts - -#region user code -##-->codeIncl -#endregion user code - - int state; - int currentStart = startState[0]; - int code; // last code read - int cCol; // column number of code - int lNum; // current line number - // - // The following instance variables are used, among other - // things, for constructing the yylloc location objects. - // - int tokPos; // buffer position at start of token - int tokCol; // zero-based column number at start of token - int tokLin; // line number at start of token - int tokEPos; // buffer position at end of token - int tokECol; // column number at end of token - int tokELin; // line number at end of token - string tokTxt; // lazily constructed text of token -#if STACK - private Stack scStack = new Stack(); -#endif // STACK - -##-->tableDef - - -#if BACKUP - // ============================================================== - // == Nested struct used for backup in automata that do backup == - // ============================================================== - - struct Context // class used for automaton backup. - { - public int bPos; - public int rPos; // scanner.readPos saved value - public int cCol; - public int lNum; // Need this in case of backup over EOL. - public int state; - public int cChr; - } - - private Context ctx = new Context(); -#endif // BACKUP - - // ============================================================== - // ==== Nested struct to support input switching in scanners ==== - // ============================================================== - - struct BufferContext { - internal ScanBuff buffSv; - internal int chrSv; - internal int cColSv; - internal int lNumSv; - } - - // ============================================================== - // ===== Private methods to save and restore buffer contexts ==== - // ============================================================== - - /// - /// This method creates a buffer context record from - /// the current buffer object, together with some - /// scanner state values. - /// - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - BufferContext MkBuffCtx() - { - BufferContext rslt; - rslt.buffSv = this.buffer; - rslt.chrSv = this.code; - rslt.cColSv = this.cCol; - rslt.lNumSv = this.lNum; - return rslt; - } - - /// - /// This method restores the buffer value and allied - /// scanner state from the given context record value. - /// - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - void RestoreBuffCtx(BufferContext value) - { - this.buffer = value.buffSv; - this.code = value.chrSv; - this.cCol = value.cColSv; - this.lNum = value.lNumSv; - } - // =================== End Nested classes ======================= - -#if !NOFILES -##-->translate $public $Scanner(Stream file) { -##-->bufferCtor - } - -#endif // !NOFILES - -##-->translate $public $Scanner() { } - - private int readPos; - - void GetCode() - { - if (code == '\n') // This needs to be fixed for other conventions - // i.e. [\r\n\205\u2028\u2029] - { - cCol = -1; - lNum++; - } - readPos = buffer.Pos; - - // Now read new codepoint. - code = buffer.Read(); - if (code > ScanBuff.EndOfFile) - { -#if (!BYTEMODE) - if (code >= 0xD800 && code <= 0xDBFF) - { - int next = buffer.Read(); - if (next < 0xDC00 || next > 0xDFFF) - code = ScanBuff.UnicodeReplacementChar; - else - code = (0x10000 + (code & 0x3FF << 10) + (next & 0x3FF)); - } -#endif - cCol++; - } - } - - void MarkToken() - { -#if (!PERSIST) - buffer.Mark(); -#endif - tokPos = readPos; - tokLin = lNum; - tokCol = cCol; - } - - void MarkEnd() - { - tokTxt = null; - tokEPos = readPos; - tokELin = lNum; - tokECol = cCol; - } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - int Peek() - { - int rslt, codeSv = code, cColSv = cCol, lNumSv = lNum, bPosSv = buffer.Pos; - GetCode(); rslt = code; - lNum = lNumSv; cCol = cColSv; code = codeSv; buffer.Pos = bPosSv; - return rslt; - } - - // ============================================================== - // ===== Initialization of string-based input buffers ==== - // ============================================================== - - /// - /// Create and initialize a StringBuff buffer object for this scanner - /// - /// the input string - /// starting offset in the string - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public void SetSource(string source, int offset) - { - this.buffer = ScanBuff.GetBuffer(source); - this.buffer.Pos = offset; - this.lNum = 0; - this.code = '\n'; // to initialize yyline, yycol and lineStart - GetCode(); - } - -#if !NOFILES - // ================ LineBuffer Initialization =================== - - /// - /// Create and initialize a LineBuff buffer object for this scanner - /// - /// the list of input strings - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public void SetSource(IList source) - { - this.buffer = ScanBuff.GetBuffer(source); - this.code = '\n'; // to initialize yyline, yycol and lineStart - this.lNum = 0; - GetCode(); - } - - // =============== StreamBuffer Initialization ================== - - /// - /// Create and initialize a StreamBuff buffer object for this scanner. - /// StreamBuff is buffer for 8-bit byte files. - /// - /// the input byte stream - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public void SetSource(Stream source) - { - this.buffer = ScanBuff.GetBuffer(source); - this.lNum = 0; - this.code = '\n'; // to initialize yyline, yycol and lineStart - GetCode(); - } - -#if !BYTEMODE - // ================ TextBuffer Initialization =================== - - /// - /// Create and initialize a TextBuff buffer object for this scanner. - /// TextBuff is a buffer for encoded unicode files. - /// - /// the input text file - /// Code page to use if file has - /// no BOM. For 0, use machine default; for -1, 8-bit binary - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public void SetSource(Stream source, int fallbackCodePage) - { - this.buffer = ScanBuff.GetBuffer(source, fallbackCodePage); - this.lNum = 0; - this.code = '\n'; // to initialize yyline, yycol and lineStart - GetCode(); - } -#endif // !BYTEMODE -#endif // !NOFILES - - // ============================================================== - -#if BABEL - // - // Get the next token for Visual Studio - // - // "state" is the inout mode variable that maintains scanner - // state between calls, using the EolState property. In principle, - // if the calls of EolState are costly set could be called once - // only per line, at the start; and get called only at the end - // of the line. This needs more infrastructure ... - // - public int GetNext(ref int state, out int start, out int end) - { -##-->translate $Tokens next; - int s, e; - s = state; // state at start - EolState = state; -##-->translate next = ($Tokens)Scan(); - state = EolState; - e = state; // state at end; - start = tokPos; - end = tokEPos - 1; // end is the index of last char. - return (int)next; - } -#endif // BABEL - - // ======== AbstractScanner<> Implementation ========= - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yylex")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yylex")] - public override int yylex() - { - // parserMax is set by reflecting on the Tokens - // enumeration. If maxParseToken is defined - // that is used, otherwise int.MaxValue is used. - int next; - do { next = Scan(); } while (next >= parserMax); - return next; - } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - int yypos { get { return tokPos; } } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - int yyline { get { return tokLin; } } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - int yycol { get { return tokCol; } } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yytext")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yytext")] - public string yytext - { - get - { - if (tokTxt == null) - tokTxt = buffer.GetString(tokPos, tokEPos); - return tokTxt; - } - } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - void yyless(int n) - { - buffer.Pos = tokPos; - // Must read at least one char, so set before start. - cCol = tokCol - 1; - GetCode(); - // Now ensure that line counting is correct. - lNum = tokLin; - // And count the rest of the text. - for (int i = 0; i < n; i++) GetCode(); - MarkEnd(); - } - - // - // It would be nice to count backward in the text - // but it does not seem possible to re-establish - // the correct column counts except by going forward. - // - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - void _yytrunc(int n) { yyless(yyleng - n); } - - // - // This is painful, but we no longer count - // codepoints. For the overwhelming majority - // of cases the single line code is fast, for - // the others, well, at least it is all in the - // buffer so no files are touched. Note that we - // can't use (tokEPos - tokPos) because of the - // possibility of surrogate pairs in the token. - // - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yyleng")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yyleng")] - public int yyleng - { - get { -#if BYTEMODE - return tokEPos - tokPos; -#else - if (tokELin == tokLin) - return tokECol - tokCol; - else { - int ch; - int count = 0; - int save = buffer.Pos; - buffer.Pos = tokPos; - do { - ch = buffer.Read(); - if (!char.IsHighSurrogate((char)ch)) count++; - } while (buffer.Pos < tokEPos && ch != ScanBuff.EndOfFile); - buffer.Pos = save; - return count; - } -#endif // BYTEMODE - } - } - - // ============ methods available in actions ============== - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal int YY_START { - get { return currentScOrd; } - set { currentScOrd = value; - currentStart = startState[value]; - } - } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal void BEGIN(int next) { - currentScOrd = next; - currentStart = startState[next]; - } - - // ============== The main tokenizer code ================= - - int Scan() - { -##-->prolog - for (; ; ) - { - int next; // next state to enter -#if BACKUP - Result rslt = Result.noMatch; -#endif // BACKUP -#if LEFTANCHORS - for (;;) - { - // Discard characters that do not start any pattern. - // Must check the left anchor condition after *every* GetCode! - state = ((cCol == 0) ? anchorState[currentScOrd] : currentStart); - if ((next = NextState()) != goStart) - break; // LOOP EXIT HERE... - GetCode(); - } - -#else // !LEFTANCHORS - state = currentStart; - while ((next = NextState()) == goStart) - // At this point, the current character has no - // transition from the current state. We discard - // the "no-match" char. In traditional LEX such - // characters are echoed to the console. - GetCode(); -#endif // LEFTANCHORS - // At last, a valid transition ... - MarkToken(); - state = next; - GetCode(); - - while ((next = NextState()) > eofNum) // Exit for goStart AND for eofNum -#if BACKUP - if (state <= maxAccept && next > maxAccept) // need to prepare backup data - { - // ctx is an object. The fields may be - // mutated by the call to Recurse2. - // On return the data in ctx is the - // *latest* accept state that was found. - - rslt = Recurse2(ref ctx, next); - if (rslt == Result.noMatch) - RestoreStateAndPos(ref ctx); - break; - } - else -#endif // BACKUP - { - state = next; - GetCode(); - } - if (state <= maxAccept) - { - MarkEnd(); -##-->actionCases - } - } -##-->epilog - } - -#if BACKUP - Result Recurse2(ref Context ctx, int next) - { - // Assert: at entry "state" is an accept state AND - // NextState(state, code) != goStart AND - // NextState(state, code) is not an accept state. - // - SaveStateAndPos(ref ctx); - state = next; - GetCode(); - - while ((next = NextState()) > eofNum) - { - if (state <= maxAccept && next > maxAccept) // need to update backup data - SaveStateAndPos(ref ctx); - state = next; - if (state == eofNum) return Result.accept; - GetCode(); - } - return (state <= maxAccept ? Result.accept : Result.noMatch); - } - - void SaveStateAndPos(ref Context ctx) - { - ctx.bPos = buffer.Pos; - ctx.rPos = readPos; - ctx.cCol = cCol; - ctx.lNum = lNum; - ctx.state = state; - ctx.cChr = code; - } - - void RestoreStateAndPos(ref Context ctx) - { - buffer.Pos = ctx.bPos; - readPos = ctx.rPos; - cCol = ctx.cCol; - lNum = ctx.lNum; - state = ctx.state; - code = ctx.cChr; - } - -#endif // BACKUP - - // ============= End of the tokenizer code ================ - -#if STACK - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal void yy_clear_stack() { scStack.Clear(); } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal int yy_top_state() { return scStack.Peek(); } - - internal void yy_push_state(int state) - { - scStack.Push(currentScOrd); - BEGIN(state); - } - - internal void yy_pop_state() - { - // Protect against input errors that pop too far ... - if (scStack.Count > 0) { - int newSc = scStack.Pop(); - BEGIN(newSc); - } // Otherwise leave stack unchanged. - } - #endif // STACK - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal void ECHO() { Console.Out.Write(yytext); } - -##-->userCode - } // end class $Scanner - -##-->embeddedBuffers - -} // end namespace diff --git a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/guesser.frame b/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/guesser.frame deleted file mode 100644 index 8d0574d4d..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/guesser.frame +++ /dev/null @@ -1,77 +0,0 @@ -## -## DO NOT EDIT THIS FILE CARELESSLY! -## THE CONTENTS OF THIS FILE ARE STRONGLY LINKED TO THE -## CODE OF Dfsa.cs, AND ALL MUST VARY TOGETHER -## -## This frame file produces an include file for gplex -## C# output. It does not produce a stand-alone scanner -## and uses not defined symbols, or "using" declarations. -## This only works for automata with no backup states! -## -// -// Guesser.frame version 1.1.0 of 30-January-2009 -// - -##-->version255 -##-->usingDcl -{ - public enum Tokens { EndToken = 0, MaxParseToken = int.MaxValue } - - public class Scanner - { - ScanBuff buffer; - - enum Result {accept, noMatch, contextFound}; - - bool yywrap() { return true; } - - public int GuessCodePage() { return Scan(); } - -##-->consts - -#region user code -##-->codeIncl -#endregion user code - - int state; - int currentStart = startState[0]; - int code; - -##-->tableDef - - public Scanner(System.IO.Stream file) { SetSource(file); } - - public void SetSource(System.IO.Stream source) - { - this.buffer = new BuildBuffer(source); - code = buffer.Read(); - } - - int Scan() - { -##-->prolog - for (; ; ) - { - int next; - state = currentStart; - while ((next = NextState()) == goStart) - code = buffer.Read(); - - state = next; - code = buffer.Read(); - - while ((next = NextState()) > eofNum) - { - state = next; - code = buffer.Read(); - } - if (state <= maxAccept) - { -##-->actionCases - } - } -##-->epilog - } -##-->userCode - } // end class Scanner -} // end namespace diff --git a/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/Highlighting/Oberon00.xshd b/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/Highlighting/Oberon00.xshd deleted file mode 100644 index 8ab7dde91..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/Highlighting/Oberon00.xshd +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - - - - - &<>~!%^*()-+=|\#/{}[]:;"' , .? - - - //@!/@ - - - - (* - *) - - - - /* - */ - - - - ' - ' - - - " - " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <>~!@%^*()-+=|\#/{}[]:;"' , .? - - - - - - - - - - - - diff --git a/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/Lib/Oberon00System.pcu b/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/Lib/Oberon00System.pcu deleted file mode 100644 index 727fe2213..000000000 Binary files a/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/Lib/Oberon00System.pcu and /dev/null differ diff --git a/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/LibSource/Oberon00System.pas b/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/LibSource/Oberon00System.pas deleted file mode 100644 index 90db0e939..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/LibSource/Oberon00System.pas +++ /dev/null @@ -1,58 +0,0 @@ -// (c) Mikst, Juliet 2010 -/// Системный модуль для языка Oberon -unit Oberon00System; - -interface - -type - /// Логический тип (TRUE | FALSE) - BOOLEAN = System.boolean; - /// Целое число - INTEGER = System.Int32; - /// Короткое целое число - SHORTINT = System.byte; - /// Длинное целое число - LONGINT = System.int64; - /// Вещественное число - REAL = System.double; - /// Длинное вещественное число - LONGREAL = System.double; - /// Символ - CHAR = System.char; - /// Строка - STRING = System.string; - /// Множество целых - iset = array of integer; - -procedure Print(o: object); -procedure Println(o: object); -procedure Println(o1,o2: integer); -procedure Println; - -implementation - -uses System; - -procedure Print(o: object); -begin - Console.Write(o); -end; - -/// Вывести значение -procedure Println(o: object); -begin - Console.WriteLine(o); -end; - -procedure Println(o1,o2: integer); -begin - Print(o1); - Println(o2); -end; - -procedure Println; -begin - Console.WriteLine; -end; - -end. \ No newline at end of file diff --git a/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/LibSource/Oberon00System.pcu b/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/LibSource/Oberon00System.pcu deleted file mode 100644 index 4cd97f4d7..000000000 Binary files a/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/LibSource/Oberon00System.pcu and /dev/null differ diff --git a/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/Oberon00Parser.dll b/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/Oberon00Parser.dll deleted file mode 100644 index 39673f211..000000000 Binary files a/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/Oberon00Parser.dll and /dev/null differ diff --git a/Grammars/Oberon10Independent (by Juliet)/Oberon00ParserTools.cs b/Grammars/Oberon10Independent (by Juliet)/Oberon00ParserTools.cs deleted file mode 100644 index 3f7ef8589..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/Oberon00ParserTools.cs +++ /dev/null @@ -1,134 +0,0 @@ -using System.Collections.Generic; -using PascalABCCompiler.SyntaxTree; -using PascalABCCompiler.Errors; -using QUT.Gppg; -using GPPGParserScanner; - -namespace PascalABCCompiler.Oberon00Parser -{ - // Класс глобальных описаний и статических методов - // для использования различными подсистемами парсера и сканера - public static class PT // PT - parser tools - { - public static List Errors; - /// Последний прочтенный идентификатор - public static string LastIdentificator = ""; - //public static int max_errors; - public static string CurrentFileName; - /// Словарь стандартных типов с соответствующими внутренними именами - public static Dictionary standartTypes = new Dictionary(); - - /// Статический конструктор - static PT() { - standartTypes.Add("BOOLEAN", "boolean"); - standartTypes.Add("INTEGER", "integer"); - standartTypes.Add("SHORTINT", "byte"); - standartTypes.Add("LONGINT", "int64"); - standartTypes.Add("REAL", "real"); - standartTypes.Add("LONGREAL", "double"); - standartTypes.Add("CHAR", "char"); - standartTypes.Add("STRING", "string"); - } - - public static SourceContext ToSourceContext(LexLocation loc) - { - if (loc != null) - return new SourceContext(loc.StartLine, loc.StartColumn + 1, loc.EndLine, loc.EndColumn); - return null; - } - - public static string CreateErrorString(params object[] args) - { - string[] ww = new string[args.Length - 1]; - for (int i = 1; i < args.Length; i++) - ww[i - 1] = GetStrByTokenName((string)args[i]); - string w = string.Join(" или ", ww); - System.Collections.Generic.List l = new List(); - - string got = (string)args[0]; - if (got.Equals("ID")) - got = "'" + LastIdentificator + "'"; - else - got = GetStrByTokenName(got); - return string.Format("Синтаксическая ошибка: встречено {0}, а ожидалось {1}", got, w); - } - - public static void AddError(string message, LexLocation loc) - { - Errors.Add(new SyntaxError(message, CurrentFileName, ToSourceContext(loc), null)); - } - - /// Определяет содержимое строки по ее представлению в тексте программы - /// Строка с кавычками - /// Содержимое строки без кавычек - public static string GetStringContent(string sourceStr) { - bool hasStrType = (sourceStr.IndexOf('\'') != -1) || - (sourceStr.IndexOf('"') != -1); - if (hasStrType) - return sourceStr.Substring(1, sourceStr.Length - 2); - else { // символ представлен 16ным кодом - string hexCode = sourceStr.Remove(sourceStr.Length - 1); - int tryParseHex; - if (int.TryParse(hexCode, System.Globalization.NumberStyles.AllowHexSpecifier, null, out tryParseHex)) - return ((char)tryParseHex).ToString(); - else - throw new System.ArgumentException("Некорректный шестнадцатеричный код символа"); - } - } - - /// Преобразует вещественный литерал, принятый в Обероне, к виду .NET - /// Исходная строка вещественного числа - /// Корректную строку - вещественное число - public static string GetCorrectDoubleStr(string sourceDoubleStr) { - string correct = sourceDoubleStr.Replace(".", - System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator); - correct = correct.Replace('D', 'E'); - return correct; - } - - /// Определяет внутреннее имя типа по типу в программе - /// Имя типа в программе - /// Корректное внутреннее имя типа - public static string InternalTypeName(string typeName) { - if (standartTypes.ContainsKey(typeName)) - return standartTypes[typeName]; - else - return typeName; - } - - - // ----------------------------------------------------------------------------- - // Вспомогательные методы - // ----------------------------------------------------------------------------- - /// Возвращает по имени токена представляющую его строку - private static string GetStrByTokenName(string tokenName) { - switch (tokenName) { - case "ASSIGN": return "':='"; - case "SEMICOLUMN": return "';'"; - case "COLON": return "':'"; - case "COMMA": return "'.'"; - case "COLUMN": return "','"; - case "LPAREN": return "'('"; - case "RPAREN": return "')'"; - case "PLUS": return "'+'"; - case "MINUS": return "'-'"; - case "MULT": return "'*'"; - case "DIVIDE": return "'/'"; - case "LT": return "'<'"; - case "GT": return "'>'"; - case "LE": return "'<='"; - case "GE": return "'>='"; - case "EQ": return "'='"; - case "NE": return "'#'"; - case "NOT": return "'~'"; - case "AND": return "'&'"; - case "EXCLAMATION": return "'!'"; - case "ID": return "идентификатор"; - case "EOF": return "конец программы"; - case "INTNUM": return "целое число"; - case "ASTERISK": return "'*'"; - default: return tokenName; - } - } - } -} \ No newline at end of file diff --git a/Grammars/Oberon10Independent (by Juliet)/ObrProba.csproj b/Grammars/Oberon10Independent (by Juliet)/ObrProba.csproj deleted file mode 100644 index 319218b26..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/ObrProba.csproj +++ /dev/null @@ -1,91 +0,0 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {D215937C-36EA-4E60-B3EB-A2527DE39D19} - Library - Properties - Oberon00Parser - Oberon00Parser - v4.0 - 512 - - - - - - - 3.5 - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - AllRules.ruleset - - - - - 3.5 - - - 3.5 - - - 3.5 - - - - - - - - - - - - - - - {44a01f9e-dce7-470c-aae5-c3de0ccbee3b} - Errors - - - {2de2842f-0912-4251-bc0f-480854c44a13} - Localization - - - {af2efd7b-69dd-4b43-af65-b59b29349c23} - ParserTools - - - {c2cac65a-b2ae-4ccc-b067-e6b8e75df73a} - SyntaxTree - - - - - \ No newline at end of file diff --git a/Grammars/Oberon10Independent (by Juliet)/ObrProba.sln b/Grammars/Oberon10Independent (by Juliet)/ObrProba.sln deleted file mode 100644 index 032f303bd..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/ObrProba.sln +++ /dev/null @@ -1,44 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ObrProba", "ObrProba.csproj", "{D215937C-36EA-4E60-B3EB-A2527DE39D19}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Errors", "..\..\Errors\Errors.csproj", "{44A01F9E-DCE7-470C-AAE5-C3DE0CCBEE3B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ParserTools", "..\..\ParserTools\ParserTools.csproj", "{AF2EFD7B-69DD-4B43-AF65-B59B29349C23}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Localization", "..\..\Localization\Localization.csproj", "{2DE2842F-0912-4251-BC0F-480854C44A13}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SyntaxTree", "..\..\SyntaxTree\SyntaxTree.csproj", "{C2CAC65A-B2AE-4CCC-B067-E6B8E75DF73A}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D215937C-36EA-4E60-B3EB-A2527DE39D19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D215937C-36EA-4E60-B3EB-A2527DE39D19}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D215937C-36EA-4E60-B3EB-A2527DE39D19}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D215937C-36EA-4E60-B3EB-A2527DE39D19}.Release|Any CPU.Build.0 = Release|Any CPU - {44A01F9E-DCE7-470C-AAE5-C3DE0CCBEE3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {44A01F9E-DCE7-470C-AAE5-C3DE0CCBEE3B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {44A01F9E-DCE7-470C-AAE5-C3DE0CCBEE3B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {44A01F9E-DCE7-470C-AAE5-C3DE0CCBEE3B}.Release|Any CPU.Build.0 = Release|Any CPU - {AF2EFD7B-69DD-4B43-AF65-B59B29349C23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AF2EFD7B-69DD-4B43-AF65-B59B29349C23}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AF2EFD7B-69DD-4B43-AF65-B59B29349C23}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AF2EFD7B-69DD-4B43-AF65-B59B29349C23}.Release|Any CPU.Build.0 = Release|Any CPU - {2DE2842F-0912-4251-BC0F-480854C44A13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2DE2842F-0912-4251-BC0F-480854C44A13}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2DE2842F-0912-4251-BC0F-480854C44A13}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2DE2842F-0912-4251-BC0F-480854C44A13}.Release|Any CPU.Build.0 = Release|Any CPU - {C2CAC65A-B2AE-4CCC-B067-E6B8E75DF73A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C2CAC65A-B2AE-4CCC-B067-E6B8E75DF73A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C2CAC65A-B2AE-4CCC-B067-E6B8E75DF73A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C2CAC65A-B2AE-4CCC-B067-E6B8E75DF73A}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Grammars/Oberon10Independent (by Juliet)/ObrProba.suo b/Grammars/Oberon10Independent (by Juliet)/ObrProba.suo deleted file mode 100644 index 67fd81589..000000000 Binary files a/Grammars/Oberon10Independent (by Juliet)/ObrProba.suo and /dev/null differ diff --git a/Grammars/Oberon10Independent (by Juliet)/Parser.cs b/Grammars/Oberon10Independent (by Juliet)/Parser.cs deleted file mode 100644 index 9bf115aa9..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/Parser.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System; -using System.IO; -using System.Text; -using System.Reflection; -using PascalABCCompiler; -using PascalABCCompiler.SyntaxTree; -using PascalABCCompiler.Parsers; -using PascalABCCompiler.Errors; -using System.Collections.Generic; -using GPPGParserScanner; - -namespace PascalABCCompiler.Oberon00Parser -{ - public class Oberon00LanguageParser : BaseParser - { - - public Oberon00LanguageParser() - : base("Oberon00", "0.1", "(c) Stanislav Mikhalkovich, 2010", true, new string[] { ".obr" }) - { - } - - public override syntax_tree_node BuildTreeInNormalMode(string FileName, string Text) - { - PT.Errors = Errors; - PT.CurrentFileName = FileName; - - Scanner scanner = new Scanner(); - scanner.SetSource(Text, 0); - - GPPGParser parser = new GPPGParser(scanner); - - if (!parser.Parse()) - if (Errors.Count == 0) - PT.AddError("Неопознанная синтаксическая ошибка!", null); - - return parser.root; - } - - public override syntax_tree_node BuildTreeInExprMode(string FileName, string Text) - { - PT.Errors = Errors; - PT.CurrentFileName = FileName; - - Scanner scanner = new Scanner(); - - // Добавление в начало текста символа с кодом 1. Используется для парсинга выражений с последующим использованием в Intellisense - Text = String.Concat((char)1, Text); - scanner.SetSource(Text, 0); - - GPPGParser parser = new GPPGParser(scanner); - - if (!parser.Parse()) - if (Errors.Count == 0) - PT.AddError("Не разобрали выражение", null); - - return parser.root; - } - } -} diff --git a/Grammars/Oberon10Independent (by Juliet)/Properties/AssemblyInfo.cs b/Grammars/Oberon10Independent (by Juliet)/Properties/AssemblyInfo.cs deleted file mode 100644 index b062f2d81..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("ObrProba")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("ObrProba")] -[assembly: AssemblyCopyright("Copyright © 2010")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("517903e0-51c4-49d1-bc84-2f833a408b60")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Grammars/Oberon10Independent (by Juliet)/ShiftReduceParserCode.cs b/Grammars/Oberon10Independent (by Juliet)/ShiftReduceParserCode.cs deleted file mode 100644 index e61263e95..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/ShiftReduceParserCode.cs +++ /dev/null @@ -1,950 +0,0 @@ -// Gardens Point Parser Generator -// Copyright (c) Wayne Kelly, QUT 2005-2009 -// (see accompanying GPPGcopyright.rtf) -#define EXPORT_GPPG - -using System; -using System.Text; -using System.Globalization; -using System.Collections.Generic; -using System.Runtime.Serialization; -using System.Diagnostics.CodeAnalysis; -using PascalABCCompiler.SyntaxTree; - -namespace QUT.Gppg -{ - /// - /// Abstract class for GPPG shift-reduce parsers. - /// Parsers generated by GPPG derive from this base - /// class, overriding the abstract Initialize() and - /// DoAction() methods. - /// - /// Semantic value type - /// Location type -#if EXPORT_GPPG - public abstract class ShiftReduceParser -#else - internal abstract class ShiftReduceParser -#endif - where TSpan : IMerge, new() - { - public AbstractScanner scanner; - /// - /// The abstract scanner for this parser. - /// - protected AbstractScanner Scanner { - get { return scanner; } - set { scanner = value; } - } - - /// - /// Constructor for base class - /// - /// Scanner instance for this parser - protected ShiftReduceParser(AbstractScanner scanner) - { - this.scanner = scanner; - } - - // ============================================================== - // TECHNICAL EXPLANATION. - // Why the next two fields are not exposed via properties. - // ============================================================== - // These fields are of the generic parameter types, and are - // frequently instantiated as struct types in derived classes. - // Semantic actions are defined in the derived classes and refer - // to instance fields of these structs. Is such cases the code - // "get_CurrentSemanticValue().myField = blah;" will fail since - // the getter pushes the value of the field, not the reference. - // So, in the presence of properties, gppg would need to encode - // such field accesses as ... - // "tmp = get_CurrentSemanticValue(); // Fetch value - // tmp.myField = blah; // update - // set_CurrentSemanticValue(tmp); " // Write update back. - // There is no issue if TValue is restricted to be a ref type. - // The same explanation applies to scanner.yylval. - // ============================================================== - /// - /// The current value of the "$$" symbolic variable in the parser - /// - [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")] - protected TValue CurrentSemanticValue; - - /// - /// The current value of the "@$" symbolic variable in the parser - /// - [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")] - protected TSpan CurrentLocationSpan; - - private TSpan LastSpan; - private int NextToken; - private State FsaState; - private bool recovering; - private int tokensSinceLastError; - - private PushdownPrefixState StateStack = new PushdownPrefixState(); - private PushdownPrefixState valueStack = new PushdownPrefixState(); - private PushdownPrefixState locationStack = new PushdownPrefixState(); - - /// - /// The stack of semantic value (YYSTYPE) values. - /// - protected PushdownPrefixState ValueStack { get { return valueStack; } } - - /// - /// The stack of location value (YYLTYPE) varlues. - /// - protected PushdownPrefixState LocationStack { get { return locationStack; } } - - private int errorToken; - private int endOfFileToken; - private string[] nonTerminals; - private State[] states; - private Rule[] rules; - - /// - /// Initialization method to allow derived classes - /// to insert the rule list into this base class. - /// - /// The array of Rule objects - protected void InitRules(Rule[] rules) { this.rules = rules; } - - /// - /// Initialization method to allow derived classes to - /// insert the states table into this base class. - /// - /// The pre-initialized states table - protected void InitStates(State[] states) { this.states = states; } - - /// - /// OBSOLETE FOR VERSION 1.4.0 - /// - /// - protected void InitStateTable(int size) { states = new State[size]; } - - /// - /// Initialization method to allow derived classes - /// to insert the special value for the error and EOF tokens. - /// - /// The error state ordinal - /// The EOF stat ordinal - protected void InitSpecialTokens(int err, int end) - { - errorToken = err; - endOfFileToken = end; - } - - /// - /// Initialization method to allow derived classes to - /// insert the non-terminal symbol names into this base class. - /// - /// Non-terminal symbol names - protected void InitNonTerminals(string[] names) { nonTerminals = names; } - - #region YYAbort, YYAccept etcetera. - [Serializable] - [SuppressMessage("Microsoft.Design", "CA1064:ExceptionsShouldBePublic")] - // Reason for FxCop message suppression - - // This exception cannot escape from the local context - private class AcceptException : Exception - { - internal AcceptException() { } - protected AcceptException(SerializationInfo i, StreamingContext c) : base(i, c) { } - } - [Serializable] - [SuppressMessage("Microsoft.Design", "CA1064:ExceptionsShouldBePublic")] - // Reason for FxCop message suppression - - // This exception cannot escape from the local context - private class AbortException : Exception - { - internal AbortException() { } - protected AbortException(SerializationInfo i, StreamingContext c) : base(i, c) { } - } - [Serializable] - [SuppressMessage("Microsoft.Design", "CA1064:ExceptionsShouldBePublic")] - // Reason for FxCop message suppression - - // This exception cannot escape from the local context - private class ErrorException : Exception - { - internal ErrorException() { } - protected ErrorException(SerializationInfo i, StreamingContext c) : base(i, c) { } - } - - // The following methods are only called from within - // a semantic action. The thrown exceptions can never - // propagate outside the ShiftReduceParser class in - // which they are nested. - - /// - /// Force parser to terminate, returning "true" - /// - protected static void YYAccept() { throw new AcceptException(); } - - /// - /// Force parser to terminate, returning "false" - /// - protected static void YYAbort() { throw new AbortException(); } - - /// - /// Force parser to terminate, returning - /// "false" if error recovery fails. - /// - protected static void YYError() { throw new ErrorException(); } - - /// - /// Check if parser in error recovery state. - /// - protected bool YYRecovering { get { return recovering; } } - #endregion - - /// - /// Abstract base method. ShiftReduceParser calls this - /// to initialize the base class data structures. Concrete - /// parser classes must override this method. - /// - protected abstract void Initialize(); - - /// - /// Main entry point of the Shift-Reduce Parser. - /// - /// True if parse succeeds, else false for - /// unrecoverable errors - public bool Parse() - { - Initialize(); // allow derived classes to instantiate rules, states and nonTerminals - - NextToken = 0; - FsaState = states[0]; - - StateStack.Push(FsaState); - valueStack.Push(CurrentSemanticValue); - LocationStack.Push(CurrentLocationSpan); - - while (true) - { -#if TRACE_ACTIONS - Console.Error.WriteLine("Entering state {0} ", FsaState.number); -#endif - int action = FsaState.defaultAction; - - if (FsaState.ParserTable != null) - { - if (NextToken == 0) - { -#if TRACE_ACTIONS - Console.Error.Write("Reading a token: "); -#endif - // We save the last token span, so that the location span - // of production right hand sides that begin or end with a - // nullable production will be correct. - LastSpan = scanner.yylloc; - NextToken = scanner.yylex(); - } - -#if TRACE_ACTIONS - Console.Error.WriteLine("Next token is {0}", TerminalToString(NextToken)); -#endif - if (FsaState.ParserTable.ContainsKey(NextToken)) - action = FsaState.ParserTable[NextToken]; - } - - if (action > 0) // shift - { - Shift(action); - } - else if (action < 0) // reduce - { - try - { - Reduce(-action); - if (action == -1) // accept - return true; - } - catch (Exception x) - { - if (x is AbortException) - return false; - else if (x is AcceptException) - return true; - else if (x is ErrorException && !ErrorRecovery()) - return false; - else - throw; // Rethrow x, preserving information. - - } - } - else if (action == 0) // error - if (!ErrorRecovery()) - return false; - } - } - - private void Shift(int stateIndex) - { -#if TRACE_ACTIONS - Console.Error.Write("Shifting token {0}, ", TerminalToString(NextToken)); -#endif - FsaState = states[stateIndex]; - - valueStack.Push(scanner.yylval); - StateStack.Push(FsaState); - LocationStack.Push(scanner.yylloc); - - if (recovering) - { - if (NextToken != errorToken) - tokensSinceLastError++; - - if (tokensSinceLastError > 5) - recovering = false; - } - - if (NextToken != endOfFileToken) - NextToken = 0; - } - - private void Reduce(int ruleNumber) - { -#if TRACE_ACTIONS - DisplayRule(ruleNumber); -#endif - Rule rule = rules[ruleNumber]; - // - // Default actions for unit productions. - // - if (rule.RightHandSide.Length == 1) - { - CurrentSemanticValue = valueStack.TopElement(); // Default action: $$ = $1; - CurrentLocationSpan = LocationStack.TopElement(); // Default action "@$ = @1; - } - else - { - if (rule.RightHandSide.Length == 0) - { - // Create a new blank value. - // Explicit semantic action may mutate this value - CurrentSemanticValue = default(TValue); - // The location span for an empty production will start with the - // beginning of the next lexeme, and end with the finish of the - // previous lexeme. This gives the correct behaviour when this - // nonsense value is used in later Merge operations. - CurrentLocationSpan = (scanner.yylloc != null && LastSpan != null ? - scanner.yylloc.Merge(LastSpan) : - default(TSpan)); - } - else - { - // Default action: $$ = $1; - CurrentSemanticValue = valueStack.TopElement(); - // Default action "@$ = @1.Merge(@N)" for location info. - TSpan at1 = LocationStack[LocationStack.Depth - rule.RightHandSide.Length]; - TSpan atN = LocationStack[LocationStack.Depth - 1]; - CurrentLocationSpan = - ((at1 != null && atN != null) ? at1.Merge(atN) : default(TSpan)); - } - } - - DoAction(ruleNumber); - - for (int i = 0; i < rule.RightHandSide.Length; i++) - { - StateStack.Pop(); - valueStack.Pop(); - LocationStack.Pop(); - } - -#if TRACE_ACTIONS - DisplayStack(); -#endif - FsaState = StateStack.TopElement(); - - if (FsaState.Goto.ContainsKey(rule.LeftHandSide)) - FsaState = states[FsaState.Goto[rule.LeftHandSide]]; - - StateStack.Push(FsaState); - valueStack.Push(CurrentSemanticValue); - LocationStack.Push(CurrentLocationSpan); - } - - /// - /// Execute the selected action from array. - /// Must be overriden in derived classes. - /// - /// Index of the action to perform - protected abstract void DoAction(int actionNumber); - - private bool ErrorRecovery() - { - bool discard; - - if (!recovering) // if not recovering from previous error - ReportError(); - - if (!FindErrorRecoveryState()) - return false; - // - // The interim fix for the "looping in error recovery" - // artifact involved moving the setting of the recovering - // bool until after invalid tokens have been discarded. - // - ShiftErrorToken(); - discard = DiscardInvalidTokens(); - recovering = true; - tokensSinceLastError = 0; - return discard; - } - - private void ReportError1() - { - StringBuilder errorMsg = new StringBuilder(); - errorMsg.AppendFormat("Syntax error, unexpected {0}", TerminalToString(NextToken)); - - if (FsaState.ParserTable.Count < 7) - { - bool first = true; - foreach (int terminal in FsaState.ParserTable.Keys) - { - if (first) - errorMsg.Append(", expecting "); - else - errorMsg.Append(", or "); - - errorMsg.Append(TerminalToString(terminal)); - first = false; - } - } - scanner.yyerror(errorMsg.ToString()); - } - - private void ReportError() - { - object[] args = new object[FsaState.ParserTable.Keys.Count+1]; - args[0] = TerminalToString(NextToken); - int i=1; - foreach (int terminal in FsaState.ParserTable.Keys) - { - args[i] = TerminalToString(terminal); - i++; - } - scanner.yyerror("",args); - } - - private void ShiftErrorToken() - { - int old_next = NextToken; - NextToken = errorToken; - - Shift(FsaState.ParserTable[NextToken]); - -#if TRACE_ACTIONS - Console.Error.WriteLine("Entering state {0} ", FsaState.number); -#endif - NextToken = old_next; - } - - private bool FindErrorRecoveryState() - { - while (true) // pop states until one found that accepts error token - { - if (FsaState.ParserTable != null && - FsaState.ParserTable.ContainsKey(errorToken) && - FsaState.ParserTable[errorToken] > 0) // shift - return true; - -#if TRACE_ACTIONS - Console.Error.WriteLine("Error: popping state {0}", StateStack.Top().number); -#endif - StateStack.Pop(); - valueStack.Pop(); - LocationStack.Pop(); - -#if TRACE_ACTIONS - DisplayStack(); -#endif - if (StateStack.IsEmpty()) - { -#if TRACE_ACTIONS - Console.Error.Write("Aborting: didn't find a state that accepts error token"); -#endif - return false; - } - else - FsaState = StateStack.TopElement(); - } - } - - private bool DiscardInvalidTokens() - { - - int action = FsaState.defaultAction; - - if (FsaState.ParserTable != null) - { - // Discard tokens until find one that works ... - while (true) - { - if (NextToken == 0) - { -#if TRACE_ACTIONS - Console.Error.Write("Reading a token: "); -#endif - NextToken = scanner.yylex(); - } - -#if TRACE_ACTIONS - Console.Error.WriteLine("Next token is {0}", TerminalToString(NextToken)); -#endif - if (NextToken == endOfFileToken) - return false; - - if (FsaState.ParserTable.ContainsKey(NextToken)) - action = FsaState.ParserTable[NextToken]; - - if (action != 0) - return true; - else - { -#if TRACE_ACTIONS - Console.Error.WriteLine("Error: Discarding {0}", TerminalToString(NextToken)); -#endif - NextToken = 0; - } - } - } - else if (recovering && tokensSinceLastError == 0) - { - // - // Boolean recovering is not set until after the first - // error token has been shifted. Thus if we get back - // here with recovering set and no tokens read we are - // looping on the same error recovery action. This - // happens if current_state.ParserTable is null because - // the state has an LR(0) reduction, but not all - // lookahead tokens are valid. This only occurs for - // error productions that *end* on "error". - // - // This action discards tokens one at a time until - // the looping stops. Another attack would be to always - // use the LALR(1) table if a production ends on "error" - // -#if TRACE_ACTIONS - Console.Error.WriteLine("Error: panic discard of {0}", TerminalToString(NextToken)); -#endif - if (NextToken == endOfFileToken) - return false; - NextToken = 0; - return true; - } - else - return true; - - } - - /// - /// Traditional YACC method. Discards the next input token. - /// - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yyclearin")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yyclearin")] - // Reason for FxCop message suppression - - // This is a traditional name for YACC-like functionality - protected void yyclearin() { NextToken = 0; } - - /// - /// Tradional YACC method. Clear the "recovering" flag. - /// - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yyerrok")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yyerrok")] - // Reason for FxCop message suppression - - // This is a traditional name for YACC-like functionality - protected void yyerrok() - { - recovering = false; - } - - /// - /// OBSOLETE FOR VERSION 1.4.0 - /// Method used by derived types to insert new - /// state instances in the "states" array. - /// - /// index of the state - /// data for the state - protected void AddState(int stateNumber, State state) - { - states[stateNumber] = state; - state.number = stateNumber; - } - - private void DisplayStack() - { - Console.Error.Write("State now"); - for (int i = 0; i < StateStack.Depth; i++) - Console.Error.Write(" {0}", StateStack[i].number); - Console.Error.WriteLine(); - } - - private void DisplayRule(int ruleNumber) - { - Console.Error.Write("Reducing stack by rule {0}, ", ruleNumber); - DisplayProduction(rules[ruleNumber]); - } - - private void DisplayProduction(Rule rule) - { - if (rule.RightHandSide.Length == 0) - Console.Error.Write("/* empty */ "); - else - foreach (int symbol in rule.RightHandSide) - Console.Error.Write("{0} ", SymbolToString(symbol)); - - Console.Error.WriteLine("-> {0}", SymbolToString(rule.LeftHandSide)); - } - - /// - /// Abstract state class naming terminal symbols. - /// This is overridden by derived classes with the - /// name (or alias) to be used in error messages. - /// - /// The terminal ordinal - /// - protected abstract string TerminalToString(int terminal); - - private string SymbolToString(int symbol) - { - if (symbol < 0) - return nonTerminals[-symbol]; - else - return TerminalToString(symbol); - } - - /// - /// Return text representation of argument character - /// - /// The character to convert - /// String representation of the character - protected static string CharToString(char input) - { - switch (input) - { - case '\a': return @"'\a'"; - case '\b': return @"'\b'"; - case '\f': return @"'\f'"; - case '\n': return @"'\n'"; - case '\r': return @"'\r'"; - case '\t': return @"'\t'"; - case '\v': return @"'\v'"; - case '\0': return @"'\0'"; - default: return string.Format(CultureInfo.InvariantCulture, "'{0}'", input); - } - } - } - - /// - /// Classes implementing this interface must supply a - /// method that merges two location objects to return - /// a new object of the same type. - /// GPPG-generated parsers have the default location - /// action equivalent to "@$ = @1.Merge(@N);" where N - /// is the right-hand-side length of the production. - /// - /// The Location type -#if EXPORT_GPPG - public interface IMerge -#else - internal interface IMerge -#endif - { - /// - /// Interface method that creates a location object from - /// the current and last object. Typically used to create - /// a location object extending from the start of the @1 - /// object to the end of the @N object. - /// - /// The lexically last object to merge - /// The merged location object - TSpan Merge(TSpan last); - } - - /// - /// This is the default class that carries location - /// information from the scanner to the parser. - /// If you don't declare "%YYLTYPE Foo" the parser - /// will expect to deal with this type. - /// -#if EXPORT_GPPG - public class LexLocation : IMerge -#else - [SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses")] - internal class LexLocation : IMerge -#endif - { - private int startLine; // start line - private int startColumn; // start column - private int endLine; // end line - private int endColumn; // end column - - /// - /// The line at which the text span starts. - /// - public int StartLine { get { return startLine; } } - - /// - /// The column at which the text span starts. - /// - public int StartColumn { get { return startColumn; } } - - /// - /// The line on which the text span ends. - /// - public int EndLine { get { return endLine; } } - - /// - /// The column of the first character - /// beyond the end of the text span. - /// - public int EndColumn { get { return endColumn; } } - - /// - /// Default no-arg constructor. - /// - public LexLocation() - { } - - /// - /// Constructor for text-span with given start and end. - /// - /// start line - /// start column - /// end line - /// end column - public LexLocation(int sl, int sc, int el, int ec) - { startLine = sl; startColumn = sc; endLine = el; endColumn = ec; } - - /// - /// Create a text location which spans from the - /// start of "this" to the end of the argument "last" - /// - /// The last location in the result span - /// The merged span - public LexLocation Merge(LexLocation last) - { return new LexLocation(this.startLine, this.startColumn, last.endLine, last.endColumn); } - - public static implicit operator SourceContext(LexLocation loc) - { - return new SourceContext(loc.StartLine, loc.StartColumn + 1, loc.EndLine, loc.EndColumn); - } - - } - - /// - /// Abstract scanner class that GPPG expects its scanners to - /// extend. - /// - /// Semantic value type YYSTYPE - /// Source location type YYLTYPE -#if EXPORT_GPPG - public abstract class AbstractScanner -#else - internal abstract class AbstractScanner -#endif - where TSpan : IMerge - { - /// - /// Lexical value optionally set by the scanner. The value - /// is of the %YYSTYPE type declared in the parser spec. - /// - [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")] - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yylval")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yylval")] - // Reason for FxCop message suppression - - // This is a traditional name for YACC-like functionality - // A field must be declared for this value of parametric type, - // since it may be instantiated by a value struct. If it were - // implemented as a property, machine generated code in derived - // types would not be able to select on the returned value. - public TValue yylval; // Lexical value: set by scanner - - /// - /// Current scanner location property. The value is of the - /// type declared by %YYLTYPE in the parser specification. - /// - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yylloc")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yylloc")] - // Reason for FxCop message suppression - - // This is a traditional name for YACC-like functionality - public virtual TSpan yylloc - { - get { return default(TSpan); } // Empty implementation allowing - set { /* skip */ } // yylloc to be ignored entirely. - } - - /// - /// Main call point for LEX-like scanners. Returns an int - /// corresponding to the token recognized by the scanner. - /// - /// An int corresponding to the token - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yylex")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yylex")] - // Reason for FxCop message suppression - - // This is a traditional name for YACC-like functionality - public abstract int yylex(); - - /// - /// Traditional error reporting provided by LEX-like scanners - /// to their YACC-like clients. - /// - /// Message format string - /// Optional array of args - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yyerror")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yyerror")] - // Reason for FxCop message suppression - - // This is a traditional name for YACC-like functionality - public virtual void yyerror(string format, params object[] args) { } - } - - /// - /// Encapsulated state for the parser. - /// Opaque to users, visible to the tool-generated code. - /// -#if EXPORT_GPPG - public class State -#else - internal class State -#endif - { - internal int number; - internal Dictionary ParserTable; // Terminal -> ParseAction - internal Dictionary Goto; // NonTerminal -> State; - internal int defaultAction; // = 0; // ParseAction - - /// - /// State transition data for this state. Pairs of elements of the - /// goto array associate symbol ordinals with next state indices. - /// The actions array is passed to another constructor. - /// - /// The action list - /// Next state data - public State(int[] actions, int[] goToList) - : this(actions) - { - Goto = new Dictionary(); - for (int i = 0; i < goToList.Length; i += 2) - Goto.Add(goToList[i], goToList[i + 1]); - } - - /// - /// Action data for this state. Pairs of elements of the - /// action array associate action ordinals with each of - /// those symbols that have actions in the current state. - /// - /// The action array - public State(int[] actions) - { - ParserTable = new Dictionary(); - for (int i = 0; i < actions.Length; i += 2) - ParserTable.Add(actions[i], actions[i + 1]); - } - - /// - /// Set the default action for this state. - /// - /// Ordinal of the default action - public State(int defaultAction) - { - this.defaultAction = defaultAction; - } - - /// - /// Set the default action and the state transition table. - /// - /// The default action - /// Transitions from this state - public State(int defaultAction, int[] goToList) - : this(defaultAction) - { - Goto = new Dictionary(); - for (int i = 0; i < goToList.Length; i += 2) - Goto.Add(goToList[i], goToList[i + 1]); - } - } - - /// - /// Rule representation at runtime. - /// -#if EXPORT_GPPG - public class Rule -#else - internal class Rule -#endif - { - internal int LeftHandSide; // symbol - internal int[] RightHandSide; // symbols - - /// - /// Rule constructor. This holds the ordinal of - /// the left hand side symbol, and the list of - /// right hand side symbols, in lexical order. - /// - /// The LHS non-terminal - /// The RHS symbols, in lexical order - public Rule(int left, int[] right) - { - this.LeftHandSide = left; - this.RightHandSide = right; - } - } - - /// - /// Stack utility for the shift-reduce parser. - /// GPPG parsers have three instances: - /// (1) The parser state stack, T = QUT.Gppg.State, - /// (2) The semantic value stack, T = TValue, - /// (3) The location stack, T = TSpan. - /// - /// -#if EXPORT_GPPG - public class PushdownPrefixState -#else - internal class PushdownPrefixState -#endif - { - // Note that we cannot use the BCL Stack class - // here as derived types need to index into stacks. - // - private T[] array = new T[8]; - private int tos = 0; - - /// - /// Indexer for values of the stack below the top. - /// - /// index of the element, starting from the bottom - /// the selected element - public T this[int index] { get { return array[index]; } } - - /// - /// The current depth of the stack. - /// - public int Depth { get { return tos; } } - - internal void Push(T value) - { - if (tos >= array.Length) - { - T[] newarray = new T[array.Length * 2]; - System.Array.Copy(array, newarray, tos); - array = newarray; - } - array[tos++] = value; - } - - internal T Pop() - { - T rslt = array[--tos]; - array[tos] = default(T); - return rslt; - } - - internal T TopElement() { return array[tos - 1]; } - - internal bool IsEmpty() { return tos == 0; } - } -} \ No newline at end of file diff --git a/Grammars/Oberon10Independent (by Juliet)/generateParserScanner.bat b/Grammars/Oberon10Independent (by Juliet)/generateParserScanner.bat deleted file mode 100644 index 2f9f25c2c..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/generateParserScanner.bat +++ /dev/null @@ -1,3 +0,0 @@ -cls -GPLex_GPPG\gplex.exe /unicode oberon00.lex -GPLex_GPPG\gppg.exe /no-lines /gplex oberon00.y diff --git a/Grammars/Oberon10Independent (by Juliet)/generate_all.bat b/Grammars/Oberon10Independent (by Juliet)/generate_all.bat deleted file mode 100644 index 602cf5ca0..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/generate_all.bat +++ /dev/null @@ -1,9 +0,0 @@ -cls -GPLex_GPPG\gplex.exe /unicode oberon00.lex -GPLex_GPPG\gppg.exe /no-lines /gplex oberon00.y - -copy ..\..\bin\SyntaxTree.dll DLL\SyntaxTree.dll -%windir%\microsoft.net\framework\v3.5\msbuild /t:rebuild /property:Configuration=Release ObrProba.sln - -copy bin\Release\Oberon00Parser.dll Install\PascalABC.NET\Oberon00Parser.dll -copy bin\Release\Oberon00Parser.dll ..\..\bin\Oberon00Parser.dll diff --git a/Grammars/Oberon10Independent (by Juliet)/oberon00.cs b/Grammars/Oberon10Independent (by Juliet)/oberon00.cs deleted file mode 100644 index 8fd285398..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/oberon00.cs +++ /dev/null @@ -1,1702 +0,0 @@ -// -// This CSharp output file generated by Gardens Point LEX -// Version: 1.1.3.301 -// Machine: SSM -// DateTime: 13.03.2013 16:51:38 -// UserName: ????????? -// GPLEX input file -// GPLEX frame file -// -// Option settings: unicode, parser, minimize -// Option settings: classes, compressMap, compressNext, persistBuffer, embedbuffers -// Fallback code page: Target machine default -// - -// -// Experimental embedded frame -// Version 1.1.3 of 18-April-2010 -// -// -#define BACKUP -#define PERSIST - -using System; -using System.IO; -using System.Text; -using System.Globalization; -using System.Collections.Generic; -using System.Runtime.Serialization; -using System.Diagnostics.CodeAnalysis; - -using PascalABCCompiler.Oberon00Parser; - -namespace GPPGParserScanner -{ - /// - /// Summary Canonical example of GPLEX automaton - /// - -#if STANDALONE - // - // These are the dummy declarations for stand-alone GPLEX applications - // normally these declarations would come from the parser. - // If you declare /noparser, or %option noparser then you get this. - // - - public enum Tokens - { - EOF = 0, maxParseToken = int.MaxValue - // must have at least these two, values are almost arbitrary - } - - public abstract class ScanBase - { - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yylex")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yylex")] - public abstract int yylex(); - - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yywrap")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yywrap")] - protected virtual bool yywrap() { return true; } - -#if BABEL - protected abstract int CurrentSc { get; set; } - // EolState is the 32-bit of state data persisted at - // the end of each line for Visual Studio colorization. - // The default is to return CurrentSc. You must override - // this if you want more complicated behavior. - public virtual int EolState { - get { return CurrentSc; } - set { CurrentSc = value; } - } - } - - public interface IColorScan - { - void SetSource(string source, int offset); - int GetNext(ref int state, out int start, out int end); -#endif // BABEL - } - -#endif // STANDALONE - - // If the compiler can't find the scanner base class maybe you - // need to run GPPG with the /gplex option, or GPLEX with /noparser -#if BABEL - public sealed partial class Scanner : ScanBase, IColorScan - { - private ScanBuff buffer; - int currentScOrd; // start condition ordinal - - protected override int CurrentSc - { - // The current start state is a property - // to try to avoid the user error of setting - // scState but forgetting to update the FSA - // start state "currentStart" - // - get { return currentScOrd; } // i.e. return YY_START; - set { currentScOrd = value; // i.e. BEGIN(value); - currentStart = startState[value]; } - } -#else // BABEL - public sealed partial class Scanner : ScanBase - { - private ScanBuff buffer; - int currentScOrd; // start condition ordinal -#endif // BABEL - - /// - /// The input buffer for this scanner. - /// - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public ScanBuff Buffer { get { return buffer; } } - - private static int GetMaxParseToken() { - System.Reflection.FieldInfo f = typeof(Tokens).GetField("maxParseToken"); - return (f == null ? int.MaxValue : (int)f.GetValue(null)); - } - - static int parserMax = GetMaxParseToken(); - - enum Result {accept, noMatch, contextFound}; - - const int maxAccept = 39; - const int initial = 40; - const int eofNum = 0; - const int goStart = -1; - const int INITIAL = 0; - const int COMMENT = 1; - const int COMMENT_S = 2; - -#region user code -#endregion user code - - int state; - int currentStart = startState[0]; - int code; // last code read - int cCol; // column number of code - int lNum; // current line number - // - // The following instance variables are used, among other - // things, for constructing the yylloc location objects. - // - int tokPos; // buffer position at start of token - int tokCol; // zero-based column number at start of token - int tokLin; // line number at start of token - int tokEPos; // buffer position at end of token - int tokECol; // column number at end of token - int tokELin; // line number at end of token - string tokTxt; // lazily constructed text of token -#if STACK - private Stack scStack = new Stack(); -#endif // STACK - -#region ScannerTables - struct Table { - public int min; public int rng; public int dflt; - public sbyte[] nxt; - public Table(int m, int x, int d, sbyte[] n) { - min = m; rng = x; dflt = d; nxt = n; - } - }; - - static int[] startState = new int[] {40, 50, 53, 0}; - -#region CompressedCharacterMap - // - // There are 33 equivalence classes - // There are 2 character sequence regions - // There are 1 tables, 127 entries - // There are 1 runs, 0 singletons - // Decision tree depth is 1 - // - static sbyte[] mapC0 = new sbyte[127] { -/* '\0' */ 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, -/* '\x10' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* '\x20' */ 0, 17, 31, 10, 0, 0, 15, 30, 11, 12, 6, 5, 13, 4, 16, 7, -/* '0' */ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 1, 3, 8, 2, 9, 0, -/* '@' */ 0, 27, 27, 27, 29, 29, 27, 25, 28, 25, 25, 25, 25, 25, 25, 25, -/* 'P' */ 25, 25, 25, 25, 25, 25, 25, 25, 32, 25, 25, 20, 0, 21, 0, 25, -/* '`' */ 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, -/* 'p' */ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 18, 22, 19, 14 }; - - static sbyte MapC(int code) - { // '\0' <= code <= '\U0010FFFF' - if (code < 127) // '\0' <= code <= '~' - return mapC0[code - 0]; - else // '\x7F' <= code <= '\U0010FFFF' - return (sbyte)0; - } -#endregion - - static Table[] NxS = new Table[54] { -/* NxS[ 0] */ new Table(0, 0, 0, null), -/* NxS[ 1] */ new Table(2, 1, -1, new sbyte[] {36}), -/* NxS[ 2] */ new Table(0, 0, -1, null), -/* NxS[ 3] */ new Table(0, 0, -1, null), -/* NxS[ 4] */ new Table(0, 0, -1, null), -/* NxS[ 5] */ new Table(0, 0, -1, null), -/* NxS[ 6] */ new Table(0, 0, -1, null), -/* NxS[ 7] */ new Table(7, 1, -1, new sbyte[] {35}), -/* NxS[ 8] */ new Table(2, 1, -1, new sbyte[] {34}), -/* NxS[ 9] */ new Table(2, 1, -1, new sbyte[] {33}), -/* NxS[ 10] */ new Table(0, 0, -1, null), -/* NxS[ 11] */ new Table(6, 1, -1, new sbyte[] {32}), -/* NxS[ 12] */ new Table(0, 0, -1, null), -/* NxS[ 13] */ new Table(0, 0, -1, null), -/* NxS[ 14] */ new Table(0, 0, -1, null), -/* NxS[ 15] */ new Table(0, 0, -1, null), -/* NxS[ 16] */ new Table(16, 1, -1, new sbyte[] {31}), -/* NxS[ 17] */ new Table(0, 0, -1, null), -/* NxS[ 18] */ new Table(0, 0, -1, null), -/* NxS[ 19] */ new Table(0, 0, -1, null), -/* NxS[ 20] */ new Table(0, 0, -1, null), -/* NxS[ 21] */ new Table(0, 0, -1, null), -/* NxS[ 22] */ new Table(0, 0, -1, null), -/* NxS[ 23] */ new Table(0, 0, -1, null), -/* NxS[ 24] */ new Table(25, 8, -1, new sbyte[] {24, 24, 24, 24, 24, -1, - -1, 24}), -/* NxS[ 25] */ new Table(16, 17, -1, new sbyte[] {28, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 25, 47, 29, 47, -1, -1, 27}), -/* NxS[ 26] */ new Table(0, 0, -1, null), -/* NxS[ 27] */ new Table(0, 0, -1, null), -/* NxS[ 28] */ new Table(26, 4, -1, new sbyte[] {28, -1, -1, 48}), -/* NxS[ 29] */ new Table(0, 0, -1, null), -/* NxS[ 30] */ new Table(26, 1, -1, new sbyte[] {30}), -/* NxS[ 31] */ new Table(0, 0, -1, null), -/* NxS[ 32] */ new Table(0, 0, -1, null), -/* NxS[ 33] */ new Table(0, 0, -1, null), -/* NxS[ 34] */ new Table(0, 0, -1, null), -/* NxS[ 35] */ new Table(0, 0, -1, null), -/* NxS[ 36] */ new Table(0, 0, -1, null), -/* NxS[ 37] */ new Table(0, 0, -1, null), -/* NxS[ 38] */ new Table(0, 0, -1, null), -/* NxS[ 39] */ new Table(0, 0, -1, null), -/* NxS[ 40] */ new Table(30, 30, 24, new sbyte[] {41, 42, 24, -1, 1, 2, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, -1, 24, 25}), -/* NxS[ 41] */ new Table(24, 7, 45, new sbyte[] {-1, 45, 45, 45, 45, 45, - 26}), -/* NxS[ 42] */ new Table(24, 8, 43, new sbyte[] {-1, 43, 43, 43, 43, 43, - 43, 26}), -/* NxS[ 43] */ new Table(24, 8, 44, new sbyte[] {-1, 44, 44, 44, 44, 44, - 44, 27}), -/* NxS[ 44] */ new Table(24, 8, 44, new sbyte[] {-1, 44, 44, 44, 44, 44, - 44, 26}), -/* NxS[ 45] */ new Table(24, 7, 46, new sbyte[] {-1, 46, 46, 46, 46, 46, - 27}), -/* NxS[ 46] */ new Table(24, 7, 46, new sbyte[] {-1, 46, 46, 46, 46, 46, - 26}), -/* NxS[ 47] */ new Table(26, 7, -1, new sbyte[] {47, 47, 29, 47, -1, -1, - 27}), -/* NxS[ 48] */ new Table(26, 13, -1, new sbyte[] {30, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 49, 49}), -/* NxS[ 49] */ new Table(26, 1, -1, new sbyte[] {30}), -/* NxS[ 50] */ new Table(6, 6, -1, new sbyte[] {51, -1, -1, -1, -1, 52}), -/* NxS[ 51] */ new Table(12, 1, -1, new sbyte[] {38}), -/* NxS[ 52] */ new Table(6, 1, -1, new sbyte[] {37}), -/* NxS[ 53] */ new Table(24, 1, -1, new sbyte[] {39}), - }; - -int NextState() { - if (code == ScanBuff.EndOfFile) - return eofNum; - else - unchecked { - int rslt; - int idx = MapC(code) - NxS[state].min; - if (idx < 0) idx += 33; - if ((uint)idx >= (uint)NxS[state].rng) rslt = NxS[state].dflt; - else rslt = NxS[state].nxt[idx]; - return rslt; - } -} - -#endregion - - -#if BACKUP - // ============================================================== - // == Nested struct used for backup in automata that do backup == - // ============================================================== - - struct Context // class used for automaton backup. - { - public int bPos; - public int rPos; // scanner.readPos saved value - public int cCol; - public int lNum; // Need this in case of backup over EOL. - public int state; - public int cChr; - } - - private Context ctx = new Context(); -#endif // BACKUP - - // ============================================================== - // ==== Nested struct to support input switching in scanners ==== - // ============================================================== - - struct BufferContext { - internal ScanBuff buffSv; - internal int chrSv; - internal int cColSv; - internal int lNumSv; - } - - // ============================================================== - // ===== Private methods to save and restore buffer contexts ==== - // ============================================================== - - /// - /// This method creates a buffer context record from - /// the current buffer object, together with some - /// scanner state values. - /// - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - BufferContext MkBuffCtx() - { - BufferContext rslt; - rslt.buffSv = this.buffer; - rslt.chrSv = this.code; - rslt.cColSv = this.cCol; - rslt.lNumSv = this.lNum; - return rslt; - } - - /// - /// This method restores the buffer value and allied - /// scanner state from the given context record value. - /// - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - void RestoreBuffCtx(BufferContext value) - { - this.buffer = value.buffSv; - this.code = value.chrSv; - this.cCol = value.cColSv; - this.lNum = value.lNumSv; - } - // =================== End Nested classes ======================= - -#if !NOFILES - public Scanner(Stream file) { - SetSource(file, 0); // unicode option - } - - public Scanner(Stream file, string codepage) { - SetSource(file, CodePageHandling.GetCodePage(codepage)); - } - -#endif // !NOFILES - - public Scanner() { } - - private int readPos; - - void GetCode() - { - if (code == '\n') // This needs to be fixed for other conventions - // i.e. [\r\n\205\u2028\u2029] - { - cCol = -1; - lNum++; - } - readPos = buffer.Pos; - - // Now read new codepoint. - code = buffer.Read(); - if (code > ScanBuff.EndOfFile) - { -#if (!BYTEMODE) - if (code >= 0xD800 && code <= 0xDBFF) - { - int next = buffer.Read(); - if (next < 0xDC00 || next > 0xDFFF) - code = ScanBuff.UnicodeReplacementChar; - else - code = (0x10000 + (code & 0x3FF << 10) + (next & 0x3FF)); - } -#endif - cCol++; - } - } - - void MarkToken() - { -#if (!PERSIST) - buffer.Mark(); -#endif - tokPos = readPos; - tokLin = lNum; - tokCol = cCol; - } - - void MarkEnd() - { - tokTxt = null; - tokEPos = readPos; - tokELin = lNum; - tokECol = cCol; - } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - int Peek() - { - int rslt, codeSv = code, cColSv = cCol, lNumSv = lNum, bPosSv = buffer.Pos; - GetCode(); rslt = code; - lNum = lNumSv; cCol = cColSv; code = codeSv; buffer.Pos = bPosSv; - return rslt; - } - - // ============================================================== - // ===== Initialization of string-based input buffers ==== - // ============================================================== - - /// - /// Create and initialize a StringBuff buffer object for this scanner - /// - /// the input string - /// starting offset in the string - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public void SetSource(string source, int offset) - { - this.buffer = ScanBuff.GetBuffer(source); - this.buffer.Pos = offset; - this.lNum = 0; - this.code = '\n'; // to initialize yyline, yycol and lineStart - GetCode(); - } - -#if !NOFILES - // ================ LineBuffer Initialization =================== - - /// - /// Create and initialize a LineBuff buffer object for this scanner - /// - /// the list of input strings - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public void SetSource(IList source) - { - this.buffer = ScanBuff.GetBuffer(source); - this.code = '\n'; // to initialize yyline, yycol and lineStart - this.lNum = 0; - GetCode(); - } - - // =============== StreamBuffer Initialization ================== - - /// - /// Create and initialize a StreamBuff buffer object for this scanner. - /// StreamBuff is buffer for 8-bit byte files. - /// - /// the input byte stream - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public void SetSource(Stream source) - { - this.buffer = ScanBuff.GetBuffer(source); - this.lNum = 0; - this.code = '\n'; // to initialize yyline, yycol and lineStart - GetCode(); - } - -#if !BYTEMODE - // ================ TextBuffer Initialization =================== - - /// - /// Create and initialize a TextBuff buffer object for this scanner. - /// TextBuff is a buffer for encoded unicode files. - /// - /// the input text file - /// Code page to use if file has - /// no BOM. For 0, use machine default; for -1, 8-bit binary - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public void SetSource(Stream source, int fallbackCodePage) - { - this.buffer = ScanBuff.GetBuffer(source, fallbackCodePage); - this.lNum = 0; - this.code = '\n'; // to initialize yyline, yycol and lineStart - GetCode(); - } -#endif // !BYTEMODE -#endif // !NOFILES - - // ============================================================== - -#if BABEL - // - // Get the next token for Visual Studio - // - // "state" is the inout mode variable that maintains scanner - // state between calls, using the EolState property. In principle, - // if the calls of EolState are costly set could be called once - // only per line, at the start; and get called only at the end - // of the line. This needs more infrastructure ... - // - public int GetNext(ref int state, out int start, out int end) - { - Tokens next; - int s, e; - s = state; // state at start - EolState = state; - next = (Tokens)Scan(); - state = EolState; - e = state; // state at end; - start = tokPos; - end = tokEPos - 1; // end is the index of last char. - return (int)next; - } -#endif // BABEL - - // ======== AbstractScanner<> Implementation ========= - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yylex")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yylex")] - public override int yylex() - { - // parserMax is set by reflecting on the Tokens - // enumeration. If maxParseToken is defined - // that is used, otherwise int.MaxValue is used. - int next; - do { next = Scan(); } while (next >= parserMax); - return next; - } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - int yypos { get { return tokPos; } } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - int yyline { get { return tokLin; } } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - int yycol { get { return tokCol; } } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yytext")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yytext")] - public string yytext - { - get - { - if (tokTxt == null) - tokTxt = buffer.GetString(tokPos, tokEPos); - return tokTxt; - } - } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - void yyless(int n) - { - buffer.Pos = tokPos; - // Must read at least one char, so set before start. - cCol = tokCol - 1; - GetCode(); - // Now ensure that line counting is correct. - lNum = tokLin; - // And count the rest of the text. - for (int i = 0; i < n; i++) GetCode(); - MarkEnd(); - } - - // - // It would be nice to count backward in the text - // but it does not seem possible to re-establish - // the correct column counts except by going forward. - // - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - void _yytrunc(int n) { yyless(yyleng - n); } - - // - // This is painful, but we no longer count - // codepoints. For the overwhelming majority - // of cases the single line code is fast, for - // the others, well, at least it is all in the - // buffer so no files are touched. Note that we - // can't use (tokEPos - tokPos) because of the - // possibility of surrogate pairs in the token. - // - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yyleng")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yyleng")] - public int yyleng - { - get { -#if BYTEMODE - return tokEPos - tokPos; -#else - if (tokELin == tokLin) - return tokECol - tokCol; - else { - int ch; - int count = 0; - int save = buffer.Pos; - buffer.Pos = tokPos; - do { - ch = buffer.Read(); - if (!char.IsHighSurrogate((char)ch)) count++; - } while (buffer.Pos < tokEPos && ch != ScanBuff.EndOfFile); - buffer.Pos = save; - return count; - } -#endif // BYTEMODE - } - } - - // ============ methods available in actions ============== - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal int YY_START { - get { return currentScOrd; } - set { currentScOrd = value; - currentStart = startState[value]; - } - } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal void BEGIN(int next) { - currentScOrd = next; - currentStart = startState[next]; - } - - // ============== The main tokenizer code ================= - - int Scan() - { - try { - for (; ; ) - { - int next; // next state to enter -#if BACKUP - Result rslt = Result.noMatch; -#endif // BACKUP -#if LEFTANCHORS - for (;;) - { - // Discard characters that do not start any pattern. - // Must check the left anchor condition after *every* GetCode! - state = ((cCol == 0) ? anchorState[currentScOrd] : currentStart); - if ((next = NextState()) != goStart) - break; // LOOP EXIT HERE... - GetCode(); - } - -#else // !LEFTANCHORS - state = currentStart; - while ((next = NextState()) == goStart) - // At this point, the current character has no - // transition from the current state. We discard - // the "no-match" char. In traditional LEX such - // characters are echoed to the console. - GetCode(); -#endif // LEFTANCHORS - // At last, a valid transition ... - MarkToken(); - state = next; - GetCode(); - - while ((next = NextState()) > eofNum) // Exit for goStart AND for eofNum -#if BACKUP - if (state <= maxAccept && next > maxAccept) // need to prepare backup data - { - // ctx is an object. The fields may be - // mutated by the call to Recurse2. - // On return the data in ctx is the - // *latest* accept state that was found. - - rslt = Recurse2(ref ctx, next); - if (rslt == Result.noMatch) - RestoreStateAndPos(ref ctx); - break; - } - else -#endif // BACKUP - { - state = next; - GetCode(); - } - if (state <= maxAccept) - { - MarkEnd(); -#region ActionSwitch -#pragma warning disable 162 - switch (state) - { - case eofNum: - switch (currentStart) { - case 50: -PT.AddError("Комментарий не закрыт", yylloc); - break; - } - if (yywrap()) - return (int)Tokens.EOF; - break; - case 1: -return (int)Tokens.COLON; - break; - case 2: -return (int)Tokens.EQ; - break; - case 3: -return (int)Tokens.SEMICOLUMN; - break; - case 4: -return (int)Tokens.MINUS; - break; - case 5: -return (int)Tokens.PLUS; - break; - case 6: -return (int)Tokens.MULT; - break; - case 7: -return (int)Tokens.DIVIDE; - break; - case 8: -return (int)Tokens.LT; - break; - case 9: -return (int)Tokens.GT; - break; - case 10: -return (int)Tokens.NE; - break; - case 11: -return (int)Tokens.LPAREN; - break; - case 12: -return (int)Tokens.RPAREN; - break; - case 13: -return (int)Tokens.COLUMN; - break; - case 14: -return (int)Tokens.NOT; - break; - case 15: -return (int)Tokens.AND; - break; - case 16: -return (int)Tokens.COMMA; - break; - case 17: -return (int)Tokens.EXCLAMATION; - break; - case 18: -return (int)Tokens.LBRACE; - break; - case 19: -return (int)Tokens.RBRACE; - break; - case 20: -return (int)Tokens.LBRACKET; - break; - case 21: -return (int)Tokens.RBRACKET; - break; - case 22: -return (int)Tokens.PIPE; - break; - case 23: -return (int)Tokens.INVISIBLE; - break; - case 24: -int res = Keywords.KeywordOrIDToken(yytext); - if (res == (int)Tokens.ID){ - yylval.sVal = yytext; - PT.LastIdentificator = yytext; - } - return res; - break; - case 25: -int tryParseInt; - if (int.TryParse(yytext, out tryParseInt)){ - yylval.iVal = tryParseInt; - return (int)Tokens.INTNUM; - } - System.Int64 tryParseLong; - if (System.Int64.TryParse(yytext, out tryParseLong)){ - yylval.lVal = tryParseLong; - return (int)Tokens.LONGINTNUM; - } - PT.AddError("Слишком длинное целое", yylloc); - break; - case 26: -yylval.sVal = PT.GetStringContent(yytext); - return (int)Tokens.STRING_CONST; - break; - case 27: -try{ - yylval.cVal = PT.GetStringContent(yytext)[0]; - return (int)Tokens.CHAR_CONST; - } - catch (System.ArgumentException){ - PT.AddError("Некорректный код символа", yylloc); - } - break; - case 28: - case 30: -double tryParseDouble; - var correctDouble = PT.GetCorrectDoubleStr(yytext); - if (double.TryParse(correctDouble, out tryParseDouble)){ - yylval.rVal = tryParseDouble; - return (int)Tokens.REALNUM; - } - PT.AddError("Слишком длинное вещественное", yylloc); - break; - case 29: -var _yytext = yytext.Substring(0, yytext.Length - 1); - int tryParseHexInt; - if (int.TryParse(_yytext, System.Globalization.NumberStyles.AllowHexSpecifier, null, out tryParseHexInt)){ - yylval.iVal = tryParseHexInt; - return (int)Tokens.INTNUM; - } - System.Int64 tryParseHexLong; - if (System.Int64.TryParse(_yytext, System.Globalization.NumberStyles.AllowHexSpecifier, null, out tryParseHexLong)){ - yylval.lVal = tryParseHexLong; - return (int)Tokens.LONGINTNUM; - } - PT.AddError("Слишком длинное шестнадцатеричное целое", yylloc); - break; - case 31: -return (int)Tokens.DOUBLEPOINT; - break; - case 32: -BEGIN(COMMENT); - mlCommentCnt = 1; - break; - case 33: -return (int)Tokens.GE; - break; - case 34: -return (int)Tokens.LE; - break; - case 35: -BEGIN(COMMENT_S); - break; - case 36: -return (int)Tokens.ASSIGN; - break; - case 37: -++mlCommentCnt; - break; - case 38: ---mlCommentCnt; - if (mlCommentCnt == 0) - BEGIN(INITIAL); - break; - case 39: -BEGIN(INITIAL); - break; - default: - break; - } -#pragma warning restore 162 -#endregion - } - } - } // end try - finally { -// User-specified epilog to scan() -yylloc = new QUT.Gppg.LexLocation(tokLin, tokCol, tokELin, tokECol); -// End, user-specified epilog - } // end finally - } - -#if BACKUP - Result Recurse2(ref Context ctx, int next) - { - // Assert: at entry "state" is an accept state AND - // NextState(state, code) != goStart AND - // NextState(state, code) is not an accept state. - // - SaveStateAndPos(ref ctx); - state = next; - GetCode(); - - while ((next = NextState()) > eofNum) - { - if (state <= maxAccept && next > maxAccept) // need to update backup data - SaveStateAndPos(ref ctx); - state = next; - if (state == eofNum) return Result.accept; - GetCode(); - } - return (state <= maxAccept ? Result.accept : Result.noMatch); - } - - void SaveStateAndPos(ref Context ctx) - { - ctx.bPos = buffer.Pos; - ctx.rPos = readPos; - ctx.cCol = cCol; - ctx.lNum = lNum; - ctx.state = state; - ctx.cChr = code; - } - - void RestoreStateAndPos(ref Context ctx) - { - buffer.Pos = ctx.bPos; - readPos = ctx.rPos; - cCol = ctx.cCol; - lNum = ctx.lNum; - state = ctx.state; - code = ctx.cChr; - } - -#endif // BACKUP - - // ============= End of the tokenizer code ================ - -#if STACK - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal void yy_clear_stack() { scStack.Clear(); } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal int yy_top_state() { return scStack.Peek(); } - - internal void yy_push_state(int state) - { - scStack.Push(currentScOrd); - BEGIN(state); - } - - internal void yy_pop_state() - { - // Protect against input errors that pop too far ... - if (scStack.Count > 0) { - int newSc = scStack.Pop(); - BEGIN(newSc); - } // Otherwise leave stack unchanged. - } - #endif // STACK - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal void ECHO() { Console.Out.Write(yytext); } - -#region UserCodeSection - -static int mlCommentCnt = 0; - - public override void yyerror(string format, params object[] args) - { - string errorMsg = PT.CreateErrorString(args); - PT.AddError(errorMsg,yylloc); - } - -// Статический класс, определяющий ключевые слова языка -public static class Keywords -{ - private static Dictionary keywords = new Dictionary(); - - static Keywords() - { - keywords.Add("TRUE", (int)Tokens.TRUE); - keywords.Add("FALSE", (int)Tokens.FALSE); - keywords.Add("ODD", (int)Tokens.ODD); - keywords.Add("OR", (int)Tokens.OR); - keywords.Add("DIV", (int)Tokens.DIV); - keywords.Add("MOD", (int)Tokens.MOD); - keywords.Add("BEGIN", (int)Tokens.BEGIN); - keywords.Add("END", (int)Tokens.END); - keywords.Add("MODULE", (int)Tokens.MODULE); - keywords.Add("CONST", (int)Tokens.CONST); - keywords.Add("VAR", (int)Tokens.VAR); - keywords.Add("TYPE", (int)Tokens.TYPE); - keywords.Add("ARRAY", (int)Tokens.ARRAY); - keywords.Add("OF", (int)Tokens.OF); - keywords.Add("RECORD", (int)Tokens.RECORD); - keywords.Add("POINTER", (int)Tokens.POINTER); - keywords.Add("IF", (int)Tokens.IF); - keywords.Add("THEN", (int)Tokens.THEN); - keywords.Add("ELSE", (int)Tokens.ELSE); - keywords.Add("ELSEIF", (int)Tokens.ELSEIF); - keywords.Add("WHILE", (int)Tokens.WHILE); - keywords.Add("DO", (int)Tokens.DO); - keywords.Add("REPEAT", (int)Tokens.REPEAT); - keywords.Add("UNTIL", (int)Tokens.UNTIL); - keywords.Add("FOR", (int)Tokens.FOR); - keywords.Add("TO", (int)Tokens.TO); - keywords.Add("BY", (int)Tokens.BY); - keywords.Add("CASE", (int)Tokens.CASE); - keywords.Add("PROCEDURE", (int)Tokens.PROCEDURE); - } - public static int KeywordOrIDToken(string s) - { - if (keywords.ContainsKey(s)) - return keywords[s]; - else - return (int)Tokens.ID; - } -} - -#endregion - } // end class $Scanner - -// ============================================================== -// -// This code automatically produced from an embedded resource. -// Do not edit this file, or it will become incompatible with -// the specification from which it was generated. -// -// ============================================================== - -// Code copied from GPLEX embedded resource - [Serializable] - public class BufferException : Exception - { - public BufferException() { } - public BufferException(string message) : base(message) { } - public BufferException(string message, Exception innerException) - : base(message, innerException) { } - protected BufferException(SerializationInfo info, StreamingContext context) - : base(info, context) { } - } - - public abstract class ScanBuff - { - private string fileNm; - - public const int EndOfFile = -1; - public const int UnicodeReplacementChar = 0xFFFD; - - public bool IsFile { get { return (fileNm != null); } } - public string FileName { get { return fileNm; } set { fileNm = value; } } - - public abstract int Pos { get; set; } - public abstract int Read(); - public virtual void Mark() { } - - public abstract string GetString(int begin, int limit); - - public static ScanBuff GetBuffer(string source) - { - return new StringBuffer(source); - } - - public static ScanBuff GetBuffer(IList source) - { - return new LineBuffer(source); - } - - public static ScanBuff GetBuffer(Stream source) - { - return new BuildBuffer(source); - } - -#if (!BYTEMODE) - public static ScanBuff GetBuffer(Stream source, int fallbackCodePage) - { - return new BuildBuffer(source, fallbackCodePage); - } -#endif - } - - #region Buffer classes - - // ============================================================== - // ===== Definitions for various ScanBuff derived classes ==== - // ============================================================== - // =============== String input ================ - // ============================================================== - - /// - /// This class reads characters from a single string as - /// required, for example, by Visual Studio language services - /// - sealed class StringBuffer : ScanBuff - { - string str; // input buffer - int bPos; // current position in buffer - int sLen; - - public StringBuffer(string source) - { - this.str = source; - this.sLen = source.Length; - this.FileName = null; - } - - public override int Read() - { - if (bPos < sLen) return str[bPos++]; - else if (bPos == sLen) { bPos++; return '\n'; } // one strike, see new line - else { bPos++; return EndOfFile; } // two strikes and you're out! - } - - public override string GetString(int begin, int limit) - { - // "limit" can be greater than sLen with the BABEL - // option set. Read returns a "virtual" EOL if - // an attempt is made to read past the end of the - // string buffer. Without the guard any attempt - // to fetch yytext for a token that includes the - // EOL will throw an index exception. - if (limit > sLen) limit = sLen; - if (limit <= begin) return ""; - else return str.Substring(begin, limit - begin); - } - - public override int Pos - { - get { return bPos; } - set { bPos = value; } - } - - public override string ToString() { return "StringBuffer"; } - } - - // ============================================================== - // The LineBuff class contributed by Nigel Horspool, - // nigelh@cs.uvic.cs - // ============================================================== - - sealed class LineBuffer : ScanBuff - { - IList line; // list of source lines from a file - int numLines; // number of strings in line list - string curLine; // current line in that list - int cLine; // index of current line in the list - int curLen; // length of current line - int curLineStart; // position of line start in whole file - int curLineEnd; // position of line end in whole file - int maxPos; // max position ever visited in whole file - int cPos; // ordinal number of code in source - - // Constructed from a list of strings, one per source line. - // The lines have had trailing '\n' characters removed. - public LineBuffer(IList lineList) - { - line = lineList; - numLines = line.Count; - cPos = curLineStart = 0; - curLine = (numLines > 0 ? line[0] : ""); - maxPos = curLineEnd = curLen = curLine.Length; - cLine = 1; - FileName = null; - } - - public override int Read() - { - if (cPos < curLineEnd) - return curLine[cPos++ - curLineStart]; - if (cPos++ == curLineEnd) - return '\n'; - if (cLine >= numLines) - return EndOfFile; - curLine = line[cLine]; - curLen = curLine.Length; - curLineStart = curLineEnd + 1; - curLineEnd = curLineStart + curLen; - if (curLineEnd > maxPos) - maxPos = curLineEnd; - cLine++; - return curLen > 0 ? curLine[0] : '\n'; - } - - // To speed up searches for the line containing a position - private int cachedPosition; - private int cachedIxdex; - private int cachedLineStart; - - // Given a position pos within the entire source, the results are - // ix -- the index of the containing line - // lstart -- the position of the first character on that line - private void findIndex(int pos, out int ix, out int lstart) - { - if (pos >= cachedPosition) - { - ix = cachedIxdex; lstart = cachedLineStart; - } - else - { - ix = lstart = 0; - } - for (; ; ) - { - int len = line[ix].Length + 1; - if (pos < lstart + len) break; - lstart += len; - ix++; - } - cachedPosition = pos; - cachedIxdex = ix; - cachedLineStart = lstart; - } - - public override string GetString(int begin, int limit) - { - if (begin >= maxPos || limit <= begin) return ""; - int endIx, begIx, endLineStart, begLineStart; - findIndex(begin, out begIx, out begLineStart); - int begCol = begin - begLineStart; - findIndex(limit, out endIx, out endLineStart); - int endCol = limit - endLineStart; - string s = line[begIx]; - if (begIx == endIx) - { - // the usual case, substring all on one line - return (endCol <= s.Length) ? - s.Substring(begCol, endCol - begCol) - : s.Substring(begCol) + "\n"; - } - // the string spans multiple lines, yuk! - StringBuilder sb = new StringBuilder(); - if (begCol < s.Length) - sb.Append(s.Substring(begCol)); - for (; ; ) - { - sb.Append("\n"); - s = line[++begIx]; - if (begIx >= endIx) break; - sb.Append(s); - } - if (endCol <= s.Length) - { - sb.Append(s.Substring(0, endCol)); - } - else - { - sb.Append(s); - sb.Append("\n"); - } - return sb.ToString(); - } - - public override int Pos - { - get { return cPos; } - set - { - cPos = value; - findIndex(cPos, out cLine, out curLineStart); - curLine = line[cLine]; - curLineEnd = curLineStart + curLine.Length; - } - } - - public override string ToString() { return "LineBuffer"; } - } - - - // ============================================================== - // ===== class BuildBuff : for unicode text files ======== - // ============================================================== - - class BuildBuffer : ScanBuff - { - // Double buffer for char stream. - class BufferElement - { - StringBuilder bldr = new StringBuilder(); - StringBuilder next = new StringBuilder(); - int minIx; - int maxIx; - int brkIx; - bool appendToNext; - - internal BufferElement() { } - - internal int MaxIndex { get { return maxIx; } } - // internal int MinIndex { get { return minIx; } } - - internal char this[int index] - { - get - { - if (index < minIx || index >= maxIx) - throw new BufferException("Index was outside data buffer"); - else if (index < brkIx) - return bldr[index - minIx]; - else - return next[index - brkIx]; - } - } - - internal void Append(char[] block, int count) - { - maxIx += count; - if (appendToNext) - this.next.Append(block, 0, count); - else - { - this.bldr.Append(block, 0, count); - brkIx = maxIx; - appendToNext = true; - } - } - - internal string GetString(int start, int limit) - { - if (limit <= start) - return ""; - if (start >= minIx && limit <= maxIx) - if (limit < brkIx) // String entirely in bldr builder - return bldr.ToString(start - minIx, limit - start); - else if (start >= brkIx) // String entirely in next builder - return next.ToString(start - brkIx, limit - start); - else // Must do a string-concatenation - return - bldr.ToString(start - minIx, brkIx - start) + - next.ToString(0, limit - brkIx); - else - throw new BufferException("String was outside data buffer"); - } - - internal void Mark(int limit) - { - if (limit > brkIx + 16) // Rotate blocks - { - StringBuilder temp = bldr; - bldr = next; - next = temp; - next.Length = 0; - minIx = brkIx; - brkIx = maxIx; - } - } - } - - BufferElement data = new BufferElement(); - - int bPos; // Postion index in the StringBuilder - BlockReader NextBlk; // Delegate that serves char-arrays; - - private string EncodingName - { - get - { - StreamReader rdr = NextBlk.Target as StreamReader; - return (rdr == null ? "raw-bytes" : rdr.CurrentEncoding.BodyName); - } - } - - public BuildBuffer(Stream stream) - { - FileStream fStrm = (stream as FileStream); - if (fStrm != null) FileName = fStrm.Name; - NextBlk = BlockReaderFactory.Raw(stream); - } - -#if (!BYTEMODE) - public BuildBuffer(Stream stream, int fallbackCodePage) - { - FileStream fStrm = (stream as FileStream); - if (fStrm != null) FileName = fStrm.Name; - NextBlk = BlockReaderFactory.Get(stream, fallbackCodePage); - } -#endif - - /// - /// Marks a conservative lower bound for the buffer, - /// allowing space to be reclaimed. If an application - /// needs to call GetString at arbitrary past locations - /// in the input stream, Mark() is not called. - /// - public override void Mark() { data.Mark(bPos - 2); } - - public override int Pos - { - get { return bPos; } - set { bPos = value; } - } - - - /// - /// Read returns the ordinal number of the next char, or - /// EOF (-1) for an end of stream. Note that the next - /// code point may require *two* calls of Read(). - /// - /// - public override int Read() - { - // - // Characters at positions - // [data.offset, data.offset + data.bldr.Length) - // are available in data.bldr. - // - if (bPos < data.MaxIndex) - { - // ch0 cannot be EOF - return (int)data[bPos++]; - } - else // Read from underlying stream - { - // Experimental code, blocks of page size - char[] chrs = new char[4096]; - int count = NextBlk(chrs, 0, 4096); - if (count == 0) - return EndOfFile; - else - { - data.Append(chrs, count); - return (int)data[bPos++]; - } - } - } - - public override string GetString(int begin, int limit) - { - return data.GetString(begin, limit); - } - - public override string ToString() - { - return "StringBuilder buffer, encoding: " + this.EncodingName; - } - } - - // =============== End ScanBuff-derived classes ================== - - public delegate int BlockReader(char[] block, int index, int number); - - // A delegate factory, serving up a delegate that - // reads a block of characters from the underlying - // encoded stream, via a StreamReader object. - // - public static class BlockReaderFactory - { - public static BlockReader Raw(Stream stream) - { - return delegate(char[] block, int index, int number) - { - byte[] b = new byte[number]; - int count = stream.Read(b, 0, number); - int i = 0; - int j = index; - for (; i < count; i++, j++) - block[j] = (char)b[i]; - return count; - }; - } - -#if (!BYTEMODE) - public static BlockReader Get(Stream stream, int fallbackCodePage) - { - Encoding encoding; - int preamble = Preamble(stream); - - if (preamble != 0) // There is a valid BOM here! - encoding = Encoding.GetEncoding(preamble); - else if (fallbackCodePage == -1) // Fallback is "raw" bytes - return Raw(stream); - else if (fallbackCodePage != -2) // Anything but "guess" - encoding = Encoding.GetEncoding(fallbackCodePage); - else // This is the "guess" option - { - int guess = new Guesser(stream).GuessCodePage(); - stream.Seek(0, SeekOrigin.Begin); - if (guess == -1) // ==> this is a 7-bit file - encoding = Encoding.ASCII; - else if (guess == 65001) - encoding = Encoding.UTF8; - else // ==> use the machine default - encoding = Encoding.Default; - } - StreamReader reader = new StreamReader(stream, encoding); - return reader.Read; - } - - static int Preamble(Stream stream) - { - int b0 = stream.ReadByte(); - int b1 = stream.ReadByte(); - - if (b0 == 0xfe && b1 == 0xff) - return 1201; // UTF16BE - if (b0 == 0xff && b1 == 0xfe) - return 1200; // UTF16LE - - int b2 = stream.ReadByte(); - if (b0 == 0xef && b1 == 0xbb && b2 == 0xbf) - return 65001; // UTF8 - // - // There is no unicode preamble, so we - // return denoter for the machine default. - // - stream.Seek(0, SeekOrigin.Begin); - return 0; - } -#endif // !BYTEMODE - } - #endregion Buffer classes - - // ============================================================== - // ============ class CodePageHandling ============= - // ============================================================== - - public static class CodePageHandling - { - public static int GetCodePage(string option) - { - string command = option.ToUpperInvariant(); - if (command.StartsWith("CodePage:", StringComparison.OrdinalIgnoreCase)) - command = command.Substring(9); - try - { - if (command.Equals("RAW")) - return -1; - else if (command.Equals("GUESS")) - return -2; - else if (command.Equals("DEFAULT")) - return 0; - else if (char.IsDigit(command[0])) - return int.Parse(command, CultureInfo.InvariantCulture); - else - { - Encoding enc = Encoding.GetEncoding(command); - return enc.CodePage; - } - } - catch (FormatException) - { - Console.Error.WriteLine( - "Invalid format \"{0}\", using machine default", option); - } - catch (ArgumentException) - { - Console.Error.WriteLine( - "Unknown code page \"{0}\", using machine default", option); - } - return 0; - } - } -#region guesser -#if (!BYTEMODE) - // ============================================================== - // ============ Encoding Guesser ============= - // ============================================================== - - /// - /// This class provides a simple finite state automaton that - /// scans the file looking for (1) valid UTF-8 byte patterns, - /// (2) bytes >= 0x80 which are not part of a UTF-8 sequence. - /// The method then guesses whether it is UTF-8 or maybe some - /// local machine default encoding. This works well for the - /// various Latin encodings. - /// - internal class Guesser - { - ScanBuff buffer; - - public int GuessCodePage() { return Scan(); } - - const int maxAccept = 10; - const int initial = 0; - const int eofNum = 0; - const int goStart = -1; - const int INITIAL = 0; - const int EndToken = 0; - - #region user code - /* - * Reads the bytes of a file to determine if it is - * UTF-8 or a single-byte code page file. - */ - public long utfX; - public long uppr; - #endregion user code - - int state; - int currentStart = startState[0]; - int code; - - #region ScannerTables - static int[] startState = new int[] { 11, 0 }; - - #region CharacterMap - static sbyte[] map = new sbyte[256] { -/* '\0' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* '\x10' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* '\x20' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* '0' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* '@' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* 'P' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* '`' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* 'p' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* '\x80' */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -/* '\x90' */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -/* '\xA0' */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -/* '\xB0' */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -/* '\xC0' */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -/* '\xD0' */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -/* '\xE0' */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -/* '\xF0' */ 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5 }; - #endregion - - static sbyte[][] nextState = new sbyte[][] { - new sbyte[] {0, 0, 0, 0, 0, 0}, - new sbyte[] {-1, -1, 10, -1, -1, -1}, - new sbyte[] {-1, -1, -1, -1, -1, -1}, - new sbyte[] {-1, -1, 8, -1, -1, -1}, - new sbyte[] {-1, -1, 5, -1, -1, -1}, - new sbyte[] {-1, -1, 6, -1, -1, -1}, - new sbyte[] {-1, -1, 7, -1, -1, -1}, - null, - new sbyte[] {-1, -1, 9, -1, -1, -1}, - null, - null, - new sbyte[] {-1, 1, 2, 3, 4, 2} - }; - - - [SuppressMessage("Microsoft.Performance", "CA1810:InitializeReferenceTypeStaticFieldsInline")] - // Reason for suppression: cannot have self-reference in array initializer. - static Guesser() - { - nextState[7] = nextState[2]; - nextState[9] = nextState[2]; - nextState[10] = nextState[2]; - } - - int NextState() - { - if (code == ScanBuff.EndOfFile) - return eofNum; - else - return nextState[state][map[code]]; - } - #endregion - - public Guesser(System.IO.Stream file) { SetSource(file); } - - public void SetSource(System.IO.Stream source) - { - this.buffer = new BuildBuffer(source); - code = buffer.Read(); - } - - int Scan() - { - for (; ; ) - { - int next; - state = currentStart; - while ((next = NextState()) == goStart) - code = buffer.Read(); - - state = next; - code = buffer.Read(); - - while ((next = NextState()) > eofNum) - { - state = next; - code = buffer.Read(); - } - if (state <= maxAccept) - { - #region ActionSwitch -#pragma warning disable 162 - switch (state) - { - case eofNum: - switch (currentStart) - { - case 11: - if (utfX == 0 && uppr == 0) return -1; /* raw ascii */ - else if (uppr * 10 > utfX) return 0; /* default code page */ - else return 65001; /* UTF-8 encoding */ - break; - } - return EndToken; - case 1: // Recognized '{Upper128}', Shortest string "\xC0" - case 2: // Recognized '{Upper128}', Shortest string "\x80" - case 3: // Recognized '{Upper128}', Shortest string "\xE0" - case 4: // Recognized '{Upper128}', Shortest string "\xF0" - uppr++; - break; - case 5: // Recognized '{Utf8pfx4}{Utf8cont}', Shortest string "\xF0\x80" - uppr += 2; - break; - case 6: // Recognized '{Utf8pfx4}{Utf8cont}{2}', Shortest string "\xF0\x80\x80" - uppr += 3; - break; - case 7: // Recognized '{Utf8pfx4}{Utf8cont}{3}', Shortest string "\xF0\x80\x80\x80" - utfX += 3; - break; - case 8: // Recognized '{Utf8pfx3}{Utf8cont}', Shortest string "\xE0\x80" - uppr += 2; - break; - case 9: // Recognized '{Utf8pfx3}{Utf8cont}{2}', Shortest string "\xE0\x80\x80" - utfX += 2; - break; - case 10: // Recognized '{Utf8pfx2}{Utf8cont}', Shortest string "\xC0\x80" - utfX++; - break; - default: - break; - } -#pragma warning restore 162 - #endregion - } - } - } - } // end class Guesser - -#endif // !BYTEMODE -#endregion - -// End of code copied from embedded resource - -} // end namespace diff --git a/Grammars/Oberon10Independent (by Juliet)/oberon00.lex b/Grammars/Oberon10Independent (by Juliet)/oberon00.lex deleted file mode 100644 index ac9eb1fa0..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/oberon00.lex +++ /dev/null @@ -1,190 +0,0 @@ -%namespace GPPGParserScanner - -%using PascalABCCompiler.Oberon00Parser; - -Digit [0-9] -HexDigit {Digit}|[A-F] -Alpha [a-zA-Z_] -EndLine \n // -AlphaDigit {Alpha}|{Digit} -ScaleFactor [ED][\+\-]?{Digit}+ -HEXINTNUM {Digit}{HexDigit}*H -INTNUM {Digit}+ -REALNUM {Digit}+\.{Digit}*{ScaleFactor}? -ID {Alpha}{AlphaDigit}* -CHARACTER '[^'\n]'|\"[^\"\n]\"|{Digit}{HexDigit}*X -STRING '[^'\n]*'|\"[^\"\n]*\" - - -%x COMMENT // -%x COMMENT_S // - -%% - -":=" { return (int)Tokens.ASSIGN; } -";" { return (int)Tokens.SEMICOLUMN; } -"-" { return (int)Tokens.MINUS; } -"+" { return (int)Tokens.PLUS; } -"*" { return (int)Tokens.MULT; } -"/" { return (int)Tokens.DIVIDE; } -"<" { return (int)Tokens.LT; } -">" { return (int)Tokens.GT; } -"<=" { return (int)Tokens.LE; } -">=" { return (int)Tokens.GE; } -"=" { return (int)Tokens.EQ; } -"#" { return (int)Tokens.NE; } -"(" { return (int)Tokens.LPAREN; } -")" { return (int)Tokens.RPAREN; } -"," { return (int)Tokens.COLUMN; } -"~" { return (int)Tokens.NOT; } -"&" { return (int)Tokens.AND; } -"." { return (int)Tokens.COMMA; } -":" { return (int)Tokens.COLON; } -"!" { return (int)Tokens.EXCLAMATION; } -"{" { return (int)Tokens.LBRACE; } -"}" { return (int)Tokens.RBRACE; } -"[" { return (int)Tokens.LBRACKET; } -"]" { return (int)Tokens.RBRACKET; } -".." { return (int)Tokens.DOUBLEPOINT; } -"|" { return (int)Tokens.PIPE; } -\x01 { return (int)Tokens.INVISIBLE; } - -"//" { BEGIN(COMMENT_S);} // - {EndLine} { BEGIN(INITIAL);} -"(*" { // - BEGIN(COMMENT); - mlCommentCnt = 1; -} - "(*" { ++mlCommentCnt; } - "*)" { - --mlCommentCnt; - if (mlCommentCnt == 0) - BEGIN(INITIAL); -} - <> { - PT.AddError(" ", yylloc); -} - -{ID} { - int res = Keywords.KeywordOrIDToken(yytext); - if (res == (int)Tokens.ID){ - yylval.sVal = yytext; - PT.LastIdentificator = yytext; - } - return res; -} - -{INTNUM} { - int tryParseInt; - if (int.TryParse(yytext, out tryParseInt)){ - yylval.iVal = tryParseInt; - return (int)Tokens.INTNUM; - } - System.Int64 tryParseLong; - if (System.Int64.TryParse(yytext, out tryParseLong)){ - yylval.lVal = tryParseLong; - return (int)Tokens.LONGINTNUM; - } - PT.AddError(" ", yylloc); -} - -{HEXINTNUM} { - var _yytext = yytext.Substring(0, yytext.Length - 1); - int tryParseHexInt; - if (int.TryParse(_yytext, System.Globalization.NumberStyles.AllowHexSpecifier, null, out tryParseHexInt)){ - yylval.iVal = tryParseHexInt; - return (int)Tokens.INTNUM; - } - System.Int64 tryParseHexLong; - if (System.Int64.TryParse(_yytext, System.Globalization.NumberStyles.AllowHexSpecifier, null, out tryParseHexLong)){ - yylval.lVal = tryParseHexLong; - return (int)Tokens.LONGINTNUM; - } - PT.AddError(" ", yylloc); -} - -{REALNUM} { - double tryParseDouble; - var correctDouble = PT.GetCorrectDoubleStr(yytext); - if (double.TryParse(correctDouble, out tryParseDouble)){ - yylval.rVal = tryParseDouble; - return (int)Tokens.REALNUM; - } - PT.AddError(" ", yylloc); -} - -{CHARACTER} { - try{ - yylval.cVal = PT.GetStringContent(yytext)[0]; - return (int)Tokens.CHAR_CONST; - } - catch (System.ArgumentException){ - PT.AddError(" ", yylloc); - } -} -{STRING} { - yylval.sVal = PT.GetStringContent(yytext); - return (int)Tokens.STRING_CONST; -} - -%{ - yylloc = new QUT.Gppg.LexLocation(tokLin, tokCol, tokELin, tokECol); -%} - -%% - -// -static int mlCommentCnt = 0; - - public override void yyerror(string format, params object[] args) - { - string errorMsg = PT.CreateErrorString(args); - PT.AddError(errorMsg,yylloc); - } - -// , -public static class Keywords -{ - private static Dictionary keywords = new Dictionary(); - - static Keywords() - { - keywords.Add("TRUE", (int)Tokens.TRUE); - keywords.Add("FALSE", (int)Tokens.FALSE); - keywords.Add("ODD", (int)Tokens.ODD); - keywords.Add("OR", (int)Tokens.OR); - keywords.Add("DIV", (int)Tokens.DIV); - keywords.Add("MOD", (int)Tokens.MOD); - keywords.Add("BEGIN", (int)Tokens.BEGIN); - keywords.Add("END", (int)Tokens.END); - keywords.Add("MODULE", (int)Tokens.MODULE); - keywords.Add("CONST", (int)Tokens.CONST); - keywords.Add("VAR", (int)Tokens.VAR); - keywords.Add("TYPE", (int)Tokens.TYPE); - keywords.Add("ARRAY", (int)Tokens.ARRAY); - keywords.Add("OF", (int)Tokens.OF); - keywords.Add("RECORD", (int)Tokens.RECORD); - keywords.Add("POINTER", (int)Tokens.POINTER); - keywords.Add("IF", (int)Tokens.IF); - keywords.Add("THEN", (int)Tokens.THEN); - keywords.Add("ELSE", (int)Tokens.ELSE); - keywords.Add("ELSEIF", (int)Tokens.ELSEIF); - keywords.Add("WHILE", (int)Tokens.WHILE); - keywords.Add("DO", (int)Tokens.DO); - keywords.Add("REPEAT", (int)Tokens.REPEAT); - keywords.Add("UNTIL", (int)Tokens.UNTIL); - keywords.Add("FOR", (int)Tokens.FOR); - keywords.Add("TO", (int)Tokens.TO); - keywords.Add("BY", (int)Tokens.BY); - keywords.Add("CASE", (int)Tokens.CASE); - keywords.Add("PROCEDURE", (int)Tokens.PROCEDURE); - } - public static int KeywordOrIDToken(string s) - { - if (keywords.ContainsKey(s)) - return keywords[s]; - else - return (int)Tokens.ID; - } -} - diff --git a/Grammars/Oberon10Independent (by Juliet)/oberon00.lst b/Grammars/Oberon10Independent (by Juliet)/oberon00.lst deleted file mode 100644 index 92b1f2990..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/oberon00.lst +++ /dev/null @@ -1,906 +0,0 @@ - -// ========================================================================== -// GPPG error listing for yacc source file -// ========================================================================== -// Version: 1.3.6 -// Machine: SSM -// DateTime: 13.03.2013 16:49:30 -// UserName: Станислав -// ========================================================================== - - -%{ -// Ýòè îáúÿâëåíèÿ äîáàâëÿþòñÿ â êëàññ GPPGParser, ïðåäñòàâëÿþùèé ñîáîé ïàðñåð, ãåíåðèðóåìûé ñèñòåìîé gppg - public syntax_tree_node root; // Êîðíåâîé óçåë ñèíòàêñè÷åñêîãî äåðåâà - public GPPGParser(AbstractScanner scanner) : base(scanner) { } -%} - -%output=oberon00yacc.cs - -%parsertype GPPGParser - -%union - { - public bool bVal; - public string sVal; - public int iVal; - public long lVal; // Äëèííîå öåëîå - public char cVal; - public double rVal; - public pascal_set_constant sc; // Êîíñòàíòà - ìíîæåñòâî - public named_type_reference ntr; // Èìåíîâàííîå îïðåäåëåíèå òèïà - public type_definition tdef; // Ñàì òèï - public diapason dpsn; // Òèï äèàïàçîí - public array_type arrt; // Òèï ìàññèâ - public class_definition cldef; // Îïðåäåëåíèå çàïèñè - public indexers_types indts; // Òèï òèïû èíäåêñîâ ìàññèâà - public ref_type rft; // Òèï óêàçàòåëü - public ident_list il; // Ñïèñîê èäåíòèôèêàòîðîâ - public ident id; // Èäåíòèôèêàòîð - public oberon_ident_with_export_marker obrid; // Îáåðîíîâñêèé óòî÷íåííûé èäåíòèôèêàòîð - public oberon_export_marker obrem; // Îáåðîíîâñêàÿ ýêñïîðòíàÿ ìåòêà - public var_def_statement vds; // Îïèñàíèå ïåðåìåííûõ - public variable_definitions vdss; // Ñåêöèÿ îïèñàíèÿ ïåðåìåííûõ - public type_declarations td; // Ñåêöèÿ îïðåäåëåíèÿ òèïîâ - public type_declaration tdec; // Îïèñàíèå òèïà - public expression ex; // Âûðàæåíèå - public expression_list el; // Ñïèñîê âûðàæåíèé - public Operators ops; // Îïåðàòîðû (îïåðàöèè) - public block bl; // Ïðîãðàììíûé áëîê - public statement st; // Îïåðàòîð ïðîãðàììíûé - public statement_list sl; // Ñïèñîê îïåðàòîðîâ - public case_variants cvars; // Ñïèñîê âàðèàíòîâ îïåðàòîðà CASE - public case_variant cvar; // Âàðèàíò îïåðàòîðà CASE - public declaration decsec; // Îïèñàíèå - public declarations decl; // Ñïèñîê îïèñàíèé - public simple_const_definition scd; // Îïðåäåëåíèå êîíñòàíòû - public consts_definitions_list cdl; // Ñïèñîê îïèñàíèé êîíñòàíò - public procedure_definition pd; // Îïèñàíèå ïðîöåäóðû - public dot_node dn; // Óçåë â òî÷å÷íîé íîòàöèè - public addressed_value adrv; // Àäðåñîâàííîå çíà÷åíèå - } - -%using PascalABCCompiler.SyntaxTree -%using PascalABCCompiler.Errors -%using PascalABCCompiler.Oberon00Parser - -%namespace GPPGParserScanner - -%start module // Ñòàðòîâûé ñèìâîë - ïðîãðàììíûé ìîäóëü - -%token ID STRING_CONST -%token INTNUM -%token REALNUM -%token LONGINTNUM -%token TRUE FALSE -%token CHAR_CONST -%token PLUS MINUS MULT DIVIDE AND OR LT GT LE GE EQ NE DIV MOD -%token NOT -%token ASSIGN SEMICOLUMN LPAREN RPAREN COLUMN COMMA COLON EXCLAMATION -%token LBRACE RBRACE DOUBLEPOINT LBRACKET RBRACKET PIPE -%token TRUE FALSE -%token IF THEN ELSE ELSEIF BEGIN END WHILE DO MODULE CONST VAR TYPE -%token INVISIBLE -%token PROCEDURE ARRAY OF RECORD REPEAT UNTIL FOR TO BY CASE POINTER -%token ODD - -%type ident specifiedIdent identDef -%type identDef -%type ExportLabel -%type IDList -%type complexTypeIdent -%type SetConstant SetElemList -%type expr ConstExpr SetElem SimpleExpr ForStep CaseVariantLabels -%type term signedTerm factor AddList FactorList -%type Assignment IfStatement ElseIfStatements ElseStatements WhileStatement WriteStatement -%type RepeatStatement Statement ForStatement CaseStatement ElseBranch -%type EmptyStatement ProcCallStatement -%type StatementSequence -%type CaseVariantList -%type CaseVariant -%type Declarations -%type DeclarationsSect -%type VarDecl -%type VarDeclarations VarDeclarationsSect -%type ConstDecl -%type ConstDeclarations ConstDeclarationsSect -%type TypeDeclarationsSect TypeDeclarations -%type TypeDecl -%type TypeDef ArrayType -%type PointerType -%type RecordType -%type ProcedureDeclarationSect -%type mainblock -%type factparams ExprList CaseVariantLabelList -%type Length -%type LengthList -%type AddOperator MultOperator Relation -%type specifiedIdent ComplexDesignator Designator -%type maybevar - -%left LT GT LE GE EQ NE -%left PLUS MINUS OR -%left MULT DIVIDE AND -%left NOT -%left UMINUS UPLUS - -%% -// Warning: NonTerminal symbol "EmptyStatement" is unreachable -// ----------------------------------------------------------- - -module // Ïðîãðàììíûé ìîäóëü - : MODULE ident SEMICOLUMN mainblock ident COMMA - { - if ($2.name != $5.name) - PT.AddError("Èìÿ " + $5.name + " äîëæíî ñîâïàäàòü ñ èìåíåì ìîäóëÿ " + $2.name, @5); - - // Ïîäêëþ÷åíèå ñòàíäàðòíîãî ìîäóëÿ Oberon00System, íàïèñàííîãî íà PascalABC.NET - var ul = new uses_list("Oberon00System"); - - // Ôîðìèðîâàíèå ìîäóëÿ îñíîâíîé ïðîãðàììû (èñïîëüçóåòñÿ ôàáðè÷íûé ìåòîä âìåñòî êîíñòðóêòîðà) - root = program_module.create($2, ul, $4, @$); - } - | INVISIBLE expr { // Äëÿ Intellisense - root = $2; - } - ; - -ident // Èäåíòèôèêàòîð - : ID { - $$ = new ident($1,@$); - } - ; - -specifiedIdent // Óòî÷íåííûé èäåíòèôèêàòîð - : ident COMMA ident { - $$ = new dot_node($1, $3, @$); - } - | ident { - $$ = $1; - } - ; - -identDef // Îïðåäåëåííûé èäåíòèôèêàòîð (âîçìîæíà ýêñïîðòíàÿ ìåòêà) TODO - : ident ExportLabel { - $$ = new oberon_ident_with_export_marker($1.name, $2, @$); - } - ; - -ExportLabel // Ýêñïîðòíàÿ ìåòêà TODO - : MULT { - $$ = oberon_export_marker.export; - } - | MINUS { - $$ = oberon_export_marker.export_readonly; - } - | { - //$$ = oberon_export_marker.nonexport; - $$ = oberon_export_marker.export; - } - ; - -mainblock // Ïðîãðàììíûé áëîê - : Declarations BEGIN StatementSequence END - { - $$ = new block($1, $3, @$); - } - ; - -SetConstant // Âûðàæåíèå-êîíñòàíòà ìíîæåñòâî TODO - : LBRACE SetElemList RBRACE { - $$ = $2; - $$.source_context = @$; - } - ; - -SetElemList // Ñïèñîê ýëåìåíòîâ ìíîæåñòâà TODO - : SetElem { - $$ = new pascal_set_constant(); - $$.Add($1); - $$.source_context = @$; - - } - | SetElemList COLUMN SetElem { - $$ = $1; - $$.Add($3); - $$.source_context = @$; - } - | { - $$ = new pascal_set_constant(); - } - ; - -SetElem // Ýëåìåíò ìíîæåñòâà TODO - : expr - | expr DOUBLEPOINT expr { - $$ = new diapason_expr($1, $3, @$); - } - ; - -expr // Âûðàæåíèå - : SimpleExpr { - $$ = $1; - } - | SimpleExpr Relation SimpleExpr { - $$ = new bin_expr($1, $3, $2, @$); - } - ; - -Relation // Îòíîøåíèå - : EQ { - $$ = Operators.Equal; - } - | NE { - $$ = Operators.NotEqual; - } - | LT { - $$ = Operators.Less; - } - | LE { - $$ = Operators.LessEqual; - } - | GT { - $$ = Operators.Greater; - } - | GE { - $$ = Operators.GreaterEqual; - } - ; - -SimpleExpr // Ïðîñòîå âûðàæåíèå - : signedTerm { - $$ = $1; - $$.source_context = @$; - } - | signedTerm AddOperator AddList { - $$ = new bin_expr($1, $3, $2, @$); - } - ; - -signedTerm // Ñëàãàåìîå ñî çíàêîì - : term - | MINUS term %prec UMINUS { - $$ = new un_expr($2, Operators.Minus, @$); - } - | PLUS term %prec UPLUS { - $$ = new un_expr($2, Operators.Plus, @$); - } - ; - -AddList // Ñïèñîê ñî ñëàãàåìûìè - : term - | AddList AddOperator term { - $$ = new bin_expr($1, $3, $2, @$); - } - ; - -term // Ñëàãàåìîå - : factor - | factor MultOperator FactorList { - $$ = new bin_expr($1, $3, $2, @$); - } - ; - -FactorList // Ñïèñîê ñî ìíîæèòåëÿìè - : factor - | FactorList MultOperator factor { - $$ = new bin_expr($1, $3, $2, @$); - } - ; - -factor // Ìíîæèòåëü - : Designator { - $$ = $1; - } - | INTNUM { - $$ = new int32_const($1,@$); - } - | LONGINTNUM{ - $$ = new int64_const($1, @$); - } - | REALNUM { - $$ = new double_const($1, @$); - } - | TRUE { - $$ = new bool_const(true,@$); - } - | FALSE { - $$ = new bool_const(false,@$); - } - | CHAR_CONST { - $$ = new char_const($1, @$); - } - | STRING_CONST { - $$ = new string_const($1, @$); - } - | LPAREN expr RPAREN { - $$ = $2; - } - | NOT factor { - $$ = new un_expr($2,Operators.LogicalNOT,@$); - } - | SetConstant - ; - -Designator // Îáîçíà÷åíèå (îáðàùåíèå ó ýëåìåòó ìàññèâà, ...) TODO - : specifiedIdent { - $$ = $1; - } - | ComplexDesignator { - $$ = $1; - } - ; - -ComplexDesignator // Ñîñòàâíîå îáîçíà÷åíèå TODO - : specifiedIdent COMMA ident { - $$ = new dot_node($1, $3, @$); - } - | specifiedIdent LBRACKET ExprList RBRACKET { - indexer indxr = new indexer(); - indxr.dereferencing_value = $1; - indxr.indexes = $3; - $$ = indxr; - $$.source_context = @$; - } - | ComplexDesignator COMMA ident { - $$ = new dot_node($1, $3, @$); - } - | ComplexDesignator LBRACKET ExprList RBRACKET { - indexer indxr = new indexer(); - indxr.dereferencing_value = $1; - indxr.indexes = $3; - $$ = indxr; - $$.source_context = @$; - } - ; - -ExprList // Ñïèñîê âûðàæåíèé - : expr { - $$ = new expression_list($1, @$); - } - | ExprList COLUMN expr { - $$ = $1; - $$.Add($3, @3); - $$.source_context = @$; - } - ; - -AddOperator // Îïåðàöèÿ ñëîæåíèÿ - : MINUS { - $$ = Operators.Minus; - } - | PLUS { - $$ = Operators.Plus; - } - | OR { - $$ = Operators.LogicalOR; - } - ; - -MultOperator // Îïåðàöèÿ óìíîæåíèÿ - : MULT { - $$ = Operators.Multiplication; - } - | DIVIDE { - $$ = Operators.Division; - } - | DIV { - $$ = Operators.IntegerDivision; - } - | MOD { - $$ = Operators.ModulusRemainder; - } - | AND { - $$ = Operators.LogicalAND; - } - ; - -Statement // Îïåðàòîð TODO - : Assignment - | IfStatement - | WhileStatement - | RepeatStatement - | ForStatement - | CaseStatement - | WriteStatement - | ProcCallStatement - ; - -StatementSequence // Ïîñëåäîâàòåëüíîñòü (áëîê) îïåðàòîðîâ - : Statement { - $$ = new statement_list($1,@$); - } - | StatementSequence SEMICOLUMN Statement { - $1.Add($3,@$); - $$ = $1; - } - ; - -Assignment // Ïðèñâàèâàíèå - : Designator ASSIGN expr { - $$ = new assign($1, $3, Operators.Assignment, @$); - } - ; - -IfStatement // Óñëîâíûé îïåðàòîð - : IF expr THEN StatementSequence ElseStatements END { - $$ = new if_node($2, $4, $5, @$); - } - | IF expr THEN StatementSequence ElseIfStatements END{ - $$ = new if_node($2, $4, $5, @$); - } - ; - -ElseStatements // Else-÷àñòü óñëîâíîãî îïåðàòîðà - : ELSE StatementSequence { - $$ = $2; - $$.source_context = @$; - } - | { - $$ = null; - } - ; - -ElseIfStatements // ElseIf-÷àñòü óñëîâíîãî îïåðàòîðà - : ELSEIF expr THEN StatementSequence ElseStatements { - $$ = new if_node($2, $4, $5, @$); - } - | ELSEIF expr THEN StatementSequence ElseIfStatements{ - $$ = new if_node($2, $4, $5, @$); - } - ; - -WhileStatement // Öèêë ñ ïðåäóñëîâèåì - : WHILE expr DO StatementSequence END { - $$ = new while_node($2, $4, WhileCycleType.While, @$); - } - ; - -RepeatStatement // Öèêë ñ ïîñòóñëîâèåì - : REPEAT StatementSequence UNTIL expr { - $$ = new repeat_node($2, $4, @$); - } - ; - -ForStatement // Öèêë - : FOR ident ASSIGN expr TO expr ForStep DO StatementSequence END { - expression step; - if ($7 != null) step = $7; - else step = new int32_const(1, @7); - // Áóäåì ìîäåëèðîâàòü öèêë ÷åðåç while - statement_list forStmnt = GetForThroughWhile($2, $4, $6, $9, step, @3, @$); - $$ = forStmnt; - $$.source_context = @$; - } - ; - -ForStep // Øàã öèêëà - : BY ConstExpr { - int32_const step32 = $2 as int32_const; - if (step32 != null) { // øàã ÿâëÿåòñÿ ïðîñòî öåëûì ÷èñëîì (áåç çíàêà) - if (step32.val == 0) PT.AddError("Øàã öèêëà íå ìîæåò áûòü íóëåâûì", @1); - else $$ = new int32_const(step32.val, @$); - } - else { // â çíà÷åíèè øàãà ëèáî ïðèñóòñòâóåò çíàê, ëèáî ýòî âîîáùå íå öåëîå - un_expr stepMinus = $2 as un_expr; - int32_const stepMinusTerm = stepMinus.subnode as int32_const; - bool signMinus = (stepMinusTerm != null) && (stepMinus.operation_type == Operators.Minus); - if (signMinus) - if (stepMinusTerm.val == 0) - PT.AddError("Øàã öèêëà íå ìîæåò áûòü íóëåâûì", @1); - else - $$ = new un_expr(stepMinusTerm, Operators.Minus, @2); - else - PT.AddError("Øàã öèêëà äîëæåí áûòü öåëûì ÷èñëîì", @1); - } - } - | { - $$ = null; - } - ; - -CaseStatement // Îïåðàòîð âûáîðà - : CASE expr OF CaseVariantList ElseBranch END { - $$ = new case_node($2, $4, $5, @$); - } - ; - -CaseVariantList // Ñïèñîê âàðèàíòîâ îïåðàòîðà CASE - : CaseVariant { - $$ = new case_variants(); - $$.Add($1); - $$.source_context = @$; - } - | CaseVariantList PIPE CaseVariant { - $$ = $1; - $$.Add($3); - $$.source_context = @$; - } - | { - $$ = new case_variants(); - } - ; - -CaseVariant // Âàðèàíò îïåðàòîðà CASE - : CaseVariantLabelList COLON StatementSequence { - $$ = new case_variant($1, $3, @$); - } - ; - -CaseVariantLabelList // Ñïèñîê ìåòîê âàðèàíòà - : CaseVariantLabels { - $$ = new expression_list($1, @$); - } - | CaseVariantLabelList COLUMN CaseVariantLabels { - $$ = $1; - $$.Add($3, @3); - $$.source_context = @$; - } - ; - -CaseVariantLabels // Ìåòêè âàðèàíòà - : ConstExpr { - $$ = $1; - } - | ConstExpr DOUBLEPOINT ConstExpr { - $$ = new diapason_expr($1, $3, @$); - } - ; - -ElseBranch // Âåòêà ELSE îïåðàòîðà CASE - : ELSE StatementSequence { - $$ = $2; - $$.source_context = @$; - } - | { - $$ = null; - } - ; - -WriteStatement - : EXCLAMATION expr { - expression_list el = new expression_list($2); - method_call mc = new method_call(el); - mc.dereferencing_value = new ident("print"); - $$ = mc; - } - ; - -factparams - : expr { - $$ = new expression_list($1,@$); - } - | factparams COLUMN expr { - $1.Add($3,@$); - $$ = $1; - } - ; - -ProcCallStatement - : ident LPAREN factparams RPAREN { - $$ = new method_call($1,$3,@$); - } - ; - -EmptyStatement // Ïóñòîé îïåðàòîð - : { - $$ = new empty_statement(); - } - ; - -IDList // Ñïèñîê èäåíòèôèêàòîðîâ - : identDef { - $$=new ident_list($1,@$); - - } - | IDList COLUMN identDef { - $1.Add($3,@$); - $$ = $1; - } - ; - -VarDecl // Îïèñàíèå ïåðåìåííûõ îäíîãî òèïà - : IDList COLON TypeDef SEMICOLUMN { - $$ = new var_def_statement($1, $3, null, definition_attribute.None, false, @$); - } - ; - -VarDeclarations // Ñïèñîê îïèñàíèé ïåðåìåííûõ - : VarDecl { - $$ = new variable_definitions($1,@$); - } - | VarDeclarations VarDecl { - $1.Add($2,@$); - $$ = $1; - } - ; - - -ConstDecl // Îïèñàíèå îäíîé êîíñòàíòû - : identDef EQ ConstExpr SEMICOLUMN { - $$ = new simple_const_definition($1,$3,@$); - } - ; - -ConstExpr // Êîíñòàíòíîå âûðàæåíèå - : expr - ; - -ConstDeclarations // Ñïèñîê îïèñàíèé êîíñòàíò - : ConstDecl { - $$ = new consts_definitions_list($1,@$); - } - | ConstDeclarations ConstDecl { - $1.Add($2,@$); - $$ = $1; - } - ; - -ConstDeclarationsSect // Áëîê îïèñàíèÿ êîíñòàíò - : CONST ConstDeclarations { - $$ = $2; - $$.source_context = @$; - } - ; - -VarDeclarationsSect // Áëîê îïèñàíèÿ ïåðåìåííûõ - : VAR VarDeclarations { - $$ = $2; - $$.source_context = @$; - } - ; - -TypeDeclarationsSect // Áëîê îïðåäåëåíèÿ òèïîâ òèïîâ - : TYPE TypeDeclarations { - $$ = $2; - $$.source_context = @$; - } - ; - -TypeDeclarations // Ñïèñîê îïðåäåëåíèé òèïîâ - : TypeDecl { - $$ = new type_declarations(); - $$.Add($1); - $$.source_context = @$; - } - | TypeDeclarations TypeDecl { - $$ = $1; - $$.Add($2); - $$.source_context = @$; - } - ; - -TypeDecl // Îïðåäåëåíèå òèïà - : identDef EQ TypeDef SEMICOLUMN { - $$ = new type_declaration($1, $3, @$); - } - ; - -TypeDef // Òèï TODO - : complexTypeIdent { - $$ = $1; - } - | ArrayType { - $$ = $1; - $$.source_context = @$; - } - | RecordType { - $$ = $1; - $$.source_context = @$; - } - | PointerType { - $$ = $1; - $$.source_context = @$; - } - ; - -ArrayType // Òèï ìàññèâ TODO - : ARRAY OF TypeDef { - // îòêðûòûé ìàññèâ - diapason dp = new diapason(new int32_const(0), new int32_const(0)); - indexers_types inxr = new indexers_types(); - inxr.Add(dp); - $$ = new array_type(inxr, $3, @$); - } - | ARRAY LengthList OF TypeDef { - // Áóäåì èñêàòü array n of char, ÷òîáû çàìåíèòü íà ñòðîêó - named_type_reference ntr = $4 as named_type_reference; - bool complexArr = (ntr != null) && (ntr.names.Count == 1) && - (ntr.names[0].name == "char"); - if (complexArr) - $$ = GetArrWithStrInsteadCharArr($2, @2, @$); - else - $$ = new array_type($2, $4, @$); - } - ; - -RecordType // Çàïèñü TODO - : RECORD END COLUMN { - - } - ; - -LengthList // Ñïèñîê ðàçìåðîâ ìàññèâà - : Length { - $$ = new indexers_types(); - $$.source_context = @$; - $$.Add($1); - } - | LengthList COLUMN Length { - $$ = $1; - $$.source_context = @$; - $$.Add($3); - } - ; - -Length // Äëèíà ìàññèâà - : ConstExpr { - //  îáåðîíå â ìàññèâå óêàçûâàåòñÿ öåëî÷èñëåííàÿ äëèíà - // Ïîýòîìó íàäî ïðîâåðèòü, ÷òî âûðàæåíèå îòíîñèòñÿ ê öåëîìó òèïó - object[] types = {$1}; - bool isLength = typeof(int32_const) == System.Type.GetTypeArray(types)[0]; - if (isLength) - $$ = GetDiapasonByArrLength($1, @$); - else - PT.AddError("Äëèíà äîëæíà áûòü öåëûì ÷èñëîì", @1); - } - ; - -PointerType // Òèï óêàçàòåëü - : POINTER TO TypeDef { - $$ = new ref_type($3, @$); - } - ; - -complexTypeIdent // Ñîñòàâíîé èäåíòèôèêàòîð òèïà (id1.id2.id3) - : ident { - $$ = new named_type_reference(PT.InternalTypeName($1.name), @$); - } - | complexTypeIdent COMMA ident { - $$ = $1; - $$.Add(PT.InternalTypeName($3.name)); - $$.source_context = @$; - } - ; - -DeclarationsSect // Áëîê îïèñàíèé TODO - : VarDeclarationsSect { - $$ = $1; - } - | ConstDeclarationsSect { - $$ = $1; - } - | TypeDeclarationsSect { - $$ = $1; - } - | ProcedureDeclarationSect { - $$ = $1; - } - ; - -Declarations // Ñïèñîê áëîêîâ îïèñàíèé - : { - $$ = new declarations(); - } - | Declarations DeclarationsSect { - if ($2 != null) - $1.Add($2); - $$ = $1; - $$.source_context = @$; // Íåîáõîäèìî ïîêàçàòü ìåñòî â ïðîãðàììå, ò.ê. íåÿâíî ýòî íå ñäåëàíî - // (íàïðèìåð, â êîíñòðóêòîðå) - } - ; - -ProcedureDeclarationSect - : PROCEDURE ident maybeformalparams maybereturn SEMICOLUMN mainblock ident SEMICOLUMN { - - } - ; - -maybeformalparams - : { - //$$ = null; - } - | LPAREN FPList RPAREN { - //$$ = $2; - } - ; - -maybereturn // TODO - : { - - } - | COLUMN TypeDef { - - } - ; - -FPList - : FPSect { - - } - | FPList SEMICOLUMN FPSect { - - } - ; - -FPSect - : maybevar IDList COLON TypeDef { - - } - ; - -maybevar - : { - $$ = false; - } - | VAR { - $$ = true; - } - ; -%% - -/* Âîçâðàùàåò ïîñëåäîâàòåëüíîñòü îïåðàòîðîâ, ñîîòâåòñâóþùóþ - öèêëó for, ìîäåëèðóåìîìó ÷åðåç while */ -public static statement_list GetForThroughWhile(ident id, expression expr, expression endExpr, statement_list stmnts, - expression step, SourceContext assignSC, SourceContext wholeSC){ - // Áóäåì ìîäåëèðîâàòü öèêë ÷åðåç while - statement_list forStmnt = new statement_list(); - ident endFor = new ident("_oberon_for_end_"); - forStmnt.Add(new var_statement(new var_def_statement( - new ident_list("_oberon_for_end_"), - new named_type_reference("integer", null), - endExpr, - definition_attribute.None, - false)) - ); - forStmnt.Add( new assign(id, expr, Operators.Assignment, assignSC) ); - statement_list posStatementList = new statement_list(); // ïðè ïîëîæèòåëüíîì øàãå - posStatementList.Add(stmnts); - posStatementList.Add( new assign(id, step, Operators.AssignmentAddition) ); - while_node posWhile = new while_node( - new bin_expr(id, endFor, Operators.LessEqual), - posStatementList, - WhileCycleType.While); - statement_list negStatementList = new statement_list(); // ïðè îòðèöàòåëüíîì øàãå - negStatementList.Add(stmnts); - negStatementList.Add( new assign(id, step, Operators.AssignmentAddition) ); - while_node negWhile = new while_node( - new bin_expr(id, endFor, Operators.GreaterEqual), - negStatementList, - WhileCycleType.While); - forStmnt.Add( new if_node( - new bin_expr(step, new int32_const(0), Operators.Greater), - posWhile, - negWhile, - wholeSC)); - return forStmnt; -} - -/* Âîçâðàùàåò ìíîãîìåðíûé ìàññèâ, â êîòîðîì ïðè íåîáõîäèìîñòè - ìàññèâ ñèìâîëîâ çàìåíåí íà ñòðîêó */ -public static type_definition GetArrWithStrInsteadCharArr(indexers_types lenList, - SourceContext lenListSC, SourceContext wholeSC){ - List indxrs = lenList.indexers; - diapason dp = indxrs[indxrs.Count - 1] as diapason; - int32_const len = new int32_const(); - len.val = (dp.right as int32_const).val + 1; - type_definition result = new string_num_definition(len, new ident("string", lenListSC), wholeSC); - if (indxrs.Count > 1) { // íàäî äåëàòü ìàññèâ ìàññèâîâ ... ñòðîê - indxrs.RemoveAt(indxrs.Count - 1); - result = new array_type(lenList, result, wholeSC); - } - return result; -} - -/* Âîçâðàùàåò äèàïàçîí 0..Length-1, ïîëó÷åííûé ïî îáåðîíîâñêîé äëèíå - ìàññèâà, è íåîáõîäèìûé äëÿ ïàñêàëåâñêîãî ñèíòàêñè÷åñêîãî óçëà */ -public static diapason GetDiapasonByArrLength(expression lenExpr, SourceContext lenSC){ - int32_const zero = new int32_const(); - zero.val = 0; - int32_const max = (int32_const)lenExpr; - max.val = max.val - 1; - return new diapason(zero, max, lenSC); -} -// ========================================================================== - diff --git a/Grammars/Oberon10Independent (by Juliet)/oberon00.y b/Grammars/Oberon10Independent (by Juliet)/oberon00.y deleted file mode 100644 index 3bd09fd26..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/oberon00.y +++ /dev/null @@ -1,892 +0,0 @@ -%{ -// GPPGParser, , gppg - public syntax_tree_node root; // - public GPPGParser(AbstractScanner scanner) : base(scanner) { } -%} - -%output=oberon00yacc.cs - -%parsertype GPPGParser - -%union - { - public bool bVal; - public string sVal; - public int iVal; - public long lVal; // - public char cVal; - public double rVal; - public pascal_set_constant sc; // - - public named_type_reference ntr; // - public type_definition tdef; // - public diapason dpsn; // - public array_type arrt; // - public class_definition cldef; // - public indexers_types indts; // - public ref_type rft; // - public ident_list il; // - public ident id; // - public oberon_ident_with_export_marker obrid; // - public oberon_export_marker obrem; // - public var_def_statement vds; // - public variable_definitions vdss; // - public type_declarations td; // - public type_declaration tdec; // - public expression ex; // - public expression_list el; // - public Operators ops; // () - public block bl; // - public statement st; // - public statement_list sl; // - public case_variants cvars; // CASE - public case_variant cvar; // CASE - public declaration decsec; // - public declarations decl; // - public simple_const_definition scd; // - public consts_definitions_list cdl; // - public procedure_definition pd; // - public dot_node dn; // - public addressed_value adrv; // - } - -%using PascalABCCompiler.SyntaxTree -%using PascalABCCompiler.Errors -%using PascalABCCompiler.Oberon00Parser - -%namespace GPPGParserScanner - -%start module // - - -%token ID STRING_CONST -%token INTNUM -%token REALNUM -%token LONGINTNUM -%token TRUE FALSE -%token CHAR_CONST -%token PLUS MINUS MULT DIVIDE AND OR LT GT LE GE EQ NE DIV MOD -%token NOT -%token ASSIGN SEMICOLUMN LPAREN RPAREN COLUMN COMMA COLON EXCLAMATION -%token LBRACE RBRACE DOUBLEPOINT LBRACKET RBRACKET PIPE -%token TRUE FALSE -%token IF THEN ELSE ELSEIF BEGIN END WHILE DO MODULE CONST VAR TYPE -%token INVISIBLE -%token PROCEDURE ARRAY OF RECORD REPEAT UNTIL FOR TO BY CASE POINTER -%token ODD - -%type ident specifiedIdent identDef -%type identDef -%type ExportLabel -%type IDList -%type complexTypeIdent -%type SetConstant SetElemList -%type expr ConstExpr SetElem SimpleExpr ForStep CaseVariantLabels -%type term signedTerm factor AddList FactorList -%type Assignment IfStatement ElseIfStatements ElseStatements WhileStatement WriteStatement -%type RepeatStatement Statement ForStatement CaseStatement ElseBranch -%type EmptyStatement ProcCallStatement -%type StatementSequence -%type CaseVariantList -%type CaseVariant -%type Declarations -%type DeclarationsSect -%type VarDecl -%type VarDeclarations VarDeclarationsSect -%type ConstDecl -%type ConstDeclarations ConstDeclarationsSect -%type TypeDeclarationsSect TypeDeclarations -%type TypeDecl -%type TypeDef ArrayType -%type PointerType -%type RecordType -%type ProcedureDeclarationSect -%type mainblock -%type factparams ExprList CaseVariantLabelList -%type Length -%type LengthList -%type AddOperator MultOperator Relation -%type specifiedIdent ComplexDesignator Designator -%type maybevar - -%left LT GT LE GE EQ NE -%left PLUS MINUS OR -%left MULT DIVIDE AND -%left NOT -%left UMINUS UPLUS - -%% - -module // - : MODULE ident SEMICOLUMN mainblock ident COMMA - { - if ($2.name != $5.name) - PT.AddError(" " + $5.name + " " + $2.name, @5); - - // Oberon00System, PascalABC.NET - var ul = new uses_list("Oberon00System"); - - // ( ) - root = program_module.create($2, ul, $4, @$); - } - | INVISIBLE expr { // Intellisense - root = $2; - } - ; - -ident // - : ID { - $$ = new ident($1,@$); - } - ; - -specifiedIdent // - : ident COMMA ident { - $$ = new dot_node($1, $3, @$); - } - | ident { - $$ = $1; - } - ; - -identDef // ( ) TODO - : ident ExportLabel { - $$ = new oberon_ident_with_export_marker($1.name, $2, @$); - } - ; - -ExportLabel // TODO - : MULT { - $$ = oberon_export_marker.export; - } - | MINUS { - $$ = oberon_export_marker.export_readonly; - } - | { - //$$ = oberon_export_marker.nonexport; - $$ = oberon_export_marker.export; - } - ; - -mainblock // - : Declarations BEGIN StatementSequence END - { - $$ = new block($1, $3, @$); - } - ; - -SetConstant // - TODO - : LBRACE SetElemList RBRACE { - $$ = $2; - $$.source_context = @$; - } - ; - -SetElemList // TODO - : SetElem { - $$ = new pascal_set_constant(); - $$.Add($1); - $$.source_context = @$; - - } - | SetElemList COLUMN SetElem { - $$ = $1; - $$.Add($3); - $$.source_context = @$; - } - | { - $$ = new pascal_set_constant(); - } - ; - -SetElem // TODO - : expr - | expr DOUBLEPOINT expr { - $$ = new diapason_expr($1, $3, @$); - } - ; - -expr // - : SimpleExpr { - $$ = $1; - } - | SimpleExpr Relation SimpleExpr { - $$ = new bin_expr($1, $3, $2, @$); - } - ; - -Relation // - : EQ { - $$ = Operators.Equal; - } - | NE { - $$ = Operators.NotEqual; - } - | LT { - $$ = Operators.Less; - } - | LE { - $$ = Operators.LessEqual; - } - | GT { - $$ = Operators.Greater; - } - | GE { - $$ = Operators.GreaterEqual; - } - ; - -SimpleExpr // - : signedTerm { - $$ = $1; - $$.source_context = @$; - } - | signedTerm AddOperator AddList { - $$ = new bin_expr($1, $3, $2, @$); - } - ; - -signedTerm // - : term - | MINUS term %prec UMINUS { - $$ = new un_expr($2, Operators.Minus, @$); - } - | PLUS term %prec UPLUS { - $$ = new un_expr($2, Operators.Plus, @$); - } - ; - -AddList // - : term - | AddList AddOperator term { - $$ = new bin_expr($1, $3, $2, @$); - } - ; - -term // - : factor - | factor MultOperator FactorList { - $$ = new bin_expr($1, $3, $2, @$); - } - ; - -FactorList // - : factor - | FactorList MultOperator factor { - $$ = new bin_expr($1, $3, $2, @$); - } - ; - -factor // - : Designator { - $$ = $1; - } - | INTNUM { - $$ = new int32_const($1,@$); - } - | LONGINTNUM{ - $$ = new int64_const($1, @$); - } - | REALNUM { - $$ = new double_const($1, @$); - } - | TRUE { - $$ = new bool_const(true,@$); - } - | FALSE { - $$ = new bool_const(false,@$); - } - | CHAR_CONST { - $$ = new char_const($1, @$); - } - | STRING_CONST { - $$ = new string_const($1, @$); - } - | LPAREN expr RPAREN { - $$ = $2; - } - | NOT factor { - $$ = new un_expr($2,Operators.LogicalNOT,@$); - } - | SetConstant - ; - -Designator // ( , ...) TODO - : specifiedIdent { - $$ = $1; - } - | ComplexDesignator { - $$ = $1; - } - ; - -ComplexDesignator // TODO - : specifiedIdent COMMA ident { - $$ = new dot_node($1, $3, @$); - } - | specifiedIdent LBRACKET ExprList RBRACKET { - indexer indxr = new indexer(); - indxr.dereferencing_value = $1; - indxr.indexes = $3; - $$ = indxr; - $$.source_context = @$; - } - | ComplexDesignator COMMA ident { - $$ = new dot_node($1, $3, @$); - } - | ComplexDesignator LBRACKET ExprList RBRACKET { - indexer indxr = new indexer(); - indxr.dereferencing_value = $1; - indxr.indexes = $3; - $$ = indxr; - $$.source_context = @$; - } - ; - -ExprList // - : expr { - $$ = new expression_list($1, @$); - } - | ExprList COLUMN expr { - $$ = $1; - $$.Add($3, @3); - $$.source_context = @$; - } - ; - -AddOperator // - : MINUS { - $$ = Operators.Minus; - } - | PLUS { - $$ = Operators.Plus; - } - | OR { - $$ = Operators.LogicalOR; - } - ; - -MultOperator // - : MULT { - $$ = Operators.Multiplication; - } - | DIVIDE { - $$ = Operators.Division; - } - | DIV { - $$ = Operators.IntegerDivision; - } - | MOD { - $$ = Operators.ModulusRemainder; - } - | AND { - $$ = Operators.LogicalAND; - } - ; - -Statement // TODO - : Assignment - | IfStatement - | WhileStatement - | RepeatStatement - | ForStatement - | CaseStatement - | WriteStatement - | ProcCallStatement - | EmptyStatement - ; - -StatementSequence // () - : Statement { - $$ = new statement_list($1,@$); - } - | StatementSequence SEMICOLUMN Statement { - $1.Add($3,@$); - $$ = $1; - } - ; - -Assignment // - : Designator ASSIGN expr { - $$ = new assign($1, $3, Operators.Assignment, @$); - } - ; - -IfStatement // - : IF expr THEN StatementSequence ElseStatements END { - $$ = new if_node($2, $4, $5, @$); - } - | IF expr THEN StatementSequence ElseIfStatements END { - $$ = new if_node($2, $4, $5, @$); - } - ; - -ElseStatements // Else- - : ELSE StatementSequence { - $$ = $2; - $$.source_context = @$; - } - | { - $$ = null; - } - ; - -ElseIfStatements // ElseIf- - : ELSEIF expr THEN StatementSequence ElseStatements { - $$ = new if_node($2, $4, $5, @$); - } - | ELSEIF expr THEN StatementSequence ElseIfStatements{ - $$ = new if_node($2, $4, $5, @$); - } - ; - -WhileStatement // - : WHILE expr DO StatementSequence END { - $$ = new while_node($2, $4, WhileCycleType.While, @$); - } - ; - -RepeatStatement // - : REPEAT StatementSequence UNTIL expr { - $$ = new repeat_node($2, $4, @$); - } - ; - -ForStatement // - : FOR ident ASSIGN expr TO expr ForStep DO StatementSequence END { - expression step; - if ($7 != null) step = $7; - else step = new int32_const(1, @7); - // while - statement_list forStmnt = GetForThroughWhile($2, $4, $6, $9, step, @3, @$); - $$ = forStmnt; - $$.source_context = @$; - } - ; - -ForStep // - : BY ConstExpr { - int32_const step32 = $2 as int32_const; - if (step32 != null) { // ( ) - if (step32.val == 0) PT.AddError(" ", @1); - else $$ = new int32_const(step32.val, @$); - } - else { // , - un_expr stepMinus = $2 as un_expr; - int32_const stepMinusTerm = stepMinus.subnode as int32_const; - bool signMinus = (stepMinusTerm != null) && (stepMinus.operation_type == Operators.Minus); - if (signMinus) - if (stepMinusTerm.val == 0) - PT.AddError(" ", @1); - else - $$ = new un_expr(stepMinusTerm, Operators.Minus, @2); - else - PT.AddError(" ", @1); - } - } - | { - $$ = null; - } - ; - -CaseStatement // - : CASE expr OF CaseVariantList ElseBranch END { - $$ = new case_node($2, $4, $5, @$); - } - ; - -CaseVariantList // CASE - : CaseVariant { - $$ = new case_variants(); - $$.Add($1); - $$.source_context = @$; - } - | CaseVariantList PIPE CaseVariant { - $$ = $1; - $$.Add($3); - $$.source_context = @$; - } - | { - $$ = new case_variants(); - } - ; - -CaseVariant // CASE - : CaseVariantLabelList COLON StatementSequence { - $$ = new case_variant($1, $3, @$); - } - ; - -CaseVariantLabelList // - : CaseVariantLabels { - $$ = new expression_list($1, @$); - } - | CaseVariantLabelList COLUMN CaseVariantLabels { - $$ = $1; - $$.Add($3, @3); - $$.source_context = @$; - } - ; - -CaseVariantLabels // - : ConstExpr { - $$ = $1; - } - | ConstExpr DOUBLEPOINT ConstExpr { - $$ = new diapason_expr($1, $3, @$); - } - ; - -ElseBranch // ELSE CASE - : ELSE StatementSequence { - $$ = $2; - $$.source_context = @$; - } - | { - $$ = null; - } - ; - -WriteStatement - : EXCLAMATION expr { - expression_list el = new expression_list($2,@$); - method_call mc = new method_call(el); - mc.dereferencing_value = new ident("print"); - $$ = mc; - } - ; - -factparams - : expr { - $$ = new expression_list($1,@$); - } - | factparams COLUMN expr { - $1.Add($3,@$); - $$ = $1; - } - ; - -ProcCallStatement - : ident LPAREN factparams RPAREN { - $$ = new method_call($1,$3,@$); - } - ; - -EmptyStatement // - : { - $$ = new empty_statement(); - } - ; - -IDList // - : identDef { - $$=new ident_list($1,@$); - - } - | IDList COLUMN identDef { - $1.Add($3,@$); - $$ = $1; - } - ; - -VarDecl // - : IDList COLON TypeDef SEMICOLUMN { - $$ = new var_def_statement($1, $3, null, definition_attribute.None, false, @$); - } - ; - -VarDeclarations // - : VarDecl { - $$ = new variable_definitions($1,@$); - } - | VarDeclarations VarDecl { - $1.Add($2,@$); - $$ = $1; - } - ; - - -ConstDecl // - : identDef EQ ConstExpr SEMICOLUMN { - $$ = new simple_const_definition($1,$3,@$); - } - ; - -ConstExpr // - : expr - ; - -ConstDeclarations // - : ConstDecl { - $$ = new consts_definitions_list($1,@$); - } - | ConstDeclarations ConstDecl { - $1.Add($2,@$); - $$ = $1; - } - ; - -ConstDeclarationsSect // - : CONST ConstDeclarations { - $$ = $2; - $$.source_context = @$; - } - ; - -VarDeclarationsSect // - : VAR VarDeclarations { - $$ = $2; - $$.source_context = @$; - } - ; - -TypeDeclarationsSect // - : TYPE TypeDeclarations { - $$ = $2; - $$.source_context = @$; - } - ; - -TypeDeclarations // - : TypeDecl { - $$ = new type_declarations(); - $$.Add($1); - $$.source_context = @$; - } - | TypeDeclarations TypeDecl { - $$ = $1; - $$.Add($2); - $$.source_context = @$; - } - ; - -TypeDecl // - : identDef EQ TypeDef SEMICOLUMN { - $$ = new type_declaration($1, $3, @$); - } - ; - -TypeDef // TODO - : complexTypeIdent { - $$ = $1; - } - | ArrayType { - $$ = $1; - $$.source_context = @$; - } - | RecordType { - $$ = $1; - $$.source_context = @$; - } - | PointerType { - $$ = $1; - $$.source_context = @$; - } - ; - -ArrayType // TODO - : ARRAY OF TypeDef { - // - diapason dp = new diapason(new int32_const(0), new int32_const(0)); - indexers_types inxr = new indexers_types(); - inxr.Add(dp); - $$ = new array_type(inxr, $3, @$); - } - | ARRAY LengthList OF TypeDef { - // array n of char, - named_type_reference ntr = $4 as named_type_reference; - bool complexArr = (ntr != null) && (ntr.names.Count == 1) && - (ntr.names[0].name == "char"); - if (complexArr) - $$ = GetArrWithStrInsteadCharArr($2, @2, @$); - else - $$ = new array_type($2, $4, @$); - } - ; - -RecordType // TODO - : RECORD END COLUMN { - - } - ; - -LengthList // - : Length { - $$ = new indexers_types(); - $$.source_context = @$; - $$.Add($1); - } - | LengthList COLUMN Length { - $$ = $1; - $$.source_context = @$; - $$.Add($3); - } - ; - -Length // - : ConstExpr { - // - // , - object[] types = {$1}; - bool isLength = typeof(int32_const) == System.Type.GetTypeArray(types)[0]; - if (isLength) - $$ = GetDiapasonByArrLength($1, @$); - else - PT.AddError(" ", @1); - } - ; - -PointerType // - : POINTER TO TypeDef { - $$ = new ref_type($3, @$); - } - ; - -complexTypeIdent // (id1.id2.id3) - : ident { - $$ = new named_type_reference(PT.InternalTypeName($1.name), @$); - } - | complexTypeIdent COMMA ident { - $$ = $1; - $$.Add(PT.InternalTypeName($3.name)); - $$.source_context = @$; - } - ; - -DeclarationsSect // TODO - : VarDeclarationsSect { - $$ = $1; - } - | ConstDeclarationsSect { - $$ = $1; - } - | TypeDeclarationsSect { - $$ = $1; - } - | ProcedureDeclarationSect { - $$ = $1; - } - ; - -Declarations // - : { - $$ = new declarations(); - } - | Declarations DeclarationsSect { - if ($2 != null) - $1.Add($2); - $$ = $1; - $$.source_context = @$; // , .. - // (, ) - } - ; - -ProcedureDeclarationSect - : PROCEDURE ident maybeformalparams maybereturn SEMICOLUMN mainblock ident SEMICOLUMN { - - } - ; - -maybeformalparams - : { - //$$ = null; - } - | LPAREN FPList RPAREN { - //$$ = $2; - } - ; - -maybereturn // TODO - : { - - } - | COLUMN TypeDef { - - } - ; - -FPList - : FPSect { - - } - | FPList SEMICOLUMN FPSect { - - } - ; - -FPSect - : maybevar IDList COLON TypeDef { - - } - ; - -maybevar - : { - $$ = false; - } - | VAR { - $$ = true; - } - ; -%% - -/* , - for, while */ -public static statement_list GetForThroughWhile(ident id, expression expr, expression endExpr, statement_list stmnts, - expression step, SourceContext assignSC, SourceContext wholeSC){ - // while - statement_list forStmnt = new statement_list(); - ident endFor = new ident("_oberon_for_end_"); - forStmnt.Add(new var_statement(new var_def_statement( - new ident_list("_oberon_for_end_"), - new named_type_reference("integer", null), - endExpr, - definition_attribute.None, - false)) - ); - forStmnt.Add( new assign(id, expr, Operators.Assignment, assignSC) ); - statement_list posStatementList = new statement_list(); // - posStatementList.Add(stmnts); - posStatementList.Add( new assign(id, step, Operators.AssignmentAddition) ); - while_node posWhile = new while_node( - new bin_expr(id, endFor, Operators.LessEqual), - posStatementList, - WhileCycleType.While); - statement_list negStatementList = new statement_list(); // - negStatementList.Add(stmnts); - negStatementList.Add( new assign(id, step, Operators.AssignmentAddition) ); - while_node negWhile = new while_node( - new bin_expr(id, endFor, Operators.GreaterEqual), - negStatementList, - WhileCycleType.While); - forStmnt.Add( new if_node( - new bin_expr(step, new int32_const(0), Operators.Greater), - posWhile, - negWhile, - wholeSC)); - return forStmnt; -} - -/* , - */ -public static type_definition GetArrWithStrInsteadCharArr(indexers_types lenList, - SourceContext lenListSC, SourceContext wholeSC){ - List indxrs = lenList.indexers; - diapason dp = indxrs[indxrs.Count - 1] as diapason; - int32_const len = new int32_const(); - len.val = (dp.right as int32_const).val + 1; - type_definition result = new string_num_definition(len, new ident("string", lenListSC), wholeSC); - if (indxrs.Count > 1) { // ... - indxrs.RemoveAt(indxrs.Count - 1); - result = new array_type(lenList, result, wholeSC); - } - return result; -} - -/* 0..Length-1, - , */ -public static diapason GetDiapasonByArrLength(expression lenExpr, SourceContext lenSC){ - int32_const zero = new int32_const(); - zero.val = 0; - int32_const max = (int32_const)lenExpr; - max.val = max.val - 1; - return new diapason(zero, max, lenSC); -} diff --git a/Grammars/Oberon10Independent (by Juliet)/oberon00yacc.cs b/Grammars/Oberon10Independent (by Juliet)/oberon00yacc.cs deleted file mode 100644 index 715a644b1..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/oberon00yacc.cs +++ /dev/null @@ -1,1353 +0,0 @@ -// This code was generated by the Gardens Point Parser Generator -// Copyright (c) Wayne Kelly, QUT 2005-2010 -// (see accompanying GPPGcopyright.rtf) - -// GPPG version 1.3.6 -// Machine: SSM -// DateTime: 13.03.2013 16:51:39 -// UserName: ????????? -// Input file - -// options: no-lines gplex - -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Text; -using QUT.Gppg; -using PascalABCCompiler.SyntaxTree; -using PascalABCCompiler.Errors; -using PascalABCCompiler.Oberon00Parser; - -namespace GPPGParserScanner -{ -public enum Tokens { - error=1,EOF=2,ID=3,STRING_CONST=4,INTNUM=5,REALNUM=6, - LONGINTNUM=7,TRUE=8,FALSE=9,CHAR_CONST=10,PLUS=11,MINUS=12, - MULT=13,DIVIDE=14,AND=15,OR=16,LT=17,GT=18, - LE=19,GE=20,EQ=21,NE=22,DIV=23,MOD=24, - NOT=25,ASSIGN=26,SEMICOLUMN=27,LPAREN=28,RPAREN=29,COLUMN=30, - COMMA=31,COLON=32,EXCLAMATION=33,LBRACE=34,RBRACE=35,DOUBLEPOINT=36, - LBRACKET=37,RBRACKET=38,PIPE=39,IF=40,THEN=41,ELSE=42, - ELSEIF=43,BEGIN=44,END=45,WHILE=46,DO=47,MODULE=48, - CONST=49,VAR=50,TYPE=51,INVISIBLE=52,PROCEDURE=53,ARRAY=54, - OF=55,RECORD=56,REPEAT=57,UNTIL=58,FOR=59,TO=60, - BY=61,CASE=62,POINTER=63,ODD=64,UMINUS=65,UPLUS=66}; - -public struct ValueType -{ - public bool bVal; - public string sVal; - public int iVal; - public long lVal; // Длинное целое - public char cVal; - public double rVal; - public pascal_set_constant sc; // Константа - множество - public named_type_reference ntr; // Именованное определение типа - public type_definition tdef; // Сам тип - public diapason dpsn; // Тип диапазон - public array_type arrt; // Тип массив - public class_definition cldef; // Определение записи - public indexers_types indts; // Тип типы индексов массива - public ref_type rft; // Тип указатель - public ident_list il; // Список идентификаторов - public ident id; // Идентификатор - public oberon_ident_with_export_marker obrid; // Обероновский уточненный идентификатор - public oberon_export_marker obrem; // Обероновская экспортная метка - public var_def_statement vds; // Описание переменных - public variable_definitions vdss; // Секция описания переменных - public type_declarations td; // Секция определения типов - public type_declaration tdec; // Описание типа - public expression ex; // Выражение - public expression_list el; // Список выражений - public Operators ops; // Операторы (операции) - public block bl; // Программный блок - public statement st; // Оператор программный - public statement_list sl; // Список операторов - public case_variants cvars; // Список вариантов оператора CASE - public case_variant cvar; // Вариант оператора CASE - public declaration decsec; // Описание - public declarations decl; // Список описаний - public simple_const_definition scd; // Определение константы - public consts_definitions_list cdl; // Список описаний констант - public procedure_definition pd; // Описание процедуры - public dot_node dn; // Узел в точечной нотации - public addressed_value adrv; // Адресованное значение - } -// Abstract base class for GPLEX scanners -public abstract class ScanBase : AbstractScanner { - private LexLocation __yylloc = new LexLocation(); - public override LexLocation yylloc { get { return __yylloc; } set { __yylloc = value; } } - protected virtual bool yywrap() { return true; } -} - -public class GPPGParser: ShiftReduceParser -{ - // Verbatim content from oberon00.y -// Эти объявления добавляются в класс GPPGParser, представляющий собой парсер, генерируемый системой gppg - public syntax_tree_node root; // Корневой узел синтаксического дерева - public GPPGParser(AbstractScanner scanner) : base(scanner) { } - // End verbatim content from oberon00.y - -#pragma warning disable 649 - private static Dictionary aliasses; -#pragma warning restore 649 - private static Rule[] rules = new Rule[147]; - private static State[] states = new State[253]; - private static string[] nonTerms = new string[] { - "module", "ident", "specifiedIdent", "identDef", "ExportLabel", "IDList", - "complexTypeIdent", "SetConstant", "SetElemList", "expr", "ConstExpr", - "SetElem", "SimpleExpr", "ForStep", "CaseVariantLabels", "term", "signedTerm", - "factor", "AddList", "FactorList", "Assignment", "IfStatement", "ElseIfStatements", - "ElseStatements", "WhileStatement", "WriteStatement", "RepeatStatement", - "Statement", "ForStatement", "CaseStatement", "ElseBranch", "EmptyStatement", - "ProcCallStatement", "StatementSequence", "CaseVariantList", "CaseVariant", - "Declarations", "DeclarationsSect", "VarDecl", "VarDeclarations", "VarDeclarationsSect", - "ConstDecl", "ConstDeclarations", "ConstDeclarationsSect", "TypeDeclarationsSect", - "TypeDeclarations", "TypeDecl", "TypeDef", "ArrayType", "PointerType", - "RecordType", "ProcedureDeclarationSect", "mainblock", "factparams", "ExprList", - "CaseVariantLabelList", "Length", "LengthList", "AddOperator", "MultOperator", - "Relation", "ComplexDesignator", "Designator", "maybevar", "$accept", "maybeformalparams", - "maybereturn", "FPList", "FPSect", }; - - static GPPGParser() { - states[0] = new State(new int[]{48,3,52,251},new int[]{-1,1}); - states[1] = new State(new int[]{2,2}); - states[2] = new State(-1); - states[3] = new State(new int[]{3,9},new int[]{-2,4}); - states[4] = new State(new int[]{27,5}); - states[5] = new State(-135,new int[]{-53,6,-37,10}); - states[6] = new State(new int[]{3,9},new int[]{-2,7}); - states[7] = new State(new int[]{31,8}); - states[8] = new State(-2); - states[9] = new State(-4); - states[10] = new State(new int[]{44,11,50,173,49,212,51,221,53,230},new int[]{-38,171,-41,172,-44,211,-45,220,-52,229}); - states[11] = new State(new int[]{3,9,40,103,46,115,57,121,59,126,62,137,33,149,45,-102,27,-102},new int[]{-34,12,-28,113,-21,16,-63,17,-3,34,-2,95,-62,46,-22,102,-25,114,-27,120,-29,125,-30,136,-26,148,-33,151,-32,152}); - states[12] = new State(new int[]{45,13,27,14}); - states[13] = new State(-11); - states[14] = new State(new int[]{3,9,40,103,46,115,57,121,59,126,62,137,33,149,45,-102,27,-102,42,-102,43,-102,58,-102,39,-102},new int[]{-28,15,-21,16,-63,17,-3,34,-2,95,-62,46,-22,102,-25,114,-27,120,-29,125,-30,136,-26,148,-33,151,-32,152}); - states[15] = new State(-74); - states[16] = new State(-64); - states[17] = new State(new int[]{26,18}); - states[18] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,19,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[19] = new State(-75); - states[20] = new State(new int[]{21,89,22,90,17,91,19,92,18,93,20,94,45,-18,27,-18,42,-18,43,-18,58,-18,39,-18,38,-18,30,-18,29,-18,36,-18,35,-18,41,-18,47,-18,60,-18,61,-18,55,-18,32,-18,2,-18},new int[]{-61,21}); - states[21] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-13,22,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[22] = new State(-19); - states[23] = new State(new int[]{12,85,11,86,16,87,21,-26,22,-26,17,-26,19,-26,18,-26,20,-26,45,-26,27,-26,42,-26,43,-26,58,-26,39,-26,38,-26,30,-26,29,-26,36,-26,35,-26,41,-26,47,-26,60,-26,61,-26,55,-26,32,-26,2,-26},new int[]{-59,24}); - states[24] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66},new int[]{-19,25,-16,88,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[25] = new State(new int[]{12,85,11,86,16,87,21,-27,22,-27,17,-27,19,-27,18,-27,20,-27,45,-27,27,-27,42,-27,43,-27,58,-27,39,-27,38,-27,30,-27,29,-27,36,-27,35,-27,41,-27,47,-27,60,-27,61,-27,55,-27,32,-27,2,-27},new int[]{-59,26}); - states[26] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66},new int[]{-16,27,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[27] = new State(-32); - states[28] = new State(new int[]{13,79,14,80,23,81,24,82,15,83,12,-33,11,-33,16,-33,21,-33,22,-33,17,-33,19,-33,18,-33,20,-33,45,-33,27,-33,42,-33,43,-33,58,-33,39,-33,38,-33,30,-33,29,-33,36,-33,35,-33,41,-33,47,-33,60,-33,61,-33,55,-33,32,-33,2,-33},new int[]{-60,29}); - states[29] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66},new int[]{-20,30,-18,84,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[30] = new State(new int[]{13,79,14,80,23,81,24,82,15,83,12,-34,11,-34,16,-34,21,-34,22,-34,17,-34,19,-34,18,-34,20,-34,45,-34,27,-34,42,-34,43,-34,58,-34,39,-34,38,-34,30,-34,29,-34,36,-34,35,-34,41,-34,47,-34,60,-34,61,-34,55,-34,32,-34,2,-34},new int[]{-60,31}); - states[31] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66},new int[]{-18,32,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[32] = new State(-36); - states[33] = new State(-37); - states[34] = new State(new int[]{31,35,37,37,26,-48,13,-48,14,-48,23,-48,24,-48,15,-48,12,-48,11,-48,16,-48,21,-48,22,-48,17,-48,19,-48,18,-48,20,-48,45,-48,27,-48,42,-48,43,-48,58,-48,39,-48,38,-48,30,-48,29,-48,36,-48,35,-48,41,-48,47,-48,60,-48,61,-48,55,-48,32,-48,2,-48}); - states[35] = new State(new int[]{3,9},new int[]{-2,36}); - states[36] = new State(-50); - states[37] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-55,38,-10,52,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[38] = new State(new int[]{38,39,30,40}); - states[39] = new State(-51); - states[40] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,41,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[41] = new State(-55); - states[42] = new State(-28); - states[43] = new State(new int[]{31,44,37,-6,13,-6,14,-6,23,-6,24,-6,15,-6,12,-6,11,-6,16,-6,21,-6,22,-6,17,-6,19,-6,18,-6,20,-6,45,-6,27,-6,42,-6,43,-6,58,-6,39,-6,38,-6,30,-6,29,-6,36,-6,35,-6,41,-6,47,-6,60,-6,61,-6,55,-6,32,-6,2,-6}); - states[44] = new State(new int[]{3,9},new int[]{-2,45}); - states[45] = new State(-5); - states[46] = new State(new int[]{31,47,37,49,26,-49,13,-49,14,-49,23,-49,24,-49,15,-49,12,-49,11,-49,16,-49,21,-49,22,-49,17,-49,19,-49,18,-49,20,-49,45,-49,27,-49,42,-49,43,-49,58,-49,39,-49,38,-49,30,-49,29,-49,36,-49,35,-49,41,-49,47,-49,60,-49,61,-49,55,-49,32,-49,2,-49}); - states[47] = new State(new int[]{3,9},new int[]{-2,48}); - states[48] = new State(-52); - states[49] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-55,50,-10,52,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[50] = new State(new int[]{38,51,30,40}); - states[51] = new State(-53); - states[52] = new State(-54); - states[53] = new State(-38); - states[54] = new State(-39); - states[55] = new State(-40); - states[56] = new State(-41); - states[57] = new State(-42); - states[58] = new State(-43); - states[59] = new State(-44); - states[60] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,61,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[61] = new State(new int[]{29,62}); - states[62] = new State(-45); - states[63] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66},new int[]{-18,64,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[64] = new State(-46); - states[65] = new State(-47); - states[66] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76,35,-15,30,-15},new int[]{-9,67,-12,78,-10,71,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[67] = new State(new int[]{35,68,30,69}); - states[68] = new State(-12); - states[69] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-12,70,-10,71,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[70] = new State(-14); - states[71] = new State(new int[]{36,72,35,-16,30,-16}); - states[72] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,73,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[73] = new State(-17); - states[74] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66},new int[]{-16,75,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[75] = new State(-29); - states[76] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66},new int[]{-16,77,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[77] = new State(-30); - states[78] = new State(-13); - states[79] = new State(-59); - states[80] = new State(-60); - states[81] = new State(-61); - states[82] = new State(-62); - states[83] = new State(-63); - states[84] = new State(-35); - states[85] = new State(-56); - states[86] = new State(-57); - states[87] = new State(-58); - states[88] = new State(-31); - states[89] = new State(-20); - states[90] = new State(-21); - states[91] = new State(-22); - states[92] = new State(-23); - states[93] = new State(-24); - states[94] = new State(-25); - states[95] = new State(new int[]{31,44,28,96,37,-6,26,-6}); - states[96] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-54,97,-10,101,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[97] = new State(new int[]{29,98,30,99}); - states[98] = new State(-101); - states[99] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,100,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[100] = new State(-100); - states[101] = new State(-99); - states[102] = new State(-65); - states[103] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,104,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[104] = new State(new int[]{41,105}); - states[105] = new State(new int[]{3,9,40,103,46,115,57,121,59,126,62,137,33,149,27,-102,42,-102,43,-102,45,-102},new int[]{-34,106,-28,113,-21,16,-63,17,-3,34,-2,95,-62,46,-22,102,-25,114,-27,120,-29,125,-30,136,-26,148,-33,151,-32,152}); - states[106] = new State(new int[]{27,14,42,111,43,165,45,-79},new int[]{-24,107,-23,109}); - states[107] = new State(new int[]{45,108}); - states[108] = new State(-76); - states[109] = new State(new int[]{45,110}); - states[110] = new State(-77); - states[111] = new State(new int[]{3,9,40,103,46,115,57,121,59,126,62,137,33,149,27,-102,45,-102},new int[]{-34,112,-28,113,-21,16,-63,17,-3,34,-2,95,-62,46,-22,102,-25,114,-27,120,-29,125,-30,136,-26,148,-33,151,-32,152}); - states[112] = new State(new int[]{27,14,45,-78}); - states[113] = new State(-73); - states[114] = new State(-66); - states[115] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,116,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[116] = new State(new int[]{47,117}); - states[117] = new State(new int[]{3,9,40,103,46,115,57,121,59,126,62,137,33,149,45,-102,27,-102},new int[]{-34,118,-28,113,-21,16,-63,17,-3,34,-2,95,-62,46,-22,102,-25,114,-27,120,-29,125,-30,136,-26,148,-33,151,-32,152}); - states[118] = new State(new int[]{45,119,27,14}); - states[119] = new State(-82); - states[120] = new State(-67); - states[121] = new State(new int[]{3,9,40,103,46,115,57,121,59,126,62,137,33,149,58,-102,27,-102},new int[]{-34,122,-28,113,-21,16,-63,17,-3,34,-2,95,-62,46,-22,102,-25,114,-27,120,-29,125,-30,136,-26,148,-33,151,-32,152}); - states[122] = new State(new int[]{58,123,27,14}); - states[123] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,124,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[124] = new State(-83); - states[125] = new State(-68); - states[126] = new State(new int[]{3,9},new int[]{-2,127}); - states[127] = new State(new int[]{26,128}); - states[128] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,129,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[129] = new State(new int[]{60,130}); - states[130] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,131,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[131] = new State(new int[]{61,163,47,-86},new int[]{-14,132}); - states[132] = new State(new int[]{47,133}); - states[133] = new State(new int[]{3,9,40,103,46,115,57,121,59,126,62,137,33,149,45,-102,27,-102},new int[]{-34,134,-28,113,-21,16,-63,17,-3,34,-2,95,-62,46,-22,102,-25,114,-27,120,-29,125,-30,136,-26,148,-33,151,-32,152}); - states[134] = new State(new int[]{45,135,27,14}); - states[135] = new State(-84); - states[136] = new State(-69); - states[137] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,138,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[138] = new State(new int[]{55,139}); - states[139] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76,39,-90,42,-90,45,-90},new int[]{-35,140,-36,162,-56,145,-15,159,-11,155,-10,158,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[140] = new State(new int[]{39,143,42,160,45,-97},new int[]{-31,141}); - states[141] = new State(new int[]{45,142}); - states[142] = new State(-87); - states[143] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-36,144,-56,145,-15,159,-11,155,-10,158,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[144] = new State(-89); - states[145] = new State(new int[]{32,146,30,153}); - states[146] = new State(new int[]{3,9,40,103,46,115,57,121,59,126,62,137,33,149,27,-102,39,-102,42,-102,45,-102},new int[]{-34,147,-28,113,-21,16,-63,17,-3,34,-2,95,-62,46,-22,102,-25,114,-27,120,-29,125,-30,136,-26,148,-33,151,-32,152}); - states[147] = new State(new int[]{27,14,39,-91,42,-91,45,-91}); - states[148] = new State(-70); - states[149] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,150,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[150] = new State(-98); - states[151] = new State(-71); - states[152] = new State(-72); - states[153] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-15,154,-11,155,-10,158,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[154] = new State(-93); - states[155] = new State(new int[]{36,156,32,-94,30,-94}); - states[156] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-11,157,-10,158,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[157] = new State(-95); - states[158] = new State(-109); - states[159] = new State(-92); - states[160] = new State(new int[]{3,9,40,103,46,115,57,121,59,126,62,137,33,149,27,-102,45,-102},new int[]{-34,161,-28,113,-21,16,-63,17,-3,34,-2,95,-62,46,-22,102,-25,114,-27,120,-29,125,-30,136,-26,148,-33,151,-32,152}); - states[161] = new State(new int[]{27,14,45,-96}); - states[162] = new State(-88); - states[163] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-11,164,-10,158,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[164] = new State(-85); - states[165] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,166,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[166] = new State(new int[]{41,167}); - states[167] = new State(new int[]{3,9,40,103,46,115,57,121,59,126,62,137,33,149,27,-102,42,-102,43,-102,45,-102},new int[]{-34,168,-28,113,-21,16,-63,17,-3,34,-2,95,-62,46,-22,102,-25,114,-27,120,-29,125,-30,136,-26,148,-33,151,-32,152}); - states[168] = new State(new int[]{27,14,42,111,43,165,45,-79},new int[]{-24,169,-23,170}); - states[169] = new State(-80); - states[170] = new State(-81); - states[171] = new State(-136); - states[172] = new State(-131); - states[173] = new State(new int[]{3,9},new int[]{-40,174,-39,210,-6,176,-4,209,-2,205}); - states[174] = new State(new int[]{3,9,44,-113,50,-113,49,-113,51,-113,53,-113},new int[]{-39,175,-6,176,-4,209,-2,205}); - states[175] = new State(-107); - states[176] = new State(new int[]{32,177,30,203}); - states[177] = new State(new int[]{3,9,54,185,56,189,63,193},new int[]{-48,178,-7,180,-2,183,-49,184,-51,188,-50,192}); - states[178] = new State(new int[]{27,179}); - states[179] = new State(-105); - states[180] = new State(new int[]{31,181,27,-118,29,-118}); - states[181] = new State(new int[]{3,9},new int[]{-2,182}); - states[182] = new State(-130); - states[183] = new State(-129); - states[184] = new State(-119); - states[185] = new State(new int[]{55,186,3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-58,196,-57,202,-11,201,-10,158,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[186] = new State(new int[]{3,9,54,185,56,189,63,193},new int[]{-48,187,-7,180,-2,183,-49,184,-51,188,-50,192}); - states[187] = new State(-122); - states[188] = new State(-120); - states[189] = new State(new int[]{45,190}); - states[190] = new State(new int[]{30,191}); - states[191] = new State(-124); - states[192] = new State(-121); - states[193] = new State(new int[]{60,194}); - states[194] = new State(new int[]{3,9,54,185,56,189,63,193},new int[]{-48,195,-7,180,-2,183,-49,184,-51,188,-50,192}); - states[195] = new State(-128); - states[196] = new State(new int[]{55,197,30,199}); - states[197] = new State(new int[]{3,9,54,185,56,189,63,193},new int[]{-48,198,-7,180,-2,183,-49,184,-51,188,-50,192}); - states[198] = new State(-123); - states[199] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-57,200,-11,201,-10,158,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[200] = new State(-126); - states[201] = new State(-127); - states[202] = new State(-125); - states[203] = new State(new int[]{3,9},new int[]{-4,204,-2,205}); - states[204] = new State(-104); - states[205] = new State(new int[]{13,207,12,208,32,-10,30,-10,21,-10},new int[]{-5,206}); - states[206] = new State(-7); - states[207] = new State(-8); - states[208] = new State(-9); - states[209] = new State(-103); - states[210] = new State(-106); - states[211] = new State(-132); - states[212] = new State(new int[]{3,9},new int[]{-43,213,-42,219,-4,215,-2,205}); - states[213] = new State(new int[]{3,9,44,-112,50,-112,49,-112,51,-112,53,-112},new int[]{-42,214,-4,215,-2,205}); - states[214] = new State(-111); - states[215] = new State(new int[]{21,216}); - states[216] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-11,217,-10,158,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[217] = new State(new int[]{27,218}); - states[218] = new State(-108); - states[219] = new State(-110); - states[220] = new State(-133); - states[221] = new State(new int[]{3,9},new int[]{-46,222,-47,228,-4,224,-2,205}); - states[222] = new State(new int[]{3,9,44,-114,50,-114,49,-114,51,-114,53,-114},new int[]{-47,223,-4,224,-2,205}); - states[223] = new State(-116); - states[224] = new State(new int[]{21,225}); - states[225] = new State(new int[]{3,9,54,185,56,189,63,193},new int[]{-48,226,-7,180,-2,183,-49,184,-51,188,-50,192}); - states[226] = new State(new int[]{27,227}); - states[227] = new State(-117); - states[228] = new State(-115); - states[229] = new State(-134); - states[230] = new State(new int[]{3,9},new int[]{-2,231}); - states[231] = new State(new int[]{28,240,30,-138,27,-138},new int[]{-66,232}); - states[232] = new State(new int[]{30,238,27,-140},new int[]{-67,233}); - states[233] = new State(new int[]{27,234}); - states[234] = new State(-135,new int[]{-53,235,-37,10}); - states[235] = new State(new int[]{3,9},new int[]{-2,236}); - states[236] = new State(new int[]{27,237}); - states[237] = new State(-137); - states[238] = new State(new int[]{3,9,54,185,56,189,63,193},new int[]{-48,239,-7,180,-2,183,-49,184,-51,188,-50,192}); - states[239] = new State(-141); - states[240] = new State(new int[]{50,249,3,-145},new int[]{-68,241,-69,250,-64,245}); - states[241] = new State(new int[]{29,242,27,243}); - states[242] = new State(-139); - states[243] = new State(new int[]{50,249,3,-145},new int[]{-69,244,-64,245}); - states[244] = new State(-143); - states[245] = new State(new int[]{3,9},new int[]{-6,246,-4,209,-2,205}); - states[246] = new State(new int[]{32,247,30,203}); - states[247] = new State(new int[]{3,9,54,185,56,189,63,193},new int[]{-48,248,-7,180,-2,183,-49,184,-51,188,-50,192}); - states[248] = new State(-144); - states[249] = new State(-146); - states[250] = new State(-142); - states[251] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,252,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[252] = new State(-3); - - rules[1] = new Rule(-65, new int[]{-1,2}); - rules[2] = new Rule(-1, new int[]{48,-2,27,-53,-2,31}); - rules[3] = new Rule(-1, new int[]{52,-10}); - rules[4] = new Rule(-2, new int[]{3}); - rules[5] = new Rule(-3, new int[]{-2,31,-2}); - rules[6] = new Rule(-3, new int[]{-2}); - rules[7] = new Rule(-4, new int[]{-2,-5}); - rules[8] = new Rule(-5, new int[]{13}); - rules[9] = new Rule(-5, new int[]{12}); - rules[10] = new Rule(-5, new int[]{}); - rules[11] = new Rule(-53, new int[]{-37,44,-34,45}); - rules[12] = new Rule(-8, new int[]{34,-9,35}); - rules[13] = new Rule(-9, new int[]{-12}); - rules[14] = new Rule(-9, new int[]{-9,30,-12}); - rules[15] = new Rule(-9, new int[]{}); - rules[16] = new Rule(-12, new int[]{-10}); - rules[17] = new Rule(-12, new int[]{-10,36,-10}); - rules[18] = new Rule(-10, new int[]{-13}); - rules[19] = new Rule(-10, new int[]{-13,-61,-13}); - rules[20] = new Rule(-61, new int[]{21}); - rules[21] = new Rule(-61, new int[]{22}); - rules[22] = new Rule(-61, new int[]{17}); - rules[23] = new Rule(-61, new int[]{19}); - rules[24] = new Rule(-61, new int[]{18}); - rules[25] = new Rule(-61, new int[]{20}); - rules[26] = new Rule(-13, new int[]{-17}); - rules[27] = new Rule(-13, new int[]{-17,-59,-19}); - rules[28] = new Rule(-17, new int[]{-16}); - rules[29] = new Rule(-17, new int[]{12,-16}); - rules[30] = new Rule(-17, new int[]{11,-16}); - rules[31] = new Rule(-19, new int[]{-16}); - rules[32] = new Rule(-19, new int[]{-19,-59,-16}); - rules[33] = new Rule(-16, new int[]{-18}); - rules[34] = new Rule(-16, new int[]{-18,-60,-20}); - rules[35] = new Rule(-20, new int[]{-18}); - rules[36] = new Rule(-20, new int[]{-20,-60,-18}); - rules[37] = new Rule(-18, new int[]{-63}); - rules[38] = new Rule(-18, new int[]{5}); - rules[39] = new Rule(-18, new int[]{7}); - rules[40] = new Rule(-18, new int[]{6}); - rules[41] = new Rule(-18, new int[]{8}); - rules[42] = new Rule(-18, new int[]{9}); - rules[43] = new Rule(-18, new int[]{10}); - rules[44] = new Rule(-18, new int[]{4}); - rules[45] = new Rule(-18, new int[]{28,-10,29}); - rules[46] = new Rule(-18, new int[]{25,-18}); - rules[47] = new Rule(-18, new int[]{-8}); - rules[48] = new Rule(-63, new int[]{-3}); - rules[49] = new Rule(-63, new int[]{-62}); - rules[50] = new Rule(-62, new int[]{-3,31,-2}); - rules[51] = new Rule(-62, new int[]{-3,37,-55,38}); - rules[52] = new Rule(-62, new int[]{-62,31,-2}); - rules[53] = new Rule(-62, new int[]{-62,37,-55,38}); - rules[54] = new Rule(-55, new int[]{-10}); - rules[55] = new Rule(-55, new int[]{-55,30,-10}); - rules[56] = new Rule(-59, new int[]{12}); - rules[57] = new Rule(-59, new int[]{11}); - rules[58] = new Rule(-59, new int[]{16}); - rules[59] = new Rule(-60, new int[]{13}); - rules[60] = new Rule(-60, new int[]{14}); - rules[61] = new Rule(-60, new int[]{23}); - rules[62] = new Rule(-60, new int[]{24}); - rules[63] = new Rule(-60, new int[]{15}); - rules[64] = new Rule(-28, new int[]{-21}); - rules[65] = new Rule(-28, new int[]{-22}); - rules[66] = new Rule(-28, new int[]{-25}); - rules[67] = new Rule(-28, new int[]{-27}); - rules[68] = new Rule(-28, new int[]{-29}); - rules[69] = new Rule(-28, new int[]{-30}); - rules[70] = new Rule(-28, new int[]{-26}); - rules[71] = new Rule(-28, new int[]{-33}); - rules[72] = new Rule(-28, new int[]{-32}); - rules[73] = new Rule(-34, new int[]{-28}); - rules[74] = new Rule(-34, new int[]{-34,27,-28}); - rules[75] = new Rule(-21, new int[]{-63,26,-10}); - rules[76] = new Rule(-22, new int[]{40,-10,41,-34,-24,45}); - rules[77] = new Rule(-22, new int[]{40,-10,41,-34,-23,45}); - rules[78] = new Rule(-24, new int[]{42,-34}); - rules[79] = new Rule(-24, new int[]{}); - rules[80] = new Rule(-23, new int[]{43,-10,41,-34,-24}); - rules[81] = new Rule(-23, new int[]{43,-10,41,-34,-23}); - rules[82] = new Rule(-25, new int[]{46,-10,47,-34,45}); - rules[83] = new Rule(-27, new int[]{57,-34,58,-10}); - rules[84] = new Rule(-29, new int[]{59,-2,26,-10,60,-10,-14,47,-34,45}); - rules[85] = new Rule(-14, new int[]{61,-11}); - rules[86] = new Rule(-14, new int[]{}); - rules[87] = new Rule(-30, new int[]{62,-10,55,-35,-31,45}); - rules[88] = new Rule(-35, new int[]{-36}); - rules[89] = new Rule(-35, new int[]{-35,39,-36}); - rules[90] = new Rule(-35, new int[]{}); - rules[91] = new Rule(-36, new int[]{-56,32,-34}); - rules[92] = new Rule(-56, new int[]{-15}); - rules[93] = new Rule(-56, new int[]{-56,30,-15}); - rules[94] = new Rule(-15, new int[]{-11}); - rules[95] = new Rule(-15, new int[]{-11,36,-11}); - rules[96] = new Rule(-31, new int[]{42,-34}); - rules[97] = new Rule(-31, new int[]{}); - rules[98] = new Rule(-26, new int[]{33,-10}); - rules[99] = new Rule(-54, new int[]{-10}); - rules[100] = new Rule(-54, new int[]{-54,30,-10}); - rules[101] = new Rule(-33, new int[]{-2,28,-54,29}); - rules[102] = new Rule(-32, new int[]{}); - rules[103] = new Rule(-6, new int[]{-4}); - rules[104] = new Rule(-6, new int[]{-6,30,-4}); - rules[105] = new Rule(-39, new int[]{-6,32,-48,27}); - rules[106] = new Rule(-40, new int[]{-39}); - rules[107] = new Rule(-40, new int[]{-40,-39}); - rules[108] = new Rule(-42, new int[]{-4,21,-11,27}); - rules[109] = new Rule(-11, new int[]{-10}); - rules[110] = new Rule(-43, new int[]{-42}); - rules[111] = new Rule(-43, new int[]{-43,-42}); - rules[112] = new Rule(-44, new int[]{49,-43}); - rules[113] = new Rule(-41, new int[]{50,-40}); - rules[114] = new Rule(-45, new int[]{51,-46}); - rules[115] = new Rule(-46, new int[]{-47}); - rules[116] = new Rule(-46, new int[]{-46,-47}); - rules[117] = new Rule(-47, new int[]{-4,21,-48,27}); - rules[118] = new Rule(-48, new int[]{-7}); - rules[119] = new Rule(-48, new int[]{-49}); - rules[120] = new Rule(-48, new int[]{-51}); - rules[121] = new Rule(-48, new int[]{-50}); - rules[122] = new Rule(-49, new int[]{54,55,-48}); - rules[123] = new Rule(-49, new int[]{54,-58,55,-48}); - rules[124] = new Rule(-51, new int[]{56,45,30}); - rules[125] = new Rule(-58, new int[]{-57}); - rules[126] = new Rule(-58, new int[]{-58,30,-57}); - rules[127] = new Rule(-57, new int[]{-11}); - rules[128] = new Rule(-50, new int[]{63,60,-48}); - rules[129] = new Rule(-7, new int[]{-2}); - rules[130] = new Rule(-7, new int[]{-7,31,-2}); - rules[131] = new Rule(-38, new int[]{-41}); - rules[132] = new Rule(-38, new int[]{-44}); - rules[133] = new Rule(-38, new int[]{-45}); - rules[134] = new Rule(-38, new int[]{-52}); - rules[135] = new Rule(-37, new int[]{}); - rules[136] = new Rule(-37, new int[]{-37,-38}); - rules[137] = new Rule(-52, new int[]{53,-2,-66,-67,27,-53,-2,27}); - rules[138] = new Rule(-66, new int[]{}); - rules[139] = new Rule(-66, new int[]{28,-68,29}); - rules[140] = new Rule(-67, new int[]{}); - rules[141] = new Rule(-67, new int[]{30,-48}); - rules[142] = new Rule(-68, new int[]{-69}); - rules[143] = new Rule(-68, new int[]{-68,27,-69}); - rules[144] = new Rule(-69, new int[]{-64,-6,32,-48}); - rules[145] = new Rule(-64, new int[]{}); - rules[146] = new Rule(-64, new int[]{50}); - } - - protected override void Initialize() { - this.InitSpecialTokens((int)Tokens.error, (int)Tokens.EOF); - this.InitStates(states); - this.InitRules(rules); - this.InitNonTerminals(nonTerms); - } - - protected override void DoAction(int action) - { - switch (action) - { - case 2: // module -> MODULE, ident, SEMICOLUMN, mainblock, ident, COMMA -{ - if (ValueStack[ValueStack.Depth-5].id.name != ValueStack[ValueStack.Depth-2].id.name) - PT.AddError("Имя " + ValueStack[ValueStack.Depth-2].id.name + " должно совпадать с именем модуля " + ValueStack[ValueStack.Depth-5].id.name, LocationStack[LocationStack.Depth-2]); - - // Подключение стандартного модуля Oberon00System, написанного на PascalABC.NET - var ul = new uses_list("Oberon00System"); - - // Формирование модуля основной программы (используется фабричный метод вместо конструктора) - root = program_module.create(ValueStack[ValueStack.Depth-5].id, ul, ValueStack[ValueStack.Depth-3].bl, CurrentLocationSpan); - } - break; - case 3: // module -> INVISIBLE, expr -{ // Для Intellisense - root = ValueStack[ValueStack.Depth-1].ex; - } - break; - case 4: // ident -> ID -{ - CurrentSemanticValue.id = new ident(ValueStack[ValueStack.Depth-1].sVal,CurrentLocationSpan); - } - break; - case 5: // specifiedIdent -> ident, COMMA, ident -{ - CurrentSemanticValue.adrv = new dot_node(ValueStack[ValueStack.Depth-3].id, ValueStack[ValueStack.Depth-1].id, CurrentLocationSpan); - } - break; - case 6: // specifiedIdent -> ident -{ - CurrentSemanticValue.adrv = ValueStack[ValueStack.Depth-1].id; - } - break; - case 7: // identDef -> ident, ExportLabel -{ - CurrentSemanticValue.obrid = new oberon_ident_with_export_marker(ValueStack[ValueStack.Depth-2].id.name, ValueStack[ValueStack.Depth-1].obrem, CurrentLocationSpan); - } - break; - case 8: // ExportLabel -> MULT -{ - CurrentSemanticValue.obrem = oberon_export_marker.export; - } - break; - case 9: // ExportLabel -> MINUS -{ - CurrentSemanticValue.obrem = oberon_export_marker.export_readonly; - } - break; - case 10: // ExportLabel -> /* empty */ -{ - //$$ = oberon_export_marker.nonexport; - CurrentSemanticValue.obrem = oberon_export_marker.export; - } - break; - case 11: // mainblock -> Declarations, BEGIN, StatementSequence, END -{ - CurrentSemanticValue.bl = new block(ValueStack[ValueStack.Depth-4].decl, ValueStack[ValueStack.Depth-2].sl, CurrentLocationSpan); - } - break; - case 12: // SetConstant -> LBRACE, SetElemList, RBRACE -{ - CurrentSemanticValue.sc = ValueStack[ValueStack.Depth-2].sc; - CurrentSemanticValue.sc.source_context = CurrentLocationSpan; - } - break; - case 13: // SetElemList -> SetElem -{ - CurrentSemanticValue.sc = new pascal_set_constant(); - CurrentSemanticValue.sc.Add(ValueStack[ValueStack.Depth-1].ex); - CurrentSemanticValue.sc.source_context = CurrentLocationSpan; - - } - break; - case 14: // SetElemList -> SetElemList, COLUMN, SetElem -{ - CurrentSemanticValue.sc = ValueStack[ValueStack.Depth-3].sc; - CurrentSemanticValue.sc.Add(ValueStack[ValueStack.Depth-1].ex); - CurrentSemanticValue.sc.source_context = CurrentLocationSpan; - } - break; - case 15: // SetElemList -> /* empty */ -{ - CurrentSemanticValue.sc = new pascal_set_constant(); - } - break; - case 17: // SetElem -> expr, DOUBLEPOINT, expr -{ - CurrentSemanticValue.ex = new diapason_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - } - break; - case 18: // expr -> SimpleExpr -{ - CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; - } - break; - case 19: // expr -> SimpleExpr, Relation, SimpleExpr -{ - CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].ops, CurrentLocationSpan); - } - break; - case 20: // Relation -> EQ -{ - CurrentSemanticValue.ops = Operators.Equal; - } - break; - case 21: // Relation -> NE -{ - CurrentSemanticValue.ops = Operators.NotEqual; - } - break; - case 22: // Relation -> LT -{ - CurrentSemanticValue.ops = Operators.Less; - } - break; - case 23: // Relation -> LE -{ - CurrentSemanticValue.ops = Operators.LessEqual; - } - break; - case 24: // Relation -> GT -{ - CurrentSemanticValue.ops = Operators.Greater; - } - break; - case 25: // Relation -> GE -{ - CurrentSemanticValue.ops = Operators.GreaterEqual; - } - break; - case 26: // SimpleExpr -> signedTerm -{ - CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; - CurrentSemanticValue.ex.source_context = CurrentLocationSpan; - } - break; - case 27: // SimpleExpr -> signedTerm, AddOperator, AddList -{ - CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].ops, CurrentLocationSpan); - } - break; - case 29: // signedTerm -> MINUS, term -{ - CurrentSemanticValue.ex = new un_expr(ValueStack[ValueStack.Depth-1].ex, Operators.Minus, CurrentLocationSpan); - } - break; - case 30: // signedTerm -> PLUS, term -{ - CurrentSemanticValue.ex = new un_expr(ValueStack[ValueStack.Depth-1].ex, Operators.Plus, CurrentLocationSpan); - } - break; - case 32: // AddList -> AddList, AddOperator, term -{ - CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].ops, CurrentLocationSpan); - } - break; - case 34: // term -> factor, MultOperator, FactorList -{ - CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].ops, CurrentLocationSpan); - } - break; - case 36: // FactorList -> FactorList, MultOperator, factor -{ - CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].ops, CurrentLocationSpan); - } - break; - case 37: // factor -> Designator -{ - CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].adrv; - } - break; - case 38: // factor -> INTNUM -{ - CurrentSemanticValue.ex = new int32_const(ValueStack[ValueStack.Depth-1].iVal,CurrentLocationSpan); - } - break; - case 39: // factor -> LONGINTNUM -{ - CurrentSemanticValue.ex = new int64_const(ValueStack[ValueStack.Depth-1].lVal, CurrentLocationSpan); - } - break; - case 40: // factor -> REALNUM -{ - CurrentSemanticValue.ex = new double_const(ValueStack[ValueStack.Depth-1].rVal, CurrentLocationSpan); - } - break; - case 41: // factor -> TRUE -{ - CurrentSemanticValue.ex = new bool_const(true,CurrentLocationSpan); - } - break; - case 42: // factor -> FALSE -{ - CurrentSemanticValue.ex = new bool_const(false,CurrentLocationSpan); - } - break; - case 43: // factor -> CHAR_CONST -{ - CurrentSemanticValue.ex = new char_const(ValueStack[ValueStack.Depth-1].cVal, CurrentLocationSpan); - } - break; - case 44: // factor -> STRING_CONST -{ - CurrentSemanticValue.ex = new string_const(ValueStack[ValueStack.Depth-1].sVal, CurrentLocationSpan); - } - break; - case 45: // factor -> LPAREN, expr, RPAREN -{ - CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-2].ex; - } - break; - case 46: // factor -> NOT, factor -{ - CurrentSemanticValue.ex = new un_expr(ValueStack[ValueStack.Depth-1].ex,Operators.LogicalNOT,CurrentLocationSpan); - } - break; - case 48: // Designator -> specifiedIdent -{ - CurrentSemanticValue.adrv = ValueStack[ValueStack.Depth-1].adrv; - } - break; - case 49: // Designator -> ComplexDesignator -{ - CurrentSemanticValue.adrv = ValueStack[ValueStack.Depth-1].adrv; - } - break; - case 50: // ComplexDesignator -> specifiedIdent, COMMA, ident -{ - CurrentSemanticValue.adrv = new dot_node(ValueStack[ValueStack.Depth-3].adrv, ValueStack[ValueStack.Depth-1].id, CurrentLocationSpan); - } - break; - case 51: // ComplexDesignator -> specifiedIdent, LBRACKET, ExprList, RBRACKET -{ - indexer indxr = new indexer(); - indxr.dereferencing_value = ValueStack[ValueStack.Depth-4].adrv; - indxr.indexes = ValueStack[ValueStack.Depth-2].el; - CurrentSemanticValue.adrv = indxr; - CurrentSemanticValue.adrv.source_context = CurrentLocationSpan; - } - break; - case 52: // ComplexDesignator -> ComplexDesignator, COMMA, ident -{ - CurrentSemanticValue.adrv = new dot_node(ValueStack[ValueStack.Depth-3].adrv, ValueStack[ValueStack.Depth-1].id, CurrentLocationSpan); - } - break; - case 53: // ComplexDesignator -> ComplexDesignator, LBRACKET, ExprList, RBRACKET -{ - indexer indxr = new indexer(); - indxr.dereferencing_value = ValueStack[ValueStack.Depth-4].adrv; - indxr.indexes = ValueStack[ValueStack.Depth-2].el; - CurrentSemanticValue.adrv = indxr; - CurrentSemanticValue.adrv.source_context = CurrentLocationSpan; - } - break; - case 54: // ExprList -> expr -{ - CurrentSemanticValue.el = new expression_list(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - } - break; - case 55: // ExprList -> ExprList, COLUMN, expr -{ - CurrentSemanticValue.el = ValueStack[ValueStack.Depth-3].el; - CurrentSemanticValue.el.Add(ValueStack[ValueStack.Depth-1].ex, LocationStack[LocationStack.Depth-1]); - CurrentSemanticValue.el.source_context = CurrentLocationSpan; - } - break; - case 56: // AddOperator -> MINUS -{ - CurrentSemanticValue.ops = Operators.Minus; - } - break; - case 57: // AddOperator -> PLUS -{ - CurrentSemanticValue.ops = Operators.Plus; - } - break; - case 58: // AddOperator -> OR -{ - CurrentSemanticValue.ops = Operators.LogicalOR; - } - break; - case 59: // MultOperator -> MULT -{ - CurrentSemanticValue.ops = Operators.Multiplication; - } - break; - case 60: // MultOperator -> DIVIDE -{ - CurrentSemanticValue.ops = Operators.Division; - } - break; - case 61: // MultOperator -> DIV -{ - CurrentSemanticValue.ops = Operators.IntegerDivision; - } - break; - case 62: // MultOperator -> MOD -{ - CurrentSemanticValue.ops = Operators.ModulusRemainder; - } - break; - case 63: // MultOperator -> AND -{ - CurrentSemanticValue.ops = Operators.LogicalAND; - } - break; - case 73: // StatementSequence -> Statement -{ - CurrentSemanticValue.sl = new statement_list(ValueStack[ValueStack.Depth-1].st,CurrentLocationSpan); - } - break; - case 74: // StatementSequence -> StatementSequence, SEMICOLUMN, Statement -{ - ValueStack[ValueStack.Depth-3].sl.Add(ValueStack[ValueStack.Depth-1].st,CurrentLocationSpan); - CurrentSemanticValue.sl = ValueStack[ValueStack.Depth-3].sl; - } - break; - case 75: // Assignment -> Designator, ASSIGN, expr -{ - CurrentSemanticValue.st = new assign(ValueStack[ValueStack.Depth-3].adrv, ValueStack[ValueStack.Depth-1].ex, Operators.Assignment, CurrentLocationSpan); - } - break; - case 76: // IfStatement -> IF, expr, THEN, StatementSequence, ElseStatements, END -{ - CurrentSemanticValue.st = new if_node(ValueStack[ValueStack.Depth-5].ex, ValueStack[ValueStack.Depth-3].sl, ValueStack[ValueStack.Depth-2].st, CurrentLocationSpan); - } - break; - case 77: // IfStatement -> IF, expr, THEN, StatementSequence, ElseIfStatements, END -{ - CurrentSemanticValue.st = new if_node(ValueStack[ValueStack.Depth-5].ex, ValueStack[ValueStack.Depth-3].sl, ValueStack[ValueStack.Depth-2].st, CurrentLocationSpan); - } - break; - case 78: // ElseStatements -> ELSE, StatementSequence -{ - CurrentSemanticValue.st = ValueStack[ValueStack.Depth-1].sl; - CurrentSemanticValue.st.source_context = CurrentLocationSpan; - } - break; - case 79: // ElseStatements -> /* empty */ -{ - CurrentSemanticValue.st = null; - } - break; - case 80: // ElseIfStatements -> ELSEIF, expr, THEN, StatementSequence, ElseStatements -{ - CurrentSemanticValue.st = new if_node(ValueStack[ValueStack.Depth-4].ex, ValueStack[ValueStack.Depth-2].sl, ValueStack[ValueStack.Depth-1].st, CurrentLocationSpan); - } - break; - case 81: // ElseIfStatements -> ELSEIF, expr, THEN, StatementSequence, ElseIfStatements -{ - CurrentSemanticValue.st = new if_node(ValueStack[ValueStack.Depth-4].ex, ValueStack[ValueStack.Depth-2].sl, ValueStack[ValueStack.Depth-1].st, CurrentLocationSpan); - } - break; - case 82: // WhileStatement -> WHILE, expr, DO, StatementSequence, END -{ - CurrentSemanticValue.st = new while_node(ValueStack[ValueStack.Depth-4].ex, ValueStack[ValueStack.Depth-2].sl, WhileCycleType.While, CurrentLocationSpan); - } - break; - case 83: // RepeatStatement -> REPEAT, StatementSequence, UNTIL, expr -{ - CurrentSemanticValue.st = new repeat_node(ValueStack[ValueStack.Depth-3].sl, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - } - break; - case 84: // ForStatement -> FOR, ident, ASSIGN, expr, TO, expr, ForStep, DO, - // StatementSequence, END -{ - expression step; - if (ValueStack[ValueStack.Depth-4].ex != null) step = ValueStack[ValueStack.Depth-4].ex; - else step = new int32_const(1, LocationStack[LocationStack.Depth-4]); - // Будем моделировать цикл через while - statement_list forStmnt = GetForThroughWhile(ValueStack[ValueStack.Depth-9].id, ValueStack[ValueStack.Depth-7].ex, ValueStack[ValueStack.Depth-5].ex, ValueStack[ValueStack.Depth-2].sl, step, LocationStack[LocationStack.Depth-8], CurrentLocationSpan); - CurrentSemanticValue.st = forStmnt; - CurrentSemanticValue.st.source_context = CurrentLocationSpan; - } - break; - case 85: // ForStep -> BY, ConstExpr -{ - int32_const step32 = ValueStack[ValueStack.Depth-1].ex as int32_const; - if (step32 != null) { // шаг является просто целым числом (без знака) - if (step32.val == 0) PT.AddError("Шаг цикла не может быть нулевым", LocationStack[LocationStack.Depth-2]); - else CurrentSemanticValue.ex = new int32_const(step32.val, CurrentLocationSpan); - } - else { // в значении шага либо присутствует знак, либо это вообще не целое - un_expr stepMinus = ValueStack[ValueStack.Depth-1].ex as un_expr; - int32_const stepMinusTerm = stepMinus.subnode as int32_const; - bool signMinus = (stepMinusTerm != null) && (stepMinus.operation_type == Operators.Minus); - if (signMinus) - if (stepMinusTerm.val == 0) - PT.AddError("Шаг цикла не может быть нулевым", LocationStack[LocationStack.Depth-2]); - else - CurrentSemanticValue.ex = new un_expr(stepMinusTerm, Operators.Minus, LocationStack[LocationStack.Depth-1]); - else - PT.AddError("Шаг цикла должен быть целым числом", LocationStack[LocationStack.Depth-2]); - } - } - break; - case 86: // ForStep -> /* empty */ -{ - CurrentSemanticValue.ex = null; - } - break; - case 87: // CaseStatement -> CASE, expr, OF, CaseVariantList, ElseBranch, END -{ - CurrentSemanticValue.st = new case_node(ValueStack[ValueStack.Depth-5].ex, ValueStack[ValueStack.Depth-3].cvars, ValueStack[ValueStack.Depth-2].st, CurrentLocationSpan); - } - break; - case 88: // CaseVariantList -> CaseVariant -{ - CurrentSemanticValue.cvars = new case_variants(); - CurrentSemanticValue.cvars.Add(ValueStack[ValueStack.Depth-1].cvar); - CurrentSemanticValue.cvars.source_context = CurrentLocationSpan; - } - break; - case 89: // CaseVariantList -> CaseVariantList, PIPE, CaseVariant -{ - CurrentSemanticValue.cvars = ValueStack[ValueStack.Depth-3].cvars; - CurrentSemanticValue.cvars.Add(ValueStack[ValueStack.Depth-1].cvar); - CurrentSemanticValue.cvars.source_context = CurrentLocationSpan; - } - break; - case 90: // CaseVariantList -> /* empty */ -{ - CurrentSemanticValue.cvars = new case_variants(); - } - break; - case 91: // CaseVariant -> CaseVariantLabelList, COLON, StatementSequence -{ - CurrentSemanticValue.cvar = new case_variant(ValueStack[ValueStack.Depth-3].el, ValueStack[ValueStack.Depth-1].sl, CurrentLocationSpan); - } - break; - case 92: // CaseVariantLabelList -> CaseVariantLabels -{ - CurrentSemanticValue.el = new expression_list(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - } - break; - case 93: // CaseVariantLabelList -> CaseVariantLabelList, COLUMN, CaseVariantLabels -{ - CurrentSemanticValue.el = ValueStack[ValueStack.Depth-3].el; - CurrentSemanticValue.el.Add(ValueStack[ValueStack.Depth-1].ex, LocationStack[LocationStack.Depth-1]); - CurrentSemanticValue.el.source_context = CurrentLocationSpan; - } - break; - case 94: // CaseVariantLabels -> ConstExpr -{ - CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; - } - break; - case 95: // CaseVariantLabels -> ConstExpr, DOUBLEPOINT, ConstExpr -{ - CurrentSemanticValue.ex = new diapason_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - } - break; - case 96: // ElseBranch -> ELSE, StatementSequence -{ - CurrentSemanticValue.st = ValueStack[ValueStack.Depth-1].sl; - CurrentSemanticValue.st.source_context = CurrentLocationSpan; - } - break; - case 97: // ElseBranch -> /* empty */ -{ - CurrentSemanticValue.st = null; - } - break; - case 98: // WriteStatement -> EXCLAMATION, expr -{ - expression_list el = new expression_list(ValueStack[ValueStack.Depth-1].ex,CurrentLocationSpan); - method_call mc = new method_call(el); - mc.dereferencing_value = new ident("print"); - CurrentSemanticValue.st = mc; - } - break; - case 99: // factparams -> expr -{ - CurrentSemanticValue.el = new expression_list(ValueStack[ValueStack.Depth-1].ex,CurrentLocationSpan); - } - break; - case 100: // factparams -> factparams, COLUMN, expr -{ - ValueStack[ValueStack.Depth-3].el.Add(ValueStack[ValueStack.Depth-1].ex,CurrentLocationSpan); - CurrentSemanticValue.el = ValueStack[ValueStack.Depth-3].el; - } - break; - case 101: // ProcCallStatement -> ident, LPAREN, factparams, RPAREN -{ - CurrentSemanticValue.st = new method_call(ValueStack[ValueStack.Depth-4].id,ValueStack[ValueStack.Depth-2].el,CurrentLocationSpan); - } - break; - case 102: // EmptyStatement -> /* empty */ -{ - CurrentSemanticValue.st = new empty_statement(); - } - break; - case 103: // IDList -> identDef -{ - CurrentSemanticValue.il=new ident_list(ValueStack[ValueStack.Depth-1].obrid,CurrentLocationSpan); - - } - break; - case 104: // IDList -> IDList, COLUMN, identDef -{ - ValueStack[ValueStack.Depth-3].il.Add(ValueStack[ValueStack.Depth-1].obrid,CurrentLocationSpan); - CurrentSemanticValue.il = ValueStack[ValueStack.Depth-3].il; - } - break; - case 105: // VarDecl -> IDList, COLON, TypeDef, SEMICOLUMN -{ - CurrentSemanticValue.vds = new var_def_statement(ValueStack[ValueStack.Depth-4].il, ValueStack[ValueStack.Depth-2].tdef, null, definition_attribute.None, false, CurrentLocationSpan); - } - break; - case 106: // VarDeclarations -> VarDecl -{ - CurrentSemanticValue.vdss = new variable_definitions(ValueStack[ValueStack.Depth-1].vds,CurrentLocationSpan); - } - break; - case 107: // VarDeclarations -> VarDeclarations, VarDecl -{ - ValueStack[ValueStack.Depth-2].vdss.Add(ValueStack[ValueStack.Depth-1].vds,CurrentLocationSpan); - CurrentSemanticValue.vdss = ValueStack[ValueStack.Depth-2].vdss; - } - break; - case 108: // ConstDecl -> identDef, EQ, ConstExpr, SEMICOLUMN -{ - CurrentSemanticValue.scd = new simple_const_definition(ValueStack[ValueStack.Depth-4].obrid,ValueStack[ValueStack.Depth-2].ex,CurrentLocationSpan); - } - break; - case 110: // ConstDeclarations -> ConstDecl -{ - CurrentSemanticValue.cdl = new consts_definitions_list(ValueStack[ValueStack.Depth-1].scd,CurrentLocationSpan); - } - break; - case 111: // ConstDeclarations -> ConstDeclarations, ConstDecl -{ - ValueStack[ValueStack.Depth-2].cdl.Add(ValueStack[ValueStack.Depth-1].scd,CurrentLocationSpan); - CurrentSemanticValue.cdl = ValueStack[ValueStack.Depth-2].cdl; - } - break; - case 112: // ConstDeclarationsSect -> CONST, ConstDeclarations -{ - CurrentSemanticValue.cdl = ValueStack[ValueStack.Depth-1].cdl; - CurrentSemanticValue.cdl.source_context = CurrentLocationSpan; - } - break; - case 113: // VarDeclarationsSect -> VAR, VarDeclarations -{ - CurrentSemanticValue.vdss = ValueStack[ValueStack.Depth-1].vdss; - CurrentSemanticValue.vdss.source_context = CurrentLocationSpan; - } - break; - case 114: // TypeDeclarationsSect -> TYPE, TypeDeclarations -{ - CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; - CurrentSemanticValue.td.source_context = CurrentLocationSpan; - } - break; - case 115: // TypeDeclarations -> TypeDecl -{ - CurrentSemanticValue.td = new type_declarations(); - CurrentSemanticValue.td.Add(ValueStack[ValueStack.Depth-1].tdec); - CurrentSemanticValue.td.source_context = CurrentLocationSpan; - } - break; - case 116: // TypeDeclarations -> TypeDeclarations, TypeDecl -{ - CurrentSemanticValue.td = ValueStack[ValueStack.Depth-2].td; - CurrentSemanticValue.td.Add(ValueStack[ValueStack.Depth-1].tdec); - CurrentSemanticValue.td.source_context = CurrentLocationSpan; - } - break; - case 117: // TypeDecl -> identDef, EQ, TypeDef, SEMICOLUMN -{ - CurrentSemanticValue.tdec = new type_declaration(ValueStack[ValueStack.Depth-4].obrid, ValueStack[ValueStack.Depth-2].tdef, CurrentLocationSpan); - } - break; - case 118: // TypeDef -> complexTypeIdent -{ - CurrentSemanticValue.tdef = ValueStack[ValueStack.Depth-1].ntr; - } - break; - case 119: // TypeDef -> ArrayType -{ - CurrentSemanticValue.tdef = ValueStack[ValueStack.Depth-1].tdef; - CurrentSemanticValue.tdef.source_context = CurrentLocationSpan; - } - break; - case 120: // TypeDef -> RecordType -{ - CurrentSemanticValue.tdef = ValueStack[ValueStack.Depth-1].cldef; - CurrentSemanticValue.tdef.source_context = CurrentLocationSpan; - } - break; - case 121: // TypeDef -> PointerType -{ - CurrentSemanticValue.tdef = ValueStack[ValueStack.Depth-1].rft; - CurrentSemanticValue.tdef.source_context = CurrentLocationSpan; - } - break; - case 122: // ArrayType -> ARRAY, OF, TypeDef -{ - // открытый массив - diapason dp = new diapason(new int32_const(0), new int32_const(0)); - indexers_types inxr = new indexers_types(); - inxr.Add(dp); - CurrentSemanticValue.tdef = new array_type(inxr, ValueStack[ValueStack.Depth-1].tdef, CurrentLocationSpan); - } - break; - case 123: // ArrayType -> ARRAY, LengthList, OF, TypeDef -{ - // Будем искать array n of char, чтобы заменить на строку - named_type_reference ntr = ValueStack[ValueStack.Depth-1].tdef as named_type_reference; - bool complexArr = (ntr != null) && (ntr.names.Count == 1) && - (ntr.names[0].name == "char"); - if (complexArr) - CurrentSemanticValue.tdef = GetArrWithStrInsteadCharArr(ValueStack[ValueStack.Depth-3].indts, LocationStack[LocationStack.Depth-3], CurrentLocationSpan); - else - CurrentSemanticValue.tdef = new array_type(ValueStack[ValueStack.Depth-3].indts, ValueStack[ValueStack.Depth-1].tdef, CurrentLocationSpan); - } - break; - case 124: // RecordType -> RECORD, END, COLUMN -{ - - } - break; - case 125: // LengthList -> Length -{ - CurrentSemanticValue.indts = new indexers_types(); - CurrentSemanticValue.indts.source_context = CurrentLocationSpan; - CurrentSemanticValue.indts.Add(ValueStack[ValueStack.Depth-1].dpsn); - } - break; - case 126: // LengthList -> LengthList, COLUMN, Length -{ - CurrentSemanticValue.indts = ValueStack[ValueStack.Depth-3].indts; - CurrentSemanticValue.indts.source_context = CurrentLocationSpan; - CurrentSemanticValue.indts.Add(ValueStack[ValueStack.Depth-1].dpsn); - } - break; - case 127: // Length -> ConstExpr -{ - // В обероне в массиве указывается целочисленная длина - // Поэтому надо проверить, что выражение относится к целому типу - object[] types = {ValueStack[ValueStack.Depth-1].ex}; - bool isLength = typeof(int32_const) == System.Type.GetTypeArray(types)[0]; - if (isLength) - CurrentSemanticValue.dpsn = GetDiapasonByArrLength(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - else - PT.AddError("Длина должна быть целым числом", LocationStack[LocationStack.Depth-1]); - } - break; - case 128: // PointerType -> POINTER, TO, TypeDef -{ - CurrentSemanticValue.rft = new ref_type(ValueStack[ValueStack.Depth-1].tdef, CurrentLocationSpan); - } - break; - case 129: // complexTypeIdent -> ident -{ - CurrentSemanticValue.ntr = new named_type_reference(PT.InternalTypeName(ValueStack[ValueStack.Depth-1].id.name), CurrentLocationSpan); - } - break; - case 130: // complexTypeIdent -> complexTypeIdent, COMMA, ident -{ - CurrentSemanticValue.ntr = ValueStack[ValueStack.Depth-3].ntr; - CurrentSemanticValue.ntr.Add(PT.InternalTypeName(ValueStack[ValueStack.Depth-1].id.name)); - CurrentSemanticValue.ntr.source_context = CurrentLocationSpan; - } - break; - case 131: // DeclarationsSect -> VarDeclarationsSect -{ - CurrentSemanticValue.decsec = ValueStack[ValueStack.Depth-1].vdss; - } - break; - case 132: // DeclarationsSect -> ConstDeclarationsSect -{ - CurrentSemanticValue.decsec = ValueStack[ValueStack.Depth-1].cdl; - } - break; - case 133: // DeclarationsSect -> TypeDeclarationsSect -{ - CurrentSemanticValue.decsec = ValueStack[ValueStack.Depth-1].td; - } - break; - case 134: // DeclarationsSect -> ProcedureDeclarationSect -{ - CurrentSemanticValue.decsec = ValueStack[ValueStack.Depth-1].pd; - } - break; - case 135: // Declarations -> /* empty */ -{ - CurrentSemanticValue.decl = new declarations(); - } - break; - case 136: // Declarations -> Declarations, DeclarationsSect -{ - if (ValueStack[ValueStack.Depth-1].decsec != null) - ValueStack[ValueStack.Depth-2].decl.Add(ValueStack[ValueStack.Depth-1].decsec); - CurrentSemanticValue.decl = ValueStack[ValueStack.Depth-2].decl; - CurrentSemanticValue.decl.source_context = CurrentLocationSpan; // Необходимо показать место в программе, т.к. неявно это не сделано - // (например, в конструкторе) - } - break; - case 137: // ProcedureDeclarationSect -> PROCEDURE, ident, maybeformalparams, maybereturn, - // SEMICOLUMN, mainblock, ident, SEMICOLUMN -{ - - } - break; - case 138: // maybeformalparams -> /* empty */ -{ - //$$ = null; - } - break; - case 139: // maybeformalparams -> LPAREN, FPList, RPAREN -{ - //$$ = $2; - } - break; - case 140: // maybereturn -> /* empty */ -{ - - } - break; - case 141: // maybereturn -> COLUMN, TypeDef -{ - - } - break; - case 142: // FPList -> FPSect -{ - - } - break; - case 143: // FPList -> FPList, SEMICOLUMN, FPSect -{ - - } - break; - case 144: // FPSect -> maybevar, IDList, COLON, TypeDef -{ - - } - break; - case 145: // maybevar -> /* empty */ -{ - CurrentSemanticValue.bVal = false; - } - break; - case 146: // maybevar -> VAR -{ - CurrentSemanticValue.bVal = true; - } - break; - } - } - - protected override string TerminalToString(int terminal) - { - if (aliasses != null && aliasses.ContainsKey(terminal)) - return aliasses[terminal]; - else if (((Tokens)terminal).ToString() != terminal.ToString(CultureInfo.InvariantCulture)) - return ((Tokens)terminal).ToString(); - else - return CharToString((char)terminal); - } - - -/* Возвращает последовательность операторов, соответсвующую - циклу for, моделируемому через while */ -public static statement_list GetForThroughWhile(ident id, expression expr, expression endExpr, statement_list stmnts, - expression step, SourceContext assignSC, SourceContext wholeSC){ - // Будем моделировать цикл через while - statement_list forStmnt = new statement_list(); - ident endFor = new ident("_oberon_for_end_"); - forStmnt.Add(new var_statement(new var_def_statement( - new ident_list("_oberon_for_end_"), - new named_type_reference("integer", null), - endExpr, - definition_attribute.None, - false)) - ); - forStmnt.Add( new assign(id, expr, Operators.Assignment, assignSC) ); - statement_list posStatementList = new statement_list(); // при положительном шаге - posStatementList.Add(stmnts); - posStatementList.Add( new assign(id, step, Operators.AssignmentAddition) ); - while_node posWhile = new while_node( - new bin_expr(id, endFor, Operators.LessEqual), - posStatementList, - WhileCycleType.While); - statement_list negStatementList = new statement_list(); // при отрицательном шаге - negStatementList.Add(stmnts); - negStatementList.Add( new assign(id, step, Operators.AssignmentAddition) ); - while_node negWhile = new while_node( - new bin_expr(id, endFor, Operators.GreaterEqual), - negStatementList, - WhileCycleType.While); - forStmnt.Add( new if_node( - new bin_expr(step, new int32_const(0), Operators.Greater), - posWhile, - negWhile, - wholeSC)); - return forStmnt; -} - -/* Возвращает многомерный массив, в котором при необходимости - массив символов заменен на строку */ -public static type_definition GetArrWithStrInsteadCharArr(indexers_types lenList, - SourceContext lenListSC, SourceContext wholeSC){ - List indxrs = lenList.indexers; - diapason dp = indxrs[indxrs.Count - 1] as diapason; - int32_const len = new int32_const(); - len.val = (dp.right as int32_const).val + 1; - type_definition result = new string_num_definition(len, new ident("string", lenListSC), wholeSC); - if (indxrs.Count > 1) { // надо делать массив массивов ... строк - indxrs.RemoveAt(indxrs.Count - 1); - result = new array_type(lenList, result, wholeSC); - } - return result; -} - -/* Возвращает диапазон 0..Length-1, полученный по обероновской длине - массива, и необходимый для паскалевского синтаксического узла */ -public static diapason GetDiapasonByArrLength(expression lenExpr, SourceContext lenSC){ - int32_const zero = new int32_const(); - zero.val = 0; - int32_const max = (int32_const)lenExpr; - max.val = max.val - 1; - return new diapason(zero, max, lenSC); -} -} -} diff --git a/ReleaseGenerators/.gitignore b/ReleaseGenerators/.gitignore index 4d8424564..26f70a3d9 100644 --- a/ReleaseGenerators/.gitignore +++ b/ReleaseGenerators/.gitignore @@ -3,14 +3,4 @@ /RebuildStandartModules.exe -#TODO Вместо утого удалить устаревшие .pas тесты, оставив остальное без игнора -/Samples/* -!/Samples/_SVN/ - - - -!/Samples/ExportSamples.bat -!/Samples/GetSamples.exe -!/Samples/GetSamples.pnet - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/Amp.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/Amp.pas deleted file mode 100644 index 64c8ee9f9..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/Amp.pas +++ /dev/null @@ -1,9 +0,0 @@ -// Пример иллюстрирует использование значка & для снятия атрибута ключевого слова -var - &begin,&end: integer; -begin - &begin := 1; - &end := 2; - var t: System.Type := &begin.GetType; // в System.Type использовать & не надо - write(&begin,' ',&end,' ',t); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/AssignExt.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/AssignExt.pas deleted file mode 100644 index 3ba218714..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/AssignExt.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Присваивания += -= *= /= -var - i: integer; - r: real; - -begin - i := 1; - writeln('i := 1; i = ',i); - i += 2; // Увеличение на 2 - writeln('i += 2; i = ',i); - i *= 3; // Умножение на 3 - writeln('i *= 3; i = ',i); - writeln; - r := 6; - writeln('r := 6; r = ',r); - r /= 2; - writeln('r /= 2; r = ',r); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/AutoVars.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/AutoVars.pas deleted file mode 100644 index 25797a7bb..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/AutoVars.pas +++ /dev/null @@ -1,10 +0,0 @@ -// Автоопределение типа переменной -// Описание переменной в заголовке цикла for -begin - var x := 2; - for var i:=1 to 10 do - begin - write(x,' '); - x += 2; - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/BlockVar.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/BlockVar.pas deleted file mode 100644 index d1257db6c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/BlockVar.pas +++ /dev/null @@ -1,11 +0,0 @@ -// Перемена местами значений двух переменных с использованием третьей -var x,y: real; - -begin - write('Введите x,y: '); - readln(x,y); - var v: real := x; // вспомогательная переменная - x := y; - y := v; - writeln('Новые значения x,y: ',x,' ',y); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/Foreach.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/Foreach.pas deleted file mode 100644 index 2b546058b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/Foreach.pas +++ /dev/null @@ -1,26 +0,0 @@ -// Пример иллюстрирует возможности оператора foreach -uses System.Collections.Generic; - -var - a: array [1..5] of integer := (1,3,5,7,9); - s: set of integer; - l: List; - -begin - write('foreach по обычному массиву: ':35); - foreach x: integer in a do - write(x,' '); - writeln; - - s := [2..5,10..14]; - write('foreach по множеству: ':35); - foreach x: integer in s do - write(x,' '); - writeln; - - l := new List; - l.Add(7); l.Add(2); l.Add(5); - write('foreach по динамическому массиву: ':35); - foreach x: integer in l do - write(x,' '); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/RandomDiap.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/RandomDiap.pas deleted file mode 100644 index 7bea343d6..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/RandomDiap.pas +++ /dev/null @@ -1,5 +0,0 @@ -// Генерация случайного числа в заданном диапазоне -begin - var i := Random(2,5); - writeln('Случайное целое в диапазоне 2..5: ',i); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/RealExtNums.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/RealExtNums.pas deleted file mode 100644 index 5e099f699..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/RealExtNums.pas +++ /dev/null @@ -1,5 +0,0 @@ -// При работе с вещественными числами невозможно получить ошибку выполнения -begin - writeln(1/0); - writeln(sqrt(-1)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/SimpleNewFeatures.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/SimpleNewFeatures.pas deleted file mode 100644 index 60cef0d77..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/SimpleNewFeatures.pas +++ /dev/null @@ -1,27 +0,0 @@ -// Простейшие новые возможности языка PascalABC.NET - -// Инициализация переменной при описании -var i: integer := 1; - -// Автоопределение типа переменной при инициализации -var r := 2.5; - -begin - // Внутриблочные описания переменных - var s: real := 1.0; - - // Описание переменной в заголовке цикла (время жизни переменной - до конца тела цикла) - for j: integer := 1 to 10 do - s += j; // Операция += для чисел - - var p := 1; - - // Описание переменной в заголовке цикла с автоопределением типа - for var j := 1 to 10 do - p *= j; // Операция *= - - var str := ''; - for c: char := 'a' to 'z' do - str += c; // Операция += для строк - -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/StandardTypes.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/StandardTypes.pas deleted file mode 100644 index 6eb0c2b4d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/StandardTypes.pas +++ /dev/null @@ -1,33 +0,0 @@ -/// Стандартные размерные типы данных и их размер -var - i: integer; - j: shortint; - k: smallint; - l: longint; // синоним integer - i64: int64; - b: byte; - w: word; - lw: longword; - car: cardinal; // синоним longword - ui64: uint64; - r: real; - d: double; // синоним real - sn: single; - c: char; - -begin - writeln('sizeof(integer) = ':20, sizeof(integer)); - writeln('sizeof(shortint) = ':20,sizeof(shortint)); - writeln('sizeof(smallint) = ':20,sizeof(smallint)); - writeln('sizeof(longint) = ':20, sizeof(longint)); - writeln('sizeof(int64) = ':20, sizeof(int64)); - writeln('sizeof(byte) = ':20, sizeof(byte)); - writeln('sizeof(word) = ':20, sizeof(word)); - writeln('sizeof(longword) = ':20,sizeof(longword)); - writeln('sizeof(cardinal) = ':20,sizeof(cardinal)); - writeln('sizeof(uint64) = ':20, sizeof(uint64)); - writeln('sizeof(real) = ':20, sizeof(real)); - writeln('sizeof(double) = ':20, sizeof(double)); - writeln('sizeof(single) = ':20, sizeof(single)); - writeln('sizeof(char) = ':20, sizeof(char)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/WriteAll.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/WriteAll.pas deleted file mode 100644 index 7b9ca40ce..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/WriteAll.pas +++ /dev/null @@ -1,12 +0,0 @@ -/// Вывод различных типов процедурой write -begin - // Вывод, целого, строки, вещественного - Writeln(1,' ',2.5); - // Вывод множества - Writeln([1..10]); - // Вывод логического - Writeln(True); - var a: array [1..10] of integer; - // Вывод массива (выводится его тип) - Writeln(a); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/WriteFormat.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/WriteFormat.pas deleted file mode 100644 index a6ea0c119..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/WriteFormat.pas +++ /dev/null @@ -1,11 +0,0 @@ -/// Использование процедуры WritelnFormat -begin - // Вывод в обратном порядке - WritelnFormat('{2},{1},{0}',1,2,3); - // Вывод фигурных скобочек - WritelnFormat('{{}}{0}','Вывод фигурных скобочек в форматной строке'); - // Задание ширины поля вывода - WritelnFormat('{0,10:f}',3.1415); - // Задание количества знаков после запятой для вещественного числа - WritelnFormat('{0:f3}',3.1415); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/CharFunc.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/CharFunc.pas deleted file mode 100644 index 95bed5ad7..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/CharFunc.pas +++ /dev/null @@ -1,19 +0,0 @@ -// Стандартные функции Ord, Chr, OrdUnicode, ChrUnicode -var - c: char; - i: integer; - -begin - writeln('sizeof(char) = ',sizeof(char)); - writeln; - c := 'Ж'; - i := Ord(c); - writelnFormat('Код символа {0} в кодировке Windows равен {1}',c,i); - c := Chr(i); - writelnFormat('Символ с кодом {0} в кодировке Windows - это {1}',i,c); - writeln; - i := OrdUnicode(c); - writelnFormat('Код символа {0} в кодировке Unicode равен {1}',c,i); - c := ChrUnicode(i); - writelnFormat('Символ с кодом {0} в кодировке Unicode - это {1}',i,c); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Dynarray.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Dynarray.pas deleted file mode 100644 index 63d162f37..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Dynarray.pas +++ /dev/null @@ -1,40 +0,0 @@ -// Процедуры и методы работы с динамическим массивом -uses System; - -procedure Print(a: array of integer); -begin - foreach v: integer in a do - Write(v, ' '); - Writeln; -end; - -var a: array of integer; - -begin - SetLength(a,10); // выделение памяти. А можно так: a := new integer[10]; - - // Заполнение массива - for var i:=0 to a.Length-1 do - a[i] := PABCSystem.Random(100); - - // Вывод всех элементов массива - Print(a); - - // Сортировка массива (знак & используется для того, - // чтобы воспользоваться ключевым словом array при обозначении - // класса Array) - &Array.Sort(a); - Print(a); - - // Обращение массива - &Array.Reverse(a); - Print(a); - - // Изменение размерамассиав с сохранением элементов. То же делает SetLength - &Array.Resize(a,a.Length+2); - Print(a); - - // Поиск вхождения элемента в массив - var i := &Array.IndexOf(a, 50); - Writeln(i); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Enum.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Enum.pas deleted file mode 100644 index db92312ee..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Enum.pas +++ /dev/null @@ -1,25 +0,0 @@ -// Перечислимый тип -type Months = (January,February,March,April,May,June,July,August,September,October,November,December); - -var m: Months; - -begin - m := February; - writeln(m); - // Использование констант перечислимого типа после имени типа удобно: после точки intellisense показывает список констант - m := Months.April; - writeln('Следующий месяц: ',m); - Inc(m); - writeln('Следующий месяц: ',m); - m := Succ(m); - writeln('Следующий месяц: ',m); - m := Pred(m); - writeln('Предыдующий месяц: ',m); - Dec(m); - writeln('Предыдующий месяц: ',m); - writeln('Его порядковый номер (нумерация - с нуля): ',Ord(m)); - // Ошибки нет - writeln('Месяц перед январем - выход за границы: ',pred(Months.January)); - // Ошибки нет - writeln('Месяц после декабря - выход за границы: ',succ(Months.December)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/InitRecords.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/InitRecords.pas deleted file mode 100644 index 5befeb806..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/InitRecords.pas +++ /dev/null @@ -1,15 +0,0 @@ -// Инициализаторы полей записи -type - Frac = record - num: integer := 0; - denom := 1; // автоопределеине типа - denom: integer - end; - -var - f: Frac; - f1: Frac := (num: 2; denom: 3); - -begin - writeln(f.num,'/',f.denom); - writeln(f1.num,'/',f1.denom); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointerToRef.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointerToRef.pas deleted file mode 100644 index 8a07a43a9..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointerToRef.pas +++ /dev/null @@ -1,10 +0,0 @@ -// Указатели на ссылочные типы запрещены. Исключение: указатели на строки и динамические массивы -type - A = class - i: integer; - end; - -var p: ^record field: A; end; - -begin -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointersVsRef/Pointers.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointersVsRef/Pointers.pas deleted file mode 100644 index 42aa2fc6d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointersVsRef/Pointers.pas +++ /dev/null @@ -1,43 +0,0 @@ -// Выделение динамической памяти -// Использование указателей для создания односвязного списка -type - PNode = ^TNode; - TNode = record - data: integer; - next: PNode; - end; - -function NewNode(d: integer; n: PNode): PNode; -begin - New(Result); - Result^.data := d; - Result^.next := n; -end; - -var first: PNode; - -begin - first := nil; - // Добавляем в начало односвязного списка - first := NewNode(3,first); - first := NewNode(7,first); - first := NewNode(5,first); - - // Вывод односвязного списка - writeln('Содержимое односвязного списка: '); - var p := first; - while p<>nil do - begin - write(p^.data,' '); - p := p^.next; - end; - - // Разрушение односвязного списка - p := first; - while p<>nil do - begin - var p1 := p; - p := p^.next; - Dispose(p1); // Память обязательно возвращать - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointersVsRef/References.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointersVsRef/References.pas deleted file mode 100644 index fabbe9d1f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointersVsRef/References.pas +++ /dev/null @@ -1,35 +0,0 @@ -// Использование ссылок вместо указателей для создания односвязного списка -// Мы рекомендуем именно этот способ -type - Node = class - data: integer; - next: Node; - constructor (d: integer; n: Node); - begin - data := d; - next := n; - end; - end; - -// Переменная типа "класс" представляет собой ссылку на объект, выделяемый конструктором -var first: Node; - -begin - first := nil; - // Добавляем в начало односвязного списка - first := new Node(3,first); - first := new Node(7,first); - first := new Node(5,first); - - // Вывод односвязного списка. ^ отсутствуют - writeln('Содержимое односвязного списка (использование ссылок вместо указателей): '); - var p := first; - while p<>nil do - begin - write(p.data,' '); - p := p.next; - end; - - // Разрушение односвязного списка - first := nil; // Сборщик мусора соберет память, на которую никто больше не указывает -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Sets.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Sets.pas deleted file mode 100644 index a404ba7bd..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Sets.pas +++ /dev/null @@ -1,15 +0,0 @@ -// Работа с множествами -// Базовый тип для множества может быть произвольным -var - s1: set of string := ['Иванов','Попов','Сидорова','Петров']; - s2: set of string := ['Козлов','Петров','Иванов']; -begin - writeln('Множество s1: ',s1); - writeln('Множество s2: ',s2); - writeln('Объединение множеств s1 и s2: ',s1+s2); - writeln('Пересечение множеств s1 и s2: ',s1*s2); - writeln('Разность множеств s1 и s2: ',s1-s2); - Include(s1,'Умнов'); - Exclude(s1,'Иванов'); - writeln('Множество s1: ',s1); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringInteger.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringInteger.pas deleted file mode 100644 index ce86a50a3..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringInteger.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Преобразование целое <-> строка в новом стиле -var - s: string; - i: integer; - -begin - // Преобразование целого в строку - i := 234; - s := i.ToString; - writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - - // Преобразование строки в целое - s := '567'; - if integer.TryParse(s,i) then - writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringMethods.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringMethods.pas deleted file mode 100644 index 609eb8234..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringMethods.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Строки. Методы класса string -var - s: string := ' Pascal__NET '; - s1: string := 'NET'; - -begin - writeln('Исходная строка: ''',s,''''); - s := s.Trim; - writeln('После вызова s.Trim: ''',s,''''); - var p := s.IndexOf(s1); // Индексация - с нуля - writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p); - s := s.Remove(6,2); - writeln('После удаления символов __: ',s); - s := s.Insert(6,'ABC.'); - writeln('После вставки подстроки ''ABC.'': ',s); - writeln('Первая часть строки: ',s.Substring(0,9)); - writeln('Последняя часть строки: ',s.Substring(10,3)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringTypes.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringTypes.pas deleted file mode 100644 index 7e89b95d1..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringTypes.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Строки string, string[n], shortstring -var - s: string; // память, занимаемая s, зависит от ее длины - s10: string[10]; // память под ss фиксирована - ss: shortstring := s; - f: file of string[10]; - // f: file of string; - ошибка - -begin - s := '12345678901234567890'; - s10 := s; // обрезание - writeln(s10); - s += s; s += s; - s += s; s += s; - writeln(s); - writeln('Длина строки = ',s.Length); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StructTypeEquiv.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StructTypeEquiv.pas deleted file mode 100644 index 8648f73fd..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StructTypeEquiv.pas +++ /dev/null @@ -1,23 +0,0 @@ -// Иллюстрация структурной эквивалентности для некоторых типов. В Delphi - именная эквивалентность -var - a: array of integer; - a1: array of integer; - s: set of real; - s1: set of real; - p: procedure (i: integer); - p1: procedure (i: integer); - r: ^integer; - r1: ^integer; - -procedure proc(aa: array of integer; ss: set of real; pp: procedure (i: integer); rr: ^integer); -begin - -end; - -begin - a := a1; - s := s1; - p := p1; - r := r1; // В Delphi ни одно из этих присваиваний не сработает - proc(a,s,p,r); // Этот вызов - тоже -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/UntypedFile.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/UntypedFile.pas deleted file mode 100644 index 24bb11de5..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/UntypedFile.pas +++ /dev/null @@ -1,19 +0,0 @@ -// Бестиповые файлы -var - f: file; - i: integer; - r: real; - s: string; - -begin - assign(f,'a.dat'); - rewrite(f); - // Записываем в файл данные любых типов - write(f,1,2.5,'Hello'); - close(f); - reset(f); - // Считываем эти данные из файла - read(f,i,r,s); - write(i,' ',r,' ',s); - close(f); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/a.dat b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/a.dat deleted file mode 100644 index 01d0483f7..000000000 Binary files a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/a.dat and /dev/null differ diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/FuncParams.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/FuncParams.pas deleted file mode 100644 index e23578348..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/FuncParams.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Переменное число параметров -function Sum(params arg: array of integer): integer; -begin - Result := 0; - foreach x: integer in arg do - Result += x; -end; - -begin - writeln(Sum(1,2,3)); - writeln(Sum(4,5,6,7)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/Overload.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/Overload.pas deleted file mode 100644 index f3b5eaef1..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/Overload.pas +++ /dev/null @@ -1,21 +0,0 @@ -// Перегрузка имен подпрограмм -procedure proc(i: integer); -begin - writeln('integer'); -end; - -procedure proc(c: char); -begin - writeln('char'); -end; - -procedure proc(r: real); -begin - writeln('real'); -end; - -begin - proc(1); - proc(2.5); - proc('d'); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/ProcVars.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/ProcVars.pas deleted file mode 100644 index 073617a04..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/ProcVars.pas +++ /dev/null @@ -1,39 +0,0 @@ -// Все возможные способы инициализации поцедурной переменной -// Процедурный тип реализован через делегаты .NET, для него доступны операции +=, -= - -procedure pp; -begin - writeln('Вызов обычной процедуры'); -end; - -type - A = class - private - x: integer; - public - constructor Create(xx: integer); - begin - x := xx; - end; - procedure pp; - begin - writeln('Вызов метода класса, значение поля равно ',x); - end; - class procedure ppstatic; - begin - writeln('Вызов классового метода класса'); - end; - end; - -var p: procedure; - -begin - p := pp; - var a1: A := new A(5); - p += a1.pp; - p += A.ppstatic; - p; - writeln; - p -= pp; - p; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/SwapT.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/SwapT.pas deleted file mode 100644 index 645e791bf..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/SwapT.pas +++ /dev/null @@ -1,23 +0,0 @@ -// Обобщенные функции -// Выведение типа T по типам параметров - -procedure Swap(var a,b: T); -begin - var v := a; - a := b; - b := v; -end; - -begin - var a := 2; - var b := 3; - writelnFormat('До Swap a={0}, b={1}',a,b); - Swap(a,b); - writelnFormat('После Swap a={0}, b={1}',a,b); - var c := 2.5; - var d := 3.3; - writeln; - writelnFormat('До Swap c={0}, d={1}',c,d); - Swap(c,d); - writelnFormat('После Swap c={0}, d={1}',c,d); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/CallC#/CallCS.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/CallC#/CallCS.pas deleted file mode 100644 index d118c77ac..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/CallC#/CallCS.pas +++ /dev/null @@ -1,9 +0,0 @@ -// Вызов статического метода add класса Class1, помещенного в пространство имен ClassLibrary1 -// Класс Class1 помещен в библиотеку ClassLibrary1.dll, откомпилированную на C# - -{$reference ClassLibrary1.dll} -uses ClassLibrary1; - -begin - writeln(Class1.add(2,3)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/CallC#/ClassLibrary1.dll b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/CallC#/ClassLibrary1.dll deleted file mode 100644 index efed75e8e..000000000 Binary files a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/CallC#/ClassLibrary1.dll and /dev/null differ diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/DllTest/MyDll.dll b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/DllTest/MyDll.dll deleted file mode 100644 index 9a9c8f827..000000000 Binary files a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/DllTest/MyDll.dll and /dev/null differ diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/DllTest/MyDll.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/DllTest/MyDll.pas deleted file mode 100644 index 8d5974158..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/DllTest/MyDll.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Dll-библиотека -library MyDll; - -const n = 10; - -function add(a,b: integer): integer; -begin - Result := a + b; -end; - -procedure PrintPascalABCNET; -begin - writeln('PascalABC.NET'); -end; - -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/DllTest/main.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/DllTest/main.pas deleted file mode 100644 index 42e9893c6..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/DllTest/main.pas +++ /dev/null @@ -1,10 +0,0 @@ -// Это - главная программа -// Именами из dll-библиотеки, написанной на PascalABC.NET, можно пользоваться, -// не подключая пространства имен -{$reference mydll.dll} - -begin - PrintPascalABCNET; - writeln(n); - writeln(add(2,3)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/NativeDll/CallNative.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/NativeDll/CallNative.pas deleted file mode 100644 index 294747533..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/NativeDll/CallNative.pas +++ /dev/null @@ -1,6 +0,0 @@ -// Вызов функции из обычной dll -function add(a,b: integer): integer; external 'NativeDll.dll' name 'add'; // объявление внешней функции - -begin // основная программа - writeln(add(2,3)); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/NativeDll/NativeDll.dll b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/NativeDll/NativeDll.dll deleted file mode 100644 index 6b15dfe92..000000000 Binary files a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/NativeDll/NativeDll.dll and /dev/null differ diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/NativeDll/NativeDll.dpr b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/NativeDll/NativeDll.dpr deleted file mode 100644 index b050bdd86..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/NativeDll/NativeDll.dpr +++ /dev/null @@ -1,13 +0,0 @@ -// Delphi -library NativeDll; - -function add(a,b: integer): integer; stdcall; -begin - Result := a+b; -end; - -exports - add; -begin -end. - \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MainProgram.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MainProgram.pas deleted file mode 100644 index 98617cdfc..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MainProgram.pas +++ /dev/null @@ -1,7 +0,0 @@ -uses MyUnit; // подключили модуль - -var a: array of integer := (1,5,3,7,3,6,4,5,1,8,3,5,6); - -begin - writeln('Максимальный элемент в массиве = ',Max(a)); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MyUnit.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MyUnit.pas deleted file mode 100644 index 70fb761e3..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MyUnit.pas +++ /dev/null @@ -1,14 +0,0 @@ -/// Модуль упрощенной структуры -unit MyUnit; // имя модуля должно совпадать с именем файла - -// Документирующие комментарии отображаются при наведении на имя курсора мыши -/// Возвращает максимальный элемент в массиве -function Max(a: array of integer): integer; -begin - Result := integer.MinValue; - foreach x: integer in a do - if x>Result then - Result := x; -end; - -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MyUnit.pcu b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MyUnit.pcu deleted file mode 100644 index e6f17bc5a..000000000 Binary files a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MyUnit.pcu and /dev/null differ diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SystemUnitTest.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SystemUnitTest.pas deleted file mode 100644 index 262e7f035..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SystemUnitTest.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Иллюстрация поиска имен вначале справа налево в секции uses, а затем в системном модуле PABCSystem -uses System; - -begin - // Имя Random, определенное в пространстве имен System, перекрывает имя Random - // в модуле PABCSystem, который неявно подключается первым - var r: Random := new Random(); - writeln(r.Next(10)); - // Именно поэтому перед данным Random необходимо явно указывать имя модуля, в котором он находится - var i: integer := PABCSystem.Random(10); - writeln(i); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/ABC.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/ABC.pas deleted file mode 100644 index de94d7aba..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/ABC.pas +++ /dev/null @@ -1,41 +0,0 @@ -// Модуль ABCObjects. Изменение свойств объекта -uses ABCObjects,GraphABC; - -const delay = 300; - -procedure Pause; -begin - Sleep(delay); -end; - -var - r: RectangleABC; - z: StarABC; - -begin - z := new StarABC(Window.Center.X,Window.Center.Y,70,30,6,Color.Green); - r := new RectangleABC(100,100,200,100,Color.Gold); - Pause; - r.Center := Window.Center; - Pause; - r.Height := 70; - Pause; - r.Width := 220; - Pause; - z.Radius := 150; - Pause; - z.Color := Color.LightCoral; - Pause; - z.Count := 5; - Pause; - - r.Text := 'PascalABC.NET'; - r.Color := Color.Gainsboro; - Pause; - r.BorderWidth := 3; - r.BorderColor := Color.Blue; - Pause; - r.Center := Window.Center; - Pause; -// r.Bordered := False; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/GraphABCTest.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/GraphABCTest.pas deleted file mode 100644 index cd8f125a1..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/GraphABCTest.pas +++ /dev/null @@ -1,19 +0,0 @@ -// Иллюстрация простейших возможностей GraphABC -uses GraphABC; - -begin - Coordinate.Origin := Window.Center; - Coordinate.SetMathematic; - Brush.Color := Color.LightSkyBlue; - while True do - begin - LockDrawing; - ClearWindow; - Ellipse(-120,-70,120,70); - Line(0,0,200,0); - Line(0,0,0,200); - Redraw; - Coordinate.Angle := Coordinate.Angle + 1; - Sleep(100); - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/MouseEvents.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/MouseEvents.pas deleted file mode 100644 index f48183e0a..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/MouseEvents.pas +++ /dev/null @@ -1,19 +0,0 @@ -// Иллюстрация обработки событий мыши -uses GraphABC; - -procedure MouseDown(x,y,mb: integer); -begin - MoveTo(x,y); -end; - -procedure MouseMove(x,y,mb: integer); -begin - if mb=1 then LineTo(x,y); -end; - -begin - // Привязка обработчиков к событиям - OnMouseDown := MouseDown; - OnMouseMove := MouseMove -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/AllFromObject.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/AllFromObject.pas deleted file mode 100644 index f33bcd697..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/AllFromObject.pas +++ /dev/null @@ -1,14 +0,0 @@ -// Все типы - производные от Object -var - i: integer; - r: real; - o: object; - -begin - o := i; - writeln(o.GetType); - o := r; - writeln(o.GetType); - if o.GetType=typeof(real) then - writeln('В переменной o - вещественный тип'); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Boxing.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Boxing.pas deleted file mode 100644 index 8f7eec850..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Boxing.pas +++ /dev/null @@ -1,22 +0,0 @@ -// Упаковка-распаковка размерных типов -var - i: integer := 2; - r: real := 3.14; - o: object; - -begin - o := i; // Упаковка: объект размерного типа integer упаковывается в объект ссылочного типа, - // котрый и присваивается переменной o - // Преобразование типов при упаковке - неявное - writeln(integer(o)); // Распаковка: из упакованного объекта извлекается значение - // Преобразование типов при распаковке - явное - o := r; - writeln(real(o)); - - try // При неверном преобразовании типов генерируется исключение InvalidCastException - writeln(shortint(o)); - except - on e: Exception do - writeln(e.GetType); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/ClassConstructor.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/ClassConstructor.pas deleted file mode 100644 index 11679be8a..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/ClassConstructor.pas +++ /dev/null @@ -1,36 +0,0 @@ -// Пример использования классового (статического) конструктора -type - Person = class - private - class arr: array of Person; // Классовое поле. Связано не с переменной класса, а с классом. - name: string; - age: integer; - public - class constructor; // Конструктор класса. Вызывается до создания первого объекта класса и до вызова любого классового метода - begin - writeln(' Вызван классовый конструктор'); - SetLength(arr,3); - arr[0] := new Person('Иванов',20); - arr[1] := new Person('Петрова',19); - arr[2] := new Person('Попов',35); - end; - constructor (n: string; a: integer); - begin - name := n; - age := a; - end; - function ToString: string; override; - begin - Result := Format('Имя: {0} Возраст: {1}',name,age); - end; - class function RandomPerson: Person; // Классовый метод. Может обращаться только к классовым полям - begin - Result := arr[Random(3)]; - end; - end; - -begin - writeln('Случайные персоны'); - for var i:=1 to 5 do - writeln(Person.RandomPerson); // Вызов классового метода -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/GarbageCollection.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/GarbageCollection.pas deleted file mode 100644 index e9361cc02..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/GarbageCollection.pas +++ /dev/null @@ -1,13 +0,0 @@ -// Сборка мусора: для освобождения объекта присвойте переменной nil -uses System.Collections.Generic; - -var l: List := new List; - -begin - l.Add(3); - l.Add(5); - l.Add(2); - foreach x:integer in l do - write(x,' '); - l := nil; // после этого память, занимаемая динамическим массивом, будет собрана сборщиком мусора -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Interf.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Interf.pas deleted file mode 100644 index 7deff8846..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Interf.pas +++ /dev/null @@ -1,42 +0,0 @@ -// Иллюстрация использованя интерфейсов -type - IShape = interface - procedure Draw; - property X: integer read; - property Y: integer read; - end; - - ICloneable = interface - function Clone: Object; - end; - - Point = class(IShape,ICloneable) - private - xx,yy: integer; - public - constructor Create(x,y: integer); - begin - xx := x; yy := y; - end; - procedure Draw; begin end; - property X: integer read xx; - property Y: integer read yy; - function Clone: Object; - begin - Result := new Point(xx,yy); - end; - end; - -var - p: Point := new Point(2,3); - ish: IShape := p; - icl: ICloneable := p; - -begin - writeln(ish.X,' ',ish.Y); - var p1: Point := Point(icl.Clone); - p := nil; - writeln(p1.X,' ',p1.Y); - writeln(ish is Point); - writeln(ish is ICloneable); // Cross cast! -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/OperatorOverloading.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/OperatorOverloading.pas deleted file mode 100644 index 1b62ef27b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/OperatorOverloading.pas +++ /dev/null @@ -1,54 +0,0 @@ -// Перегрузка операций -type - Frac = record - private - num,denom: integer; - public - constructor (n,d: integer); - begin - num := n; - denom := d; - end; - class function operator+(a,b: Frac): Frac; - begin - Result := new Frac(a.num*b.denom+b.num*a.denom,a.denom*b.denom); - end; - class function operator-(a,b: Frac): Frac; - begin - Result := new Frac(a.num*b.denom-b.num*a.denom,a.denom*b.denom); - end; - class function operator*(a,b: Frac): Frac; - begin - Result := new Frac(a.num*b.num,a.denom*b.denom); - end; - class function operator/(a,b: Frac): Frac; - begin - Result := new Frac(a.num*b.denom,a.denom*b.num); - end; - class function operator=(a,b: Frac): boolean; - begin - Result := (a.num = b.num) and (a.denom = b.denom); - end; - class procedure operator+=(var a: Frac; b: Frac); - begin - a := a + b; - end; - function ToString: string; override; - begin - Result := Format('{0}/{1}',num,denom); - end; - end; - -var - f := new Frac(1,2); - f1 := new Frac(3,5); - -begin - writelnFormat('{0} + {1} = {2}',f,f1,f+f1); - writelnFormat('{0} - {1} = {2}',f,f1,f-f1); - writelnFormat('{0} * {1} = {2}',f,f1,f*f1); - writelnFormat('{0} / {1} = {2}',f,f1,f/f1); - writeln(f1=f); - f += f1; - writeln(f); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/PersonInternal.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/PersonInternal.pas deleted file mode 100644 index e146f930e..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/PersonInternal.pas +++ /dev/null @@ -1,30 +0,0 @@ -// Описание методов внутри интерфейса класса -// Удобство: методы можно реализовывать сразу после объявления -// Неудобство: для больших классов интерфейс трудно читается -type - Person = class - private - // Поля класса, как правило, приватны. Доступ к ним - через методы и свойства - name: string; - age: integer; - public - // Конструктор неявно имеет имя Create - constructor (n: string; a: integer); - begin - name := n; age := a; - end; - procedure Print; - begin - writeln('Имя: ',name,' Возраст: ',age); - end; - end; - -var p,p1: Person; - -begin - p := new Person('Иванов',20); // Новый синтаксис вызова конструктора (рекомендуется) - p.Print; - p1 := Person.Create('Попов',19); // Старый синтаксис вызова конструктора (не рекомендуется) - p1.Print; - // Деструкторы отсутствуют, вместо них - автоматическая сборка мусора -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Records.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Records.pas deleted file mode 100644 index e95d97a88..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Records.pas +++ /dev/null @@ -1,26 +0,0 @@ -// Иллюстрация конструкторов и методов в записях -// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln -type - SexType = (Male, Female); - Person = record - Name: string; - Age, Weight: integer; - Sex: SexType; - constructor (Name: string; Age, Weight: integer; Sex: SexType); - begin - Self.Name := Name; - Self.Age := Age; - Self.Sex := Sex; - Self.Weight := Weight; - end; - function ToString: string; override; - begin - Result := Format('Имя: {0} Пол: {1} Возраст: {2} Вес: {3}', Name, Sex, Age, Weight); - end; - end; - -var p: Person := new Person('Иванов',20,70,SexType.Male); - -begin - writeln(p); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Stack.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Stack.pas deleted file mode 100644 index d818e96ea..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Stack.pas +++ /dev/null @@ -1,56 +0,0 @@ -// Демонстрация создания простого класса стека на базе массива -type - Stack = class - private - a: array of T; - last: integer; - public - constructor Create(sz: integer); - begin - SetLength(a,sz); - last := 0; - end; - constructor Create; - begin - Create(100); - end; - procedure push(i: T); - begin - a[last] := i; - Inc(last); - end; - function pop: T; - begin - Dec(last); - pop := a[last]; - end; - function top: T; - begin - top := a[last-1]; - end; - function empty: boolean; - begin - Result := (last=0); - end; - function ToString: string; override; - begin - Result := ''; - for var i:=0 to last-1 do - Result += a[i]+' '; - end; - end; - -var s: Stack; - -begin - s := new Stack; - s.push(7); - s.push(2); - s.push(5); - s.push(4); - writeln(s); - while not s.empty do - write(s.pop,' '); -end. - - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Where.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Where.pas deleted file mode 100644 index 4b932d35a..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Where.pas +++ /dev/null @@ -1,21 +0,0 @@ -// Секция Where - ограничение на типы параметров -uses System,System.Collections.Generic; - -type - MyClass = class - where T: System.Array,ICloneable; - where T1: constructor; - procedure p(obj1: T; var obj2: T1); - begin - obj1.Clone(); - obj2 := new T1; - end; - end; - IntArr = array of integer; - -var - m: MyClass; - //m1: MyClass; // ошибка - -begin -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/WriteRecord.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/WriteRecord.pas deleted file mode 100644 index d35db749a..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/WriteRecord.pas +++ /dev/null @@ -1,26 +0,0 @@ -// Иллюстрация конструкторов и методов в записях -// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln -type - SexType = (Male, Female); - Person = record - Name: string; - Age, Weight: integer; - Sex: SexType; - constructor (Name: string; Age, Weight: integer; Sex: SexType); - begin - Self.Name := Name; - Self.Age := Age; - Self.Sex := Sex; - Self.Weight := Weight; - end; - function ToString: string; override; - begin - Result := string.Format('Имя: {0} Возраст: {1} Вес: {2} Пол: {3}', Name, Age, Weight, Sex); - end; - end; - -var p: Person := new Person('Иванов',20,70,SexType.Male); - -begin - writeln(p); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/DateTime.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/DateTime.pas deleted file mode 100644 index 01e72e36d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/DateTime.pas +++ /dev/null @@ -1,31 +0,0 @@ -Uses System; - -var d1, d2, d3: DateTime; // Объекты для хранения даты и времени - ts: TimeSpan; // Объект для хранения промежутков времени - -begin - // Получение текущей даты - вызов статического метода - d1 := DateTime.Now; - Writeln(d1); - - // Дата и время через один месяц - d2 := d1.AddMonths(1); - Writeln(d2); - - // Дата и время на 12 часов раньше - d2 := d1.AddHours(-12); - Writeln(d2); - - // Формирование даты - вызов конструктора объекта (год, месяц,число) - d3 := new DateTime(2001, 1, 1); - Writeln(d3); - - // Определение времени, прошедшего с начала тысячелетия (разность дат) - ts := d1.Subtract(d3); - - // Промежуток времени в днях (результат - вещественное число) - Writeln(ts.TotalDays); - - // Промежуток времени в днях, часах, минутах и секундах - Writeln(ts.Days, ' ', ts.Hours, ':', ts.Minutes, ':', ts.Seconds); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/FormWebBrowser.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/FormWebBrowser.pas deleted file mode 100644 index 840d6506d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/FormWebBrowser.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Иллюстрация использования компонента WebBrowser -{$apptype windows} -{$reference System.Windows.Forms.dll} - -uses - System.Windows.Forms, - System.Net; - -begin - var myForm := new Form; - var w := new WebBrowser; - w.Url := new System.Uri('http://pascalabc.net'); - w.Dock := Dockstyle.Fill; - myForm.Controls.Add(w); - myForm.WindowState := FormWindowState.Maximized; - Application.Run(myForm); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/LinkedList.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/LinkedList.pas deleted file mode 100644 index dd1474e39..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/LinkedList.pas +++ /dev/null @@ -1,27 +0,0 @@ -// Использование LinkedList - двусвязного списка стандартной библиотеки - и его итератора -uses System.Collections,System.Collections.Generic; - -procedure print(l: ICollection); -begin - foreach x: integer in l do - write(x,' '); - writeln; -end; - -var l: LinkedList := new LinkedList; - -begin - l.AddLast(3); - l.AddLast(5); - l.AddLast(7); - l.AddFirst(2); - print(l); - - var a := new integer[10]; - l.CopyTo(a,0); - print(a); - - var lit: LinkedListNode := l.Find(5); - l.AddBefore(lit,777); - print(l); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/Reflection.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/Reflection.pas deleted file mode 100644 index 99deddba5..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/Reflection.pas +++ /dev/null @@ -1,11 +0,0 @@ -// Отражение типов. Выводятся все члены типа DateTime -uses System,System.Reflection; - -begin - var bf := BindingFlags.Public or BindingFlags.NonPublic or BindingFlags.Instance or BindingFlags.Static; - var t: &Type := typeof(DateTime); - var mi := t.GetMembers(bf); - foreach m: MemberInfo in mi do - writeln(m); -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/WinFormWithButton.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/WinFormWithButton.pas deleted file mode 100644 index a0f0c2c8c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/WinFormWithButton.pas +++ /dev/null @@ -1,29 +0,0 @@ -// Создание оконного приложения -{$apptype windows} -{$reference System.Windows.Forms.dll} - -uses - System, - System.Windows.Forms; - -var - myForm: Form; - myButton: Button; - -procedure MyButtonClick(sender: Object; e: EventArgs); -begin - myForm.Close; -end; - -begin - myForm := new Form; - myForm.Text := 'Оконное приложение'; - myButton := new Button; - myButton.Text := ' Закрыть окно '; - myButton.AutoSize := True; - myButton.Left := 90; - myButton.Top := 110; - myForm.Controls.Add(myButton); - myButton.Click += MyButtonClick; - Application.Run(myForm); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Assign1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Assign1.pas deleted file mode 100644 index ac5fe9ee8..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Assign1.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Использование вспомогательных переменных -var r: real; - -begin - write('Введите r: '); - readln(r); - var r2,r4,r8: real; // вспомогательные переменные - r2 := r * r; - r4 := r2 * r2; - r8 := r4 * r4; - writeln(r,' в степени 8 = ',r8); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Assign2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Assign2.pas deleted file mode 100644 index 13b2ad3a9..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Assign2.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Перемена местами значений двух переменных с использованием третьей -var x,y: real; - -begin - write('Введите x,y: '); - readln(x,y); - var v: real; // вспомогательная переменная - v := x; - x := y; - y := v; - writeln('Новые значения x,y: ',x,' ',y); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/AssignExt.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/AssignExt.pas deleted file mode 100644 index 109d1f089..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/AssignExt.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Присваивания += -= *= /= -var - i: integer; - r: real; - -begin - i := 1; - writeln('i := 1; i = ',i); - i += 2; // Увеличение на 2 - writeln('i += 2; i = ',i); - i *= 3; // Увеличение в 3 раза - writeln('i *= 3; i = ',i); - writeln; - r := 6; - writeln('r := 6; r = ',r); - r /= 2; - writeln('r /= 2; r = ',r); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Boolean1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Boolean1.pas deleted file mode 100644 index 630763ae6..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Boolean1.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Логический тип. Логические выражения с and, or и not -var - b: boolean; - x: integer; -begin - write('Введите x (от 1 до 9): '); - readln(x); - b := x=5; - writeln('x=5? ',b); - b := (x>=3) and (x<=5); - writeln('x=3,4 или 5? ',b); - b := (x=3) or (x=4) or (x=5); - writeln('x=3,4 или 5? ',b); - b := not Odd(x); - writeln('x - четное? ',b); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations1.pas deleted file mode 100644 index f6ba098ae..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations1.pas +++ /dev/null @@ -1,10 +0,0 @@ -// Вывод результатов вычислений -begin - writeln('Вычисления:'); -// Вывод пустой строки - writeln; - writeln('121 + 363 = ',121+363); - writeln('121 - 363 = ',121-363); - writeln('121 * 363 = ',121*363); - writeln('121 / 363 = ',121/363); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations2.pas deleted file mode 100644 index ff692f587..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations2.pas +++ /dev/null @@ -1,13 +0,0 @@ -// Вывод результатов вычислений. Используются именованные константы -const - a = 121; - b = 363; - -begin - writeln('Вычисления:'); - writeln; - writeln(a,' + ',b,' = ',a+b); - writeln(a,' - ',b,' = ',a-b); - writeln(a,' * ',b,' = ',a*b); - writeln(a,' / ',b,' = ',a/b); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations3.pas deleted file mode 100644 index 255a9b131..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations3.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Вывод результатов вычислений. Используются переменные и процедура ввода -var a,b: integer; - -begin - writeln('Введите a и b:'); - readln(a,b); - writeln; - writeln(a,' + ',b,' = ',a+b); - writeln(a,' - ',b,' = ',a-b); - writeln(a,' * ',b,' = ',a*b); - writeln(a,' / ',b,' = ',a/b); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/DivMod1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/DivMod1.pas deleted file mode 100644 index 37fc92a04..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/DivMod1.pas +++ /dev/null @@ -1,10 +0,0 @@ -// Операции div и mod -var a: integer; - -begin - write('Введите a: '); - readln(a); - writeln('Последняя цифра числа: ',a mod 10); - writeln('Число без последней цифры: ',a div 10); - writeln('Если число a четно, то 0: ',a mod 2); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/DivMod2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/DivMod2.pas deleted file mode 100644 index 7a008006b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/DivMod2.pas +++ /dev/null @@ -1,13 +0,0 @@ -// Операции div и mod -var a: integer := 247; - -begin - write('Цифры числа в обратном порядке: '); - // Выводим последнюю цифру - write(a mod 10,' '); - // Отбрасываем последнюю цифру - a := a div 10; - write(a mod 10,' '); - a := a div 10; - write(a mod 10,' '); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/HelloWorld.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/HelloWorld.pas deleted file mode 100644 index 0ce413328..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/HelloWorld.pas +++ /dev/null @@ -1,5 +0,0 @@ -// Первая программа -program HelloWorld; -begin - writeln('Привет, мир!'); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Random1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Random1.pas deleted file mode 100644 index e8738e012..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Random1.pas +++ /dev/null @@ -1,13 +0,0 @@ -// Генерация случайного числа -var - i: integer; - r: real; - -begin - i := Random(100); - writeln('Случайное целое в диапазоне 0..99: ',i); - i := Random(2,5); - writeln('Случайное целое в диапазоне 2..5: ',i); - r := Random; - writeln('Случайное вещественное в диапазоне [0,1): ',r); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Random2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Random2.pas deleted file mode 100644 index edb94ebd9..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Random2.pas +++ /dev/null @@ -1,10 +0,0 @@ -// Бросание кубиков - -var k1,k2: integer; - -begin - k1 := Random(1,6); - k2 := Random(1,6); - writeln('Очки на кубиках: ',k1,' ',k2); - writeln('Сумма очков: ',k1+k2); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/ReadString.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/ReadString.pas deleted file mode 100644 index a214b05b6..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/ReadString.pas +++ /dev/null @@ -1,8 +0,0 @@ -// Ввод строки -var s: string; - -begin - write('Введите Ваше имя: '); - readln(s); - writeln('Здравствуйте, ',s); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Shl.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Shl.pas deleted file mode 100644 index 5a381c181..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Shl.pas +++ /dev/null @@ -1,8 +0,0 @@ -// Демонстрация операции shl -begin - writeln('Степени двойки'); - writeln(' n 2^n'); - for var i:=0 to 30 do - writeln(i:2,(1 shl i):12); -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StandFun.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StandFun.pas deleted file mode 100644 index 5d820f901..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StandFun.pas +++ /dev/null @@ -1,14 +0,0 @@ -// Стандартные функции -var x: real; - -begin - write('Введите x: '); - readln(x); - writeln('Квадрат ',x,' равен ',sqr(x)); - writeln(x,' в степени 5 равно ',power(x,5)); - writeln('Квадратный корень из ',x,' равен ',sqrt(x)); - writeln('Модуль ',x,' равен ',abs(x)); - writeln('Натуральный логарифм ',x,' равен ',ln(x)); - writeln('Синус ',x,' равен ',sin(x)); - writeln('Косинус ',x,' равен ',cos(x)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StandardTypes.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StandardTypes.pas deleted file mode 100644 index 6eb0c2b4d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StandardTypes.pas +++ /dev/null @@ -1,33 +0,0 @@ -/// Стандартные размерные типы данных и их размер -var - i: integer; - j: shortint; - k: smallint; - l: longint; // синоним integer - i64: int64; - b: byte; - w: word; - lw: longword; - car: cardinal; // синоним longword - ui64: uint64; - r: real; - d: double; // синоним real - sn: single; - c: char; - -begin - writeln('sizeof(integer) = ':20, sizeof(integer)); - writeln('sizeof(shortint) = ':20,sizeof(shortint)); - writeln('sizeof(smallint) = ':20,sizeof(smallint)); - writeln('sizeof(longint) = ':20, sizeof(longint)); - writeln('sizeof(int64) = ':20, sizeof(int64)); - writeln('sizeof(byte) = ':20, sizeof(byte)); - writeln('sizeof(word) = ':20, sizeof(word)); - writeln('sizeof(longword) = ':20,sizeof(longword)); - writeln('sizeof(cardinal) = ':20,sizeof(cardinal)); - writeln('sizeof(uint64) = ':20, sizeof(uint64)); - writeln('sizeof(real) = ':20, sizeof(real)); - writeln('sizeof(double) = ':20, sizeof(double)); - writeln('sizeof(single) = ':20, sizeof(single)); - writeln('sizeof(char) = ':20, sizeof(char)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StringPlus.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StringPlus.pas deleted file mode 100644 index f267a010f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StringPlus.pas +++ /dev/null @@ -1,8 +0,0 @@ -// Сложение строк -var s1: string := 'Pascal'; -var s2: string := 'NET'; - -begin - writeln(s2+'-'+s1); - writeln(s1+'.'+s2); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/WriteFormat.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/WriteFormat.pas deleted file mode 100644 index 81b23cce6..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/WriteFormat.pas +++ /dev/null @@ -1,11 +0,0 @@ -/// Использование процедуры WritelnFormat -begin - // Вывод в обратном порядке - WritelnFormat('{2},{1},{0}',1,2,3); - // Вывод фигурных скобочек - WritelnFormat('{{}}{0}','Вывод фигурных скобочек в форматной строке'); - // Задание количества знаков после запятой для вещественного числа - WritelnFormat('{0:f3}',3.1415); - // Задание ширины поля вывода - WritelnFormat('{0,10:f}',3.1415); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError1.pas deleted file mode 100644 index 89b2f9ac6..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError1.pas +++ /dev/null @@ -1,8 +0,0 @@ -// Исправьте ошибку компиляции. -// Обратите внимание, что курсор позиционируется в конце слова, вызвавшего ошибку -var i: integer - -begin - i := 2; - writeln(i); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError2.pas deleted file mode 100644 index 965d64a33..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError2.pas +++ /dev/null @@ -1,5 +0,0 @@ -// Исправьте ошибки компиляции. Опишите переменную r -begin - r := 2.5; - witeln(r); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError3.pas deleted file mode 100644 index 77ac7ce3b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError3.pas +++ /dev/null @@ -1,8 +0,0 @@ -// Исправьте ошибку компиляции. Не всегда надо "верить" тексту ошибки - -var k: real; - -begin - k := 2,5; - writeln(r); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError4.pas deleted file mode 100644 index f4ad2ff53..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError4.pas +++ /dev/null @@ -1,6 +0,0 @@ -// Исправьте ошибки компиляции, изменив тип переменной x -var x: integer; - -begin - x := 3/5; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError1.pas deleted file mode 100644 index 07b8eb262..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError1.pas +++ /dev/null @@ -1,7 +0,0 @@ -// Введите не число -// Посмотрите, как выглядит ошибка при выполнении программы -var i: integer; - -begin - read(i); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError2.pas deleted file mode 100644 index c505b4c3f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError2.pas +++ /dev/null @@ -1,6 +0,0 @@ -// Посмотрите, как выглядит ошибка выполнения при целочисленном делении на 0 -var i: integer := 0; - -begin - write(2 div i); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError3.pas deleted file mode 100644 index bd7e13190..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError3.pas +++ /dev/null @@ -1,6 +0,0 @@ -// При обычном делении на 0 ошибки не возникает -var r: real := 0; - -begin - write(1/0); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError4.pas deleted file mode 100644 index e5d2f7412..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError4.pas +++ /dev/null @@ -1,4 +0,0 @@ -// При работе с вещественными числами невозможно получить ошибку выполнения -begin - writeln(sqrt(-1)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/03_Robot_Drawman/DMa1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/03_Robot_Drawman/DMa1.pas deleted file mode 100644 index fde4bef24..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/03_Robot_Drawman/DMa1.pas +++ /dev/null @@ -1,14 +0,0 @@ -// Исполнитель Чертежник - отличное средство для начального обучения программированию -// школьников младших и средних классов -// Для генерации шаблона задания нажмите Ctrl-L и наберите DM и имя задания -uses Drawman; - -begin - Task('a1'); - ToPoint(2,3); - PenDown; - OnVector(1,2); - PenUp; - ToPoint(0,0); -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/03_Robot_Drawman/RBa1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/03_Robot_Drawman/RBa1.pas deleted file mode 100644 index e7c59265c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/03_Robot_Drawman/RBa1.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Исполнитель Робот - отличное средство для начального обучения программированию -// школьников младших и средних классов -// Для генерации шаблона задания нажмите Ctrl-L и наберите RB и имя задания -uses Robot; - -begin - Task('a1'); - Right; Right; Right; Right; - Up; - Left; Paint; - Left; Paint; - Left; Paint; - Left; Paint; - Left; -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr1.pas deleted file mode 100644 index 1b3eb122e..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr1.pas +++ /dev/null @@ -1,8 +0,0 @@ -// Графика. Линии. Размеры окна. Заголовок окна -uses GraphABC; - -begin - Window.Title := 'Первая графическая программа'; - Line(0,0,Window.Width-1,Window.Height-1); - Line(0,Window.Height-1,Window.Width-1,0); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr2.pas deleted file mode 100644 index 0471c2aa8..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr2.pas +++ /dev/null @@ -1,8 +0,0 @@ -// Графика. Точка. Случайный цвет. Скорость работы -uses GraphABC,Utils; - -begin - for var i:=1 to 100000 do - SetPixel(Random(Window.Width),Random(Window.Height),clRandom); - writeln('Время работы: ',Milliseconds/1000,' секунд'); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr3.pas deleted file mode 100644 index de0d7ae58..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr3.pas +++ /dev/null @@ -1,14 +0,0 @@ -// Графика. Свойства кисти и пера -uses GraphABC; - -begin - Window.Title := 'Свойства кисти и пера'; - Pen.Color := Color.Red; - Pen.Width := 3; - Pen.Style := psDashDot; - Brush.Style := bsHatch; - Brush.Color := Color.Green; - Brush.Hatch := bhDiagonalBrick; - Brush.HatchBackgroundColor := Color.Bisque; - Rectangle(20, 20, Window.Width - 20, Window.Height - 20); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr4.pas deleted file mode 100644 index 7c060dd57..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr4.pas +++ /dev/null @@ -1,22 +0,0 @@ -// Графика. Draw и Fill - процедуры -uses GraphABC; - -begin - Window.Title := 'Draw и Fill - процедуры'; - for var i := 1 to 100 do - begin - Pen.Color := clRandom; - var x := Random(Window.Width-100); - var y := Random(Window.Height-100); - DrawRectangle(x,y,x+Random(100),y+Random(100)); - Sleep(30); - end; - for var i := 1 to 100 do - begin - Brush.Color := clRandom; - var x := Random(Window.Width-100); - var y := Random(Window.Height-100); - FillRectangle(x,y,x+Random(100),y+Random(100)); - Sleep(30); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr5.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr5.pas deleted file mode 100644 index 979566e61..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr5.pas +++ /dev/null @@ -1,20 +0,0 @@ -// Графика. Pie -uses GraphABC; - -const r = 200; - -begin - Window.Title := 'Круговая гистограмма'; - var x := Window.Center.X; - var y := Window.Center.Y; - Brush.Color := clRandom; - Pie(x,y,r,0,30); - Brush.Color := clRandom; - Pie(x,y,r,30,110); - Brush.Color := clRandom; - Pie(x,y,r,110,160); - Brush.Color := clRandom; - Pie(x,y,r,160,280); - Brush.Color := clRandom; - Pie(x,y,r,280,360); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr6.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr6.pas deleted file mode 100644 index 6430311b0..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr6.pas +++ /dev/null @@ -1,19 +0,0 @@ -// Графика. Прозрачность -uses GraphABC; - -begin - Window.Title := 'Демонстрация прозрачности'; - - Brush.Color := clRed; - FillRectangle(50,50,100,Window.Height - 50); - Brush.Color := clGreen; - FillRectangle(150,50,200,Window.Height - 50); - Brush.Color := clBlue; - FillRectangle(250,50,300,Window.Height - 50); - Brush.Color := ARGB(127,255,0,0); - FillRectangle(20,100,420,150); - Brush.Color := ARGB(63,0,127,0); - FillRectangle(20,200,420,250); - Brush.Color := ARGB(31,0,0,255); - FillRectangle(20,300,420,350); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr7.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr7.pas deleted file mode 100644 index 3eacff030..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr7.pas +++ /dev/null @@ -1,24 +0,0 @@ -// Графика. Сохраниение изображения графического окна в файл и загрузка из файла -uses GraphABC; - -const - delay = 500; - filename = 'GraphWindow.bmp'; - -begin - Window.Title := 'Window.Save и Window.Load'; - SetWindowSize(320,240); - - for var x:=0 to Window.Width - 1 do - for var y:=0 to Window.Height - 1 do - SetPixel(x,y,RGB(x-2*y,y+x,y-2*x)); - - Window.Save(filename); - for var i := 1 to 5 do - begin - Window.Clear; - Sleep(delay); - Window.Load(filename); - Sleep(delay); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr8.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr8.pas deleted file mode 100644 index 678a0a382..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr8.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Графика. Сглаживание -uses GraphABC; - -begin - Window.Title := 'Демонстрация сглаживания'; - TextOut(40,20,'Со сглаживанием'); - Pen.Width := 2; - - Ellipse(40,60,300,200); - Line(340,60,600,130); - Line(600,130,340,200); - - SetSmoothingOff; - TextOut(40,240,'Без сглаживания'); - Ellipse(40,280,300,420); - Line(340,280,600,350); - Line(600,350,340,420); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrAnim1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrAnim1.pas deleted file mode 100644 index 67e0b2d54..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrAnim1.pas +++ /dev/null @@ -1,14 +0,0 @@ -// Графика. Пример "наивной" анимации. Эффект мерцания -uses GraphABC; - -begin - Window.Title := 'Демонстрация простой анимации'; - var y := 200; - Brush.Color := clGreen; - for var x := 70 to 500 do - begin - Window.Clear(clWhite); - Circle(x,y,50); - Sleep(3); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrAnim2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrAnim2.pas deleted file mode 100644 index b88e17046..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrAnim2.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Графика. Использование LockDrawing-Redraw. Мерцание отсутствует -uses GraphABC; - -begin - Window.Title := 'Анимация без мерцания'; - var y := 200; - Brush.Color := clGreen; - // Отключаем рисование в окне - LockDrawing; - for var x := 70 to 500 do - begin - Window.Clear(clWhite); - Circle(x,y,50); - // Перерисовываем окно из внеэранного буфера - Redraw; - Sleep(3); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord1.pas deleted file mode 100644 index 8da8ac886..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord1.pas +++ /dev/null @@ -1,19 +0,0 @@ -// Демонстрация преобразований системы координат -uses GraphABC; - -begin - Window.Title := 'Преобразования системы координат'; - Window.IsFixedSize := True; - - // Поворот - Coordinate.Angle := 30; - // Масштаб - Coordinate.Scale := 3; - // Начало координат - в центре окна - Coordinate.Origin := Window.Center; - - Brush.Color := clMoneyGreen; - Ellipse(-50,-20,50,20); - Line(-70,0,70,0); - Line(0,-40,0,40); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord2.pas deleted file mode 100644 index e81b9b651..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord2.pas +++ /dev/null @@ -1,15 +0,0 @@ -// Демонстрация преобразований системы координат -uses GraphABC; - -begin - Window.Title := 'Преобразования системы координат'; - Window.IsFixedSize := True; - - Coordinate.Origin := Window.Center; - Circle(0,0,200); - for var i := 1 to 12 do - begin - Circle(0,180,10); - Coordinate.Angle := Coordinate.Angle + 30; - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord3.pas deleted file mode 100644 index 515de5fc5..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord3.pas +++ /dev/null @@ -1,17 +0,0 @@ -uses GraphABC; - -begin - Coordinate.Origin := Window.Center; - Coordinate.SetMathematic; - while True do - begin - LockDrawing; - ClearWindow; - Ellipse(-120,-70,120,70); - Line(0,0,200,0); - Line(0,0,0,200); - Redraw; - Coordinate.Angle := Coordinate.Angle + 1; - Sleep(100); - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrFont1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrFont1.pas deleted file mode 100644 index 40446966c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrFont1.pas +++ /dev/null @@ -1,23 +0,0 @@ -// Демонстрация работы со шрифтами -uses GraphABC; - -begin - Window.Title := 'Шрифты'; - SetWindowSize(760,460); - Font.Name := 'Arial'; - Font.Style := fsBoldItalic; - for var i:=4 to 14 do - begin - Font.Size := 2*i; - Font.Color := clRandom; - TextOut(30,2*i*i-15,'PascalABC.NET'); - end; - Font.Name := 'Times New Roman'; - Font.Style := fsBoldUnderline; - for var i:=4 to 14 do - begin - Font.Size := 2*i; - Font.Color := clRandom; - TextOut(400,2*i*i-15,'PascalABC.NET'); - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrFont2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrFont2.pas deleted file mode 100644 index 17947a8ff..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrFont2.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Демонстрация использования TextWidth и TextHeight -uses GraphABC; - -const s = 'Width & Height'; - -begin - Window.Title := 'Текст по центру'; - Window.IsFixedSize := True; - SetWindowSize(700,300); - Window.Center; - Font.Name := 'Times'; - Font.Size := 50; - var tw := TextWidth(s); - var th := TextHeight(s); - TextOut((Window.Width-tw) div 2,(Window.Height-th) div 2,s); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrPoly.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrPoly.pas deleted file mode 100644 index 68f80312d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrPoly.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Процедуры Polyline, Polygon, Curve, ClosedCurve -// Перенос начала системы координат -uses GraphABC; - -var a: array of Point := (new Point(0,0), new Point(50,170), new Point(100,100), new Point(150,170), new Point(200,0)); - -begin - Window.Title := 'Рисование по массиву точек'; - Brush.Color := Color.Beige; - Coordinate.SetOrigin(60,30); - Polyline(a); - Coordinate.OriginX := 360; - Polygon(a); - Coordinate.Origin := new Point(60,250); - Curve(a); - Coordinate.OriginX := 360; - ClosedCurve(a); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GraphWindow.bmp b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GraphWindow.bmp deleted file mode 100644 index 1325f0b68..000000000 Binary files a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GraphWindow.bmp and /dev/null differ diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04a_ABCObjects/ABC1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04a_ABCObjects/ABC1.pas deleted file mode 100644 index 0fe49e801..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04a_ABCObjects/ABC1.pas +++ /dev/null @@ -1,40 +0,0 @@ -// Модуль ABCObjects. Изменение свойств объекта -uses ABCObjects,GraphABC; - -const delay = 300; - -procedure Pause; -begin - Sleep(delay); -end; - -var - r: RectangleABC; - z: StarABC; - -begin - Window.Title := 'ABCObjects: свойства графических объектов'; - z := new StarABC(Window.Center.X,Window.Center.Y,70,30,6,Color.Green); - r := new RectangleABC(100,100,200,100,Color.Gold); - Pause; - r.Center := Window.Center; - Pause; - r.Height := 70; - Pause; - r.Width := 220; - Pause; - z.Radius := 150; - Pause; - z.Color := Color.LightCoral; - Pause; - z.Count := 5; - Pause; - - r.Text := 'PascalABC.NET'; - r.Color := Color.Gainsboro; - Pause; - r.BorderWidth := 3; - r.BorderColor := Color.Blue; - Pause; - r.Center := Window.Center; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case1.pas deleted file mode 100644 index 9f2c5a27c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case1.pas +++ /dev/null @@ -1,15 +0,0 @@ -// Оператор выбора -var x: integer; - -begin - writeln('Введите оценку (1..5): '); - readln(x); - case x of - 1: writeln('Единица'); - 2: writeln('Двойка'); - 3: writeln('Тройка'); - 4: writeln('Четверка'); - 5: writeln('Пятерка'); - else writeln('Такой оценки нет'); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case2.pas deleted file mode 100644 index a6b257bbd..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case2.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Оператор выбора -var day: integer; - -begin - writeln('Введите номер дня недели (1..7): '); - readln(day); - case day of - 1..5: writeln('Будний'); - 6,7: writeln('Выходной'); - else writeln('Неверный день недели'); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case3.pas deleted file mode 100644 index bd061c036..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case3.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Оператор выбора -var c: char; - -begin - writeln('Введите символ: '); - readln(c); - case c of - '0'..'9': writeln('Это цифра'); - 'a'..'z','A'..'Z': writeln('Это английская буква'); - 'а'..'я','А'..'Я': writeln('Это русская буква'); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case4.pas deleted file mode 100644 index ce699c1ca..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case4.pas +++ /dev/null @@ -1,14 +0,0 @@ -// Оператор выбора. Случайная фигура -uses GraphABC; - -begin - SetWindowSize(400,300); - var t := Random(1,5); - case t of - 1: Circle(200,150,100); - 2: Rectangle(100,100,300,200); - 3: Ellipse(100,100,300,200); - 4: RoundRect(100,100,300,200,20,20); - 5: Line(100,100,300,200); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If1.pas deleted file mode 100644 index a76e75399..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If1.pas +++ /dev/null @@ -1,10 +0,0 @@ -// Условный оператор. Полная форма -var - x: integer := 5; - y: integer := 3; - -begin - if x=1) and (x<=9) then - writeln('Однозначное число'); - // Odd - функция, возвращающая True только если x - нечетно - if Odd(x) and (x>=10) and (x<=99) then - writeln('Нечетное двузначное число'); - if (x=3) or (x=9) or (x=27) or (x=81) then - writeln('Степень тройки'); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If4.pas deleted file mode 100644 index 41008a92a..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If4.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Вложенные условные операторы -var x: integer; - -begin - writeln('Введите оценку (1..5): '); - readln(x); - if (x=1) then - writeln('Единица') - else if (x=2) then - writeln('Двойка') - else if (x=3) then - writeln('Тройка') - else if (x=4) then - writeln('Четверка') - else if (x=5) then - writeln('Пятерка') - else writeln('Такой оценки нет') -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If5.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If5.pas deleted file mode 100644 index 074bf783b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If5.pas +++ /dev/null @@ -1,19 +0,0 @@ -// Вложенные условные операторы. Антонимы -var s: string; - -begin - writeln('Введите слово из списка (черный,высокий,свет,радость,умный): '); - readln(s); - write('Антоним: '); - if (s='черный') then - writeln('белый') - else if (s='высокий') then - writeln('низкий') - else if (s='свет') then - writeln('тьма') - else if (s='радость') then - writeln('горе') - else if (s='умный') then - writeln('глупый') - else writeln('Такого слова в списке нет') -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For1.pas deleted file mode 100644 index 5545f146f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For1.pas +++ /dev/null @@ -1,22 +0,0 @@ -// Цикл for - -const n = 20; - -var i: integer; - -begin - writeln('Числа от 1 до ',n,':'); - for i:=1 to n do - write(i,' '); - writeln; - writeln; - writeln('Числа от ',n,' до 1:'); - for i:=n downto 1 do - write(i,' '); - writeln; - writeln; - writeln('Маленькие английские буквы:'); - for c: char := 'a' to 'z' do - write(c,' '); - writeln; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For1a.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For1a.pas deleted file mode 100644 index 600a4a7bc..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For1a.pas +++ /dev/null @@ -1,38 +0,0 @@ -// Цикл for. Шаг цикла 2 -const n = 25; - -var i: integer; - -begin - writeln('Четные числа от 1 до ',2*n); - for i:=1 to n do - write(2*i,' '); - writeln; - writeln; - - writeln('Четные числа от 1 до ',2*n); - var x := 2; - for i:=1 to n do - begin - write(x,' '); - x += 2; - end; - writeln; - writeln; - - writeln('Нечетные числа от 1 до ',2*n); - for i:=1 to n do - write(2*i-1,' '); - writeln; - writeln; - - writeln('Нечетные числа от 1 до ',2*n); - x := 1; - for i:=1 to n do - begin - write(x,' '); - x += 2; - end; - writeln; - writeln; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For2.pas deleted file mode 100644 index f94af5449..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For2.pas +++ /dev/null @@ -1,15 +0,0 @@ -// Цикл for. Последовательность случайных чисел - -const n = 20; - -var i: integer; - -begin - write('Случайные оценки: '); - for i:=1 to n do - write(Random(2,5),' '); - writeln; - write('Случайные целые от 1 до 99: '); - for i:=n downto 1 do - write(Random(1,99),' '); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For3.pas deleted file mode 100644 index 945e1ce5b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For3.pas +++ /dev/null @@ -1,11 +0,0 @@ -// Цикл for. Последовательность случайных чисел -const n = 20; - -begin - for var i:=1 to n do - write(Random(2,5),' '); - writeln; - write('Случайные целые от 1 до 99: '); - for i:=n downto 1 do - write(Random(1,99),' '); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For4.pas deleted file mode 100644 index d10ab5ca5..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For4.pas +++ /dev/null @@ -1,9 +0,0 @@ -// ÷икл for. —умма всех двузначных чисел -var s: integer; - -begin - s := 0; - for var i:=10 to 99 do - s := s + i; // можно s += i - writeln('—умма всех двузначных чисел = ',s); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For5.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For5.pas deleted file mode 100644 index 5b1a9a4cd..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For5.pas +++ /dev/null @@ -1,13 +0,0 @@ -// ÷икл for. a в степени n -var - a: real; - n: integer; - -begin - write('¬ведите a,n: '); - readln(a,n); - var p: real := 1; - for var i:=1 to n do - p := p * a; // можно p *= a - writelnFormat('{0} в степени {1} = {2}',a,n,p); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For6.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For6.pas deleted file mode 100644 index d4073450f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For6.pas +++ /dev/null @@ -1,15 +0,0 @@ -// for. -var - a: real := 0; - b: real := 4; - n: integer := 16; - -begin - var h := (b-a)/n; - var x := a; - for var i:=0 to n do - begin - writelnFormat('{0:f2} {1:f4}',x,sqrt(x)); - x += h; - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For7.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For7.pas deleted file mode 100644 index fdee8f3a2..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For7.pas +++ /dev/null @@ -1,17 +0,0 @@ -// for. -const n = 25; - -begin - var a := 1; - var b := 1; - writeln(' :'); - write(a,' ',b,' '); - - for var i:=3 to n do - begin - var c := a + b; - write(c,' '); - a := b; - b := c; - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For8.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For8.pas deleted file mode 100644 index 5167640b8..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For8.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Цикл for. Максимум из введенных чисел -const n = 10; - -var max: real; - -begin - writelnFormat('Введите {0} чисел',n); - max := integer.MinValue; // самое маленькое целое число - for var i:=1 to n do - begin - var x: real; - read(x); - if x>max then - max := x; - end; - writeln('Максимальное равно ',max); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For9.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For9.pas deleted file mode 100644 index 7ca1357f1..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For9.pas +++ /dev/null @@ -1,26 +0,0 @@ -// Цикл for. Поиск значения. Оператор break -const n = 10; - -var - k: integer; - found: boolean; - -begin - writeln('Введите число для поиска: '); - readln(k); - writelnFormat('Введите {0} чисел',n); - found := False; - for var i:=1 to n do - begin - var x: integer; - read(x); - if x=k then - begin - found := True; - break; - end; - end; - if found then - writeln('Найдено') - else writeln('Не найдено'); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForFor1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForFor1.pas deleted file mode 100644 index c6f2b1322..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForFor1.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Вложенные циклы for. Таблица умножения -const n = 9; - -begin - writeln('Таблица умножения'); - for var i:=1 to n do - begin - for var j:=1 to n do - write(i*j:4); - writeln; - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForFor2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForFor2.pas deleted file mode 100644 index 002e2d5c0..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForFor2.pas +++ /dev/null @@ -1,20 +0,0 @@ -// Вложенные циклы for -const n = 6; - -begin - for var i:=1 to n do - begin - for var j:=1 to i do - write('*'); - writeln; - end; - writeln; - for var i:=1 to n do - begin - for var j:=1 to 3*n do - if Odd(i+j) then - write('*') - else write(' '); - writeln; - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForGra1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForGra1.pas deleted file mode 100644 index a7028177b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForGra1.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Вложенные циклы for. Сетка из квадртов -uses GraphABC; - -const - sz = 35; - zz = 5; - -begin - var h := sz+zz; - for var nx:=0 to Window.Width div h do - for var ny:=0 to Window.Height div h do - begin - Brush.Color := clRandom; - Rectangle(zz+nx*h,zz+ny*h,zz+nx*h+sz,zz+ny*h+sz); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/algo1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/algo1.pas deleted file mode 100644 index a6713302b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/algo1.pas +++ /dev/null @@ -1,21 +0,0 @@ -// Алгоритм определения простоты числа -var - N: integer; - IsSimple: boolean; - -begin - writeln('Введите число: '); - readln(N); - - IsSimple := True; - for var i:=2 to round(sqrt(N)) do // если число составное, то один из его сомножителей <= (sqrt(N)) - if N mod i = 0 then - begin - IsSimple := False; - break; - end; - - if IsSimple then - writeln('Число ',N,' простое') - else writeln('Число ',N,' составное'); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/algo2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/algo2.pas deleted file mode 100644 index 1d02bcd1f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/algo2.pas +++ /dev/null @@ -1,21 +0,0 @@ -// Алгоритм вычисления значения многочлена в точке x по схеме Горнера -const n=5; - -var - x,a: real; - -begin - writeln('Введите значение x: '); - readln(x); - - writeln('Введите коэффициенты многочлена (',n+1,' штук): '); - read(a); - var s := a; - for var i:=1 to n do - begin - read(a); - s := s*x + a; - end; - - writeln('Значение многочлена в точке ',x,' равно ',s); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/repeat1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/repeat1.pas deleted file mode 100644 index 6621f57de..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/repeat1.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Цикл repeat. Контроль ввода -var mark: integer; - -begin - repeat - writeln('Введите оценку (2..5): '); - readln(mark); - if (mark<2) or (mark>5) then - writeln('Оценка неверная. Повторите ввод'); - until (mark>=2) and (mark<=5); - writeln('Вы ввели оценку ',mark); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/repeat2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/repeat2.pas deleted file mode 100644 index da416f808..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/repeat2.pas +++ /dev/null @@ -1,13 +0,0 @@ -// Цикл repeat. Алгоритм Евклида нахождения наибольшего общего делителя -var A,B: integer; - -begin - write('Введите два целых числа: '); - readln(A,B); - repeat - var C := A mod B; - A := B; - B := C; - until B=0; - write('Наибольший общий делитель = ',A); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while1.pas deleted file mode 100644 index bf8f62300..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while1.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Цикл while. Вывод чисел с шагом 3 -const n = 60; - -begin - writeln('Числа от 1 до ',n,', кратные 3'); - var x := 3; - while x<=n do - begin - write(x,' '); - x += 3; - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while2.pas deleted file mode 100644 index ff9996415..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while2.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Цикл while. Степени 2 -begin - writeln('Степени 2'); - var i := 1; - var p := 1; - while i<32 do - begin - writeln(i:2,p:12); - i += 1; - p *= 2; - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while3.pas deleted file mode 100644 index 35345d005..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while3.pas +++ /dev/null @@ -1,18 +0,0 @@ -// ÷икл while. —умма цифр положительного числа -var m: integer; - -begin - writeln('¬ведите положительное число: '); - read(m); - write('÷ифры числа в обратном пор¤дке: '); - var s := 0; - while m>0 do - begin - var digit := m mod 10; - write(digit,' '); - s += digit; - m := m div 10; - end; - writeln; - writeln('—умма цифр = ',s); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char1.pas deleted file mode 100644 index 0093f5157..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char1.pas +++ /dev/null @@ -1,13 +0,0 @@ -// Стандартные функции Ord Chr -var - i: integer; - c: char; - -begin - c := 'z'; - i := Ord(c); - writelnFormat('Код символа {0} в кодировке Windows равен {1}',c,i); - i := 193; - c := Chr(i); - writelnFormat('Символ с кодом {0} в кодировке Windows - это {1}',i,c); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char2.pas deleted file mode 100644 index d89fd87a7..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char2.pas +++ /dev/null @@ -1,13 +0,0 @@ -// Стандартные функции OrdUnicode ChrUnicode -var - i: integer; - c: char; - -begin - c := 'Д'; - i := OrdUnicode(c); - writelnFormat('Код символа {0} в кодировке Unicode равен {1}',c,i); - i := 1046; - c := ChrUnicode(i); - writelnFormat('Символ с кодом {0} в кодировке Unicode - это {1}',i,c); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char3.pas deleted file mode 100644 index 25dd82795..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char3.pas +++ /dev/null @@ -1,9 +0,0 @@ -// Стандартные функции UpperCase LowerCase -var c: char; - -begin - c := 'д'; - writelnFormat('Символ {0} в верхнем регистре: {1}',c,UpperCase(c)); - c := 'F'; - writelnFormat('Символ {0} в нижнем регистре: {1}',c,LowerCase(c)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/CharTable.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/CharTable.pas deleted file mode 100644 index 220cb62fa..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/CharTable.pas +++ /dev/null @@ -1,8 +0,0 @@ -// Таблица символов и их кодов -begin - for var i:=32 to 255 do - begin - write(i:4,chr(i):2,' '); - if i mod 8 = 7 then writeln; - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String1.pas deleted file mode 100644 index d6785340d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String1.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Строки. Операция + и оператор +=. Доступ по индексу - -var s: string := 'Pascal'; - -begin - writeln(s); - s := s + '.'; - writeln(s); - s += 'NET'; - writeln(s); - writeln(s[1],' ',s[2],' ',s[3],' ',s[4],' ',s[5],' ',s[6]); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String2.pas deleted file mode 100644 index a2a26c791..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String2.pas +++ /dev/null @@ -1,14 +0,0 @@ -// Строки. Процедура SetLength, функция Length и свойство Length - -var s: string; - -begin - writeln('Length(s) = ',Length(s)); - SetLength(s,3); - s[1] := 'N'; - s[2] := 'E'; - s[3] := 'T'; - writeln(s,' Length(s) = ',Length(s)); - for var i:= 1 to s.Length do - write(s[i],' '); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String3.pas deleted file mode 100644 index 5a2a97b3e..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String3.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Строки. Строка может иметь произвольную длину -var s: string; - -begin - s := 'abcdefghijklmnopqrstuvwxyz'; - s := s + Uppercase(s); - s += s; - s += s; - s += s; - writeln('Длина строки = ',s.Length); - writeln('Cтрока: ',s); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String4.pas deleted file mode 100644 index 7c765fc61..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String4.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Строки фиксированной длины. Длина не может быть больше 255 -var - s: string[9]; - s1: shortstring; // shortstring = string[255] - slong: string; - -begin - slong := 'PascalABC.NET'; - writeln('Cтрока произвольной длины: ',slong); - s := slong; - writeln('Cтрока фиксированной длины обрезается: ',s); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String5.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String5.pas deleted file mode 100644 index e4e667578..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String5.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Строки. Стандартные подпрограммы работы со строками -var - s: string := ' Pascal__NET '; - s1: string := 'NET'; - -begin - writeln('Исходная строка: ''',s,''''); - s := Trim(s); - writeln('После вызова функции Trim: ''',s,''''); - var p := Pos(s1,s); - writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p); - Delete(s,7,2); - writeln('После удаления символов __: ',s); - Insert('ABC.',s,7); - writeln('После вставки подстроки ''ABC.'': ',s); - writeln('Первая часть строки: ',Copy(s,1,9)); - writeln('Последняя часть строки: ',Copy(s,11,3)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String6.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String6.pas deleted file mode 100644 index 609eb8234..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String6.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Строки. Методы класса string -var - s: string := ' Pascal__NET '; - s1: string := 'NET'; - -begin - writeln('Исходная строка: ''',s,''''); - s := s.Trim; - writeln('После вызова s.Trim: ''',s,''''); - var p := s.IndexOf(s1); // Индексация - с нуля - writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p); - s := s.Remove(6,2); - writeln('После удаления символов __: ',s); - s := s.Insert(6,'ABC.'); - writeln('После вставки подстроки ''ABC.'': ',s); - writeln('Первая часть строки: ',s.Substring(0,9)); - writeln('Последняя часть строки: ',s.Substring(10,3)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger1.pas deleted file mode 100644 index 484f91218..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger1.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Преобразование целое <-> строка -var - s: string; - i: integer; - -begin - // Преобразование целого в строку - i := 234; - s := IntToStr(i); - writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - - // Преобразование строки в целое (может произойти исключение) - s := '567'; - i := StrToInt(s); - writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger2.pas deleted file mode 100644 index 5dfe155aa..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger2.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Преобразование целое <-> строка в старом стиле (Val и Str) -var - s: string; - i: integer; - -begin - // Преобразование целого в строку - i := 234; - Str(i,s); - writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - - // Преобразование строки в целое - s := '567'; - var err: integer; - Val(s,i,err); - if err=0 then - writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger3.pas deleted file mode 100644 index ce86a50a3..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger3.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Преобразование целое <-> строка в новом стиле -var - s: string; - i: integer; - -begin - // Преобразование целого в строку - i := 234; - s := i.ToString; - writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - - // Преобразование строки в целое - s := '567'; - if integer.TryParse(s,i) then - writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringReal1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringReal1.pas deleted file mode 100644 index 4b1037b65..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringReal1.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Преобразование вещественное <-> строка -var - s: string; - r: real; - -begin - // Преобразование целого в строку - r := 3.1415; - s := FloatToStr(r); - writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',r,s); - - // Преобразование строки в целое (может произойти исключение) - s := '3.1415'; - r := StrToFloat(s); - writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,r); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/UpLowCase.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/UpLowCase.pas deleted file mode 100644 index 2c7303586..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/UpLowCase.pas +++ /dev/null @@ -1,22 +0,0 @@ -// Использование стандартных функций UpperCase, LowerCase -var c: char; - -begin - for c:='a' to 'z' do - write(UpperCase(c)); - writeln; - for c:='A' to 'Z' do - write(LowerCase(c)); - writeln; - for c:='А' to 'Я' do - write(UpperCase(c)); - writeln; - for c:='а' to 'я' do - write(LowerCase(c)); - writeln; - var s := 'Папа у Васи силён в математике'; - s := UpperCase(s); - writeln(s); - s := LowerCase(s); - writeln(s); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Fun1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Fun1.pas deleted file mode 100644 index 9aeffb0e6..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Fun1.pas +++ /dev/null @@ -1,22 +0,0 @@ -// Определение функции. Вывод таблицы ее значений - -function MyFun(x: real): real; -begin - Result := x*sin(x); -end; - -const - a = 0.0; - b = 2*Pi; - n = 10; - -begin - var h := (b-a)/n; - var x := a; - writeln('Таблица значений функции MyFun:'); - for var i := 0 to n do - begin - writeln(x:5:2,MyFun(x):10:4); - x += h; - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Fun2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Fun2.pas deleted file mode 100644 index 4994822e4..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Fun2.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Функция Power - -function Power(x: real; n: integer): real; -begin - Result := 1; - for var i:=1 to n do - Result *= x; -end; - -var - x: real; - n: integer; - -begin - x := 2; n := 5; - writelnFormat('{0} в степени {1} = {2}',x,n,Power(x,n)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc1.pas deleted file mode 100644 index 95f40b8a0..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc1.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Параметры процедур - -procedure Operations(a,b: integer); -begin - writeln(a,' + ',b,' = ',a+b); - writeln(a,' - ',b,' = ',a-b); - writeln(a,' * ',b,' = ',a*b); - writeln(a,' / ',b,' = ',a/b); - writeln(a,' div ',b,' = ',a div b); - writeln(a,' mod ',b,' = ',a mod b); -end; - -begin - Operations(5,3); - writeln; - Operations(7,4); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc2.pas deleted file mode 100644 index 498b595b6..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc2.pas +++ /dev/null @@ -1,22 +0,0 @@ -// Параметры-переменные - -procedure DivMod(a,b: integer; var d,m: integer); -begin - d := a div b; - m := a mod b; -end; - -var - a,b: integer; - d,m: integer; - -begin - a := 7; - b := 3; - DivMod(a,b,d,m); - writelnFormat('{0} div {1} = {2}; {0} mod {1} = {3}',a,b,a div b,a mod b); - a := 23; - b := 5; - DivMod(a,b,d,m); - writelnFormat('{0} div {1} = {2}; {0} mod {1} = {3}',a,b,a div b,a mod b); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc3.pas deleted file mode 100644 index ccbdb03a0..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc3.pas +++ /dev/null @@ -1,26 +0,0 @@ -// Упаковка параметров в запись -uses GraphABC; - -type - Point = record - x,y: integer; - constructor (xx,yy: integer); - begin - x := xx; - y := yy; - end; - end; - -procedure Line(p1,p2: Point); -begin - GraphABC.Line(p1.x,p1.y,p2.x,p2.y); -end; - -begin - var p1 := new Point(10,10); - var p2 := new Point(10,210); - var p3 := new Point(210,10); - Line(p1,p2); - Line(p2,p3); - Line(p3,p1); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr1.pas deleted file mode 100644 index 1a683cae4..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr1.pas +++ /dev/null @@ -1,14 +0,0 @@ -// Использование динамического массива. -// Процедура SetLength выделения памяти под динамический массив -// Оператор foreach (массив доступен только на чтение) -var a: array of integer; - -begin - var n := 20; - SetLength(a,n); - for var i:=0 to a.Length-1 do - a[i] := Random(1,9); - writeln('Содержимое случайного динамического массива целых: '); - foreach x: integer in a do - write(x,' '); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr2.pas deleted file mode 100644 index b5e877dc4..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr2.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Использование динамического массива. -var a: array of integer; - -begin - writeln('При присваивании динамических массивов две переменные начинают указывать на одну память:'); - var n := 20; - a := new integer[n]; // Другой способ выделения памяти - for var i:=0 to a.Length-1 do - a[i] := i; - - writeln('До присваивания b[5]: a[5]=',a[5]); - - var b: array of integer; - b := a; - b[5] := 666; - writeln('После присваивания b[5]: a[5]=',a[5]); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr3.pas deleted file mode 100644 index 0f2acfb79..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr3.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Использование динамического массива. -var a: array of integer; - -begin - writeln('SetLength при повторном вызове не портит старые элементы:'); - SetLength(a,5); - for var i:=0 to a.Length-1 do - a[i] := i+1; - for var i:=0 to a.Length-1 do - write(a[i],' '); - writeln; - - SetLength(a,10); - for var i:=0 to a.Length-1 do - write(a[i],' '); - writeln; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr4.pas deleted file mode 100644 index 47fb8c953..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr4.pas +++ /dev/null @@ -1,23 +0,0 @@ -// Передача динамического массива в качестве параметра - -procedure WriteArr(a: array of integer); // var указывать не нужно, т.к. динамический массив является ссылкой на реальный объект -begin - foreach x: integer in a do - write(x,' '); - writeln; -end; - -procedure CreateRandomArr(var a: array of integer; n: integer); // var указывать нужно, т.к. в процедуре создается новый динамический массив -begin - a := new integer[n]; - for var i:=0 to a.Length-1 do - a[i] := Random(10); -end; - -var a: array of integer; - -begin - writeln('Случайный целый массив: '); - CreateRandomArr(a,30); - WriteArr(a); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArrErr1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArrErr1.pas deleted file mode 100644 index f8e2d5104..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArrErr1.pas +++ /dev/null @@ -1,6 +0,0 @@ -// Ошибка невыделения памяти для динамического массива -var a: array of integer; - -begin - a[0] := 666; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArrErr2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArrErr2.pas deleted file mode 100644 index cd1da4b02..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArrErr2.pas +++ /dev/null @@ -1,7 +0,0 @@ -// Ошибка выхода за границы диапазона для динамического массива -var a: array of integer; - -begin - SetLength(a,10); - a[10] := 666; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/SortByChoice.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/SortByChoice.pas deleted file mode 100644 index a0f618c87..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/SortByChoice.pas +++ /dev/null @@ -1,42 +0,0 @@ -// Сортировка выбором -procedure SortByChoice(a: array of real); -begin - for var i:=0 to a.Length-2 do - begin - var min := a[i]; - var ind := i; - for var j:=i+1 to a.Length-1 do - if a[j]0 then - writeln('Индекс первого элемента 7 равен ', ind) - else writeln('Элемент 7 отсутствует'); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitInitFin/MainInitFinDemo.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitInitFin/MainInitFinDemo.pas deleted file mode 100644 index fb2a6d4f2..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitInitFin/MainInitFinDemo.pas +++ /dev/null @@ -1,7 +0,0 @@ -// Демонстрация секций инициализации и финализации модулей -// Откройте модуль MyUnit, нажав на имени модуля правой мышью и выбрав пункт "Перейти к определению" -uses MyUnit; - -begin - writeln('Основная программа') -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitInitFin/MyUnit.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitInitFin/MyUnit.pas deleted file mode 100644 index 1887dbc7f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitInitFin/MyUnit.pas +++ /dev/null @@ -1,7 +0,0 @@ -unit MyUnit; - -initialization - writeln('Секция инициализации. Выполняется до начала основной программы') -finalization - writeln('Секция финализации. Выполняется после окончания основной программы') -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MainSameNames.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MainSameNames.pas deleted file mode 100644 index 4f881ad42..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MainSameNames.pas +++ /dev/null @@ -1,7 +0,0 @@ -// Алгоритм поиска имен в модулях -uses MyA,MyB; // Имена вначале ищутся в основной программе, а затем в модулях в порядке справа налево - -begin - p; // Вызывается MyB.p - MyA.p; // Если надо вызвать MyA.p, следует использовать имя p, уточненное именем модуля -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MyA.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MyA.pas deleted file mode 100644 index 7c8a67ab7..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MyA.pas +++ /dev/null @@ -1,10 +0,0 @@ -unit MyA; - -procedure p; -begin - writeln('MyA.p'); -end; - -begin - -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MyB.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MyB.pas deleted file mode 100644 index a33cebbf7..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MyB.pas +++ /dev/null @@ -1,10 +0,0 @@ -unit MyB; - -procedure p; -begin - writeln('MyB.p'); -end; - -begin - -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MyB.pcu b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MyB.pcu deleted file mode 100644 index 00595cfe5..000000000 Binary files a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MyB.pcu and /dev/null differ diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitStructure/MainProgram.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitStructure/MainProgram.pas deleted file mode 100644 index 09db6bfe0..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitStructure/MainProgram.pas +++ /dev/null @@ -1,13 +0,0 @@ -uses MyUnit; // подключили модуль - -const Sz = 10; - -var a: IntArr; - -begin - Assert(sz<=Size,'Размер массива должен быть <='+Size.ToString); - FillArr(a,Sz); - writeln('Содержимое массива: '); - WriteArr(a,Sz); - writeln('Минимальный элемент: ',Min(a,Sz)); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitStructure/MyUnit.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitStructure/MyUnit.pas deleted file mode 100644 index 87c14332c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitStructure/MyUnit.pas +++ /dev/null @@ -1,35 +0,0 @@ -/// Модуль упрощенной структуры -unit MyUnit; // имя модуля должно совпадать с именем файла - -const Size = 100; - -type IntArr = array [1..Size] of integer; - -var Delimiter: string := ' '; - -// Документирующие комментарии отображаются при наведении на имя курсора мыши -/// Заполняет массив случайными числами -procedure FillArr(var a: IntArr; n: integer); -begin - for var i:=1 to n do - a[i] := Random(100); -end; - -/// Выводит массив -procedure WriteArr(const a: IntArr; n: integer); -begin - for var i:=1 to n do - write(a[i],Delimiter); - writeln; -end; - -/// Возвращает минимальный элемент в массиве -function Min(const a: IntArr; n: integer): integer; -begin - Result := a[1]; - for var i:=1 to n do - if Result>a[i] then - Result := a[i]; -end; - -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitStructure/MyUnit.pcu b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitStructure/MyUnit.pcu deleted file mode 100644 index f6ea24470..000000000 Binary files a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitStructure/MyUnit.pcu and /dev/null differ diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/10_Matrices/Matr1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/10_Matrices/Matr1.pas deleted file mode 100644 index 9033bd4d8..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/10_Matrices/Matr1.pas +++ /dev/null @@ -1,40 +0,0 @@ -// Поиск значения в случайной матрице. Использование оператора goto -const - sz = 10; - m = 4; - n = 5; - -type Matrix = array [1..sz,1..sz] of integer; - -label 1; - -var matr: Matrix; - -begin - // Заполнение матрицы m x n случайными числами - for var i := 1 to m do - for var j := 1 to n do - matr[i,j] := Random(100); - - // Вывод матрицы - for var i := 1 to m do - begin - for var j := 1 to n do - write(matr[i,j]:3); - writeln; - end; - - // Есть ли в матрице элемент 5? - var found5 := False; - for var i := 1 to m do - for var j := 1 to n do - if matr[i,j]=5 then - begin - found5 := True; - goto 1; // Ай как нехорошо! Но это лучший способ выхода из двух вложенных циклов сразу - end; -1: - if found5 then - writeln('Элемент 5 найден') - else writeln('Элемент 5 не найден') -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/10_Matrices/Matr2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/10_Matrices/Matr2.pas deleted file mode 100644 index 42df846a3..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/10_Matrices/Matr2.pas +++ /dev/null @@ -1,37 +0,0 @@ -// Матрица как динамический массив массивов -type Matrix = array of array of integer; - -function CreateMatrix(m,n: integer): Matrix; -begin - SetLength(Result,m); - for var i:=0 to m-1 do - SetLength(Result[i],n); -end; - -procedure FillMatrByRandom(matr: Matrix); -begin - for var i:=0 to matr.Length-1 do - for var j:=0 to matr[0].Length-1 do - matr[i][j] := Random(100); -end; - -procedure WriteMatrix(matr: Matrix); -begin - for var i := 0 to matr.Length-1 do - begin - for var j := 0 to matr[0].Length-1 do - write(matr[i,j]:3); - writeln; - end; -end; - -var matr: Matrix; - -begin - var m := 5; - var n := 7; - matr := CreateMatrix(m,n); - - FillMatrByRandom(matr); - WriteMatrix(matr); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/11_Enums/Enum1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/11_Enums/Enum1.pas deleted file mode 100644 index db92312ee..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/11_Enums/Enum1.pas +++ /dev/null @@ -1,25 +0,0 @@ -// Перечислимый тип -type Months = (January,February,March,April,May,June,July,August,September,October,November,December); - -var m: Months; - -begin - m := February; - writeln(m); - // Использование констант перечислимого типа после имени типа удобно: после точки intellisense показывает список констант - m := Months.April; - writeln('Следующий месяц: ',m); - Inc(m); - writeln('Следующий месяц: ',m); - m := Succ(m); - writeln('Следующий месяц: ',m); - m := Pred(m); - writeln('Предыдующий месяц: ',m); - Dec(m); - writeln('Предыдующий месяц: ',m); - writeln('Его порядковый номер (нумерация - с нуля): ',Ord(m)); - // Ошибки нет - writeln('Месяц перед январем - выход за границы: ',pred(Months.January)); - // Ошибки нет - writeln('Месяц после декабря - выход за границы: ',succ(Months.December)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/11_Enums/Enum2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/11_Enums/Enum2.pas deleted file mode 100644 index 77eef43d4..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/11_Enums/Enum2.pas +++ /dev/null @@ -1,22 +0,0 @@ -// ѕеречислимый тип -uses System; - -type Months = (January,February,March,April,May,June,July,August,September,October,November,December); - -begin - var t: &Type := typeof(Months); - var names: array of string := Enum.GetNames(t); - writeln('÷икл по именам перечислимого типа'); - foreach name: string in names do - write(name,' '); - writeln; writeln; - - var v: &Array := Enum.GetValues(t); - var mm: array of Months := new Months[v.Length]; - writeln('÷икл по массиву всех значений перечислимого типа'); - for var i:=0 to v.Length-1 do - mm[i] := Months(v.GetValue(i)); - - for var i:=0 to mm.Length-1 do - write(mm[i],' '); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/File1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/File1.pas deleted file mode 100644 index 8eb62692a..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/File1.pas +++ /dev/null @@ -1,35 +0,0 @@ -// Типизированные файлы -// Запись в файл 10 чисел, при следующем запуске - чтение этих чисел и удаление файла -const filename = 'a.dat'; - -var f: file of integer; - -begin - if not FileExists(filename) then - begin - assign(f,filename); - rewrite(f); - writeln('Запись в файл ',filename); - for var i:=1 to 10 do - begin - var x := random(100); - write(x,' '); - write(f,x); - end; - close(f); - end - else - begin - assign(f,filename); - reset(f); - writeln('Чтение из файла ',filename); - for var i:=1 to 10 do - begin - var x: integer; - read(f,x); - write(x,' '); - end; - close(f); - erase(f); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/File2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/File2.pas deleted file mode 100644 index d6cd9778c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/File2.pas +++ /dev/null @@ -1,23 +0,0 @@ -// Файлы строк фиксированной длины -type Str20 = string[20]; - -var - s: Str20; - f: file of Str20; // file of string определить нельзя, поскольку string имеет переменную длину! - -begin - assign(f,'str.dat'); - rewrite(f); - write(f,'Иванов Иван Иванович'); - write(f,'Петров Петр Петрович'); - write(f,'Сидоров Александр Евг'); - close(f); - reset(f); - writeln('Содержимое файла строк: '); - for var i := 1 to FileSize(f) do - begin - read(f,s); - writeln(s); - end; - close(f); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text1.pas deleted file mode 100644 index 72b941890..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text1.pas +++ /dev/null @@ -1,15 +0,0 @@ -// Программа, выводящая текст из своего файла -var - f: Text; - -begin - assign(f,'Text1.pas'); - reset(f); - while not eof(f) do - begin - var s: string; - readln(f,s); - writeln(s); - end; - close(f); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text2.pas deleted file mode 100644 index cd46adb75..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text2.pas +++ /dev/null @@ -1,13 +0,0 @@ -// Программа, выводящая текст в файл a.txt -var - f: Text; - a: array of string := ('Каждый','охотник','желает','знать','где','сидит','фазан'); - -begin - assign(f,'a.txt'); - rewrite(f); - for var i:=0 to a.Length-1 do - writeln(f,a[i]); - close(f); - writeln('Текст записан в файл a.txt'); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text3.pas deleted file mode 100644 index 31daacb7d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text3.pas +++ /dev/null @@ -1,19 +0,0 @@ -// Программа, выводящая текст в файл a.txt -const - n = 30; - filename = 'pifagor.txt'; - -var f: Text; - -begin - assign(f,filename); - rewrite(f); - for var i:=1 to n do - begin - for var j:=1 to n do - write(f,i*j:4); - writeln(f); - end; - close(f); - writeln('Таблица умножения записана в файл '+filename); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Untyped1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Untyped1.pas deleted file mode 100644 index 7c932ddc3..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Untyped1.pas +++ /dev/null @@ -1,52 +0,0 @@ -// Нетипизированные файлы -// Запись в файл 10 чисел, при следующем запуске - чтение этих чисел и удаление файла -const filename = 'u.dat'; - -var - f: file; - r: real; - s: string[10]; - k: integer; - c: char; - -begin - if not FileExists(filename) then - begin - assign(f,filename); - rewrite(f); - writeln('Запись в файл ',filename); - - r := random*10; - for var i:=0 to 10 do - s := s + Chr(Ord('A')+Random(26)); - c := Chr(Ord('A')+Random(26)); - k := Random(100); - - writeln(r); -// writeln(s); - writeln(c); - writeln(k); - // Запись в файл данных разных типов - write(f,r); -// writeln(f,s); - write(f,c); - write(f,k); - close(f); - end - else - begin - assign(f,filename); - reset(f); - writeln('Чтение из файла ',filename); - - // Чтение из файла данных разных типов - read(f,r,{s,}c,k); - writeln(r); -// writeln(s); - writeln(c); - writeln(k); - - close(f); - erase(f); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/str.dat b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/str.dat deleted file mode 100644 index e69de29bb..000000000 diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer1.pas deleted file mode 100644 index 3d041c74c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer1.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Типизированные указатели -var - i: integer := 5; - j: integer := 3; - p: ^integer; - -begin - writeln('Исходные значения переменных i и j: ',i,' ',j); - p := @i; // в p записывается адрес i, p указывает на i - writeln('По адресу ',p,' находится значение ',p^); // p^ - то, на что указывает p - p^ := 2; - p := @j; - writeln('По адресу ',p,' находится значение ',p^); - p^ += 1; - writeln('Новые значения переменных i и j: ',i,' ',j); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer2.pas deleted file mode 100644 index f3006767d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer2.pas +++ /dev/null @@ -1,22 +0,0 @@ -// Бестиповые указатели -// Им можно присваивать любой адрес, но для использования необходимо -// явное приведение к типизированному указателю -var - i: integer := 5; - r: real := 3.14; - p: pointer; - -type - pinteger = ^integer; - preal = ^real; - -begin - writeln('Исходные значения переменных i и r: '); - writeln(i,' ',r); - p := @i; - pinteger(p)^ := 8; - p := @r; - preal(p)^ += 1; - writeln('Новые значения переменных i и r: '); - writeln(i,' ',r); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer3.pas deleted file mode 100644 index c7100897e..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer3.pas +++ /dev/null @@ -1,11 +0,0 @@ -// Выделение динамической памяти -var p: ^real; - -begin - // Выделили динамическую память и в p записали ее адрес - New(p); - p^ := 3; - writeln('Значение в динамичесской памяти = ',p^); - // Возврат динамической памяти, на оторую указывает p - Dispose(p); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer4.pas deleted file mode 100644 index 0faeeb6f0..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer4.pas +++ /dev/null @@ -1,43 +0,0 @@ -// Выделение динамической памяти -// Использование указателей для создания односвязного списка -type - PNode = ^TNode; - TNode = record - data: integer; - next: PNode; - end; - -function NewNode(d: integer; n: PNode): PNode; -begin - New(Result); - Result^.data := d; - Result^.next := n; -end; - -var first: PNode; - -begin - first := nil; - // Добавляем в начало односвязного списка - first := NewNode(3,first); - first := NewNode(7,first); - first := NewNode(5,first); - - // Вывод односвязного списка - writeln('Содержимое односвязного списка: '); - var p := first; - while p<>nil do - begin - write(p^.data,' '); - p := p^.next; - end; - - // Разрушение односвязного списка - p := first; - while p<>nil do - begin - var p1 := p; - p := p^.next; - Dispose(p1); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/ProcPointer1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/ProcPointer1.pas deleted file mode 100644 index 2d54f9fb4..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/ProcPointer1.pas +++ /dev/null @@ -1,21 +0,0 @@ -// Процедурные переменные - -function add(a,b: integer): integer; -begin - Result := a + b; -end; - -function mult(a,b: integer): integer; -begin - Result := a * b; -end; - -var p: function (a,b: integer): integer; - - -begin - p := add; - writeln('Сумма 2 и 3 равна ',p(2,3)); - p := mult; - writeln('Произведение 2 и 3 равно ',p(2,3)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/ProcPointer2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/ProcPointer2.pas deleted file mode 100644 index 2ba35543b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/ProcPointer2.pas +++ /dev/null @@ -1,27 +0,0 @@ -// Процедурная переменная как параметр -procedure for_each(a: array of real; p: procedure(var r: real)); -begin - for var i := 0 to a.Length-1 do - p(a[i]); -end; - -procedure mult2(var r: real); -begin - r := 2*r -end; - -procedure print(var r: real); -begin - write(r,' '); -end; - -var a: array of real := (1,2,3,6,7); - -begin - writeln('Содержимое массива: '); - for_each(a,print); - writeln; - for_each(a,mult2); - writeln('Содержимое массива после умножения его элеметов на 2: '); - for_each(a,print); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Reference.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Reference.pas deleted file mode 100644 index 5dd358cd0..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Reference.pas +++ /dev/null @@ -1,34 +0,0 @@ -// Использование ссылок вместо указателей для создания односвязного списка -type - Node = class - data: integer; - next: Node; - constructor (d: integer; n: Node); - begin - data := d; - next := n; - end; - end; - -// Переменная типа "класс" представляет собой ссылку на объект, выделяемый конструктором -var first: Node; - -begin - first := nil; - // Добавляем в начало односвязного списка - first := new Node(3,first); - first := new Node(7,first); - first := new Node(5,first); - - // Вывод односвязного списка. ^ отсутствуют - writeln('Содержимое односвязного списка (использование ссылок вместо указателей): '); - var p := first; - while p<>nil do - begin - write(p.data,' '); - p := p.next; - end; - - // Разрушение односвязного списка - first := nil; // Сборщик мусора соберет память, на которую никто больше не указывает -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/14_Records/Rec1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/14_Records/Rec1.pas deleted file mode 100644 index 5b6b049e9..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/14_Records/Rec1.pas +++ /dev/null @@ -1,35 +0,0 @@ -type - SexType = (Male, Female); - Person = record - Name: string; - Age, Weight: integer; - Sex: SexType; - end; - -procedure WritePerson(const p: Person); -begin - writelnFormat('Фамилия: {0} Пол: {1} Возраст: {2} Вес: {3}',p.Name,p.Sex,p.Age,p.Weight); -end; - -var - p: Person := (Name: 'Иванов'; Age: 20; Weight: 64; Sex: Male); - p1: Person; -begin - p1 := p; // Присваивание записей - var p2: Person; - p2.Name := 'Петрова'; - p2.Age := 18; - p2.Weight := 50; - p2.Sex := Female; - WritePerson(p2); - - var p3: Person; - with p3 do - begin - Name := 'Сидоров'; - Age := 24; - Weight := 80; - Sex := Male; - end; - WritePerson(p3); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/14_Records/Rec2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/14_Records/Rec2.pas deleted file mode 100644 index e95d97a88..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/14_Records/Rec2.pas +++ /dev/null @@ -1,26 +0,0 @@ -// Иллюстрация конструкторов и методов в записях -// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln -type - SexType = (Male, Female); - Person = record - Name: string; - Age, Weight: integer; - Sex: SexType; - constructor (Name: string; Age, Weight: integer; Sex: SexType); - begin - Self.Name := Name; - Self.Age := Age; - Self.Sex := Sex; - Self.Weight := Weight; - end; - function ToString: string; override; - begin - Result := Format('Имя: {0} Пол: {1} Возраст: {2} Вес: {3}', Name, Sex, Age, Weight); - end; - end; - -var p: Person := new Person('Иванов',20,70,SexType.Male); - -begin - writeln(p); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/Inheritance1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/Inheritance1.pas deleted file mode 100644 index 94c4e7ccd..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/Inheritance1.pas +++ /dev/null @@ -1,66 +0,0 @@ -// Наследование. Полиморфизм и виртуальные функции -type - Person = class - private - name: string; - age: integer; - public - constructor (n: string; a: integer); - begin - name := n; age := a; - end; - procedure Print; virtual; // Виртуальная функция. Переопределяется в классах-потомках - begin - var s := GetType.ToString; - write('Тип: ',Copy(s,pos('.',s)+1,Length(s)):7,' Имя: ',name,' Возраст: ',age); - end; - procedure Println; - begin - Print; - writeln; - end; - end; - - Pupil = class(Person) // Pupil - наследник Person - private - clas: integer; - public - constructor (n: string; a,c: integer); - begin - inherited Create(n,a); // Вызов унаследованного конструктора - clas := c; - end; - procedure Print; override; - begin - inherited Print; - write(' Класс: ',clas); - end; - end; - - Teacher = class(Person) - private - predm: string; - public - constructor (n: string; a: integer; p: string); - begin - inherited Create(n,a); // Вызов унаследованного конструктора - predm := p; - end; - procedure Print; override; - begin - inherited Print; - write(' Предмет: ',predm); - end; - end; - -var a: array of Person := new Person[4]; // Полиморфный контейнер - контейнер объектов базового класса. Может содержать объекты производных классов - -begin - a[0] := new Pupil('Вова',11,5); - a[1] := new Teacher('Марья Ивановна',30,'Информатика'); - a[2] := new Person('Иванов',65); - a[3] := new Pupil('Вася',12,6); - - for var i:=0 to a.Length-1 do - a[i].Println; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/PersonExternal.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/PersonExternal.pas deleted file mode 100644 index 5d205a700..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/PersonExternal.pas +++ /dev/null @@ -1,30 +0,0 @@ -// Описание методов вне интерфейса класса -// Удобство: интерфейс лучше виден -// Если класс описан в модуле, то реализация методов помещается в секцию реализации модуля -type - Person = class - private - name: string; - age: integer; - public - constructor (n: string; a: integer); - procedure Print; - end; - -//----------------- Person ------------------- -constructor Person.Create(n: string; a: integer); -begin - name := n; age := a; -end; - -procedure Person.Print; -begin - writeln('Имя: ',name,' Возраст: ',age); -end; - -var p: Person; - -begin - p := new Person('Иванов',20); - p.Print; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/PersonInternal.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/PersonInternal.pas deleted file mode 100644 index e146f930e..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/PersonInternal.pas +++ /dev/null @@ -1,30 +0,0 @@ -// Описание методов внутри интерфейса класса -// Удобство: методы можно реализовывать сразу после объявления -// Неудобство: для больших классов интерфейс трудно читается -type - Person = class - private - // Поля класса, как правило, приватны. Доступ к ним - через методы и свойства - name: string; - age: integer; - public - // Конструктор неявно имеет имя Create - constructor (n: string; a: integer); - begin - name := n; age := a; - end; - procedure Print; - begin - writeln('Имя: ',name,' Возраст: ',age); - end; - end; - -var p,p1: Person; - -begin - p := new Person('Иванов',20); // Новый синтаксис вызова конструктора (рекомендуется) - p.Print; - p1 := Person.Create('Попов',19); // Старый синтаксис вызова конструктора (не рекомендуется) - p1.Print; - // Деструкторы отсутствуют, вместо них - автоматическая сборка мусора -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/Properties.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/Properties.pas deleted file mode 100644 index aa6958bad..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/Properties.pas +++ /dev/null @@ -1,35 +0,0 @@ -// Свойства (properties) -type - /// Класс персоны - Person = class - private - nm: string; - ag: integer; - procedure SetAge(a: integer); // Процедура доступа к свойству располагается обычно в приватной секции - begin - if a<0 then // Перед установкой значения свойства мы можем сделать дополнительные проверки - a := 0; // и скорректировать значение свойства, либо сгенерировать исключение - ag := a; - end; - public - constructor (n: string; a: integer); - begin - nm := n; ag := a; - end; - /// Имя персоны - property Name: string read nm; // Свойство Name доступно только на чтение и возвращает значение поля nm - /// Возраст персоны - property Age: integer read ag write SetAge; - procedure Print; - begin - writeln('Имя: ',nm,' Возраст: ',ag); - end; - end; - -var p: Person := new Person('Иванов', 20); - -begin - writeln('Имя: ',p.Name); // Менять Name нельзя, доступ - только на чтение - p.Age := -1; // Попытка изменения возраста на отрицательное значение приводит к корректировке: возраст становится = 0 - writeln('Возраст: ',p.Age); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try1.pas deleted file mode 100644 index c879e8a2f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try1.pas +++ /dev/null @@ -1,14 +0,0 @@ -// Простейшая обработка исключений. Ввод с ошибкой -var a: integer; - -begin - try - writeln('Введите число: '); - // При вводе попробуйте совершить ошибку :) - readln(a); - writeln('Число введено верно '); - except - writeln('Ошибка ввода'); - end; - writeln('Выполнение программы продолжено'); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try2.pas deleted file mode 100644 index 4145b1fe0..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try2.pas +++ /dev/null @@ -1,15 +0,0 @@ -// Обработка нескольких исключений -var x: integer; - -begin - try - writeln('Введите число (1 - ошибка деления на 0): '); - readln(x); - x := 10 div (x-1); - except - on System.FormatException do - writeln('Ошибка ввода'); - on System.DivideByZeroException do - writeln('Деление на 0'); - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try3.pas deleted file mode 100644 index 4fcc48113..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try3.pas +++ /dev/null @@ -1,15 +0,0 @@ -// Иллюстрация finally -// Секция finally выполняется независимо от того, произошло исключение или нет -var x: integer := 0; - -begin - try - if Random(2)=0 then - x := 10 div x; - writeln('Выполнение продолжается'); - finally - writeln('Сработала секция finally'); - end; - // Если возникает исключение, то этот оператор не выполняется - writeln('После секции finally'); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try4.pas deleted file mode 100644 index 2f61a1b0b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try4.pas +++ /dev/null @@ -1,11 +0,0 @@ -// Исключения. Генерация исключения -function f(x: integer): integer; -begin - if x=0 then - raise new System.Exception('Аргумент функции f не может быть равен 0'); - Result := 10 mod x; -end; - -begin - writeln(f(0)); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/17_Interfaces/Interf1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/17_Interfaces/Interf1.pas deleted file mode 100644 index d96590acc..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/17_Interfaces/Interf1.pas +++ /dev/null @@ -1,61 +0,0 @@ -// Интерфейсы. Интерфейс IComparer -uses System,System.Collections; - -type - Student = class - private - name: string; - age,course,group: integer; - public - constructor (n: string; a,c,g: integer); - begin - name := n; - age := a; - course := c; - group := g; - end; - function ToString: string; override; - begin - Result := Format('Имя: {0,9} Возраст: {1} Курс: {2} Группа: {3}',name,age,course,group); - end; - end; - - SortByName = class(IComparer) - public - function Compare(s1,s2: object): integer; - begin - Result := string.Compare(Student(s1).name,Student(s2).name); - end; - end; - - SortByAge = class(IComparer) - public - function Compare(s1,s2: object): integer; - begin - Result := Student(s1).age - Student(s2).age; - end; - end; - -procedure WriteArray(prompt: string; a: array of T); -begin - writeln(prompt); - foreach x: T in a do - writeln(x); - writeln; -end; - -var a: array of Student; - -begin - SetLength(a,5); - a[0] := new Student('Иванова',18,2,3); - a[1] := new Student('Козлов',19,3,10); - a[2] := new Student('Сидорова',22,5,1); - a[3] := new Student('Крикунов',17,1,2); - a[4] := new Student('Лихачев',25,4,8); - WriteArray('Исходный массив:',a); - &Array.Sort(a,new SortByName); - WriteArray('Сортировка по имени: ',a); - &Array.Sort(a,new SortByAge); - WriteArray('Сортировка по возрасту: ',a); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/17_Interfaces/Interf2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/17_Interfaces/Interf2.pas deleted file mode 100644 index 8dc63b9f7..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/17_Interfaces/Interf2.pas +++ /dev/null @@ -1,48 +0,0 @@ -// Интерфейсы. Интерфейс IComparer -uses System,System.Collections; - -type - Student = class - private - name: string; - age,course,group: integer; - public - constructor (n: string; a,c,g: integer); - begin - name := n; - age := a; - course := c; - group := g; - end; - function ToString: string; override; - begin - Result := Format('Имя: {0,9} Возраст: {1} Курс: {2} Группа: {3}',name,age,course,group); - end; - end; - -procedure WriteArray(prompt:string; a: array of T); -begin - writeln(prompt); - foreach x: T in a do - writeln(x); - writeln; -end; - -function IsKozlov(s: Student): boolean; -begin - Result := s.name = 'Козлов' -end; - -var a: array of Student; - -begin - SetLength(a,5); - a[0] := new Student('Иванова',18,2,3); - a[1] := new Student('Козлов',19,3,10); - a[2] := new Student('Сидорова',22,5,1); - a[3] := new Student('Крикунов',17,1,2); - a[4] := new Student('Лихачев',25,4,8); - WriteArray('Исходный массив:',a); - - writeln('Индекс Козлова = ',&Array.FindIndex(a,IsKozlov)); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/Main.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/Main.pas deleted file mode 100644 index d5ff4f5c3..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/Main.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Основная программа, использующая библиотеку MyLib.dll -// MyLib.pas должен быть предварительно откомпилирован -#reference 'MyLib.dll' - -var f: Frac; - -begin - writeln('Сумма чисел 2 и 3 равна ',add(2,3)); - writeln('MyPi = ',MyPi); - f := new Frac(2,3); - f.Print; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/MyLib.dll b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/MyLib.dll deleted file mode 100644 index 91ebe6a3b..000000000 Binary files a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/MyLib.dll and /dev/null differ diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/MyLib.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/MyLib.pas deleted file mode 100644 index 89708ec46..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/MyLib.pas +++ /dev/null @@ -1,26 +0,0 @@ -// Откомпилируйте библиотеку, нажав Ctrl-F9. В папке должен появиться файл MyLib.dll - -library MyLib; - -const MyPi = 3.14; - -function add(a,b: integer): integer; -begin - Result := a + b; -end; - -type - Frac = record - num,denom: integer; - constructor (n,d: integer); - begin - num := n; - denom := d; - end; - procedure Print; - begin - writeln(num,'/',denom); - end; - end; - -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Eratosphen.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Eratosphen.pas deleted file mode 100644 index 49a1cdb99..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Eratosphen.pas +++ /dev/null @@ -1,26 +0,0 @@ -// "Решето Эратосфена" - вычисление простых чисел -const n = 50000; - -var primes: set of integer; - -begin - primes := [2..n]; - - for var i:=2 to round(sqrt(n)) do - begin - if not (i in primes) then - continue; - var x := 2*i; - while x<=n do - begin - Exclude(primes,x); - x += i; - end; - end; - - writeln('Простые числа < ',n,':'); - writeln(primes); - writeln; - writeln('Время вычисления: ',Milliseconds/1000); -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/MazeGen.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/MazeGen.pas deleted file mode 100644 index 003aa4c1b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/MazeGen.pas +++ /dev/null @@ -1,106 +0,0 @@ -// Программа генерации случайных лабиринтов -uses GraphABC; - -const - szw = 70; // размер лабиринта - szh = 50; - cellsz = 10; // размер ячейки - -type - point = record - x,y: integer; - end; - -var - maze: array [0..szw-1] of array [0..szh-1] of integer; - todo: array [0..szw*szh-1] of point; - todonum: integer; - -const - dx: array [0..3] of integer = (0, 0, -1, 1); - dy: array [0..3] of integer = (-1, 1, 0, 0); - -procedure Init; -var x,y,n,d: integer; -begin - for x:=0 to szw-1 do - for y:=0 to szh-1 do - if (x=0) or (x=szw-1) or (y=0) or (y=szh-1) then - maze[x][y]:=32 - else maze[x][y]:=63; - - x := Random(szw-2)+1; - y := Random(szh-2)+1; - -// Пометить клетку как принадлежащую лабиринту - maze[x][y]:= maze[x][y] and not 48; - -// Занести в список todo все ближайшие необработанные клетки - for var d:=0 to 3 do - if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then - begin - todo[todonum].x := x + dx[d]; - todo[todonum].y := y + dy[d]; - Inc(todonum); - maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not 16; - end; - - // Пока не обработаны все клетки - while todonum > 0 do - begin - // Выбрать из списка todo произвольную клетку - n := Random(todonum); - x := todo[n].x; - y := todo[n].y; - - // Удалить из списка обработанную клетку - Dec(todonum); - todo[n]:= todo[todonum]; - - // Выбрать направление, которое ведет к лабиринту - repeat - d:=Random (4); - until not ((maze[x + dx[d]][y + dy[d]] and 32) <> 0); - - // Присоединить выбранную клетку к лабиринту - maze[x][y] := maze[x][y] and not ((1 shl d) or 32); - maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not (1 shl (d xor 1)); - - // Занести в список todo все ближайшие необработанные клетки - for var d:=0 to 3 do - if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then - begin - todo[todonum].x := x + dx[d]; - todo[todonum].y := y + dy[d]; - Inc(todonum); - maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not 16; - end; - end; - - maze[1][1] := maze[1][1] and not 1; // начало лабиринта - в левом верхнем углу - maze[szw-2][szh-2] := maze[szw-2][szh-2] and not 2; // конец лабиринта - в правом нижнем углу -end; - -procedure Draw; -begin - for var x:=1 to szw-2 do - for var y:=1 to szh-2 do - begin - if ((maze[x][y] and 1) <> 0) then // верхняя стена - Line(x * cellsz, y * cellsz, x * cellsz + cellsz , y * cellsz); - if ((maze[x][y] and 2) <> 0) then // нижняя стена - Line(x * cellsz, y * cellsz + cellsz, x * cellsz + cellsz , y * cellsz + cellsz); - if ((maze[x][y] and 4) <> 0) then // левая стена - Line(x * cellsz, y * cellsz, x * cellsz, y * cellsz + cellsz ); - if ((maze[x][y] and 8) <> 0) then // правая стена - Line(x * cellsz + cellsz, y * cellsz, x * cellsz + cellsz, y * cellsz + cellsz); - end; -end; - -begin - Window.Title := 'Генерация лабиринта'; - SetWindowSize(szw*cellsz,szh*cellsz); - Init; - Draw; -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/ESquares.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/ESquares.pas deleted file mode 100644 index ceb9752cd..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/ESquares.pas +++ /dev/null @@ -1,27 +0,0 @@ -// E-квадраты. Демонстрация рекурсии -uses GraphABC; - -const mw = 2.9; - -procedure ESquares(n,x,y,w: integer); -begin - var w1 := round(w/mw); - var h := (w-2*w1) div 3; - Brush.Color := clRandom; - Rectangle(x,y,x+w,y+w); - if n>0 then - begin - Sleep(1); - ESquares(n-1,x+h,y+h,w1); - ESquares(n-1,x+w-h-w1,y+h,w1); - ESquares(n-1,x+h,y+w-h-w1,w1); - ESquares(n-1,x+w-h-w1,y+w-h-w1,w1); - end; -end; - -begin - Window.Title := 'Рекурсия: E-квадраты'; - SetWindowSize(750,530); - Pen.Color := clWhite; - ESquares(4,125,18,490); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/Hanoi.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/Hanoi.pas deleted file mode 100644 index c315a89fa..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/Hanoi.pas +++ /dev/null @@ -1,121 +0,0 @@ -// Ханойские башни -uses GraphABC; - -type - /// Тип диска - DiskType = record - /// Диаметр диска - Sz: integer; - /// Цвет диска - Color: GraphABC.Color; - end; - /// Тип массива дисков на стержне - DiskArr = array of DiskType; - -const - /// Количество дисков - CountDisks = 8; - /// Высота диска - DiskHeight = 12; - /// Приращение ширины диска - DiskWidthDelta = 12; - h = CountDisks * DiskWidthDelta * 2 + 20; - /// y-координата основания пирамид дисков - y0 = DiskHeight * CountDisks + 80; - hh = 30; - /// x-координата первого стержня - x1 = h div 2 + hh; - /// x-координата второго стержня - x2 = x1 + h; - /// x-координата третьего стержня - x3 = x2 + h; - /// Пауза, мс - delay = 50; - -var - /// Массив пирамид дисков - Tower: array [1..3] of DiskArr; - /// Массив количеств дисков в пирамидах - DisksInTower: array [1..3] of integer; - /// Номер хода - MoveNumber: integer; - -/// Рисование пирамиды -procedure DrawTower(a: DiskArr; n: integer; x0,y0: integer); -begin - Brush.Color := clBlack; - Rectangle(x0-5,y0,x0+5,y0-DiskHeight*CountDisks-10); - for var i:=0 to n-1 do - begin - Brush.Color := a[i].Color; - Rectangle(x0-a[i].sz*DiskWidthDelta,y0-DiskHeight*(i-1),x0+a[i].sz*DiskWidthDelta,y0-DiskHeight*i+1) - end; -end; - -/// Рисование всех пирамид и информационной строки -procedure DrawAll; -begin - DrawTower(Tower[1],DisksInTower[1],x1,y0); - DrawTower(Tower[2],DisksInTower[2],x2,y0); - DrawTower(Tower[3],DisksInTower[3],x3,y0); - Brush.Color := clWhite; - TextOut(20,20,'Число перемещений дисков = '+IntToStr(MoveNumber)); - Redraw; -end; - -/// Перемещение диска со стержня FromN на стержень ToN -procedure MoveDisk(FromN, ToN: integer); -begin - Inc(MoveNumber); - Inc(DisksInTower[ToN]); - Tower[ToN][DisksInTower[ToN]-1] := Tower[FromN][DisksInTower[FromN]-1]; - Dec(DisksInTower[FromN]); - Sleep(delay); - ClearWindow; - DrawAll; -end; - -/// Основная екурсивная процедура алгоритма "Ханойские башни" -procedure MoveTower(n: integer; FromN, ToN, WorkN: integer); -begin - if n=0 then exit; - MoveTower(n-1, FromN, WorkN, ToN); - MoveDisk(FromN, ToN); - MoveTower(n-1, WorkN, ToN, FromN); -end; - -/// Инициализация массивов -procedure InitTowers; -begin - SetLength(Tower[1],CountDisks); - SetLength(Tower[2],CountDisks); - SetLength(Tower[3],CountDisks); - DisksInTower[1] := CountDisks; - DisksInTower[2] := 0; - DisksInTower[3] := 0; - for var i:=0 to DisksInTower[1]-1 do - begin - Tower[1][i].Sz := DisksInTower[1]-i+1; - Tower[1][i].Color := clRandom; - end; -end; - -/// Инициализация окна -procedure InitWindow; -begin - SetWindowSize(x3+x1,y0+50); - CenterWindow; - Window.Title := 'Ханойские башни'; - Font.Size := 14; - Font.Name := 'Arial'; -end; - -begin - InitWindow; - InitTowers; - LockDrawing; - DrawAll; - MoveTower(CountDisks,1,3,2); -end. - - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/Knapsack.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/Knapsack.pas deleted file mode 100644 index 53993e66c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/Knapsack.pas +++ /dev/null @@ -1,57 +0,0 @@ -// Задача о ранце. В массиве B заданы веса предметов. -// Выдать все варианты полной комплектации ранца частью этих предметов -const Sz=100; - -type IntArr = array [1..Sz] of integer; - -procedure PrintArr(const A: IntArr; n: integer); -begin - for var i:=1 to n do - write(A[i],' '); - writeln; -end; - -procedure TrySolve(n: integer; const B: IntArr; nb: integer); -var - Subset: IntArr; - space: integer; - ns: integer; - - procedure TrySolve0(i: integer); - begin - if space=0 then - PrintArr(Subset,ns) - else if (space<0) or (i>nb) then - exit // отсечение - else // продолжение перебора всех подмножеств множества B - begin - TrySolve0(i+1); // попробовать не взять i-тый элемент - - ns += 1; - Subset[ns] := B[i]; - space := space - B[i]; - TrySolve0(i+1); // попробовать взять i-тый элемент - space := space + B[i]; - ns -= 1; - end; - end; - -begin - space:=n; - TrySolve0(1); -end; - -procedure FillArr(var B: IntArr; var n: integer); -begin - n:=5; // количество предметов - B[1]:=8; B[2]:=5; B[3]:=13; B[4]:=3; B[5]:=15; // веса предметов -end; - -var - B: IntArr; - nb: integer; - -begin - FillArr(B,nb); - TrySolve(23,B,5); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/TreeDraw.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/TreeDraw.pas deleted file mode 100644 index 3251ca1dc..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/TreeDraw.pas +++ /dev/null @@ -1,27 +0,0 @@ -// Рекурсивное рисование двоичного дерева -uses GraphABC; - -const - LevelHeight = 50; - Levels = 8; - delay = 10; - -procedure DrawTree(x,y,dx,level: integer); -// обход: левое поддерево, корень, правое -begin - if level>0 then - begin - DrawTree(x-dx,y+LevelHeight,dx div 2,level-1); - Line(x,y,x-dx,y+LevelHeight); - Line(x,y,x+dx,y+LevelHeight); - Sleep(delay); - DrawTree(x+dx,y+LevelHeight,dx div 2,level-1); - end; -end; - -begin - Window.Title := 'Рекурсивное рисование бинарного дерева'; - SetSmoothingOff; - SetWindowSize(800,30+Levels*LevelHeight); - DrawTree(WindowWidth div 2,10,WindowWidth div 5,Levels); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Simple/SimpleNumbers.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Simple/SimpleNumbers.pas deleted file mode 100644 index bb0174db0..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Simple/SimpleNumbers.pas +++ /dev/null @@ -1,21 +0,0 @@ -// Генерация больших простых чисел -begin - writeln('Большие простые числа: '); - var count := 0; - var beg := Random(1000000000)+2; - for var i:=beg to beg+5000 do - begin - var f := True; - var j := 2; - var r := round(sqrt(i)); - while f and (j<=r) do - if i mod j = 0 then f := false - else j += 1; - if f then - begin - write(i,' '); - Inc(count); - if count mod 5 = 0 then writeln; - end; - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/ArrayLib.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/ArrayLib.pas deleted file mode 100644 index a06ade6a4..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/ArrayLib.pas +++ /dev/null @@ -1,33 +0,0 @@ -unit ArrayLib; - -/// Вывод массива -procedure WriteArray(a: array of T); -begin - for var i:=0 to a.Length-1 do - write(a[i],' '); - writeln; -end; - -procedure WriteArray(a: array of real); -begin - foreach x: real in a do - write(x:0:1,' '); - writeln; -end; - -/// Создание массива и заполнение его случайными числами -procedure CreateRandom(var a: array of integer; n: integer); -begin - a := new integer[n]; - for var i:=0 to n-1 do - a[i] := random(100); -end; - -procedure CreateRandom(var a: array of real; n: integer); -begin - a := new real[n]; - for var i:=0 to n-1 do - a[i] := random*10; -end; - -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/QuickSort.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/QuickSort.pas deleted file mode 100644 index 9a778619a..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/QuickSort.pas +++ /dev/null @@ -1,55 +0,0 @@ -// Быстрая сортировка Ч. Хоара -uses ArrayLib; - -/// Быстрая сортировка -procedure QuickSort(a: array of integer); - -/// Разделение a[l]..a[r] на части a[l]..a[q] <= a[q+1]..a[r] - function Partition(l,r: integer): integer; - begin - var i := l - 1; - var j := r + 1; - var x := a[l]; - while True do - begin - repeat - Inc(i); - until a[i]>=x; - repeat - Dec(j); - until a[j]<=x; - if i=r then exit; - var j := Partition(l,r); - sort(l,j); - sort(j+1,r); - end; - -begin - sort(0,a.Length-1) -end; - -const n = 20; - -var a: array of integer; - -begin - CreateRandom(a,n); - writeln('До сортировки: '); - WriteArray(a); - QuickSort(a); - writeln('После сортировки: '); - WriteArray(a); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/SortByChoice.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/SortByChoice.pas deleted file mode 100644 index ed67282aa..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/SortByChoice.pas +++ /dev/null @@ -1,37 +0,0 @@ -// Сортировка выбором -uses ArrayLib; - -procedure SortByChoice(a: array of real); -begin - for var i:=0 to a.Length-2 do - begin - var min := a[i]; - var ind := i; - for var j:=i+1 to a.Length-1 do - if a[j]i; - Swap(digits[i],digits[x]); - end; - if n mod 2=0 then - Swap(digits[1],digits[2]); // количество обменов должно быть четным -end; - -// Заполнить двумерный массив фишек. Вместо пустой ячейки - белая фишка с числом 0 -procedure Fill15ByDigitsArr; -begin - Swap(p[EmptyCellY,EmptyCellX],p[n,n]); // Переместить пустую фишку в правый нижний угол - EmptyCellX := n; - EmptyCellY := n; - var i := 1; - for var y:=1 to n do - for var x:=1 to n do - begin - if x*y=n*n then exit; - p[y,x].Number := digits[i]; - i += 1; - end; -end; - -// Перемешать массив фишек -procedure Mesh15; -begin - MeshDigitsArr; - Fill15ByDigitsArr; - MovesCount := 0; - EndOfGame := False; - StatusRect.Text := 'Количество ходов: '+IntToStr(MovesCount); - StatusRect.Color := RGB(200,200,255); -end; - -// Создать массив фишек -procedure Create15; -begin - EmptyCellX := n; - EmptyCellY := n; - for var x:=1 to n do - for var y:=1 to n do - begin - p[y,x] := new SquareABC(x0+(x-1)*(sz+zz),y0+(y-1)*(sz+zz),sz,clMoneyGreen); - p[y,x].BorderColor := clGreen; - p[y,x].BorderWidth := 2; - p[y,x].TextScale := 0.7; - end; - p[EmptyCellY,EmptyCellX].Color := clWhite; - p[EmptyCellY,EmptyCellX].BorderColor := clWhite; - FillDigitsArr; - MeshDigitsArr; - Fill15ByDigitsArr; -end; - -// Проверить, все ли фишки стоят на своих местах -function IsSolution: boolean; -var x,y,i: integer; -begin - Result:=True; - i:=1; - for y:=1 to n do - for x:=1 to n do - begin - if p[y,x].Number<>i then - begin - Result:=False; - break; - end; - Inc(i); - if i=n*n then i:=0; - end; -end; - -procedure MouseDown(x,y,mb: integer); -begin - if EndOfGame then // Если все фишки на своих местах, то не реагировать на мышь и ждать нажатия кнопки "Перемешать" - exit; - if ObjectUnderPoint(x,y)=nil then // Eсли мы щелкнули не на объекте, то не реагировать на мышь - exit; - var fx := (x-x0) div (sz+zz) + 1; // Вычислить координаты на доске для ячейки, на которой мы щелкнули мышью - var fy := (y-y0) div (sz+zz) + 1; - if (fx>n) or (fy>n) then - exit; - if Sosedi(fx,fy,EmptyCellX,EmptyCellY) then // Если ячейка соседствует с пустой, то поменять их местами - begin - Swap(p[EmptyCellY,EmptyCellX],p[fy,fx]); - EmptyCellX := fx; - EmptyCellY := fy; - Inc(MovesCount); - StatusRect.Text := 'Количество ходов: ' + IntToStr(MovesCount); - if IsSolution then - begin - StatusRect.Text := 'Победа! Сделано ходов: ' + IntToStr(MovesCount); - StatusRect.Color := RGB(255,200,200); - EndOfGame := True; - end - end; -end; - -begin - SetSmoothingOff; - Window.Title := 'Игра в 15'; - Window.IsFixedSize := True; - SetWindowSize(2*x0+(sz+zz)*n-zz,2*y0+(sz+zz)*n-zz+90); - - EndOfGame := False; - Create15; - - MeshButton := ButtonABC.Create((WindowWidth-200) div 2,2*y0+(sz+zz)*n-zz,200,'Перемешать',clLightGray); - MeshButton.OnClick := Mesh15; - StatusRect := new RectangleABC(0,WindowHeight-40,WindowWidth,40,RGB(200,200,255)); - StatusRect.TextVisible := True; - StatusRect.Text := 'Количество ходов: '+IntToStr(MovesCount); - StatusRect.BorderWidth := 2; - StatusRect.BorderColor := RGB(80,80,255); - - MovesCount := 0; - - OnMouseDown := MouseDown; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Animals/Animals.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Animals/Animals.pas deleted file mode 100644 index b8eda8322..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Animals/Animals.pas +++ /dev/null @@ -1,96 +0,0 @@ -// Самообучающаяся игра "Угадай животное". -// Старайтесь на вопрос "Чем отличается" вводить самый общий ответ -// Например: "Чем отличается чиж от ежа" - "Умеет летать" -type - TNode = class - s: string; - left,right: TNode; - constructor(s: string); - begin - Self.s := s; - left := nil; - right := nil; - end; - end; - -var f: text; - -/// Сохранить дерево в файл -procedure SaveToFile(p: TNode); -begin - if p=nil then - begin - writeln(f,''); - exit - end; - writeln(f,p.s); - SaveToFile(p.left); - SaveToFile(p.right); -end; - -/// Загрузить дерево из файла -function LoadFromFile: TNode; -var - s: string; - p: TNode; -begin - readln(f,s); - if s='' then - begin - Result := nil; - exit - end; - p := new TNode(s); - p.left := LoadFromFile; - p.right := LoadFromFile; - Result := p; -end; - -var - p,p1,p2,root: TNode; - x: integer; - s,q: string; - -begin - writeln('Загадайте животное'); - assign(f, 'animals_data.txt'); - if not FileExists('animals_data.txt') then - root := new TNode('Собака') - else - begin - reset(f); - root := loadfromfile; - close(f); - end; - - p := root; - while p.left<>nil do - begin - write(p.s+'? (0 - Нет, 1 - Да): '); - readln(x); - if x=1 then - p := p.left - else - p := p.right - end; - - write('Это '+p.s+'? (0 - Нет, 1 - Да): '); - readln(x); - if x=1 then - writeln('Я угадала!') - else - begin - write('Я проиграла. Что это за животное? '); - readln(s); - write('Введите вопрос, отличающий это животное от '+p.s+': '); - readln(q); - p1 := new TNode(s); - p2 := new TNode(p.s); - p.s := q; - p.left := p1; - p.right := p2; - end; - Rewrite(f); - SaveToFile(root); - Close(f); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Animals/animals_data.txt b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Animals/animals_data.txt deleted file mode 100644 index f7ff8b724..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Animals/animals_data.txt +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Battle.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Battle.pas deleted file mode 100644 index 8e7c03bc5..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Battle.pas +++ /dev/null @@ -1,318 +0,0 @@ -uses GraphABC; - -const types = 3; //число типов рыб минус 1 - rmax = 4; //радиус всех рыб - CanEat = rmax; //максимальное расстояние при поедании - eps = 0.00001; //необходимо при операциях с данными real - epsustupi = 0.1; //насколько значима иерархия среди хищников - strahkraj = 3; //во сколько раз жертвы боятся края меньше, чем хищников - ustupi = CanEat*10; //насколько значима иерархия среди хищников - BkColor = clBlack; //Фон - Height = 600; //Высота графического окна - Width = 780; //Ширина графического окна - xmin = 10; // - ymin = 10; //Минимальные и максимальные значения координат, - xmax = Width - 100; //которые могут принимать рыбы - ymax = Height - 140; // - -Type -fishtype = class //Описание одной стаи - c : color; - public - CanRazm, MaxKol, Kol, MaxLife, MinFood: integer; - //цвет, размножение, макс. кол-во, текущее кол-во, макс. жизнь, - //сколько хищнику нужно есть для размножения - Speed, See: real; //Нормальная скорость и зрение в пикселях - constructor create(ac:color; aCanRazm, aMaxKol, aMaxLife, aMinFood:integer; aSpeed, aSee: real); - begin - c:= ac; CanRazm:= aCanRazm; MaxKol:= aMaxKol; Kol:= 1; - MaxLife:= aMaxLife; MinFood:= aMinFood; Speed:= aSpeed; See:= aSee - end; - procedure ShowKol(y: integer); //отобразить текущее кол-во - var s: string; - begin - SetFontColor(c); - TextOut(xmax + 20, y, ' '); - s := IntToStr(kol); - TextOut(xmax + 20, y, s); - end; - end; - -var opisanie: array[0..types] of fishtype; //данные для всех стай - -Type -fish = class - x, y, r, dx0, dy0: real; //текущие координаты, радиус и предыдущий шаг - tip, life, razm, status, food: integer; - //razm - время с момента последнего размножения, - //status - состояние - спокойное или возбуждённое - next, prev: fish; //двусвязный циклический список - constructor Create(ax, ay, ar: real; atip: integer; aprev, anext: fish); - begin - x:= ax; y:= ay; r:= ar; tip:= atip; prev:= aprev; next:= anext; - life:= 0; razm:= 0; dx0:= random; dy0:= random; status:= 1; food:= 0; - end; - procedure show; - begin - SetPenColor(opisanie[tip].c); - circle(round(x), round(y), round(r)) - end; - procedure hide; - begin - SetPenColor(BkColor); - circle(round(x), round(y), round(r)) - end; - procedure Destroy; - begin - hide; - opisanie[tip].kol:= opisanie[tip].kol - 1; - opisanie[tip].ShowKol(tip*40 + 20); - end; - procedure moveto(dx, dy: real); - begin - hide; - x:= x + dx; y:= y + dy; - if x > xmax then x:= xmax; - if x < xmin then x:= xmin; - if y > ymax then y:= ymax; - if y < ymin then y:= ymin; - show - end; - - procedure MakeDeti(var mama, StartAkula, KonAkula, StartKilka, KonKilka : fish); - //произвести потомство - var d: fish; - begin - razm:= 0; - food:= 0; - d:= fish.create(x, y, r, tip, mama, next); - next.prev:= d; - next:= d; - if mama = KonAkula then KonAkula:= d; - if mama = KonKilka then KonKilka:= d; - opisanie[tip].kol:= opisanie[tip].kol + 1; - opisanie[tip].ShowKol(tip*40 + 20); - end; - - procedure step(var ribka, StartAkula, KonAkula, StartKilka, KonKilka : fish); - //Здесь алгоритмы для рыб - var - dx, dy, d, dx2, dy2, dmin: real; - t, trup, found: fish; - FoundOhot: boolean; - begin - status:= 1; //Нормальное состояние - dx:= 0; dy:= 0; - if tip > 0 then - begin //Начало алгоритма для жертв - t:= StartAkula; - if t<>nil then - repeat //Ищем всех хищников в поле видимости - d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); - if d < opisanie[tip].See then - begin - if d < eps then d:= eps; - dx2:= (x - t.x)/(d*d); - dy2:= (y - t.y)/(d*d); - dx:= dx + dx2; - dy:= dy + dy2; - status:= 2; //Возбуждённое состояние - end; - t:= t.next - until t = KonAkula.next; - //И обратим внимание на края: - if x - xmin < opisanie[tip].See then dx:= dx + 1/((x - xmin + eps)*strahkraj); - if xmax - x < opisanie[tip].See then dx:= dx + 1/((x - xmax - eps)*strahkraj); - if y - ymin < opisanie[tip].See then dy:= dy + 1/((y - ymin + eps)*strahkraj); - if ymax - y < opisanie[tip].See then dy:= dy + 1/((y - ymax - eps)*strahkraj); - d:= sqrt(dx*dx + dy*dy); - if d < eps then - begin - dx:= 2*status*random()*opisanie[tip].Speed - status*opisanie[tip].Speed; - dy:= 2*status*random()*opisanie[tip].Speed - status*opisanie[tip].Speed - end - else - begin - dx:= status*opisanie[tip].Speed*dx/d; - dy:= status*opisanie[tip].Speed*dy/d - end - end - else {tip = 0} - begin //Начало алгоритма для хищников - dmin:= 11000; - t:= StartAkula; - while t<>ribka do //Проверяем всех выше по иерархии - begin - - d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); - if (d < dmin) and (abs(dx0 - t.dx0) < epsustupi) and - (abs(dy0 - t.dy0) < epsustupi) then dmin:= d; - - t:= t.next - end; - FoundOhot:= dmin < ustupi; - dmin:= 11000; - found:= nil; - t:= StartKilka; - if (t<>nil) and (life > 100) and not FoundOhot then - repeat - - d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); - if d < dmin then - begin - dmin:= d; - found:= t //found - ближайшая жертва - end; - t:= t.next - until t = KonKilka.next; - if (found <> nil) and (dmin < opisanie[tip].See) then - begin - status:= 2; //Возбуждённое состояние - dx:= found.x - x; - dy:= found.y - y; - if dmin < CanEat + status*opisanie[tip].Speed then - begin //Поедание - found.next.prev:= found.prev; - found.prev.next:= found.next; - if (found = StartKilka) and (found = KonKilka) then - begin - //StartKilka:= nil; - //KonKilka:= nil - end; - if found = StartKilka then - StartKilka:= StartKilka.next; - if found = KonKilka then - KonKilka:= KonKilka.prev; - found.destroy; - found := nil; - food:= food + 1 - end - end - else - if (x <= xmin) or (x >= xmax) or (y <= ymin) or (y >= ymax) then - begin - dx:= 2*status*random()*opisanie[tip].Speed - status*opisanie[tip].Speed; - dy:= 2*status*random()*opisanie[tip].Speed - status*opisanie[tip].Speed - end - else - begin - dx:= dx0; dy:= dy0 //Повтор предыдущего шага - патрулирование - end; - d:= sqrt(dx*dx + dy*dy); - if d > eps then - begin - dx:= status*opisanie[tip].Speed*dx/d; - dy:= status*opisanie[tip].Speed*dy/d; - end - end; - //Начало алгоритма для всех рыб - moveto(dx, dy); - dx0:= dx; dy0:= dy; - life:= life + 1; razm:= razm + 1; - if opisanie[tip].Kol >= opisanie[tip].MaxKol then Razm:= 0; - if (razm > opisanie[tip].CanRazm) and (food >= opisanie[tip].minfood) then - MakeDeti(ribka, StartAkula, KonAkula, StartKilka, KonKilka); - if life > opisanie[tip].MaxLife then //Смерть от старости - begin - trup:= ribka; ribka:= ribka.prev; - trup.next.prev:= trup.prev; - trup.prev.next:= trup.next; - if trup = StartKilka then - StartKilka:= StartKilka.next; - if trup = KonKilka then - KonKilka:= KonKilka.prev; - if trup = StartAkula then - StartAkula:= StartAkula.next; - if trup = KonAkula then - KonAkula:= KonAkula.prev; - if trup = trup.next then ribka:= nil; - if trup <> nil then - trup.destroy; - trup := nil; - end - end; - - end; - -function getAllCount:integer; -var i,c:integer; -begin - c:=0; - for i:=0 to types do - c:=c+opisanie[i].Kol; - getAllCount:=c; -end; - -var i: integer; - p, q, StartAkula, StartKilka, KonAkula, KonKilka, tek: fish; - -begin - SetSmoothing(False); - SetWindowSize(Width, Height); - SetWindowLeft(200); - SetWindowTop(50); - SetWindowCaption('Битва за жизнь'); - SetFontSize(7); - SetFontName('Arial'); - SetBrushColor(BkColor); - FillRectangle(0, 0, Width, Height); - SetFontColor(clWhite); - TextOut(10, ymax + 20, 'Автор программы - Иванов С.О. e-mail: ssyy@yandex.ru'); - TextOut(10, ymax + 20+1*18, 'Программа моделирует поведение нескольких стай рыб. Справа - количества рыб в текущий'); - TextOut(10, ymax + 20+2*18, 'момент времени. Изменяя параметры в коде программы, можно влиять на ход битвы.'); - TextOut(10, ymax + 20+3*18, 'По умолчанию: красные - хищники, поедают любых рыб из других стай, не плодятся,'); - TextOut(10, ymax + 20+4*18, 'пока не поели; синие - жертвы, самые медленные, но быстрее всех плодятся; зелёные - жертвы,'); - TextOut(10, ymax + 20+5*18, 'быстрее синих, но плодятся медленнее; желтые - самые быстрые среди жертв, но желтых мало.'); - SetFontSize(12); - StartAkula:= nil; - StartKilka:= nil; - KonAkula:= nil; - KonKilka:= nil; - - //c - цвет. - //CanRazm - минимальное количество ходов отдельно взятой рыбы между двумя - // её последовательными размножениями. - //MaxKol - максимально допустимое количество рыб данного вида. - //Kol - количество рыб данного вида в текущий момент времени. - //MaxLife - максимальная продолжительность жизни. - // После того, как рыба сделает больше шагов, чем это число, она умирает. - //MinFood - минимальное количество съеденных жертв, необходимое для размножения - // (только для хищников; для жертв это количество принято за -1). - //Speed - нормальная скорость. Максимальная скорость рыбы в 2 раза больше этого числа. - //See - радиус обзора - как далеко видит рыба. - - //c, CanRazm, MaxKol, MaxLife, MinFood, Speed, See - opisanie[3]:= fishtype.create(clYellow, 300, 15, 1500, -1, 0.99, 50); - opisanie[2]:= fishtype.create(clGreen, 150, 50, 1500, -1, 0.9, 50); - opisanie[1]:= fishtype.create(clBlue, 30, 50, 500, -1, 0.7, 35); - opisanie[0]:= fishtype.create(clRed, 1000, 40, 5000, 1, 1, 500); - SetPenColor(clWhite); - rectangle(round(xmin - rmax - 1), round(ymin - rmax - 1), - round(xmax + rmax + 1), round(ymax + rmax + 1)); - //Теперь нужно построить первоначальный список - q:= fish.create(xmin + 10, ymax - 10, rmax, 0, nil, nil); - p:= fish.create(xmin + 10, ymin + 10, rmax, 1, q, q); - q.next:= p; q.prev:= p; - StartAkula:= q; KonAkula:= q; - StartKilka:= p; KonKilka:= p; - p:= fish.create(xmax - 10, ymin + 10, rmax, 2, KonKilka, StartAkula); - StartAkula.prev:= p; - KonKilka.next:= p; KonKilka:= p; - p:= fish.create(xmax - 10, ymax - 10, rmax, 3, KonKilka, StartAkula); - StartAkula.prev:= p; - KonKilka.next:= p; KonKilka:= p; - for i:= 0 to types do opisanie[i].ShowKol(i*40 + 20); - //И все ходят по очереди, пока хоть кто-то жив. - tek:= StartKilka; - //i:=0;c:=getallcount;LockDrawing; - repeat - tek:= tek.next; - tek.step(tek, StartAkula, KonAkula, StartKilka, KonKilka); - {i:=i+1; - if i>=c then begin - i:=0;c:=getallcount; - Redraw; - end;} - until (tek = nil); - -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/BookWorm/BookWormABCNET.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/BookWorm/BookWormABCNET.pas deleted file mode 100644 index 0ab555846..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/BookWorm/BookWormABCNET.pas +++ /dev/null @@ -1,226 +0,0 @@ -uses GraphABC,ABCObjects,ABCButtons,Events; - -const -/// Примерная частота повторяемости букв - freqcharstr='аааааааааааааааааааааааааабббббввввввввггггдддддддееееееееееееееееееееежжззззииииииииииииииииииийккккккккккккккклллллллллллммммммнннннннннннннннннооооооооооооооооооооооооппппппппрррррррррррррррррссссссссссссстттттттттттттттууууууффххцццчччшшщыыьььььэюяяяя'; - -const - MaxWordLen = 12; - scorehits: array [1..MaxWordLen] of integer = (0,1,2,4,7,11,16,22,29,37,46,56); - -type - MySquareABC = class(SquareABC) end; - -var -/// Доска с буквами - MainBoard: ObjectBoardABC; -/// Доска высоты 1 для размещения слова - WordBoard: ObjectBoardABC; -/// Номер первого незанятого символа на доске WordBoard - cur: integer; -/// Количество ходов - moves: integer; -/// Очки - score: integer; -/// Прямоугольник для отображения информации - Status: RectangleABC; - -/// Существует ли такое слово (все слова хранятся в файле words.txt) -function WordExists(s: string): boolean; -var - f: text; - str: string; -begin - s := LowerCase(s); - Result := False; - assign(f,'words.txt'); - reset(f); - while not eof(f) do - begin - readln(f,str); - if s=str then - begin - Result := True; - break; - end; - end; - close(f); -end; - -procedure MyMouseDown(x,y,mb: integer); -begin -// Нажата левая мышь - if mb=1 then - begin - if cur>WordBoard.DimX then - exit; - var ob := ObjectUnderPoint(x,y); - if (ob is MySquareABC) and ob.Visible then - begin - var ob1 := WordBoard[cur,1]; - ob1.Visible := True; - ob1.Text := ob.Text; - Inc(cur); - ob.Visible := False; - var s := ''; - for var i:=1 to cur-1 do - s := s + WordBoard[i,1].Text; - if WordExists(s) then - WordBoard.Color := clYellow - else WordBoard.Color := clSkyBlue - end; - end - else -// Нажата правая мышь - begin - for var xx:=1 to cur-1 do - WordBoard[xx,1].Visible := False; - for var xx:=1 to MainBoard.DimX do - for var yy:=1 to MainBoard.DimY do - MainBoard[xx,yy].Visible:=True; - cur := 1; - WordBoard.Color := clSkyBlue - end; -end; - -/// Обработчик кнопки "Новая игра" -procedure BtNewClick; -begin - score := 0; - moves := 0; - Status.Text := 'Ходов: '+IntToStr(moves)+' Очков: '+IntToStr(score); - MyMouseDown(1,1,2); - for var xx:=1 to MainBoard.DimX do - for var yy:=1 to MainBoard.DimY do - MainBoard[xx,yy].Text := UpCase(freqcharstr[Random(255)+1]); -end; - -/// Обработчик кнопки "Сказать слово" -procedure BtWordClick; -begin - if WordBoard.Color<>clYellow then - exit; - Inc(score,scorehits[cur-1]); - Inc(moves); - for var xx:=1 to cur-1 do - WordBoard[xx,1].Visible:=False; - for var xx:=1 to MainBoard.DimX do - for var yy:=1 to MainBoard.DimY do - if not MainBoard[xx,yy].Visible then - begin - MainBoard[xx,yy].Visible:=True; - MainBoard[xx,yy].Text:=UpCase(freqcharstr[Random(255)+1]); - end; - cur := 1; - WordBoard.Color := clSkyBlue; - Status.Text := 'Ходов: '+IntToStr(moves)+' Очков: '+IntToStr(score); -end; - -/// Обработчик кнопки "Подсказка" -procedure BtPleaseClick; -var - f: text; - str,maxstr: string; - arr,work: array ['а'..'я'] of integer; - maxlen: integer; - - function CanConstructWord(s: string): boolean; - begin - work := arr; - Result := True; - for var i:=1 to Length(s) do - begin - Dec(work[s[i]]); - if work[s[i]]<0 then - begin - Result := False; - break; - end; - end; - end; - -begin // BtPleaseClick - maxlen := 0; - maxstr := ''; - for var c:='а' to 'я' do - arr[c]:=0; - - for var xx:=1 to MainBoard.DimX do - for var yy:=1 to MainBoard.DimY do - Inc(arr[LowCase(MainBoard[xx,yy].Text[1])]); - - assign(f,'words.txt'); - reset(f); - while not eof(f) do - begin - readln(f,str); - if CanConstructWord(str) and (Length(str)>maxlen) and (Length(str)<=MaxWordLen) then - begin - maxlen := Length(str); - maxstr := str; - end; - end; - close(f); - - writeln(maxstr); -end; - -procedure InitWindow; -begin - SetWindowSize(640,480); - Window.IsFixedSize := True; - Window.Title := 'Знай русские слова!'; - Brush.Color := clMoneyGreen; - FillRect(0,0,WindowWidth,WindowHeight); -end; - -procedure InitGameVars; -begin - cur := 1; - moves := 0; - score := 0; -end; - -procedure InitButtons; -begin - var btword := new ButtonABC(70,410,180,30,'Сказать слово',clGray); - var btnew := new ButtonABC(280,410,100,30,'Заново',clLightGray); - var btplease := new ButtonABC(410,410,160,30,'Подсказка',clGray); - -// Привязка обработчиков к кнопкам - btword.OnClick := BtWordClick; - btnew.OnClick := BtNewClick; - btplease.OnClick := BtPleaseClick; -end; - - -procedure InitInterface; -begin - Status := new RectangleABC(70,350,500,30,clSkyBlue); - Status.Text := 'Ходов: 0 Очков: 0'; - WordBoard := new ObjectBoardABC(20,40,MaxWordLen,1,50,50,clSkyBlue); - MainBoard := new ObjectBoardABC(220,120,4,4,50,50,clMoneyGreen); - MainBoard.BorderColor := clGreen; - //MainBoard.Bordered := False; - - for var x:=1 to WordBoard.DimX do - begin - WordBoard[x,1] := new SquareABC(0,0,WordBoard.CellSizeX-6,clWhite); - WordBoard[x,1].Visible := False; - end; - for var x:=1 to MainBoard.DimX do - for var y:=1 to MainBoard.DimY do - begin - MainBoard[x,y] := new MySquareABC(0,0,MainBoard.CellSizeX-6,clWhite); - MainBoard[x,y].Text := UpCase(freqcharstr[Random(freqcharstr.Length)+1]); - end; -end; - -begin - InitWindow; - InitGameVars; - InitInterface; - InitButtons; - - OnMouseDown := MyMouseDown; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/BookWorm/words.txt b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/BookWorm/words.txt deleted file mode 100644 index 1f8de268b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/BookWorm/words.txt +++ /dev/null @@ -1,14842 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/DeleteByMouse.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/DeleteByMouse.pas deleted file mode 100644 index 77203faa2..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/DeleteByMouse.pas +++ /dev/null @@ -1,56 +0,0 @@ -uses ABCObjects,GraphABC; - -const CountSquares = 20; - -var - /// Текущая цифра - CurrentDigit: integer; - /// Количество ошибок - Mistakes: integer; - /// Строка информации - StatusRect: RectangleABC; - -/// Вывод информационной строки -procedure DrawStatusText; -begin - if CurrentDigit<=CountSquares then - StatusRect.Text := 'Удалено квадратов: ' + IntToStr(CurrentDigit-1) + ' Ошибок: ' + IntToStr(Mistakes) - else StatusRect.Text := 'Игра окончена. Время: ' + IntToStr(Milliseconds div 1000) + ' с. Ошибок: ' + IntToStr(Mistakes); -end; - -/// Обработчик события мыши -procedure MyMouseDown(x,y,mb: integer); -begin - var ob := ObjectUnderPoint(x,y); - if (ob<>nil) and (ob is RectangleABC) then - if ob.Number=CurrentDigit then - begin - ob.Destroy; - Inc(CurrentDigit); - DrawStatusText; - end - else - begin - ob.Color := clRed; - Inc(Mistakes); - DrawStatusText; - end; -end; - -begin - Window.Title := 'Игра: удали все квадраты по порядку'; - Window.IsFixedSize := True; - for var i:=1 to CountSquares do - begin - var x := Random(WindowWidth-50); - var y := Random(WindowHeight-100); - var ob := RectangleABC.Create(x,y,50,50,clMoneyGreen); - ob.Number := i; - end; - StatusRect := RectangleABC.Create(0,Window.Height-40,Window.Width,40,Color.LightSteelBlue); - CurrentDigit := 1; - Mistakes := 0; - DrawStatusText; - // Установка обработчиков - OnMouseDown := MyMouseDown; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/KillThem.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/KillThem.pas deleted file mode 100644 index 0ed3a4842..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/KillThem.pas +++ /dev/null @@ -1,238 +0,0 @@ -uses ABCObjects,GraphABC,Timers; - -const - clPlayer = Color.BurlyWood; - -var - kLeftKey,kRightKey: boolean; - kSpaceKey: integer; - /// Игрок - Player: RectangleABC; - /// Таймер движения врагов - t: Timer; - /// Флаг конца игры - EndOfGame: boolean; - /// Количество неигровых объектов - StaticObjectsCount: integer; - /// Счетчик выигрышей - Wins: integer; - /// Счетчик проигрышей - Falls: integer; - /// Информационная строка - InfoString: RectangleABC; - /// Сообщение в начале игры - NewGame: RoundRectABC; - -type - KeysType = (kLeft,kRight); - - /// Класс пули - Pulya = class(CircleABC) - public - constructor Create(x,y: integer); - procedure Move; override; - end; - - /// Класс врага - Enemy = class(RectangleABC) - public - constructor Create(x,y,w: integer); - procedure Move; override; - end; - -constructor Pulya.Create(x,y: integer); -begin - inherited Create(x,y,5,clRed); - dx := 0; - dy := -5; -end; - -procedure Pulya.Move; -begin - inherited Move; - if Top<0 then - Visible := False; - for var j:=StaticObjectsCount to Objects.Count-1 do - // При столкновении пуля и объект становятся невидимыми - if (Objects[j]<>Self) and Intersect(Objects[j]) then - begin - Objects[j].Visible := False; - Visible := False; - end; -end; - -constructor Enemy.Create(x,y,w: integer); -begin - inherited Create(x,y,w,20,clRandom); - if Random(2)=0 then - dx := 5 - else dx := -5; - dy := 0; -end; - -procedure Enemy.Move; -begin - if Random(2)<>0 then - Exit; - if Random(10)=0 then - dy := 5; - if (Left<0) or (Left+Width>Window.Width) or (Random(30)=0) then - dx := -dx; - inherited Move; - if dy<>0 then - dy := 0; - if Top>Window.Height-50 then - EndOfGame := True; -end; - -/// Количество врагов -function NumberOfEnemies: integer; -begin - Result := 0; - for var i:=0 to Objects.Count-1 do - if Objects[i] is Enemy then - Result += 1; -end; - -/// Создание игрока и врагов -procedure CreateObjects; -begin - Player := new RectangleABC(280,WindowHeight-30,100,20,clPlayer); - for var i:=1 to 100 do - begin - var r1 := new Enemy(Random(WindowWidth-50),40+Random(10),50); - r1.TextVisible := True; - r1.Number := i; - end; -end; - -/// Разрушение игрока и врагов -procedure DestroyObjects; -begin - for var i:=Objects.Count-1 downto StaticObjectsCount do - Objects[i].Destroy; -end; - -/// Перемещение врагов -procedure MoveObjects; -begin - for var i:=StaticObjectsCount+1 to Objects.Count-1 do - Objects[i].Move; -end; - -/// Удаление уничтоженных объектов -procedure DestroyKilledObjects; -begin - for var i:=ObjectsCount-1 downto StaticObjectsCount+1 do - if not Objects[i].Visible then - Objects[i].Destroy; -end; - -/// Обработчик нажатия клавиши -procedure KeyDown(Key: integer); -begin - case Key of -vk_Left: kLeftKey := True; -vk_Right: kRightKey := True; -vk_Space: if kSpaceKey=2 then kSpaceKey := 1; - end; -end; - -/// Обработчик отжатия клавиши -procedure KeyUp(Key: integer); -begin - case Key of -vk_Left: kLeftKey := False; -vk_Right: kRightKey := False; -vk_Space: kSpaceKey := 2; - end; -end; - -/// Изменение информационной строки -procedure ChangeInfoString; -begin - InfoString.Text := 'Врагов: '+IntToStr(NumberOfEnemies)+' Побед: '+IntToStr(Wins)+' Поражений: '+IntToStr(Falls); -end; - -/// Обработчик нажатия символьной клавиши -procedure KeyPress(Key: char); -begin - if (Key in ['G','П','g','п']) and EndOfGame then - begin - NewGame.Visible := False; - EndOfGame := False; - t.Start; - CreateObjects; - kSpaceKey := 2; - kLeftKey := False; - kRightKey := False; - end; -end; - -/// Обработчик отжатия мыши -procedure MouseUp(x,y,mb: integer); -begin - if NewGame.PTInside(x,y) then - KeyPress('G'); -end; - -/// Обработчик таймера -procedure TimerProc; -begin - if kLeftKey and (Player.Left>0) then - Player.MoveOn(-10,0); - if kRightKey and (Player.Left+Player.Width0 then - Falls += 1 - else Wins += 1; - NewGame.Visible := True; - DestroyObjects; - ChangeInfoString; - RedrawObjects; - end; -end; - -begin - Window.Title := 'Стрелялка'; - Window.IsFixedSize := True; - ClearWindow(clBlack); - LockDrawingObjects; - EndOfGame := True; - InfoString := new RectangleABC(0,0,Window.Width,38,Color.DarkBlue); - InfoString.Bordered := False; - InfoString.FontColor := clWhite; - InfoString.TextScale := 0.9; - - var zz := 100; - NewGame := new RoundRectABC(zz,200,400,200,30,Color.Violet); - NewGame.Center := Window.Center; - NewGame.Text := 'G - Новая игра'; - StaticObjectsCount := Objects.Count; - ChangeInfoString; - RedrawObjects; - - OnKeyDown := KeyDown; - OnKeyPress := KeyPress; - OnKeyUp := KeyUp; - OnMouseUp := MouseUp; - - t := new Timer(1,TimerProc); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Life.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Life.pas deleted file mode 100644 index 87956714a..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Life.pas +++ /dev/null @@ -1,318 +0,0 @@ -// Игра "Жизнь" на торе -// Оптимизация хешированием по равномерной сетке -uses Utils,GraphABC; - -const -/// Ширина клетки - w = 4; -/// Количество клеток по ширине - m = 300; -/// Количество клеток по высоте - n = 220; -/// Отступ поля от левой границы окна - x0 = 1; -/// Отступ поля от верхней границы окна - y0 = 21; - mm = m + 1; - nn = n + 1; -/// Количество клеток сетки по горизонтали - mk = 15; -/// Количество клеток сетки по вертикали - nk = 10; - -var - a,b,sosedia,sosedib: array [0..nn,0..mm] of byte; - obnovA,obnovB: array [1..nk,1..mk] of boolean; - CountCells: integer; - obn: boolean; - gen: integer; - hn,hm: integer; - -/// Нарисовать ячейку -procedure DrawCell(i,j: integer); -begin - DrawInBuffer := False; - SetBrushColor(clBlack); - FillRectangle(x0+(j-1)*w,y0+(i-1)*w,x0+j*w-1,y0+i*w-1); - DrawInBuffer := True; -end; - -/// Стереть ячейку -procedure ClearCell(i,j: integer); -begin - DrawInBuffer := False; - SetBrushColor(clWhite); - FillRectangle(x0+(j-1)*w,y0+(i-1)*w,x0+j*w-1,y0+i*w-1); - DrawInBuffer := True; -end; - -/// Нарисовать все изменившиеся ячейки -procedure DrawConfiguration; -begin - for var i:=1 to n do - for var j:=1 to m do - begin - var bb := b[i,j]; - if a[i,j]<>bb then - if bb=1 then DrawCell(i,j) - else ClearCell(i,j); - end; -end; - -/// Нарисовать все ячейки -procedure DrawConfigurationFull; -begin - for var i:=1 to n do - for var j:=1 to m do - if b[i,j]=1 then DrawCell(i,j) - else ClearCell(i,j); -end; - -/// Нарисовать поле -procedure DrawField; -begin - Pen.Color := clLightGray; - for var i:=0 to m do - begin - if i mod hm = 0 then - Pen.Color := clGray - else Pen.Color := clLightGray; - Line(x0+i*w-1,y0,x0+i*w-1,y0+n*w); - end; - for var i:=0 to n do - begin - if i mod hn = 0 then - Pen.Color := clGray - else Pen.Color := clLightGray; - Line(x0,y0+i*w-1,x0+m*w,y0+i*w-1); - end; -end; - -/// Увеличить массив соседей для данной клетки -procedure IncSosedi(i,j: integer); -var i1,i2,j1,j2: integer; -begin - if i=1 then i1:=n else i1:=i-1; - if i=n then i2:=1 else i2:=i+1; - if j=1 then j1:=m else j1:=j-1; - if j=m then j2:=1 else j2:=j+1; - SosediB[i1,j1] += 1; - SosediB[i1,j] += 1; - SosediB[i1,j2] += 1; - SosediB[i,j1] += 1; - SosediB[i,j2] += 1; - SosediB[i2,j1] += 1; - SosediB[i2,j] += 1; - SosediB[i2,j2] += 1; -end; - -/// Уменьшить массив соседей для данной клетки -procedure DecSosedi(i,j: integer); -var i1,i2,j1,j2: integer; -begin - if i=1 then i1:=n else i1:=i-1; - if i=n then i2:=1 else i2:=i+1; - if j=1 then j1:=m else j1:=j-1; - if j=m then j2:=1 else j2:=j+1; - SosediB[i1,j1] -= 1; - SosediB[i1,j] -= 1; - SosediB[i1,j2] -= 1; - SosediB[i,j1] -= 1; - SosediB[i,j2] -= 1; - SosediB[i2,j1] -= 1; - SosediB[i2,j] -= 1; - SosediB[i2,j2] -= 1; -end; - -/// Поставить ячейку в клетку (i,j) -procedure SetCell(i,j: integer); -begin - if b[i,j]=0 then - begin - b[i,j] := 1; - obn := True; - IncSosedi(i,j); - end; - CountCells += 1; -end; - -/// Убрать ячейку из клетки (i,j) -procedure UnSetCell(i,j: integer); -begin - if b[i,j]=1 then - begin - b[i,j] := 0; - obn := True; - DecSosedi(i,j); - end; - CountCells -= 1; -end; - -/// Инициализировать массивы и конфигурацию поля -procedure Init; -var - xc := n div 2; - yc := m div 2; -begin - for var i:=0 to n+1 do - for var j:=0 to m+1 do - b[i,j] := 0; - a := b; - SosediB := b; - SosediA := SosediB; - for var ik:=1 to nk do - for var jk:=1 to mk do - obnovB[ik,jk] := True; - obnovA := obnovB; - CountCells := 0; - - SetCell(xc,yc); - SetCell(xc,yc+1); - SetCell(xc,yc+2); - SetCell(xc-1,yc+2); - SetCell(xc+1,yc+1); -end; - -/// Обработать ячейку -procedure ProcessCell(i,j: integer); -begin - case SosediA[i,j] of -0..1,4..9: - if b[i,j]=1 then - begin - b[i,j] := 0; - obn := True; - DecSosedi(i,j); - ClearCell(i,j); - Dec(CountCells); - end; -3: if b[i,j]=0 then - begin - b[i,j] := 1; - obn := True; - IncSosedi(i,j); - DrawCell(i,j); - Inc(CountCells); - end; - end; {case} -end; - -/// Перейти к следующему поколению -procedure NextGen; -var ifirst,jfirst,ilast,jlast: integer; -begin - for var ik:=1 to nk do - begin - for var jk:=1 to mk do - begin - obn := False; - ifirst := (ik-1)*hn+1; - ilast := (ik-1)*hn+hn; - jfirst := (jk-1)*hm+1; - jlast := (jk-1)*hm+hm; - if obnovA[ik,jk] then - begin - for var i:=ifirst to ilast do - for var j:=jfirst to jlast do - ProcessCell(i,j); - end - else - begin - var ik1,jk1,ik2,jk2: integer; - if ik=1 then ik1:=nk else ik1:=ik-1; - if ik=nk then ik2:=1 else ik2:=ik+1; - if jk=1 then jk1:=mk else jk1:=jk-1; - if jk=mk then jk2:=1 else jk2:=jk+1; - var l := obnovA[ik,jk1]; - var r := obnovA[ik,jk2]; - var u := obnovA[ik1,jk]; - var d := obnovA[ik2,jk]; - var lu := obnovA[ik1,jk1]; - var ld := obnovA[ik2,jk1]; - var ru := obnovA[ik1,jk2]; - var rd := obnovA[ik2,jk2]; - if u then - for var j:=jfirst+1 to jlast-1 do - ProcessCell(ifirst,j); - if d then - for var j:=jfirst+1 to jlast-1 do - ProcessCell(ilast,j); - if l then - for var i:=ifirst+1 to ilast-1 do - ProcessCell(i,jfirst); - if r then - for var i:=ifirst+1 to ilast-1 do - ProcessCell(i,jlast); - if u or l or lu then - ProcessCell(ifirst,jfirst); - if u or r or ru then - ProcessCell(ifirst,jlast); - if d or l or ld then - ProcessCell(ilast,jfirst); - if d or r or rd then - ProcessCell(ilast,jlast); - end; - obnovB[ik,jk] := obn; - end; - end; -end; - -/// Перерисовка содержимого окна -procedure LifeRedrawProc; -begin - Redraw; - DrawConfigurationFull; -end; - -/// Вывод номера поколения и количества ячеек -procedure DrawInfo; -begin - Brush.Color := clWhite; - TextOut(25,0,'Поколение '+IntToStr(gen)); - TextOut(WindowWidth - 130,0,'Жителей: '+IntToStr(CountCells)+' '); -end; - -begin - if (m mod mk<>0) or (n mod nk<>0) then - begin - writeln('Размер кластера не согласован с размером поля. Программа завершена'); - exit - end; - hm := m div mk; - hn := n div nk; - SetWindowSize(x0+m*w,y0+n*w); - CenterWindow; - Window.Title := 'Игра "Жизнь"'; - Window.IsFixedSize := True; - Font.Name := 'Arial'; - Font.Size := 10; - Init; - - LockDrawing; - DrawInfo; - DrawField; - DrawConfiguration; - UnLockDrawing; - - var mil := Milliseconds; - gen := 0; - RedrawProc := LifeRedrawProc; - while True do - begin - gen += 1; - - if gen mod 11 = 0 then - DrawInfo; - - SosediA := SosediB; - obnovA := obnovB; - NextGen; - - if gen mod 1000 = 0 then - begin - var mil1 := Milliseconds; - writeln(gen,' ',(mil1-mil)/1000); - mil := mil1; - end; - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Matches.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Matches.pas deleted file mode 100644 index 0ea31f7ed..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Matches.pas +++ /dev/null @@ -1,45 +0,0 @@ -// Игра "Спички" -const InitialCount=15; - -var - /// Текущее количество спичек - Count: integer; - /// Количество спичек, которое берет игрок - Num: integer; - /// Номер текущего игрока - Player: integer; - -begin - Player := 1; - Count := InitialCount; - - repeat - if Player=1 then - begin - var Correct: boolean; - repeat - write('Ваш ход. На столе ',Count,' спичек. '); - write('Сколько спичек Вы берете? '); - readln(Num); - Correct := (Num>=1) and (Num<=3) and (Num<=Count); - if not Correct then - writeln('Неверно! Повторите ввод!'); - until Correct; - end - else - begin - Num := Random(1,3); - if Num>Count then - Num := Count; - writeln('Мой ход. Я взял ',Num,' спичек'); - end; - Count -= Num; - if Player=1 then - Player := 2 - else Player := 1; - until Count=0; - - if Player=1 then - writeln('Вы победили!') - else writeln('Вы проиграли!'); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/NewLife.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/NewLife.pas deleted file mode 100644 index acb6036b1..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/NewLife.pas +++ /dev/null @@ -1,347 +0,0 @@ -// Игра Жизнь на торе -// Оптимизация хешированием по равномерной сетке - - -uses Utils,GraphABC; - -const - w =3; - w1=1; - k=20; - m=300; - n=220; - graphW=0; - mk=m div k;//15; - nk=n div k;//10; - mm=m+1; - nn=n+1; - x0=1; - y0=21; - ClearColor=clBlack; - FillColor=clLimeGreen; - FiledColor=RGB(0,40,0); - FiledColor2=RGB(0,70,0);{} - {ClearColor=clWhite; - FillColor=clBlack; - FiledColor=clLightGray; - FiledColor2=clGray;{} - - -var - //a,b,sosedia,sosedib: array [0..nn,0..mm] of byte; - a,b,sosedia,sosedib:array of array of byte; - //obnovA,obnovB: array [1..nk,1..mk] of boolean; - obnovA,obnovB: array of array of boolean; - count: integer; - obn: boolean; - mil,mil1: integer; - hn,hm: integer; - -procedure AssignArray(var arr:array of array of boolean; n,m:integer); -begin - SetLength(arr,n); - for var i:=0 to n-1 do - SetLength(arr[i],m); -end; -procedure AssignArray(var arr:array of array of byte; n,m:integer); -begin - SetLength(arr,n); - for var i:=0 to n-1 do - SetLength(arr[i],m); -end; -procedure CopyArray(arr1,arr2:array of array of byte); -begin - for var i:=0 to arr1.Length-1 do - arr1[i].CopyTo(arr2[i],0); -end; -procedure CopyArray(arr1,arr2:array of array of boolean); -begin - for var i:=0 to arr1.Length-1 do - arr1[i].CopyTo(arr2[i],0); -end; - -procedure DrawCell(i,j: integer); -begin - if BrushColor<>FillColor then begin - SetBrushColor(FillColor); - SetPenColor(FillColor); - end; - FillRect(x0+(j-1)*w,y0+(i-1)*w,x0+j*w-w1,y0+i*w-w1); -end; - - -procedure ClearCell(i,j: integer); -begin - if BrushColor<>clearColor then begin - SetBrushColor(clearColor); - SetPenColor(clearColor); - end; - FillRect(x0+(j-1)*w,y0+(i-1)*w,x0+j*w-w1,y0+i*w-w1); -end; - -procedure DrawConfiguration; -begin - for var i:=1 to n do - for var j:=1 to m do - if a[i,j]=1 then - DrawCell(i,j) -end; - -procedure DrawField; -begin - SetBrushColor(ClearColor); - FillRectangle(x0,y0,x0+m*w,y0+n*w); - SetPenColor(FiledColor); - for var i:=0 to m do - Line(x0+i*w-1,y0,x0+i*w-1,y0+n*w); - for var i:=0 to n do - Line(x0,y0+i*w-1,x0+m*w,y0+i*w-1); - SetPenColor(FiledColor2); - for var i:=0 to m div hm do - Line(x0+i*w*hm-1,y0,x0+i*w*hm-1,y0+n*w); - for var i:=0 to n div hn do - Line(x0,y0+i*w*hn-1,x0+m*w,y0+i*w*hn-1); -end; - -procedure IncSosedi(i,j: integer); -begin - var i1 := i=1 ? n : i-1; - var i2 := i=n ? 1 : i+1; - var j1 := j=1 ? m : j-1; - var j2 := j=m ? 1 : j+1; - SosediB[i1,j1] += 1; - SosediB[i1,j] += 1; - SosediB[i1,j2] += 1; - SosediB[i,j1] += 1; - SosediB[i,j2] += 1; - SosediB[i2,j1] += 1; - SosediB[i2,j] += 1; - SosediB[i2,j2] += 1; -end; - -procedure DecSosedi(i,j: integer); -begin - var i1 := i=1 ? n : i-1; - var i2 := i=n ? 1 : i+1; - var j1 := j=1 ? m : j-1; - var j2 := j=m ? 1 : j+1; - SosediB[i1,j1] -= 1; - SosediB[i1,j] -= 1; - SosediB[i1,j2] -= 1; - SosediB[i,j1] -= 1; - SosediB[i,j2] -= 1; - SosediB[i2,j1] -= 1; - SosediB[i2,j] -= 1; - SosediB[i2,j2] -= 1; -end; - -procedure SetCell(i,j: integer); -begin - if b[i,j]=0 then - begin - b[i,j]:=1; - obn:=true; - IncSosedi(i,j); - end; - count += 1; -end; - -procedure UnSetCell(i,j: integer); -begin - if b[i,j]=1 then - begin - b[i,j]:=0; - obn:=true; - DecSosedi(i,j); - end; - count -= 1; -end; - -type - ColonyType = (Big, LD, RD, LU, RU); -procedure AddColonyType(xc,yc:integer; ctype:ColonyType); -begin - case ctype of - ColonyType.Big:begin - SetCell(xc,yc); - SetCell(xc,yc+1); - SetCell(xc,yc+2); - SetCell(xc-1,yc+2); - SetCell(xc+1,yc+1); - end; - ColonyType.LD:begin - SetCell(xc,yc-1); - SetCell(xc,yc); - SetCell(xc,yc+1); - SetCell(xc-1,yc-1); - SetCell(xc-2,yc); - end; - end; - //SosediA:=SosediB; - CopyArray(sosedib,sosedia); - for var ik:=1 to nk do - for var jk:=1 to mk do - obnovB[ik,jk]:=true; - //obnovA:=obnovB; - CopyArray(obnovB,obnovA); -end; - -procedure Init; -begin - Count:=0; - AddColonyType(n div 2,m div 2, ColonyType.Big); -end; - -procedure OnlyCase(i,j: integer); -begin - case SosediA[i,j] of -0..1,4..9: - if b[i,j]=1 then - begin - b[i,j]:=0; - obn:=true; - DecSosedi(i,j); - ClearCell(i,j); - count -= 1; - end; -3: if b[i,j]=0 then - begin - b[i,j]:=1; - obn:=true; - IncSosedi(i,j); - DrawCell(i,j); - count += 1; - end; - end; -end; - -procedure NextGen; -var - i,j,ik1,jk1,ik2,jk2,ifirst,jfirst,ilast,jlast: integer; - l,r,u,d,lu,ld,ru,rd: boolean; -begin - for var ik:=1 to nk do - begin - for var jk:=1 to mk do - begin - obn := false; - ifirst := (ik-1)*hn+1; - ilast := ik*hn; - jfirst := (jk-1)*hm+1; - jlast := jk*hm; - if obnovA[ik,jk] then - begin - for i:=ifirst to ilast do - for j:=jfirst to jlast do - OnlyCase(i,j); - end - else - begin - ik1 := ik=1 ? nk : ik-1; - ik2 := ik=nk ? 1 : ik+1; - jk1 := jk=1 ? mk : jk-1; - jk2 := jk=mk ? 1 : jk+1; - l:=obnovA[ik,jk1]; - r:=obnovA[ik,jk2]; - u:=obnovA[ik1,jk]; - d:=obnovA[ik2,jk]; - lu:=obnovA[ik1,jk1]; - ld:=obnovA[ik2,jk1]; - ru:=obnovA[ik1,jk2]; - rd:=obnovA[ik2,jk2]; - if u then - begin - i:=ifirst; - for j:=jfirst+1 to jlast-1 do - OnlyCase(i,j); - end; - if d then - begin - i:=ilast; - for j:=jfirst+1 to jlast-1 do - OnlyCase(i,j); - end; - if l then - begin - j:=jfirst; - for i:=ifirst+1 to ilast-1 do - OnlyCase(i,j); - end; - if r then - begin - j:=jlast; - for i:=ifirst+1 to ilast-1 do - OnlyCase(i,j); - end; - if u or l or lu then - OnlyCase(ifirst,jfirst); - if u or r or ru then - OnlyCase(ifirst,jlast); - if d or l or ld then - OnlyCase(ilast,jfirst); - if d or r or rd then - OnlyCase(ilast,jlast); - end; - obnovB[ik,jk]:=obn; - end; - end; -end; - -procedure MouseDown(x,y,b:integer); -begin - case b of - 1:AddColonyType((y-y0)div w,(x-x0)div w, ColonyType.LD); - - end; -end; - -begin - AssignArray(obnovA,nk+1,mk+1); - AssignArray(obnovB,nk+1,mk+1); - AssignArray(a,nn+1,mm+1); - AssignArray(b,nn+1,mm+1); - AssignArray(sosedia,nn+1,mm+1); - AssignArray(sosedib,nn+1,mm+1); - SetWindowCaption('Игра "Жизнь"'); - if (m mod mk<>0) or (n mod nk<>0) then - begin - writeln('Размер кластера не согласован с размером поля. Программа завершена'); - exit - end; - hm:=m div mk; - hn:=n div nk; - SetBrushColor(ClearColor); - SetWindowSize(x0+m*w,y0+n*w+graphW); - CenterWindow; - ClearWindow(ClearColor); - SetFontName('Courier New'); - SetFontSize(10); - Init; - DrawField; - DrawConfiguration; - OnMouseDown:=MouseDown; - mil:=Milliseconds; - var gen:=0; - DrawInBuffer := false; - while true do begin - gen+=1; - //SosediA:=SosediB; - //obnovA:=obnovB; - CopyArray(sosedib,sosedia); - CopyArray(obnovB,obnovA); - NextGen; - if gen mod 10 = 0 then begin - DrawInBuffer := True; - SetBrushColor(ClearColor); - SetFontColor(FillColor); - TextOut(25, 0,'Поколение: '+IntToStr(gen)); - TextOut(765,0,'Жителей: '+IntToStr(count)+' '); - if gen mod 1000 = 0 then begin - mil1:=Milliseconds; - writeln(gen,' ',(mil1-mil)/1000); - mil:=mil1; - end; - DrawInBuffer := false; - end; - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/Main.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/Main.pas deleted file mode 100644 index 3946450ad..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/Main.pas +++ /dev/null @@ -1,22 +0,0 @@ -//(c) DarkStar 2008 -uses GraphABC, Paporotnik, PaporotnikData; - -const - Iterations = 300000; - Height = 600; - Fast = false; - Width = Height div 2; - WindowWidth= Width * 3; - Brightness = 170; - -var - Paprotnik := new PaporotnikFractal(PaprotnikData); - SimplePaprotnik := new PaporotnikFractal(SimplePaprotnikData); - Elka := new PaporotnikFractal(ElkaData); - -begin - InitWindow(200, 50, WindowWidth , Height, clBlack); - Paprotnik.Draw(0, 0, Iterations, Height, Brightness, fast); - SimplePaprotnik.Draw(Width, 0, Iterations, Height, Brightness, fast); - Elka.Draw(Width*2, 0, Iterations, Height, Brightness, fast); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/Paporotnik.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/Paporotnik.pas deleted file mode 100644 index 3d689e7a5..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/Paporotnik.pas +++ /dev/null @@ -1,51 +0,0 @@ -///Модуль для рисования фракталов семейства "Лист папоротника" -unit Paporotnik; - -uses GraphABC; - -type - - ///Настройки фрактала - PaporotnikFractalInitalData = record - data: array of array of real; - P0,P1,P2,P3:real; - end; - - ///Фрактал "Лист папоротника" - PaporotnikFractal = class - private - data: array of array of real; - P0,P1,P2,P3:real; - public - constructor(initdata: PaporotnikFractalInitalData); - begin - data := initdata.data; - P0 := initdata.P0; - P1 := initdata.P1; - P2 := initdata.P2; - P3 := initdata.P3; - end; - procedure Draw(x0,y0,Iterations,Height,Brightness: integer; fast: boolean); - begin - var plotx, ploty, x, y : real; - var Size := Height/11; - var Width := Height div 2; - var dx := Width div 2; - var dc := Iterations div Brightness; - if fast then - LockDrawing; - for var i:=1 to Iterations do begin - var P := Random(100); - var rnd := P=1 do - begin - OnVector(0,i); - OnVector(i,0); - i -= 1; - OnVector(0,-i); - OnVector(-i,0); - i -= 1; - end; - PenUp; -end; - -begin - Task('pp17'); - ToPoint(2,2); - Spir(10); - ToPoint(16,2); - Spir(8); - ToPoint(0,0); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DrawManMakeTask/DMMy1.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DrawManMakeTask/DMMy1.pas deleted file mode 100644 index 239a4dfa6..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DrawManMakeTask/DMMy1.pas +++ /dev/null @@ -1,5 +0,0 @@ -uses DrawMan,DrawManAddTasks; - -begin - Task('my1'); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DrawManMakeTask/DrawManAddTasks.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DrawManMakeTask/DrawManAddTasks.pas deleted file mode 100644 index 5ad9e6a56..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DrawManMakeTask/DrawManAddTasks.pas +++ /dev/null @@ -1,24 +0,0 @@ -/// Дополнительный модуль для исполнителя Чертежник с заданиями -unit DrawManAddTasks; -// После компиляции pcu-файл модуля желательно разместить в папке PascalABC.NET\bin\Lib - -uses DrawMan,DMTaskMaker; - -procedure my1; -begin - TaskText('Задание my1. Начертите, используя циклы'); - Field(14,14); - DoToPoint(1,7); - var k := 1; - DoPenDown; - for var i:=1 to 12 do - begin - DoOnVector(1,i*k); - k:=-k; - end; - DoPenUp; -end; - -begin - RegisterTask('my1',my1); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/random_DM.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/random_DM.pas deleted file mode 100644 index c9f2904c0..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/random_DM.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Демонстрация использования случайных чисел для Чертежника. Лучи -uses DrawMan; - -begin - Field(30,22); - ToPoint(15,11); - PenDown; - for var i:=1 to 100 do - begin - var dx := Random(-10,10); - var dy := Random(-10,10); - OnVector(dx,dy); - OnVector(-dx,-dy); - end; - PenUp; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/Dynamic2.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/Dynamic2.pas deleted file mode 100644 index 4888d1972..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/Dynamic2.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Пример решения задачи Dynamic2 из электронного задачника Programming Taskbook -uses PT4; - -var p1,p2: PNode; - -begin - Task('Dynamic2'); - read(p1); - var n := 0; - while p1 <> nil do - begin - write(p1^.Data); - n += 1; - p2 := p1; { сохраняем адрес текущего элемента } - p1 := p1^.Next; { и переходим к следующему элементу } - end; - write(n, p2); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/File48.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/File48.pas deleted file mode 100644 index b6c906d29..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/File48.pas +++ /dev/null @@ -1,24 +0,0 @@ -// Пример решения задачи File48 из электронного задачника Programming Taskbook -uses PT4; -var - f: array [1..4] of file of integer; -begin - Task('File48'); - for var i:=1 to 4 do - begin - var s: string; - read(s); - Assign(f[i], s); - if i < 4 then Reset(f[i]) - else Rewrite(f[i]); - end; - while not Eof(f[1]) do - for var i:=1 to 3 do - begin - var a: integer; - read(f[i],a); - write(f[4],a); - end; - for var i := 1 to 4 do - Close(f[i]); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pas deleted file mode 100644 index b8647c5bc..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pas +++ /dev/null @@ -1,312 +0,0 @@ -unit PT4Demo; - -interface - -implementation - -uses PT4TaskMaker; - -procedure Demo3; -var - a, b: real; -begin - StartTask('Ввод и вывод данных, оператор присваивания'); - TaskText('Даны стороны прямоугольника~{a} и~{b}.', 0, 2); - TaskText('Найти его площадь {S}~=~{a}\*{b} и периметр {P}~=~2\*({a}\;+\;{b}).', 0, 4); - a := (1 + Random(100)) / 10; - b := (1 + Random(100)) / 10; - DataR('a = ', a, xLeft, 3, 4); - DataR('b = ', b, xRight, 3, 4); - ResultR('S = ', a * b, 0, 2, 4); - ResultR('P = ', 2 * (a + b), 0, 4, 4); - SetNumberOfTests(3); -end; - -procedure Demo4; -var - m, n, i, j, k: integer; - a: array [1..5, 1..8] of real; -begin - StartTask('Двумерные массивы (матрицы): вывод элементов'); - TaskText('Дана матрица размера~{M}\;\x\;{N} и\ целое число~{K} (1~\l~{K}~\l~{M}).', 0, 2); - TaskText('Вывести элементы {K}-й строки данной матрицы.', 0, 4); - m := 2 + Random(4); - n := 4 + Random(5); - k := 1; - if m = 5 then k := 0; - DataN('M = ', m, 3, 1, 1); - DataN('N = ', n, 10, 1, 1); - for i := 1 to M do - for j := 1 to N do - begin - a[i, j] := 9.98 * Random; - DataR('', a[i,j], Center(j, n, 4, 2), i + k, 4); - end; - k := 1 + Random(m); - dataN('K = ', k, 68, 5, 1); - for j := 1 to n do - ResultR('', a[k, j], Center(j, n, 4, 2), 3, 4); - SetNumberOfTests(5); -end; - -procedure Demo5; -var s: string; -begin - StartTask('Символы и строки: основные операции'); - TaskText('Дана строка~{S}.', 0, 2); - TaskText('Вывести ее первый и последний символ.', 0, 4); - s := SampleWord(Random(SampleWordCount)); - DataS('S = ', s, 0, 3); - ResultC('Первый символ: ', s[1], xLeft, 3); - ResultC('Последний символ: ', s[length(s)], xRight, 3); - SetNumberOfTests(4); -end; - -function FileName(Len: integer): string; -const - c = '0123456789abcdefghijklmnopqrstuvwxyz'; -var - i: integer; -begin - result := ''; - for i := 1 to len do - result := result + c[Random(Length(c))+1]; -end; - -procedure Demo6; -var - k, i, j, jmax: integer; - s1, s2, s3: string; - fs1: file of shortstring; - fs2: file of shortstring; - fc3: file of char; - s: shortstring; - c: char; -begin - StartTask('Символьные и строковые файлы'); - TaskText('Дано целое число~{K} (>\,0) и строковый файл.', 0, 1); - TaskText('Создать два новых файла: строковый, содержащий первые {K}~символов', 0, 2); - TaskText('каждой строки исходного файла, и символьный, содержащий {K}-й символ', 0, 3); - TaskText('каждой строки (если длина строки меньше~{K}, то в строковый файл', 0, 4); - TaskText('записывается вся строка, а в символьный файл записывается пробел).', 0, 5); - s1 := '1' + FileName(5) + '.tst'; - s2 := '2' + FileName(5) + '.tst'; - s3 := '3' + FileName(5) + '.tst'; - Assign(fs1, s1); - Rewrite(fs1); - Assign(fs2, s2); - Rewrite(fs2); - Assign(fc3, s3); - Rewrite(fc3); - k := 2 + Random(10); - jmax := 0; - for i := 1 to 10 + Random(20) do - begin - j := 2 + Random(15); - if jmax < j then - jmax := j; - s := FileName(j); - write(fs1, s); - if j >= k then - c := s[k] - else - c := ' '; - write(fc3, c); - s := copy(s, 1, k); - write(fs2,s); - end; - Close(fs1); - Close(fs2); - Close(fc3); - DataN('K =', k, 0, 1, 2); - DataS('Имя исходного файла: ', s1, 3, 2); - DataS('Имя результирующего строкового файла: ', s2, 3, 4); - DataS('Имя результирующего символьного файла: ', s3, 3, 5); - DataComment('Содержимое исходного файла:', xRight, 2); - DataFileS(s1, 3, jmax + 3); - ResultComment('Содержимое результирующего строкового файла:', 0, 2); - ResultComment('Содержимое результирующего символьного файла:', 0, 4); - ResultFileS(s2, 3, k + 3); - ResultFileC(s3, 5, 4); -end; - -procedure Demo7; -var - i, n: integer; - s: TSampleLines; - s1, s2: string; - t1, t2: text; -begin - StartTask('Текстовые файлы: основные операции'); - TaskText('Дан текстовый файл.', 0, 2); - TaskText('Удалить из него все пустые строки.', 0, 4); - s1 := FileName(6) + '.tst'; - s2 := '#' + FileName(6) + '.tst'; - SampleText(Random(SampleTextCount), n, S); - Assign(t2, s2); - Rewrite(t2); - Assign(t1, s1); - Rewrite(t1); - for i := 0 to n - 1 do - begin - writeln(t2, s[i]); - if s[i] <> '' then - writeln(t1, s[i]); - end; - Close(t1); - Close(t2); - ResultFileT(s1, 1, 5); - Rename(t2, s1); - DataFileT(s1, 2, 5); - DataS('Имя файла: ', s1, 0, 1); - SetNumberOfTests(3); -end; - -var WrongNode: TNode; - -procedure Demo8; -var - i, n: integer; - p, p1, p2: PNode; -begin - StartTask('Динамические структуры данных: двусвязный список'); - TaskText('Дан указатель~{P}_1 на начало непустой цепочки элементов-записей типа TNode,', 0, 1); - TaskText('связанных между собой с помощью поля Next. Используя поле Prev записи TNode,', 0, 2); - TaskText('преобразовать исходную (\Iодносвязную\i) цепочку в \Iдвусвязную\i, в которой каждый', 0, 3); - TaskText('элемент связан не только с последующим элементом (с помощью поля Next),', 0, 4); - TaskText('но и с предыдущим (с помощью поля Prev). Поле Prev первого элемента положить', 0, 5); - TaskText('равным~\N. Вывести указатель на последний элемент преобразованной цепочки.', 0, 0); - if Random(4) = 0 then - n := 1 - else - n := 2 + Random(8); - new(p1); - p1^.Data := Random(90) + 10; - p1^.Prev := nil; - p2 := p1; - for i := 2 to n do - begin - new(p); - p^.Data := Random(90) + 10; - p^.Prev := p2; - p2^.Next := p; - p2 := p; - end; - p2^.Next := nil; - SetPointer(1, p1); - SetPointer(2, p2); - ResultP('Адрес последнего элемента: ', 2, 0, 2); - ResultList(1, 0, 3); - ShowPointer(2); - DataP('', 1, 0, 2); - p := p1; - for i := 1 to n do - begin - p^.prev := @WrongNode; - p := p^.Next; - end; - DataList(1, 0, 3); - ShowPointer(1); -end; - -procedure Demo9; -var - i, n: integer; - p, p1, p2: PNode; -begin - StartTask('Динамические структуры данных: двусвязный список'); - TaskText('Дана ссылка~{A}_1 на начало непустой цепочки элементов-объектов типа Node,', 0, 1); - TaskText('связанных между собой с помощью своих свойств Next. Используя свойства Prev', 0, 2); - TaskText('данных объектов, преобразовать исходную (\Iодносвязную\i) цепочку в \Iдвусвязную\i,', 0, 3); - TaskText('в которой каждый элемент связан не только с последующим элементом (с помощью', 0, 4); - TaskText('свойства Next), но и с предыдущим (с помощью свойства Prev). Свойство Prev', 0, 5); - TaskText('первого элемента положить равным~\O. Вывести ссылку~{A}_2 на последний', 0, 0); - TaskText('элемент преобразованной цепочки.', 0, 0); - SetObjectStyle; - if Random(4) = 0 then - n := 1 - else - n := 2 + Random(8); - new(p1); - p1^.Data := Random(90) + 10; - p1^.Prev := nil; - p2 := p1; - for i := 2 to n do - begin - new(p); - p^.Data := Random(90) + 10; - p^.Prev := p2; - p2^.Next := p; - p2 := p; - end; - p2^.Next := nil; - SetPointer(1, p1); - SetPointer(2, p2); - ResultP('Последний элемент: ', 2, 0, 2); - ResultList(1, 0, 3); - ShowPointer(2); - DataP('', 1, 0, 2); - p := p1; - for i := 1 to n do - begin - p^.prev := @WrongNode; - p := p^.Next; - end; - DataList(1, 0, 3); - ShowPointer(1); - SetNumberOfTests(6); -end; - -var i: integer := 0; - -procedure InitTask(num: integer); -begin - i += 1; - writeln(i); - case num of - 1..2: UseTask('Begin', num); - 3: Demo3; - 4: Demo4; - 5: Demo5; - 6: Demo6; - 7: Demo7; - 8: Demo8; - 9: Demo9; - end; -end; - -begin - AddGroup('Demo', 'Примеры различных задач', 'М. Э. Абрамян, 2008', - 'qwqfsdf13dfttd', 9, InitTask); - - AddCommentText('Демонстрируются различные возможности'); - AddCommentText('конструктора учебных заданий \MPT4TaskMaker\m.'); - - SubgroupComment('Ввод и вывод данных, оператор присваивания'); - AddCommentText('В данной подгруппе два первых задания \Iимпортированы\i'); - AddCommentText('из группы \SBegin\s. '); - AddCommentText('\PПриводимый ниже абзац преамбулы также импортирован из группы \SBegin\s.\P'); - UseCommentText('Begin'); - - SubgroupComment('Двумерные массивы (матрицы): вывод элементов'); - AddCommentText('Данное задание дублирует задание Matrix7.'); - - SubgroupComment('Символьные и строковые файлы'); - AddCommentText('Данное задание дублирует задание File63. Оно демонстрирует'); - AddCommentText('особенности, связанные с двоичными \Iстроковыми\i файлами.'); - AddCommentText('При реализации задания используется вспомогательная функция \MFileName\m.'); - - SubgroupComment('Текстовые файлы: основные операции'); - AddCommentText('Данное задание дублирует задание Text16.'); - - SubgroupComment('Динамические структуры данных: двусвязный список'); - AddCommentText('Первое задание дублирует задание Dynamic30.'); - AddCommentText('\PВторое задание дублирует задание ObjDyn30. Его реализация совпадает, по существу, '); - AddCommentText('с реализацией предыдущего задания. Отличия проявляются лишь в стиле формулировки:'); - AddCommentText('во втором задании использован \<объектный\> стиль, характерный для среды .NET.'); - - RegisterGroup; - - CloseGroup; -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pcu b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pcu deleted file mode 100644 index 554b616f6..000000000 Binary files a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pcu and /dev/null differ diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4DemoTest.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4DemoTest.pas deleted file mode 100644 index 9736d7ae3..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4DemoTest.pas +++ /dev/null @@ -1,7 +0,0 @@ -uses PT4, PT4Demo; -begin -// для отображения окна задачника -// надо закомментировать вызов процедуры MakeText - MakeText('Demo'); - Task('Demo7?'); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Tasks.html b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Tasks.html deleted file mode 100644 index b2c858958..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Tasks.html +++ /dev/null @@ -1,53 +0,0 @@ - - -Programming Taskbook 4.7 - - -

-

: . . , 2008

-

PT4TaskMaker.

-

  ,

-

Begin.

Begin.

.

-

Demo1.  a.  P = 4·a.

-

Demo2.  a.  S = a2.

-

Demo3.  a  b. S = a·b P = 2·(a + b).

-

():

-

Matrix7.

-

Demo4.  M ´ N  K (1 £ K £ M). K- .

-

 :

-

Demo5.  S. .

-

 

-

File63. , . FileName.

-

Demo6.  K (> 0) . : , K  , , K- (  K, , ).

-

:

-

Text16.

-

Demo7. . .

-

:

-

Dynamic30.

ObjDyn30. , , . : «» , .NET.

-

Demo8.  P1 - TNode, Next. Prev TNode, () , ( Next), ( Prev). Prev  nil. .

-

Demo9.  A1 - Node, Next. Prev , () , ( Next), ( Prev). Prev  null.  A2 .

-
-
: 15.10.2008.
- diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/results.abc b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/results.abc deleted file mode 100644 index 75a45940f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/results.abc +++ /dev/null @@ -1 +0,0 @@ -N祭|10PABC1 NC:\PROGRA~1\PASCAL~1.NET\PT4 NV8#"%'%&&*&$#"%'%&&*&:R4='%&&*&$#"%'%>7<7:7:<8==>C><6257566:643257566:6 \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/String9.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/String9.pas deleted file mode 100644 index 44715e324..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/String9.pas +++ /dev/null @@ -1,15 +0,0 @@ -// Пример решения задачи String9 из электронного задачника Programming Taskbook -uses PT4; -var - n: integer; - c1,c2: char; - s: string; -begin - Task('String9'); - read(n,c1,c2); - s := ''; - for var i := 1 to n div 2 do - s := s + c1 + c2; - write(s); -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RBcc17.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RBcc17.pas deleted file mode 100644 index 59285e1a8..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RBcc17.pas +++ /dev/null @@ -1,23 +0,0 @@ -// Выполнение задания cc17 для Робота -uses Robot; - -begin - Task('cc17'); - for var i:=6 downto 1 do - begin - for var j:=1 to i do - begin - for var k:=1 to j do - begin - Paint; - Up; - end; - for var k:=1 to j do - Down; - Right; - end; - Right; - end; - Left; -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RobotMakeTask/RBMy1.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RobotMakeTask/RBMy1.pas deleted file mode 100644 index 79d0ecc1a..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RobotMakeTask/RBMy1.pas +++ /dev/null @@ -1,5 +0,0 @@ -uses Robot,RobotAddTasks; - -begin - Task('my1'); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RobotMakeTask/RobotAddTasks.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RobotMakeTask/RobotAddTasks.pas deleted file mode 100644 index 6bf966b38..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RobotMakeTask/RobotAddTasks.pas +++ /dev/null @@ -1,18 +0,0 @@ -unit RobotAddTasks; - -uses Robot,RobotTaskMaker; - -procedure my1; -begin - TaskText('Задание my1. Закрасить помеченные клетки'); - Field(15,11); - RobotBeginEnd(1,1,15,11); - Tag(8,6); - HorizontalWall(3,5,5); - HorizontalWall(3,6,5); - VerticalWall(8,5,1); -end; - -begin - RegisterTask('my1',my1); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/random_Robot.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/random_Robot.pas deleted file mode 100644 index 4ab24f209..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/random_Robot.pas +++ /dev/null @@ -1,17 +0,0 @@ - // Демонстрация использования случайных чисел для Робота. Случайное блуждание -uses Robot; - -begin - Field(50,40); - while True do - begin - var r := Random(4); - case r of - 0: if FreeFromUp then Up; - 1: if FreeFromDown then Down; - 2: if FreeFromLeft then Left; - 3: if FreeFromRight then Right; - end; - Paint; - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Boxing.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Boxing.pas deleted file mode 100644 index 8f7eec850..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Boxing.pas +++ /dev/null @@ -1,22 +0,0 @@ -// Упаковка-распаковка размерных типов -var - i: integer := 2; - r: real := 3.14; - o: object; - -begin - o := i; // Упаковка: объект размерного типа integer упаковывается в объект ссылочного типа, - // котрый и присваивается переменной o - // Преобразование типов при упаковке - неявное - writeln(integer(o)); // Распаковка: из упакованного объекта извлекается значение - // Преобразование типов при распаковке - явное - o := r; - writeln(real(o)); - - try // При неверном преобразовании типов генерируется исключение InvalidCastException - writeln(shortint(o)); - except - on e: Exception do - writeln(e.GetType); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ClassConstructor.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ClassConstructor.pas deleted file mode 100644 index c9f9d8d3c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ClassConstructor.pas +++ /dev/null @@ -1,36 +0,0 @@ -// Иллюстрация использования статических (классовых) конструкторов -type - Person = class - private - class arr: array of Person; // Классовое поле. Связано не с переменной класса, а с классом. - name: string; - age: integer; - public - class constructor; // Конструктор класса. Вызывается до создания первого объекта класса и до вызова любого классового метода - begin - writeln(' Вызван классовый конструктор'); - SetLength(arr,3); - arr[0] := new Person('Иванов',20); - arr[1] := new Person('Петрова',19); - arr[2] := new Person('Попов',35); - end; - constructor (n: string; a: integer); - begin - name := n; - age := a; - end; - function ToString: string; override; - begin - Result := Format('Имя: {0} Возраст: {1}',name,age); - end; - class function RandomPerson: Person; // Классовый метод. Может обращаться только к классовым полям - begin - Result := arr[Random(3)]; - end; - end; - -begin - writeln('Случайные персоны'); - for var i:=1 to 5 do - writeln(Person.RandomPerson); // Вызов классового метода -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/DllTest/MyDll.dll b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/DllTest/MyDll.dll deleted file mode 100644 index 9a9c8f827..000000000 Binary files a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/DllTest/MyDll.dll and /dev/null differ diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/DllTest/MyDll.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/DllTest/MyDll.pas deleted file mode 100644 index 8d5974158..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/DllTest/MyDll.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Dll-библиотека -library MyDll; - -const n = 10; - -function add(a,b: integer): integer; -begin - Result := a + b; -end; - -procedure PrintPascalABCNET; -begin - writeln('PascalABC.NET'); -end; - -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/DllTest/main.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/DllTest/main.pas deleted file mode 100644 index 39a4f7e00..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/DllTest/main.pas +++ /dev/null @@ -1,10 +0,0 @@ -// Это - главная программа -// Именами из dll-библиотеки, написанной на PascalABC.NET, можно пользоваться, -// не подключая пространства имен -#reference 'mydll.dll' - -begin - PrintPascalABCNET; - writeln(n); - writeln(add(2,3)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachExamples.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachExamples.pas deleted file mode 100644 index a227823f6..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachExamples.pas +++ /dev/null @@ -1,44 +0,0 @@ -// Пример иллюстрирует всевозможные типы контейнеров, -// по которым можно перемещаться с помощью оператора foreach - -uses System.Collections.Generic; - -const n = 10; - -var - x: integer; - a: array [1..n] of integer; - b: array of integer; - s: set of integer; - l: List; - -begin - for var i:=1 to n do - a[i] := Random(100); - // Цикл foreach по статическому массиву - foreach x in a do - write(x,' '); - writeln; - - SetLength(b,n); - for var i:=0 to n-1 do - b[i] := Random(100); - - // Цикл foreach по динамическому массиву - foreach x in b do - write(x,' '); - writeln; - - s := [2..5,10..14]; - foreach x in s do - write(x,' '); - writeln; - - l := new List; - l.AddRange(b); - l.Reverse; - foreach x in l do - write(x,' '); - writeln; - -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachForSet.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachForSet.pas deleted file mode 100644 index 5044ff296..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachForSet.pas +++ /dev/null @@ -1,5 +0,0 @@ -// Цикл по множеству. Порядок - не по алфавиту, поскольку множества реализованы на базе хеш-таблиц -begin - foreach c: char in ['a'..'z'] do - Write(c); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachIEnumerable.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachIEnumerable.pas deleted file mode 100644 index b30140fa1..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachIEnumerable.pas +++ /dev/null @@ -1,51 +0,0 @@ -// Пример иллюстрирует реализацию классом интерфейса IEnumerable -// для использования его в операторе foreach -uses System.Collections; - -type - // Генератор чисел Фибоначчи - FibGen = class(IEnumerable, IEnumerator) - private - a,b,n,i: integer; - public - constructor Create(n: integer); - begin - i := -1; - a := 0; - b := 1; - Self.n := n; - end; - function Get_Current: Object; - begin - if i=0 then - Result := 1 - else Result := b; - end; - function GetEnumerator: IEnumerator; - begin - Result := Self; - end; - function MoveNext: boolean; - begin - i += 1; - Result := i = class - private - a: array of T; - last: integer; - public - constructor Create(sz: integer); - begin - SetLength(a,sz); - last := 0; - end; - constructor Create; - begin - Create(100); - end; - procedure push(i: T); - begin - a[last] := i; - Inc(last); - end; - function pop: T; - begin - Dec(last); - pop := a[last]; - end; - function top: T; - begin - top := a[last-1]; - end; - function empty: boolean; - begin - Result := (last=0); - end; - function ToString: string; override; - begin - Result := ''; - for var i:=0 to last-1 do - Result += a[i]+' '; - end; - end; - -var s: Stack; - -begin - s := new Stack; - s.push(7); - s.push(2); - s.push(5); - s.push(4); - writeln(s); - while not s.empty do - write(s.pop,' '); -end. - - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericProcFun/FindT.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericProcFun/FindT.pas deleted file mode 100644 index 09eea2c38..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericProcFun/FindT.pas +++ /dev/null @@ -1,21 +0,0 @@ -// Обобщенные функции -// Выведение типа T по типам параметров - -function IndexOf(a: array of T; val: T): integer; -begin - Result := -1; - for var i:=0 to a.Length-1 do - if a[i]=val then - begin - Result := i; - exit; - end; -end; - -var a: array of string := ('Ваня', 'Коля', 'Саша', 'Сережа'); - -begin - var s := 'Сережа'; - writelnFormat('Индекс элемент со значением ''{0}'' равен {1}',s,IndexOf(a,s)); -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericProcFun/SwapT.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericProcFun/SwapT.pas deleted file mode 100644 index f8b0bcae9..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericProcFun/SwapT.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Обобщенные функции -// Выведение типа T по типам параметров - -procedure Swap(var a,b: T); -begin - var v := a; - a := b; - b := v; -end; - -begin - var a := 2; - var b := 3; - writelnFormat('До Swap a={0}, b={1}',a,b); - Swap(a,b); - writelnFormat('После Swap a={0}, b={1}',a,b); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/IndexProperties.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/IndexProperties.pas deleted file mode 100644 index 7b35e9e54..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/IndexProperties.pas +++ /dev/null @@ -1,76 +0,0 @@ -// Индексные свойства. Массив цветных квадратов -uses GraphABC; - -const - sz = 50; - dim = 10; - delay = 500; - -type - /// - VisualArray = class - private - a: array of Color; - procedure SetItem(i: integer; x: Color); // Процедура, устанавливающая цвет i-того квадрата - begin - if (i<0) or (i>=a.Length) then - raise new System.ArgumentException('Выход за границы изменения индекса: '+IntToStr(i)); - a[i] := x; - Draw(i); - end; - function GetItem(i: integer): Color; // Функция, возвращающая цвет i-того квадрата - begin - if (i<0) or (i>=a.Length) then - raise new System.ArgumentException('Выход за границы изменения индекса: '+IntToStr(i)); - Result := a[i]; - end; - public - constructor (n: integer); - begin - SetLength(a,n); - for var i:=0 to n-1 do - a[i] := clWhite; - Draw; - end; - /// Рисует i-тый квадрат - procedure Draw(i: integer); - begin - Brush.Color := a[i]; - Rectangle(sz+sz*i,sz,sz+sz*(i+1)+1,sz+sz); - end; - /// Рисует массив цветных квадратов - procedure Draw; - begin - for var i:=0 to a.Length-1 do - Draw(i); - end; - /// Индексное свойство по умолчанию - property Item[i: integer]: Color read GetItem write SetItem; default; - end; - -var arr: VisualArray; - -begin - Window.Title := 'Иллюстрация индексных свойств'; - arr := new VisualArray(dim); - SetWindowSize(sz*(dim+2),3*sz); - arr[0] := clGreen; // arr.Items[0] = arr[0] поскольку свойство Items является свойством по умолчанию - Sleep(delay); - arr[1] := clBlack; - Sleep(delay); - arr[2] := clYellow; - Sleep(delay); - arr[3] := clGray; - Sleep(delay); - arr[4] := clRed; - Sleep(delay); - arr[5] := clMagenta; - Sleep(delay); - arr[6] := clBrown; - Sleep(delay); - arr[7] := clMoneyGreen; - Sleep(delay); - arr[8] := clOlive; - Sleep(delay); - arr[9] := clLinen; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ParamsConcat.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ParamsConcat.pas deleted file mode 100644 index 6f66ceed6..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ParamsConcat.pas +++ /dev/null @@ -1,13 +0,0 @@ -// Создание функции Concat с переменным числом параметров - -function Concat(params strs: array of string): string; -begin - var sb := new System.Text.StringBuilder; - foreach x: string in strs do - sb.Append(x); - Result := sb.ToString; -end; - -begin - Writeln(Concat('Pascal','ABC','.NET')); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ParamsWriteln.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ParamsWriteln.pas deleted file mode 100644 index e31fc4699..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ParamsWriteln.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Создание процедуры MyWriteln с переменным числом параметров - -procedure MyWriteln(params args: array of object); -begin - foreach x: Object in args do - System.Console.Write(x); - System.Console.WriteLine; -end; - -var - a: integer := 777; - b: boolean := True; - r: real := 3.1415; - -begin - MyWriteln(a,' ',b,' ',r); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ProcParam.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ProcParam.pas deleted file mode 100644 index 5a77aa708..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ProcParam.pas +++ /dev/null @@ -1,27 +0,0 @@ -// Иллюстрация процедурных переменных как параметров подпрограмм -// Для процедурного типа в PascalABC.NET реализована структурная эквивалентность типов -// Процедурный тип реализован через делегаты .NET -procedure for_each(var a: array of real; p: procedure(var r: real)); -var i: integer; -begin - for i := 0 to a.Length-1 do - p(a[i]); -end; - -procedure mult2(var r: real); -begin - r := 2*r -end; - -procedure print(var r: real); -begin - write(r,' '); -end; - -var a: array of real := (1,2,3,6,7); - -begin - for_each(a,print); writeln; - for_each(a,mult2); - for_each(a,print); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ProcVars.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ProcVars.pas deleted file mode 100644 index 6a4e88dd5..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ProcVars.pas +++ /dev/null @@ -1,36 +0,0 @@ -// Все возможные способы инициализации поцедурной переменной -// Процедурный тип реализован через делегаты .NET, для него доступны операции +=, -= - -procedure pp; -begin - writeln('Вызов обычной процедуры'); -end; - -type - A = class - private - x: integer; - public - constructor Create(xx: integer); - begin - x := xx; - end; - procedure pp; - begin - writeln('Вызов метода класса, значение поля равно ',x); - end; - class procedure ppstatic; - begin - writeln('Вызов классового метода класса'); - end; - end; - -var p: procedure; - -begin - p := pp; - var a1: A := new A(5); - p += a1.pp; - p += A.ppstatic; - p; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Students.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Students.pas deleted file mode 100644 index 1bb0dc994..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Students.pas +++ /dev/null @@ -1,39 +0,0 @@ -//Перегрузка операторов -type - Student = class - Name: string; - Height: integer; - public - constructor(Name: string; Height: integer); - begin - Self.Name := Name; - Self.Height := Height; - end; - class function operator<(left,right: Student): boolean; - // Сравнение по росту - begin - Result := left.Height < right.Height; - end; - class function operator>(left,right: Student): boolean; - begin - Result := left.Height > right.Height; - end; - function ToString: string; override; - begin - Result := string.Format('{0} ({1})', Name, Height); - end; - end; - -var - s1,s2: Student; - -begin - s1 := new Student('Stepa Morkovkin',188); - s2 := new Student('Petya Pomidorov',180); - Writeln('s1: ',s1); - Writeln('s2: ',s2); - Writeln; - Writeln('s1(s1,s2): ',Student.operator>(s1,s2)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/TemplatePair.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/TemplatePair.pas deleted file mode 100644 index 34728301e..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/TemplatePair.pas +++ /dev/null @@ -1,39 +0,0 @@ -// Иллюстрация шаблонов классов в стиле C++ (template) -type - /// Пара объектов - Pair = template class - public - First: T; - Second: Q; - constructor (First: T; Second: Q); - begin - Self.First := First; - Self.Second := Second; - end; - function ToString: string; override; - begin - Result := Format('({0}; {1})', First, Second); - end; - end; - - /// Пара объектов, каждый из которых можно складывать с объектом того же типа - PairForPlus = template class(Pair) - public - class function operator+(Left,Right: PairForPlus): PairForPlus; - end; - -class function PairForPlus.operator+(Left,Right: PairForPlus): PairForPlus; -begin - Result := new PairForPlus(Left.First + Right.First, Left.Second + Right.Second); -end; - -var - r: Pair := new Pair(3.14,2.8); - a,b: PairForPlus; - -begin - a := new PairForPlus(1, 'один+'); - b := new PairForPlus(2, 'два'); - Writeln(r); - Writeln(a + b); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/WriteRecord.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/WriteRecord.pas deleted file mode 100644 index d35db749a..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/WriteRecord.pas +++ /dev/null @@ -1,26 +0,0 @@ -// Иллюстрация конструкторов и методов в записях -// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln -type - SexType = (Male, Female); - Person = record - Name: string; - Age, Weight: integer; - Sex: SexType; - constructor (Name: string; Age, Weight: integer; Sex: SexType); - begin - Self.Name := Name; - Self.Age := Age; - Self.Sex := Sex; - Self.Weight := Weight; - end; - function ToString: string; override; - begin - Result := string.Format('Имя: {0} Возраст: {1} Вес: {2} Пол: {3}', Name, Age, Weight, Sex); - end; - end; - -var p: Person := new Person('Иванов',20,70,SexType.Male); - -begin - writeln(p); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Array/SystemArray1.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Array/SystemArray1.pas deleted file mode 100644 index 2bce6941d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Array/SystemArray1.pas +++ /dev/null @@ -1,37 +0,0 @@ -Uses System, PABCSystem; - -const Size = 10; - -procedure PrintArray(a: array of T); -begin - foreach v: T in a do - Write(v, ' '); - Writeln; -end; - -var a: array of integer; - -begin - SetLength(a, Size); - // Заполнение массива - for var i:=0 to a.Length-1 do - a[i] := Random(100); - - // Вывод всех элементов массива - PrintArray(a); - - // Сортировка массива (знак & используется для того, - // чтобы воспользоваться ключевым словом array при обозначении класса Array) - &Array.Sort(a); - - PrintArray(a); - - // Обращение массива - &Array.Reverse(a); - - PrintArray(a); - - // Поиск вхождения элемента в массив - var i := &Array.IndexOf(a, 99); - Writeln(i); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTime1.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTime1.pas deleted file mode 100644 index 9832b1c44..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTime1.pas +++ /dev/null @@ -1,32 +0,0 @@ -Uses System; - -var - d1, d2, d3: DateTime; // Объекты для хранения даты и времени - ts: TimeSpan; // Объект для хранения промежутков времени - -begin - // Получение текущей даты - вызов статического метода - d1 := DateTime.Now; - Writeln(d1); - - // Дата и время через один месяц - d2 := d1.AddMonths(1); - Writeln(d2); - - // Дата и время на 12 часов раньше - d2 := d1.AddHours(-12); - Writeln(d2); - - // Формирование даты - вызов конструктора объекта (год, месяц,число) - d3 := new DateTime(2001, 1, 1); - Writeln(d3); - - // Определение времени, прошедшего с начала тысячелетия (разность дат) - ts := d1.Subtract(d3); - - // Промежуток времени в днях (результат - вещественное число) - Writeln(ts.TotalDays); - - // Промежуток времени в днях, часах, минутах и секундах - WritelnFormat('{0} {1}:{2}:{3}',ts.Days,ts.Hours,ts.Minutes,ts.Seconds); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTime2.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTime2.pas deleted file mode 100644 index f444870fc..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTime2.pas +++ /dev/null @@ -1,34 +0,0 @@ -Uses System; - -var - d: DateTime; - s: string; - -begin - s := '27.03.2008 9:58:17'; - //Попытка преобразования строки в объект DateTime - if not DateTime.TryParse(s, d) then - begin - Writeln('Строка не содержит значение даты и времени'); - Exit; - end; - - // Проверка високосности заданного года с помощью статического метода - if DateTime.IsLeapYear(d.Year) then - Writeln('Год високосный') - else - Writeln('Год невисокосный'); - - // Преобразование даты и времени в строковое представление - s := d.ToString; - Writeln(s); - - // Преобразование даты в строковое представление - s := d.ToShortDateString; - Writeln(s); - - // Преобразование времени в строковое представление - s := d.ToShortTimeString; - Writeln(s); - -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTimeInterval.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTimeInterval.pas deleted file mode 100644 index b7afdf928..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTimeInterval.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Работа с классом System.DateTime -// Вычисление времени выполнения фрагмента кода - -uses System, PABCSystem; - -var dt: DateTime := DateTime.Now; - -begin - // Делаем случайную паузу - var ms := Random(1000); - Writeln('Sleep','(',ms,')'); - Sleep(ms); - - // Сравниваем с показаниями DateTime.Now - Writeln((DateTime.Now-dt).TotalMilliseconds,'ms'); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringConvert.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringConvert.pas deleted file mode 100644 index fe2a5b8a6..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringConvert.pas +++ /dev/null @@ -1,25 +0,0 @@ -var - s: string; - i: integer; - r: real; - -begin - // Преобразование строки в число - s := '123,3443'; // Дробная часть отделяется запятой - настройки Windows - if not real.TryParse(s, r) then - Writeln('Строка s не является строковым представлением вещественного числа') - else Writeln(r); - - if not integer.TryParse(s, i) then - Writeln('Строка s не является строковым представлением целого числа'); - - // Преобразование числа в строку - i := 10; - s := i.ToString; - Writeln(s); - - s := ''; - for i:=1 to 9 do - s += i.ToString; - Writeln(s); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringMethods1.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringMethods1.pas deleted file mode 100644 index b0db02e3c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringMethods1.pas +++ /dev/null @@ -1,30 +0,0 @@ -var s1,s2: string; - -begin - // Определение длины строки - s1 := 'ABCDEFGH'; - Writeln(s1.Length); - - // Сравнение строк без учета регистра символов - s1 := 'AAA'; - s2 := 'aaa'; - if String.Compare(s1, s2, {ignoreCase - без учета регистра} true) = 0 then - Writeln('Строки совпадают с точностью до регистра букв'); - - // Определение вхождений подстрок - s1 := 'Long string'; - s2 := 'string'; - if s1.EndsWith(s2) then - Writeln('В конце строки s1 содержится подстрока, совпадающая с s2'); - - // Поиск индекса вхождения подстроки в строку - Writeln(s1.IndexOf(s2)); - - // Извлечение подстрок - s1 := 'ABCDEFGH'; - s2 := s1.Substring( {начальная_позиция = } 3); - Writeln(s2); - - s2 := s1.Substring(3, {длина_подстроки = } 2); - Writeln(s2); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringMethods2.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringMethods2.pas deleted file mode 100644 index 13cc3e57e..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringMethods2.pas +++ /dev/null @@ -1,37 +0,0 @@ -var s1,s2: string; - -begin - // Извлечение подстрок - s1 := 'ABCDEFGH'; - s2 := s1.Substring( {начальная_позиция = } 3); - Writeln(s2); - - s2 := s1.Substring(3, {длина_подстроки = } 2); - Writeln(s2); - - // Вставка, удаление и замена подстрок - s1 := 'ABCDEFGH'; - s2 := s1.Insert(2, 'xxx'); - Writeln(s2); - - s2 := s2.Replace('x', '!'); - Writeln(s2); - - s2 := s2.Remove(2, 3); - Writeln(s2); - - s1 := 'слово слово слово'; - s2 := s1.Replace('слов', 'молок'); - Writeln(s2); - - // Удаление пробельных символов в концах строки - s1 := ' xxx xxx '; - Writeln('|', s1, '|'); - s1 := s1.Trim; - Writeln('|', s1, '|'); - - // Смена регистра символов - s1 := 'абвгд'; - s1 := s1.ToUpper; - Writeln(s1); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringSplit.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringSplit.pas deleted file mode 100644 index 184c12c2e..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringSplit.pas +++ /dev/null @@ -1,26 +0,0 @@ -uses System; - -var - str_arr: array of string; - int_arr: array of integer; - s: string := '12 765 765 76'; - -begin - // Разбиение строки на массив подстрок с заданным разелителем - str_arr := s.Split(' '); - - // Соединение массива подстрок с новым разделителем - s := string.Join('+', str_arr); - Write(s, '='); - - // Формирование целочисленного массива по массиву подстрок - SetLength(int_arr, str_arr.Length); - for var i:=0 to int_arr.Length-1 do - integer.TryParse(str_arr[i], int_arr[i]); - - // Вычисление суммы элементов целочисленного массива - var sum := 0; - foreach v: integer in int_arr do - sum += v; - Writeln(sum); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Timers.Timer/SystemTimer.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Timers.Timer/SystemTimer.pas deleted file mode 100644 index 8223bd886..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Timers.Timer/SystemTimer.pas +++ /dev/null @@ -1,31 +0,0 @@ -//События, +=, -=, демонстрация работы таймера System.Timers.Timer -uses System; - -var Timer:System.Timers.Timer; - x:integer; - exit:boolean; - -procedure OnTimer2(sender:object; e:System.Timers.ElapsedEventArgs); -begin - Writeln(x); - x:=x+1; - exit:=x>=10; -end; -procedure OnTimer1(sender:object; e:System.Timers.ElapsedEventArgs); -begin - Writeln(e.SignalTime); - x:=x+1; - if x>=5 then begin - Timer.Elapsed-=OnTimer1; - Timer.Elapsed+=OnTimer2; - end; -end; - -begin - Exit:=false; - Timer:=System.Timers.Timer.Create(1000); - Timer.Elapsed+=OnTimer1; - Timer.Start; - while not exit do - Sleep(Round(Timer.Interval)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/FormWebBrowser.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/FormWebBrowser.pas deleted file mode 100644 index 840d6506d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/FormWebBrowser.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Иллюстрация использования компонента WebBrowser -{$apptype windows} -{$reference System.Windows.Forms.dll} - -uses - System.Windows.Forms, - System.Net; - -begin - var myForm := new Form; - var w := new WebBrowser; - w.Url := new System.Uri('http://pascalabc.net'); - w.Dock := Dockstyle.Fill; - myForm.Controls.Add(w); - myForm.WindowState := FormWindowState.Maximized; - Application.Run(myForm); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/MouseDraw.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/MouseDraw.pas deleted file mode 100644 index 139865687..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/MouseDraw.pas +++ /dev/null @@ -1,52 +0,0 @@ -// Рисование мышью на форме. Иллюстрация Windows.Forms, событий -{$apptype windows} -{$reference System.Windows.Forms.dll} -{$reference System.Drawing.dll} - -uses - System, - System.Drawing, - System.Windows.Forms; - -type - MyForm = class(Form) - private - g: Graphics; - // Предыдущие координаты мыши - x,y: integer; - public - constructor; - begin - Size := new System.Drawing.Size(640,480); - StartPosition := FormStartPosition.CenterScreen; - Text := 'Рисование мышью на форме'; - // Привязка обработчиков к событиям - MouseDown += OnMouseDown; - MouseMove += OnMouseMove; - Resize += OnResize; - g := Graphics.FromHwnd(Handle); - end; - procedure OnMouseDown(sender: object; e: MouseEventArgs); - begin - x := e.x; - y := e.y; - end; - procedure OnMouseMove(sender: object; e: MouseEventArgs); - begin - if e.Button = System.Windows.Forms.MouseButtons.Left then - begin - g.DrawLine(new Pen(Color.FromARGB(PABCSystem.Random(255),PABCSystem.Random(255),PABCSystem.Random(255))),x,y,e.x,e.y); - x := e.x; - y := e.y; - writeln(e.x,' ',e.y); - end; - end; - procedure OnResize(sender: object; e: EventArgs); - begin - g := Graphics.FromHwnd(Handle); - end; - end; - -begin - Application.Run(new MyForm); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/Open.png b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/Open.png deleted file mode 100644 index 6380ba958..000000000 Binary files a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/Open.png and /dev/null differ diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/Save.png b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/Save.png deleted file mode 100644 index 8262de3ae..000000000 Binary files a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/Save.png and /dev/null differ diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/TextEditor.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/TextEditor.pas deleted file mode 100644 index c544ac9d8..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/TextEditor.pas +++ /dev/null @@ -1,91 +0,0 @@ -{$apptype windows} -{$reference System.Windows.Forms.dll} -{$reference System.Drawing.dll} -{$resource Open.png} -{$resource Save.png} - -uses System.Windows.Forms; - -const - TextFileExt = 'txt'; - TextFileFilter = 'Текстовые файлы (*.'+TextFileExt+')|*.'+TextFileExt; - -var - myForm: Form; - TextBox1: TextBox; - -procedure SaveFile(FileName: string); -begin - //Создаем файловый поток с кодировкой Windows 1251, необходимо для корректного сохранения русских букв - var f := new System.IO.StreamWriter(FileName, false, System.Text.Encoding.Default); - f.Write(TextBox1.Text); - f.Close; -end; - -procedure OpenFile(FileName: string); -begin - //Создаем файловый поток с кодировкой Windows 1251, необходимо для корректного чтения русских букв - var f := new System.IO.StreamReader(FileName, System.Text.Encoding.Default); - TextBox1.Text := f.ReadToEnd; - f.Close; -end; - -procedure FormClose(sender: object; args: System.EventArgs); -begin - myForm.Close; -end; - -procedure MenuSaveClick(sender:object; args:System.EventArgs); -begin - //Диалог для выбора файла - var sd := new SaveFileDialog; - //Расширение поумолчанию - sd.DefaultExt := TextFileExt; - //Фильтр для диалга - sd.Filter := TextFileFilter; - if sd.ShowDialog=DialogResult.OK then - //если результат выполнения sd.ShowDialog это нажатие кнопки подтверждения то - SaveFile(sd.FileName); -end; - -procedure MenuOpenClick(sender:object; args:System.EventArgs); -begin - var sd := new OpenFileDialog; - sd.DefaultExt := TextFileExt; - sd.Filter := TextFileFilter; - if sd.ShowDialog = DialogResult.OK then - OpenFile(sd.FileName); -end; - -begin - myForm := new Form; - myForm.Text := 'Простой текстовый редактор'; - - TextBox1 := new TextBox; - TextBox1.Multiline := True; - TextBox1.Height := 100; - TextBox1.Dock := DockStyle.Fill; - //Полосы прокрутки - TextBox1.ScrollBars := ScrollBars.Both; - //Устанавливаем шрифт - TextBox1.Font := new System.Drawing.Font('Courier New',10); - - myForm.Controls.Add(TextBox1); - - //Создаем меню - var toolStrip1 := new ToolStrip; - toolStrip1.GripStyle := System.Windows.Forms.ToolStripGripStyle.Hidden; - var miFile := new ToolStripMenuItem('Файл'); - miFile.DropDownItems.Add(new ToolStripMenuItem('Открыть', new System.Drawing.Bitmap(GetResourceStream('Open.png')),MenuOpenClick)); - miFile.DropDownItems.Add(new ToolStripMenuItem('Сохранить как...',new System.Drawing.Bitmap(GetResourceStream('Save.png')),MenuSaveClick)); - miFile.DropDownItems.Add(new ToolStripMenuItem('Выход',nil,FormClose)); - toolStrip1.Items.Add(miFile); - myForm.Controls.Add(toolStrip1); - - //Посмотрим в аргументы командной строки - //Если их количество = 1, то открываем - if CommandLineArgs.Length = 1 then - OpenFile(CommandLineArgs[0]); - - Application.Run(myForm); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/Thumbs.db b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/Thumbs.db deleted file mode 100644 index 39ac489fd..000000000 Binary files a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/Thumbs.db and /dev/null differ diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/WinFormWithButton.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/WinFormWithButton.pas deleted file mode 100644 index a0f0c2c8c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/WinFormWithButton.pas +++ /dev/null @@ -1,29 +0,0 @@ -// Создание оконного приложения -{$apptype windows} -{$reference System.Windows.Forms.dll} - -uses - System, - System.Windows.Forms; - -var - myForm: Form; - myButton: Button; - -procedure MyButtonClick(sender: Object; e: EventArgs); -begin - myForm.Close; -end; - -begin - myForm := new Form; - myForm.Text := 'Оконное приложение'; - myButton := new Button; - myButton.Text := ' Закрыть окно '; - myButton.AutoSize := True; - myButton.Left := 90; - myButton.Top := 110; - myForm.Controls.Add(myButton); - myButton.Click += MyButtonClick; - Application.Run(myForm); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/CalculationsGlobalLocal/BlockVars.pas b/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/CalculationsGlobalLocal/BlockVars.pas deleted file mode 100644 index 4f8bcf2ab..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/CalculationsGlobalLocal/BlockVars.pas +++ /dev/null @@ -1,15 +0,0 @@ -// Сравнение скорости работы глобальных и внутриблочных переменных. -// См. также файл GlobalVars.pas -uses Utils; - -begin - var s := 0.0; - var i: real := 1; - while i<10000000 do - begin - s += 1/i; - i += 1; - end; - writeln(s); - writeln('Время расчета = ',Milliseconds/1000,' с'); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/CalculationsGlobalLocal/GlobalVars.pas b/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/CalculationsGlobalLocal/GlobalVars.pas deleted file mode 100644 index 6cd714a35..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/CalculationsGlobalLocal/GlobalVars.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Сравнение скорости работы глобальных и внутриблочных переменных. -// См. также файл BlockVars.pas -uses Utils; - -var - s: real := 0; - i: real := 1; - -begin - while i<10000000 do - begin - s += 1/i; - i += 1; - end; - writeln(s); - writeln('Время расчета = ',Milliseconds/1000,' с'); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/Milli.pas b/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/Milli.pas deleted file mode 100644 index 92f5c8d9f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/Milli.pas +++ /dev/null @@ -1,13 +0,0 @@ -// Демонстрация функции Milliseconds -uses Utils; - -const n = 5000; - -var a: array [1..n,1..n] of real; - -begin - for var i:=1 to n do - for var j:=1 to n do - a[i,j] := 1; - writeln(Milliseconds/1000); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/GraphTest.dll b/ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/GraphTest.dll deleted file mode 100644 index 7740869f9..000000000 Binary files a/ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/GraphTest.dll and /dev/null differ diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/Mand.pas b/ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/Mand.pas deleted file mode 100644 index 846547d33..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/Mand.pas +++ /dev/null @@ -1,50 +0,0 @@ -{ -Для создания dll: -1. Откомпилируйте проект \GraphTest\GraphTest.dpr с помощью Delphi -2. Запустите файл \GraphTest\copy_up.bat -} - -procedure SetWindowSize(width, height : integer); external 'GraphTest.dll' name 'SetWindowSize'; -procedure WaitForExit; external 'GraphTest.dll' name 'WaitForExit'; -procedure PutPixel(x,y,color : integer); external 'GraphTest.dll' name 'PutPixel'; -procedure SetColor(a : integer); external 'GraphTest.dll' name 'SetColor'; -function RGB(red, green, blue : integer) : integer; external 'GraphTest.dll' name 'RGB'; -{function RGB(r, g, b: integer): integer; -begin - Result := (r or (g shl 8) or (b shl 16)); -end;{} - -const - n=255; - max=10; - -var - x,y,x1,y1,cx,cy: real; - i,ix,iy: integer; - clRed:integer; -// z=z^2+c -begin - clRed:=RGB(255,0,0); - SetWindowSize(400,300); - for ix:=0 to 399 do - for iy:=0 to 299 do - begin - x:=0; - y:=0; - cx:=0.002*(ix-720); - cy:=0.002*(iy-150); - for i:=1 to n do - begin - x1:=x*x-y*y+cx; - y1:=2*x*y+cy; - if (x1>max) or (y1>max) then break; - x:=x1; - y:=y1; - end; - if i>=n then PutPixel(ix,iy,clRed) - else PutPixel(ix,iy,RGB(255,255-i,255-i)); - //writeln(RGB(255,255-i,255-i)); - end; - WaitForExit; -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/MessageBox.pas b/ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/MessageBox.pas deleted file mode 100644 index df7998740..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/MessageBox.pas +++ /dev/null @@ -1,6 +0,0 @@ -function MessageBox(h:integer;m,c:string;t:integer):integer; -external 'User32.dll' name 'MessageBox'; - -begin - MessageBox(0,'Привет!','Сообщение',0); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi1.bmp b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi1.bmp deleted file mode 100644 index 72ae1e4c9..000000000 Binary files a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi1.bmp and /dev/null differ diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi2.bmp b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi2.bmp deleted file mode 100644 index b6e9bae3b..000000000 Binary files a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi2.bmp and /dev/null differ diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi3.bmp b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi3.bmp deleted file mode 100644 index 83528854d..000000000 Binary files a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi3.bmp and /dev/null differ diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi4.bmp b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi4.bmp deleted file mode 100644 index e09763489..000000000 Binary files a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi4.bmp and /dev/null differ diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi5.bmp b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi5.bmp deleted file mode 100644 index 727d82170..000000000 Binary files a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi5.bmp and /dev/null differ diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/gr_SpriteCreation.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/gr_SpriteCreation.pas deleted file mode 100644 index efe2a13cd..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/gr_SpriteCreation.pas +++ /dev/null @@ -1,29 +0,0 @@ -// Создание спрайта и его состояний -uses GraphABC,ABCSprites,ABCObjects,Events; - -var s: SpriteABC; - -begin - Window.Title := 'Создание спрайта'; - SetWindowSize(400,300); - CenterWindow; - - // Создание спрайта и добавление в него кадров - s := new SpriteABC(150,100,'SpriteFrames\multi1.bmp'); - s.Add('SpriteFrames\multi2.bmp'); - s.Add('SpriteFrames\multi3.bmp'); - s.Add('SpriteFrames\multi2.bmp'); - s.Add('SpriteFrames\multi4.bmp'); - s.Add('SpriteFrames\multi5.bmp'); - - // Добавление состояний к спрайту - s.AddState('fly',4); // Летать - 4 кадра - s.AddState('stand',1); // Стоять - 1 кадр - s.AddState('sit',1); // Сидеть - 1 кадр - - // Задание скорости спрайт-анимации (1..10) - s.Speed := 9; - - // Сохранение спрайта в "длинный" рисунок и создание информационного файла спрайта - s.SaveWithInfo('spr.png'); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/gr_SpriteUsing.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/gr_SpriteUsing.pas deleted file mode 100644 index df48901ad..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/gr_SpriteUsing.pas +++ /dev/null @@ -1,27 +0,0 @@ -// Переключение состояний спрайта щелчком мыши -uses GraphABC,ABCSprites,ABCObjects,Events; - -var - s: SpriteABC; - t: TextABC; - -procedure MyMouseDown(x,y,mb: integer); -begin - if s.PtInside(x,y) then - begin - // Переход к следующему состоянию спрайта - if s.Statenil then - begin - sx := ob.Left - x; - sy := ob.Top - y; - end; -end; - -procedure MyMouseMove(x,y,mb: integer); -begin - if ob<>nil then - ob.Position := new Point(x+sx,y+sy); -end; - -procedure MyMouseUp(x,y,mb: integer); -begin - ob := nil; -end; - - -begin - Window.Title := 'Передвигайте мышью объекты'; - for var i:=1 to 10 do - begin - var p := new PictureABC(Random(Window.Width-100),Random(Window.Height-100),'demo.bmp'); - p.Transparent := True; - end; - OnMouseDown := MyMouseDown; - OnMouseMove := MyMouseMove; - OnMouseUp := MyMouseUp; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Intersect.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Intersect.pas deleted file mode 100644 index 243b5bb48..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Intersect.pas +++ /dev/null @@ -1,28 +0,0 @@ -// Иллюстрация метода Intersect для графических объектов -uses ABCObjects,GraphABC; - -var Destroyer: CircleABC; - -procedure CheckPulyaIntersects; -begin - for var i:=Objects.Count-1 downto 0 do - begin - if (Destroyer.Intersect(Objects[i])) and (Objects[i]<>Destroyer) then - Objects[i].Destroy; - end; -end; - -begin - Window.Title := 'Разрушитель: метод Intersect пересечения объектов'; - for var i:=1 to 500 do - new RectangleABC(Random(WindowWidth-200)+100,Random(WindowHeight-100),Random(200),Random(200),clRandom); - Destroyer := new CircleABC(10,WindowHeight div 2,100,clBlack); - Destroyer.FontColor := clYellow; - Destroyer.Text := 'Destroyer'; - - for var i:=1 to 900 do - begin - Destroyer.MoveOn(1,0); - CheckPulyaIntersects; - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Move_Param.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Move_Param.pas deleted file mode 100644 index 1b2c1f8c4..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Move_Param.pas +++ /dev/null @@ -1,70 +0,0 @@ -// Движение по траектории -uses ABCObjects,GraphABC; - -const -/// Шаг по параметру кривой - step = 0.03; -/// Задержка по времени, мс - delay = 10; - -type - PointR = record - x,y: real; - end; - -function Position(t: real): PointR; // астроида -begin - var si := sin(1.5 * t); - var co := cos(1.5 * t); - Result.x := si*si*si; - Result.y := co*co*co; -end; - -function Position1(t: real): PointR; // фигура Лиссажу -begin - Result.x := cos(4*t); - Result.y := cos(2.97221*t + 2*Pi/3); -end; - -function LogicalToScreen(p: PointR): Point; -begin - var ww := WindowWidth div 2; - var hh := WindowHeight div 2; - Result.x := round((ww - 50) * p.x + ww); - Result.y := round((hh - 50) * p.y + hh); -end; - -procedure InitScreen; -begin - SetBrushColor(clMoneyGreen); - Rectangle(10,10,WindowWidth-10,WindowHeight-10); - var p := LogicalToScreen(Position1(0)); - MoveTo(p.x,p.y); -end; - -begin - Window.IsFixedSize := True; - Window.Title := 'Движение по траектории'; - SetWindowSize(640,480); - CenterWindow; - - InitScreen; - var c := new CircleABC(200,200,25,clGreen); - var d := new StarABC(200,200,40,20,5,clYellow); - - var t: real := 0; - while True do - begin - c.Center := LogicalToScreen(Position1(t)); - d.Center := LogicalToScreen(Position(t)); - if t<20*Pi then - LineTo(c.Center.x,c.Center.y) - else - begin - t := 0; - InitScreen; - end; - t += step; - Sleep(delay); - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_MovingObjects.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_MovingObjects.pas deleted file mode 100644 index 9f1f6834d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_MovingObjects.pas +++ /dev/null @@ -1,51 +0,0 @@ -uses ABCObjects,GraphABC,Utils; - -const -/// Количество графических объектов - Count = 300; -/// Флаг ускорения анимации - AnimationIsFast = True; - -/// Возвращает случайный графический объект -function NewRandomABC: ObjectABC; -begin - case Random(3) of -0: Result := new CircleABC(Random(WindowWidth-30)+10,Random(WindowHeight-30)+10,Random(10)+5,clRandom); -1: Result := new RectangleABC(Random(WindowWidth-30)+10,Random(WindowHeight-30)+10,Random(20)+10,Random(20)+10,clRandom); -2: Result := new StarABC(Random(WindowWidth-30)+10,Random(WindowHeight-30)+10,Random(20)+10,Random(10)+5,Random(4)+4,clRandom); - end; -end; - -/// Передвигает графический объект с отражением его от стенок -procedure Move(o: ObjectABC); -begin - o.Move; - if (o.Left<0) or (o.Left+o.Width>WindowWidth) then - o.dx := -o.dx; - if (o.Top<0) or (o.Top+o.Height>WindowHeight) then - o.dy := -o.dy; -end; - -begin - Window.Title := 'Движущиеся объекты'; - if AnimationIsFast then - LockDrawingObjects; - for var i:=1 to Count do - begin - var m: ObjectABC := NewRandomABC; - repeat - m.dx := Random(-3,3); - m.dy := Random(-3,3); - until (m.dx<>0) and (m.dy<>0); - end; - var k := 1; - while True do - begin - for var i:=0 to Objects.Count-1 do - Move(Objects[i]); - if AnimationIsFast then - RedrawObjects; - k += 1; - Window.Title := Format('{0,5:f2}',k/Milliseconds*1000)+' кадров в секунду'; - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_PictureScale.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_PictureScale.pas deleted file mode 100644 index 03ba24b3d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_PictureScale.pas +++ /dev/null @@ -1,38 +0,0 @@ -// Свойства ScaleX и ScaleY класса PictureABC -uses ABCObjects,GraphABC; - -const delay = 2; - -var p: PictureABC; - -begin - Window.Title := 'Движение и масштабирование рисунка по горизонтали'; - SetWindowSize(640,260); - p := PictureABC.Create(100,100,'demo.bmp'); - while True do - begin - for var x:=100 to 450 do - begin - Sleep(delay); - p.MoveOn(1,0); - end; - for var i:=100 downto -100 do - begin - Sleep(delay); - var w := p.Width; - p.ScaleX := i/100; - p.MoveOn(w - p.Width,0); - end; - for var x:=450 downto 100 do - begin - Sleep(delay); - p.MoveOn(-1,0); - end; - for var i:=-100 to 100 do - begin - Sleep(delay); - p.ScaleX:=i/100; - end; - end; -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_RealNumber.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_RealNumber.pas deleted file mode 100644 index 726026047..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_RealNumber.pas +++ /dev/null @@ -1,21 +0,0 @@ -uses ABCObjects,GraphABC; - -const -/// отступ по оси x - zx = 100; -/// отступ по оси y - zy = 50; - -begin - Window.IsFixedSize := True; - Window.Title := 'Секундомер'; - var r := new RoundRectABC(zx,zy,Window.Width-2*zx,Window.Height-2*zy,100,clMoneyGreen); - r.BorderWidth := 5; - r.BorderColor := clGreen; - for var i:=1 to 1000 do - begin - r.RealNumber := i/10; - Sleep(100); - end; -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_StandardColors.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_StandardColors.pas deleted file mode 100644 index 2156732e7..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_StandardColors.pas +++ /dev/null @@ -1,144 +0,0 @@ -uses - GraphABC, - ABCObjects, - System.Reflection; - -const lim = 127 + 32; - -var - CurrentBackColor := clWhite; - InfoString: RectangleABC; - -procedure ChangeInfoStringText(colorName: string); -begin - var c := Color.FromName(colorName); - InfoString.Text := string.Format('Color.{0}: (R: {1} G: {2} B: {3}) (H: {4:f1} S: {5:f1} B: {6:f1})',colorName,c.R,c.G,c.B,c.GetHue,c.GetSaturation,c.GetBrightness); - InfoString.Color := c; - if c.R*c.R+c.G*c.G+c.B*c.B <= 3*lim*lim then - InfoString.FontColor := clWhite - else InfoString.FontColor := clBlack; - if c.A = 0 then - InfoString.FontColor := clGray; -end; - -procedure CreateStandardColors(backColor: Color); -begin - ClearWindow(backColor); - var t := typeof(Color); - var mi := t.GetProperties(); - var y := 10; - var x := 10; - var h := Window.Width div 5 - 11; - foreach m: PropertyInfo in mi do - begin - if m.GetGetMethod(true).IsStatic then - begin - var c := Color(m.GetValue(nil,nil)); - var r := new RectangleABC(x,y,h,22,c); - r.Text := m.Name; - r.TextScale := 0.9; - r.Bordered := False; - if c.R*c.R+c.G*c.G+c.B*c.B <= 3*lim*lim then - r.FontColor := clWhite - else r.FontColor := clBlack; - if c.A = 0 then - r.FontColor := clGray; - y += 25; - if y > Window.Height-40 then - begin - y := 10; - x += h + 10; - end; - end; - end; -end; - -var - ob: ObjectABC; - dx,dy: integer; - -procedure MouseDown(x,y,mb: integer); -begin - ob := ObjectUnderPoint(x,y); - if ob=InfoString then - ob := nil; - if ob<>nil then - begin - ob.ToFront; - dx := x - ob.Left; - dy := y - ob.Top; - var c := ob.Color; - if (mb=2) then - ob.Scale(2) - else ob.Color := Color.FromArgb(128,c.R,c.G,c.B); - end; -end; - -procedure MouseUp(x,y,mb: integer); -begin - if ob<>nil then - begin - if (mb=2) then - ob.Scale(0.5) - else - begin - var c := ob.Color; - if ob.Text = 'Transparent' then - ob.Color := Color.FromArgb(0,c.R,c.G,c.B) - else ob.Color := Color.FromArgb(255,c.R,c.G,c.B); - end; - ob:= nil; - end; -end; - -procedure MouseMove(x,y,mb: integer); -begin - if (ob<>nil) and (mb=1) then - begin - ob.ToFront; - ob.Left := x - dx; - ob.Top := y - dy; - end; - if ob=nil then - begin - InfoString.Text := ''; - InfoString.Color := CurrentBackColor; - end; - var ob1 := ObjectUnderPoint(x,y); - if ob1=InfoString then - ob1 := nil; - if (ob1<>nil) and (mb=0) then - ChangeInfoStringText(ob1.Text); -end; - -procedure KeyDown(Key: integer); -begin - if Key=vk_Space then - begin - if CurrentBackColor=clWhite then - begin - CurrentBackColor := clBlack; - InfoString.BorderColor := clWhite; - end - else - begin - CurrentBackColor := clWhite; - InfoString.BorderColor := clBlack; - end; - ClearWindow(CurrentBackColor); - RedrawObjects; - end; -end; - -begin - SetWindowSize(1024,768); - Window.IsFixedSize := True; - Window.CenterOnScreen; - Window.Title := 'Стандартные цвета (нажмите Пробел для изменения фонового цвета)'; - CreateStandardColors(CurrentBackColor); - InfoString := new RectangleABC(10,Window.Height-30,Window.Width-20,25); - OnMouseMove := MouseMove; - OnMouseDown := MouseDown; - OnMouseUp := MouseUp; - OnKeyDown := KeyDown; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Star_Rotate.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Star_Rotate.pas deleted file mode 100644 index 82d52752c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Star_Rotate.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Изменение свойств объекта StarABC -uses ABCObjects,GraphABC; - -var z: StarABC; - -begin - z := new StarABC(WindowWidth div 2,WindowHeight div 2,WindowHeight div 2 - 5,WindowHeight div 4 + 16,6,clRed); - for var i:=1 to 20 do - begin - Sleep(100); - z.Count := z.Count + 1; - end; - for var i:=1 to 180 do - begin - Sleep(10); - z.Angle := z.Angle + 1; - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Text.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Text.pas deleted file mode 100644 index 017a0d654..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Text.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Клонирование графических объектов -uses ABCObjects,GraphABC; - -var bt: TextABC; - -begin - var x := 224; - bt := new TextABC(60,110,110,'Hello!',RGB(x,x,x)); - while x>32 do - begin - Sleep(40); - x -= 32; - bt := bt.Clone; - bt.Color := RGB(x,x,x); - bt.MoveOn(7,7); - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/Bill.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/Bill.pas deleted file mode 100644 index 91f57c0ea..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/Bill.pas +++ /dev/null @@ -1,145 +0,0 @@ -// Отражение шарика от стенок. Консольный режим -// Для запуска программы используйте Shift+F9 !!! -uses CRT; - -const -// Ширина поля - w = 80; -// Высота поля - h = 24; - -var -/// Координаты шарика - ax,ay: integer; -/// Вектор перемещения шарика - vx,vy: integer; -/// Массив клеток поля - a: array [1..w,1..h] of char; - -/// Очистка массива a -procedure CleanA; -begin - for var j := 1 to h do - for var i := 1 to w do - A[i,j] := ' ' -end; - -/// Создание горизонтальной стены -procedure HorizWall(x,y,L: integer); -begin - for var i := x to x+L-1 do - A[i,y] := '*' -end; - -/// Создание вертикальной стены -procedure VertWall(x,y,L: integer); -begin - for var j := y to y+L-1 do - A[x,j] := '*' -end; - -/// Заполнение поля стенами -procedure Fill; -begin - CleanA; - HorizWall(1,1,w); - HorizWall(1,h,w); - VertWall(1,1,h); - VertWall(w,1,h); - - HorizWall(49,9,31); - HorizWall(49,14,31); -end; - -/// Перерисовка экрана -procedure DrawScreen; -begin - TextColor(White); - ClrScr; - for var j := 1 to h do - for var i := 1 to w do - write(A[i,j]) -end; - -/// Возвращает True, если на пути шарика препятствие -function FilledInFront: boolean; -begin - Result := (A[ax+vx,ay]<>' ') or (A[ax,ay+vy]<>' ') or (A[ax+vx,ay+vy]<>' ') -end; - -/// Меняет направление шарика -procedure ChangeDirection; -begin - if A[ax+vx,ay]<>' ' then - vx := -vx; - if A[ax,ay+vy]<>' ' then - vy := -vy; - if (A[ax+vx,ay]=' ') and (A[ax,ay+vy]=' ') and (A[ax+vx,ay+vy]<>' ') then - begin - vx := -vx; - vy := -vy - end; - Sleep(10); -end; - -/// Рисует шарик -procedure ShowBall; -begin - GotoXY(ax,ay); - write('B'); -end; - -/// Стирает шарик -procedure HideBall; -begin - GotoXY(ax,ay); - write(' '); -end; - -/// Устанавливает вектор движение шарика -procedure SetBallCoords(x,y: integer); -begin - ax := x; - ay := y -end; - -/// Устанавливает координаты шарика -procedure SetBallVeloc(vx0,vy0: integer); -begin - vx := vx0; - vy := vy0 -end; - -/// Перемещает шарик к позиции (x,y) -procedure MoveTo(x,y: integer); -begin - HideBall; - SetBallCoords(x,y); - ShowBall -end; - -/// Перемещает шарик на вектор (dx,dy) -procedure MoveOn(dx,dy: integer); -begin - MoveTo(ax+dx,ay+dy); -end; - -BEGIN - SetWindowTitle('Биллиард (ностальгия по CRT)'); - HideCursor; - - Fill; - DrawScreen; - - SetBallCoords(70,13); - SetBallVeloc(1,1); - TextColor(Yellow); - ShowBall; - - repeat - Delay(20); - if FilledInFront then - ChangeDirection; - MoveOn(vx,vy); - until KeyPressed; -END. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/CPaint.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/CPaint.pas deleted file mode 100644 index 5ea9b4078..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/CPaint.pas +++ /dev/null @@ -1,70 +0,0 @@ -// Рисование курсором в консольном окне -// Иллюстрация GotoXY, TextBackGround -// Для запуска программы используйте Shift+F9 !!! -uses Crt; - -var - draw: boolean; - color: integer; - -function IsCoordCorrect(x,y: integer): boolean; -begin - Result := (x in [1..WindowWidth]) and (y in [1..WindowHeight]); -end; - -procedure MyGotoXY(x,y: integer); -begin - if not IsCoordCorrect(x,y) then - exit; - GotoXY(x,y); -end; - -procedure DrawSymbol(x,y: integer; c: char); -begin - if not IsCoordCorrect(x,y) then - exit; - GotoXY(x,y); - write(c); - GotoXY(x,y); -end; - -begin - draw := True; - color := Green; - ClrScr; - SetWindowTitle('Рисование курсором (Esc-выход, Num 5 - изменение цвета)'); - TextBackGround(color); - GotoXY(WindowWidth div 2,WindowHeight div 2); - var c: char; - repeat - c := ReadKey; - if c=#32 then - draw := not draw; - if c=#0 then - begin - c := ReadKey; - case c of - // Изменение цвета по клавише Num 5 - {5} #12: begin - color := color + 1; - if color=16 then - color := 0; - TextBackGround(color); - end; - {RU}#33: MyGotoXY(WhereX+1,WhereY-1); - {RD}#34: MyGotoXY(WhereX+1,WhereY+1); - {LD}#35: MyGotoXY(WhereX-1,WhereY+1); - {LU}#36: MyGotoXY(WhereX-1,WhereY-1); - {L} #37: MyGotoXY(WhereX-1,WhereY); - {U} #38: MyGotoXY(WhereX,WhereY-1); - {R} #39: MyGotoXY(WhereX+1,WhereY); - {D} #40: MyGotoXY(WhereX,WhereY+1); - #67: ClrScr; - end; - if draw then - DrawSymbol(WhereX, WhereY,' '); - end; - until c=#27; - TextBackGround(Black); - GotoXY(1,25); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/CRTColors.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/CRTColors.pas deleted file mode 100644 index 5b205c89d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/CRTColors.pas +++ /dev/null @@ -1,20 +0,0 @@ -// Стандартные CRT-цвета -// Для запуска программы используйте Shift+F9 !!! -uses CRT; - -begin - SetWindowTitle('Стандартные CRT-цвета'); - for var i:=0 to 15 do - begin - TextBackground(i); - for var j:=0 to 15 do - begin - TextColor(j); - write(' CRT'); - end; - writeln; - end; - HideCursor; - TextBackground(0); - TextColor(0); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/SimpleTextEditor.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/SimpleTextEditor.pas deleted file mode 100644 index b8dc321c4..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/SimpleTextEditor.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Простейший текстовый редактор -// Для запуска программы используйте Shift+F9 !!! -uses CRT; - -begin - SetWindowTitle('Текстовый редактор (Enter - новая строка, Esc - выход)'); - clrScr; - repeat - var c := ReadKey; - case c of - #13: writeln; - #27: break; - #32..#255: write(c); - #0: c := ReadKey; - end; - until false; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/AnalogClock.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/AnalogClock.pas deleted file mode 100644 index 5fcaca2b1..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/AnalogClock.pas +++ /dev/null @@ -1,14 +0,0 @@ -uses GraphABC,System; - -begin - Font.Size := 80; - var x0 := (Window.Width - TextWidth('00:00:00')) div 2; - var y0 := (Window.Height - TextHeight('00:00:00')) div 2; - while True do - begin - var t := DateTime.Now; - var s := string.Format('{0:d2}:{1:d2}:{2:d2}',t.Hour,t.Minute,t.Second); - TextOut(x0,y0,s); - Sleep(1000); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Flame.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Flame.pas deleted file mode 100644 index 0d069ec7f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Flame.pas +++ /dev/null @@ -1,66 +0,0 @@ -uses GraphABC; - -const frames = 25; - size = 250; - dxy = size div 2; - dm = 2*PI/1024; - flameh = 4; - Light: byte = 255; - -procedure FillPallete(ColorsTable: array of Color); -begin - for var i:=0 to 255 do - if(i<128) then - ColorsTable[i] := RGB(i,0,i div 2) - else - ColorsTable[i] := RedColor(i); -end; - -begin - //Создаюм буфер экрана - var ScreenBuffer := new array of byte[size+1]; - for var i:=0 to size do - ScreenBuffer[i] := new byte[size+1]; - //Создаем палитру - var ColorsTable := new Color[256]; - FillPallete(ColorsTable); - //Настраиваем окно - SetWindowSize(size,size); - SetBrushColor(clBlack); - FillRectangle(0,0,WindowWidth,WindowHeight); - SetSmoothingOff; - LockDrawing; - //Поехали - var x, y, s, tt, xx, yy: Integer; - var dt := System.DateTime.Now; - var ds := WindowWidth div 4; - repeat - tt := tt + 1; - xx := dxy + Round(ds*Sin(tt*dm)); - yy := dxy + Round(ds*Cos(tt*dm)); - ScreenBuffer[xx,yy] := Light; - SetPixel(xx,yy,ColorsTable[Light]); - for var i:=0 to 5 do begin - x := Random(size-1) + 1; - y := Random(size-1) + 1; - s := ScreenBuffer[Y,X]; - if s>=flameh then - s := s - flameh; - if s=0 then - continue; - ScreenBuffer[y-1,x+1] := s; - ScreenBuffer[y-1,x ] := s; - ScreenBuffer[y-1,x-1] := s; - ScreenBuffer[y+1,x ] := s; - var c := ColorsTable[s]; - SetPixel(y-1,x+1,c); - SetPixel(y-1,x, c); - SetPixel(y-1,x-1,c); - SetPixel(y+1,x, c); - end; - if((system.datetime.Now-dt).TotalMilliseconds>1000/frames) then begin - dt := System.Datetime.Now; - Redraw; - end; - until False; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Dragon.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Dragon.pas deleted file mode 100644 index 27570e5d3..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Dragon.pas +++ /dev/null @@ -1,70 +0,0 @@ -// Пример из пакета KuMir/PMir -program Dragon; - -uses GraphABC,Utils; - -var - x := 200; - y := 150; - dx := 0; - dy := -4; - turn: array [1..1000] of Boolean; - -begin - SetWindowSize(790,500); - Window.Title := 'Кривая Дракона'; - var f := True; - for var a := 1 to 64 do - begin - turn[2*a-1] := f; - f := not f; - turn[2*a] := turn[a]; - end; - var b := 0; - var d := 1; - f := false; - MoveTo(x,y); - - for var a:=1 to 128 do - begin - var t: integer; - LockDrawing; - for var i:=1 to 127*4 do - begin - b += d; - x += dx; - y += dy; - LineTo(x,y); - if f and not turn[b] or not f and turn[b] then - begin - t := dy; - dy := -dx; - end - else - begin - t := -dy; - dy := dx; - end; - dx := t; - end; - b += d; - x += dx; - y += dy; - LineTo(x,y); - d := -d; - f := not f; - if turn[a] then - begin - t := dy; - dy := -dx; - end - else - begin - t := -dy; - dy := dx; - end; - dx := t; - UnLockDrawing; - end; - write('Время работы = ',Milliseconds/1000,' с'); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Mandelbrot.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Mandelbrot.pas deleted file mode 100644 index 1a3a48c7a..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Mandelbrot.pas +++ /dev/null @@ -1,42 +0,0 @@ -// Демонстрация фрактальной графики. Множество Мандельброта -// Для каждой точки комплексной плоскости z=(x,y) выполняем итерационный процесс z=z^2+c, c=(cx,cy) -// Считаем количество итераций i до тех пор пока не выполнится условие |x|>max и |y|>max -// После этого рисуем точку x,y с насыщенностью красного цвета, пропорциональной i -uses GraphABC,Utils; - -const - max = 10; - coef1 = 0.5; - coef2 = 0.88; - scalex = 0.0035; - scaley = 0.0035; - dx = 430; - dy = 300; - -begin - Window.Title := 'Фракталы: множество Мандельброта'; - SetWindowSize(600,600); - CenterWindow; - for var ix:=0 to Window.Width-1 do - for var iy:=0 to Window.Height-1 do - begin - var x := 0.0; - var y := 0.0; - var cx := scalex * (ix - dx); - var cy := scaley * (iy - dy); - var i := 1; - while i<255 do - begin - var x1 := x*x-y*y+cx; - var y1 := 2*x*y+cy; - x := x1; - y := y1; - if (abs(x)>max) and (abs(y)>max) then break; - i += 1; - end; - if i>=255 then SetPixel(ix,iy,clRed) - else SetPixel(ix,iy,RGB(255,255-i,255-i)); - end; - writeln('Время расчета = ',Milliseconds/1000,' с'); -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/Main.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/Main.pas deleted file mode 100644 index 3946450ad..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/Main.pas +++ /dev/null @@ -1,22 +0,0 @@ -//(c) DarkStar 2008 -uses GraphABC, Paporotnik, PaporotnikData; - -const - Iterations = 300000; - Height = 600; - Fast = false; - Width = Height div 2; - WindowWidth= Width * 3; - Brightness = 170; - -var - Paprotnik := new PaporotnikFractal(PaprotnikData); - SimplePaprotnik := new PaporotnikFractal(SimplePaprotnikData); - Elka := new PaporotnikFractal(ElkaData); - -begin - InitWindow(200, 50, WindowWidth , Height, clBlack); - Paprotnik.Draw(0, 0, Iterations, Height, Brightness, fast); - SimplePaprotnik.Draw(Width, 0, Iterations, Height, Brightness, fast); - Elka.Draw(Width*2, 0, Iterations, Height, Brightness, fast); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/Paporotnik.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/Paporotnik.pas deleted file mode 100644 index 3d689e7a5..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/Paporotnik.pas +++ /dev/null @@ -1,51 +0,0 @@ -///Модуль для рисования фракталов семейства "Лист папоротника" -unit Paporotnik; - -uses GraphABC; - -type - - ///Настройки фрактала - PaporotnikFractalInitalData = record - data: array of array of real; - P0,P1,P2,P3:real; - end; - - ///Фрактал "Лист папоротника" - PaporotnikFractal = class - private - data: array of array of real; - P0,P1,P2,P3:real; - public - constructor(initdata: PaporotnikFractalInitalData); - begin - data := initdata.data; - P0 := initdata.P0; - P1 := initdata.P1; - P2 := initdata.P2; - P3 := initdata.P3; - end; - procedure Draw(x0,y0,Iterations,Height,Brightness: integer; fast: boolean); - begin - var plotx, ploty, x, y : real; - var Size := Height/11; - var Width := Height div 2; - var dx := Width div 2; - var dc := Iterations div Brightness; - if fast then - LockDrawing; - for var i:=1 to Iterations do begin - var P := Random(100); - var rnd := Pmax и |y|>max -// После этого рисуем точку x,y с насыщенностью красного цвета, пропорциональной i -uses GraphABC,Utils; - -const - max = 10; - cx = 0.251; - cy = 0.95; - coef1 = 0.5; - coef2 = 0.88; - - scalex = 0.001; - scaley = 0.001; - dx = 200; - dy = 130; - -begin - Window.Title := 'Фракталы: папоротник'; - SetWindowSize(800,600); - CenterWindow; - for var ix:=0 to Window.Width-1 do - for var iy:=0 to Window.Height-1 do - begin - var x := scalex*(ix-dx); - var y := scaley*(iy-dy); - var i := 1; - while i<255 do - begin - var x1 := coef1*x*x-coef2*y*y+cx; - var y1 := x*y+cy; - x := x1; - y := y1; - if (abs(x)>max) and (abs(y)>max) then break; - i += 1; - end; - if i>=255 then SetPixel(ix,iy,clRed) - else SetPixel(ix,iy,RGB(255,255-i,255-i)); - end; - writeln('Время расчета = ',Milliseconds/1000,' с'); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Mosaic.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Mosaic.pas deleted file mode 100644 index 4aee71d02..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Mosaic.pas +++ /dev/null @@ -1,51 +0,0 @@ -// Мозаика. Квадратики случайным образом меняются местами -uses GraphABC; - -const - w = 25; - w1 = 1; - m = 50; - n = 70; - x0 = 0; - y0 = 0; - delay = 10; - -var a: array [0..n,0..m] of Color; - -begin - Window.Title := 'Мозаика'; - Window.SetSize(800,600); - - // Заполнение массива случайными цветами - for var i:=0 to n-1 do - for var j:=0 to m-1 do - begin - a[i,j] := clRandom; - Brush.Color := a[i,j]; - FillRect(x0+i*w,y0+j*w,x0+(i+1)*w-w1,y0+(j+1)*w-w1); - end; - - var k := 0; - while true do - begin - k += 1; - if k mod 1000 = 0 then - begin - k := 0; - Sleep(delay); - end; - - var i := Random(1,n-2); - var j := Random(1,m-2); - var di := Random(-1,1); - var dj := Random(-1,1); - var i1 := i+di; - var j1 := j+dj; - Swap(a[i,j],a[i1,j1]); - - Brush.Color := a[i,j]; - FillRect(x0+i*w,y0+j*w,x0+(i+1)*w-w1,y0+(j+1)*w-w1); - Brush.Color := a[i1,j1]; - FillRect(x0+i1*w,y0+j1*w,x0+(i1+1)*w-w1,y0+(j1+1)*w-w1); - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/SetPixel.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/SetPixel.pas deleted file mode 100644 index 498bb4a0f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/SetPixel.pas +++ /dev/null @@ -1,7 +0,0 @@ -uses GraphABC; - -begin - for var x:=0 to Window.Width-1 do - for var y:=0 to Window.Height-1 do - SetPixel(x,y,RGB(2*x-y,x-3*y,x+y)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Star.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Star.pas deleted file mode 100644 index 76054f2f8..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Star.pas +++ /dev/null @@ -1,17 +0,0 @@ -uses GraphABC; - -const - n = 17; // количество точек - n1 = 7; // через сколько точек соединять - -begin - var a := -Pi/2; - var Center := Window.Center; - var Radius := Window.Height/2.2; - MoveTo(Round(Center.X+Radius*cos(a)),Round(Center.Y+Radius*sin(a))); - for var i:=1 to n do - begin - a += n1*2*Pi/n; - LineTo(Round(Center.X+Radius*cos(a)),Round(Center.Y+Radius*sin(a))); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/graph3d.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/graph3d.pas deleted file mode 100644 index ea0587a05..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/graph3d.pas +++ /dev/null @@ -1,64 +0,0 @@ -// Пример из пакета KuMir/PMir -// Публикуется практически без изменений -// Дорог как память :) -Uses GraphABC; - -var Xmin,Xmax,Xstep: real; - Ymin,Ymax,Ystep,asp: real; - dx: integer; - -function f(x,y:real): integer; -var r: real; -begin - r := x*x+y*y+1; - f := round(5*asp*(cos(r)/r+0.1)) -end; - -procedure gr(N : integer); -var X,Y: real; - i,j,k,Z0,dy: integer; - pred: array [1..100] of integer; - jj,maxX,maxY: integer; -begin - Xmin := -4; - Xmax := 4; - Ymin := -3; - Ymax := 3; - maxX := 600; - maxY := 400; - Xstep := dx*(Xmax-Xmin)/maxX; - X := Xmin; - Ystep := (Ymax-Ymin)/N; - Y := Ymin; - dy := maxY div N div 2; - asp := maxY/8; - for i := 1 to N do - begin - pred[i] := maxY-i*dy-f(X,Y); - Y := Y + Ystep - end; - for jj := 1 to maxX div dx do - begin - j := jj*dx; - X := X + Xstep; - Y := Ymin; Z0 := maxY; - for i := 1 to N do - begin - k := maxY-i*dy-f(X,Y); - if kmax then - max := yi[xi]; - end; - - yl0 := min; - hl := -(max-min); - - // Нарисовать оси системы координат - Line(0,LtoSy(0),ws,LtoSy(0)); - Line(LtoSx(0),0,LtoSx(0),hs); - - Pen.Color := clBlue; - MoveTo(xs0,LtoSy(yi[0])); - for var xi:=xs0+1 to xs0+ws do - LineTo(xi,LtoSy(yi[xi-xs0])); -end; - -procedure Resize; -begin - ClearWindow; - drawGraph(0,60,f); - Redraw; -end; - -begin - LockDrawing; - SetWindowCaption('График функции: масштабирование'); - drawGraph(0,60,f); - Redraw; - OnResize := Resize; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/rain.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/rain.pas deleted file mode 100644 index 17f971f4d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/rain.pas +++ /dev/null @@ -1,27 +0,0 @@ -// Имитация кругов на воде от капель дождя -uses GraphABC; - -const speed = 2; - -procedure Kaplia(x0,y0: integer); -begin - var r := 1; - for var i:=0 to 63 do - begin - Pen.Color := RGB(i*4,i*4,i*4); - Circle(x0,y0,r); - if i mod speed = 0 then Sleep(10); - Pen.Color := clWhite; - Circle(x0,y0,r); - r += 2; - end; -end; - -const z=50; - -begin - Window.Title := 'Капли дождя'; - SetWindowSize(800,600); - while True do - Kaplia(Random(z,WindowWidth-z),Random(z,WindowHeight-z)); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/Timers/Timer1.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/Timers/Timer1.pas deleted file mode 100644 index fadc43320..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/Timers/Timer1.pas +++ /dev/null @@ -1,21 +0,0 @@ -Uses Timers; - -var t1, t2: Timer; - -procedure OnTimer1; -begin - Write('!'); -end; - -procedure OnTimer2; -begin - Write('?'); -end; - -begin - t1 := new Timer(200, OnTimer1); - t2 := new Timer(300, OnTimer2); - t1.Start; - t2.Start; - Sleep(10000); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/Timers/Timer2.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/Timers/Timer2.pas deleted file mode 100644 index 073c3a6b9..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/Timers/Timer2.pas +++ /dev/null @@ -1,59 +0,0 @@ -// "Собачка". Иллюстрация использования таймера. -uses GraphABC, Timers; - -var - t: Timer; - xx,yy,px,py: integer; - -procedure Draw; -begin - FillCircle(xx,yy,11); -end; - -procedure Show; -begin - Brush.Color := clBlack; - Draw; -end; - -procedure Hide; -begin - Brush.Color := clWhite; - Draw; -end; - -procedure Move(x,y: integer); -begin - Hide; - xx := x; - yy := y; - show; -end; - -procedure Timer1; -begin - if (xx<>px) or (yy<>py) then - begin - var t := 1/10; - var newx := round((1-t)*xx+t*px); - var newy := round((1-t)*yy+t*py); - Move(newx,newy); - end; -end; - -procedure MouseMove(x,y,mb: integer); -begin - px := x; py := y; -end; - -begin - SetWindowCaption('"Собачка"'); - SetSmoothingOff; - OnMouseMove:=MouseMove; - xx := 100; yy := 100; - px := xx; py := yy; - Show; - Timer1; - t := new Timer(20,Timer1); - t.Start; -end. diff --git a/TestSuite/.gitignore b/TestSuite/.gitignore index 413caff47..a0f2c2bcb 100644 --- a/TestSuite/.gitignore +++ b/TestSuite/.gitignore @@ -16,30 +16,3 @@ /exe/*.dat - -#TODO Большая часть .pas файлов добавленны, некоторые нет... пока заигнорил недобавленные -# - Вообще по моему лучше удалить все эти файлы из индекса -# - В индекс -/CompilationSamples/Controls.pas -/CompilationSamples/LightPT.pas -/CompilationSamples/NUnitABC.pas -/CompilationSamples/PT4Databases.pas -/CompilationSamples/Speech.pas -/CompilationSamples/Tasks.pas -/CompilationSamples/Tasks1Arr.pas -/CompilationSamples/Tasks1Begin.pas -/CompilationSamples/Tasks1BoolIfCase.pas -/CompilationSamples/Tasks1Loops.pas -/CompilationSamples/TasksArr.pas -/CompilationSamples/TasksMatr.pas -/CompilationSamples/TasksStr.pas -/CompilationSamples/Turtle.pas -/CompilationSamples/TurtleWPF.pas -/CompilationSamples/TwoPanelsWindow.pas -/CompilationSamples/XLSX.pas -/CompilationSamples/xPT4MakerNetX.pas -/CompilationSamples/xPT4TaskMakerNET.pas -/CompilationSamples/Мозаика.pas -/CompilationSamples/МозаикаABC.pas - - diff --git a/TestSuite/CompilationSamples/Controls.pas b/TestSuite/CompilationSamples/Controls.pas new file mode 100644 index 000000000..3adc7a918 --- /dev/null +++ b/TestSuite/CompilationSamples/Controls.pas @@ -0,0 +1,1503 @@ +// Copyright (©) Ivan Bondarev, Stanislav Mikhalkovich (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) +///Модуль элементов управления для GraphWPF, WPFObjects и Graph3D +unit Controls; + +interface + +uses GraphWPFBase; +uses System.Windows; +uses System.Windows.Media; +uses System.Windows.Media.Imaging; +uses System.Windows.Controls; +uses System.Windows.Controls.Primitives; +uses System.ComponentModel; + +const PanelsColor = Colors.WhiteSmoke; + +type + Dock = System.Windows.Controls.Dock; + GButton = System.Windows.Controls.Button; + GTextBlock = System.Windows.Controls.TextBlock; + GTextBox = System.Windows.Controls.TextBox; + GListBox = System.Windows.Controls.ListBox; + GPanel = System.Windows.Controls.Panel; + GControl = System.Windows.Controls.Control; + GStatusBar = System.Windows.Controls.Primitives.StatusBar; + Orientation = System.Windows.Controls.Orientation; + MessageBox = System.Windows.MessageBox; + MessageBoxButton = System.Windows.MessageBoxButton; + MessageBoxResult = System.Windows.MessageBoxResult; + MessageBoxImage = System.Windows.MessageBoxImage; + /// Набор предопределённых цветов + Colors = System.Windows.Media.Colors; + Key = System.Windows.Input.Key; + +var + _ActivePanel: GPanel; + GlobalHMargin := 12; + +function __ActivePanelInternal: GPanel; +procedure __SetActivePanelInternal(p: GPanel); + +procedure Invoke(d: System.Delegate; params args: array of object); +procedure InvokeP(p: procedure(r: real); r: real); + +type + ///!# + /// Базовый класс для всех элементов управления + CommonElementWPF = class + protected + element: FrameworkElement; + procedure Init0(el: FrameworkElement; width: real := 0; x: real := -1; y: real := -1); + private + procedure SetWP(w: real) := element.Width := w; + procedure SetHP(h: real) := element.Height := h; + procedure SetMPB(m: real) := element.Margin := new Thickness(0,0,0,m); + procedure SetMPs(m: (real, real, real, real)) := element.Margin := new Thickness(m[0],m[1],m[2],m[3]); + procedure SetTTP(s: string) := element.Tooltip := s; + procedure SetEP(enabled: boolean) := element.IsEnabled := enabled; + public + /// Ширина элемента управления + property Width: real read InvokeReal(()->element.Width) write Invoke(SetWP, value); + /// Высота элемента управления + property Height: real read InvokeReal(()->element.Height) write Invoke(SetHP, value); virtual; + /// Отступ элемента управления + //property Margin: real read InvokeReal(()->element.Margin.Bottom) write Invoke(SetMPB, value); + /// Нижний отступ элемента управления + property BottomMargin: real read InvokeReal(()->element.Margin.Bottom) write Invoke(SetMPB, value); + /// Отступы элемента управления + property Margins: (real,real,real,real) + //read InvokeReal(()->element.Margin.Bottom) + write Invoke(SetMPs, value); + /// Активирован ли элемент управления + property Enabled: boolean read InvokeBoolean(()->element.IsEnabled) write Invoke(SetEP, value); + /// Всплывающая подсказка + property Tooltip: string read Invokestring(()->element.ToolTip as string) write Invoke(SetTTP, value); + end; + + ///!# + /// Базовый класс для панелей + PanelWPF = class(CommonElementWPF) + public + fsize: real := 12; + private + bb: Border; + property p: StackPanel read element as StackPanel; + procedure CreateP(wh: real; d: Dock; c: Color; InternalMargin: real); + begin + bb := new Border(); + bb.Background := new SolidColorBrush(c); + var p := new StackPanel; + element := p; + bb.Child := p; + p.Background := GetBrush(c); + p.Margin := new System.Windows.Thickness(InternalMargin); + + if (d = Dock.Left) or (d = Dock.Right) then + begin + p.Orientation := Orientation.Vertical; + bb.Width := wh; + end + else + begin + p.Orientation := Orientation.Horizontal; + bb.Height := wh; + end; + DockPanel.SetDock(bb, d); + MainDockPanel.children.Insert(0, bb); + //ActivePanel := p; + __SetActivePanelInternal(p); + p.Tag := Self; + end; + procedure SetColorP(c: GColor); + begin + p.Background := GetBrush(c); + bb.Background := p.Background + end; + function GetColorP := (p.Background as SolidColorBrush).Color; + procedure SetTTP(s: string) := p.ToolTip := s; + static procedure SetFSzPP(p: GPanel; value: real); + begin + if value<=0 then exit; + foreach var c: FrameworkElement in p.Children do + SetFSzElement(c,value); + end; + static procedure SetFSzElement(c: FrameworkElement; value: real); + begin + if value<=0 then exit; + if c is GControl then + (c as GControl).FontSize := value + else if c is GTextBlock then + (c as GTextBlock).FontSize := value + else if c is GPanel then + SetFSzPP(c as GPanel,value); + end; + procedure SetFSzP(value: real); + begin + if value<=0 then exit; + fsize := value; + SetFSzPP(Self.p,value); + end; + public + constructor Create(wh: real; d: Dock; c: Color; internalMargin: real); + begin + Invoke(CreateP,wh,d,c,internalMargin); + end; + constructor Create(wh: real; d: Dock; c: Color) := Create(wh,d,c,10); + constructor Create(wh: real := 150; d: Dock := Dock.Left) := Create(wh,d,PanelsColor,10); + /// Цвет + property Color: GColor read Invoke&(GetColorP) write Invoke(SetColorP, value); + /// Ширина внутренней границы + property InternalMargin: real + read InvokeReal(()->p.Margin.Left) + write Invoke(procedure -> p.Margin := new System.Windows.Thickness(internalMargin), value); + /// Всплывающая подсказка + property Tooltip: string read Invokestring(()->p.ToolTip as string) write Invoke(SetTTP, value); + /// Размер шрифта + property FontSize: real read fsize write Invoke(SetFSzP, value); virtual; + /// Имя шрифта + //property FontName: string write Invoke(SetFontNameP, value); virtual; + end; + + /// Класс левой панели + LeftPanelWPF = class(PanelWPF) + public + constructor Create(width: real; c: GColor; internalMargin: real); + begin + inherited Create(width, Dock.Left,c,internalMargin) + end; + constructor Create(width: real; c: GColor) := Create(width,c,10); + constructor Create(width: real := 150) := Create(width,PanelsColor,10); + end; + + /// Класс правой панели + RightPanelWPF = class(PanelWPF) + public + constructor Create(width: real; c: GColor; internalMargin: real); + begin + inherited Create(width, Dock.Right,c,internalMargin) + end; + constructor Create(width: real; c: GColor) := Create(width,c,10); + constructor Create(width: real := 150) := Create(width,PanelsColor,10); + end; + + CommonControlWPF = class(CommonElementWPF) + private + property Control: GControl read element as GControl; + procedure SetFSzP(size: real) := if size > 0 then control.FontSize := size; + procedure SetFontNameP(name: string) := control.FontFamily := new FontFamily(name); + public + /// Размер шрифта + property FontSize: real read InvokeReal(()->control.FontSize) write Invoke(SetFSzP, value); virtual; + /// Имя шрифта + property FontName: string write Invoke(SetFontNameP, value); virtual; + end; + + ///!# + ClickableControlWPF = class(CommonControlWPF) + protected + procedure ClickP(sender: Object; e: RoutedEventArgs); + begin + if Click <> nil then + Click; + end; + public + /// Событие нажатия на элемент управления + Click: procedure; + end; + + StackPanelWPF = class(CommonControlWPF) + private + property sp: StackPanel read element as StackPanel; + procedure CreateP(Orient: Orientation; width,height: real); + begin + element := new StackPanel; + element.Focusable := False; + if width>0 then + element.Width := width; + if height>0 then + element.Height := height; + sp.Orientation := Orient; + __ActivePanelInternal.Children.Add(sp); + _ActivePanel := sp; + end; + procedure SetColorP(c: GColor); + begin + sp.Background := GetBrush(c); + end; + function GetColorP := (sp.Background as SolidColorBrush).Color; + procedure SetTTP(s: string); + begin + sp.ToolTip := s; + end; + public + constructor (Orient: Orientation; width: real := 0; height: real := 0) := Invoke(CreateP,Orient,width,height); + property Color: GColor read Invoke&(GetColorP) write Invoke(SetColorP, value); + end; + + /// Элемент управления Grid + GridWPF = class(CommonElementWPF) + private + property gr: UniformGrid read element as UniformGrid; + procedure CreatePP(rows,columns: integer); // только для добавления как главной панели + begin + element := new UniformGrid(); + gr.Rows := rows; + gr.Columns := columns; + element.Focusable := False; + MainDockPanel.children.RemoveAt(MainDockPanel.children.Count-1); + MainDockPanel.children.Add(gr); + end; + procedure CreateP(rows,columns,InternalMargin: integer); + begin + element := new UniformGrid(); + element.Focusable := False; + gr.Rows := rows; + gr.Columns := columns; + __ActivePanelInternal.Children.Add(gr); + _ActivePanel := gr; + _ActivePanel.Tag := Self; + Self.InternalMargin := InternalMargin; + end; + constructor (i: boolean; rows,columns: integer) := Invoke(CreatePP,rows,columns); // фиктивный первый параметр + public + constructor (rows: integer := 1; columns: integer := 1; InternalMargin: integer := 5) + := Invoke(CreateP,rows,columns,InternalMargin); + property Rows: integer read InvokeInteger(()->gr.Rows) + write Invoke(procedure->if value>0 then gr.Rows := value); + property Columns: integer read InvokeInteger(()->gr.Columns) + write Invoke(procedure->if value>0 then gr.Columns := value); + auto property InternalMargin: real := 5; + end; + + /// Элемент управления "Изображение" + ImageWPF = class(CommonControlWPF) + private + property im: Image read element as Image; + procedure CreatePXY(x,y: real; name: string; width: real := 0); + begin + Init0(new Image(),width,x,y); + im.Source := new BitmapImage(); + im.Source := new BitmapImage(new System.Uri(name,System.UriKind.RelativeOrAbsolute)); + end; + procedure CreateP(name: string) := CreatePXY(-1,-1,name,0); + procedure CreatePP; + begin + element := new Image(); + element.Focusable := False; + MainDockPanel.children.RemoveAt(MainDockPanel.children.Count-1); + MainDockPanel.children.Add(im); + end; + function GetNameP: string; + begin + Result := (im.Source as BitmapImage).UriSource.AbsolutePath + end; + procedure SetNameP(value: string); + begin + im.Source := new BitmapImage(new System.Uri(value,System.UriKind.RelativeOrAbsolute)); + end; + constructor (i: integer) := Invoke(CreatePP); // фиктивный первый параметр + public + constructor (name: string) := Invoke(CreateP,name); + constructor (x,y: real; name: string; width: real := 0) := Invoke(CreatePXY,x,y,name,width); + /// Имя файла изображения + property Name: string read InvokeString(GetNameP) write Invoke(SetNameP,value); + end; + + + /// Элемент управления "Кнопка" + ButtonWPF = class(ClickableControlWPF) + public + property b: GButton read element as GButton; + + procedure CreatePXY(x,y: real; Txt: string; width: real; fontSize: real); + begin + Init0(new GButton,width,x,y); + Text := Txt; + Self.FontSize := fontSize; + b.Click += (o,e) -> if Click <> nil then Click; + end; + procedure CreateP(text: string; fontSize: real) := CreatePXY(-1,-1,text,0,fontSize); + + procedure SetTextP(t: string) := b.Content := t; + public + constructor Create(Txt: string; fontSize: real := 0) := Invoke(CreateP, Txt, fontSize); + constructor Create(x, y: real; Txt: string; width: real := 0; fontSize: real := 0) := Invoke(CreatePXY, x, y, Txt, width, fontSize); + + /// Текст на кнопке + property Text: string read InvokeString(()->b.Content as string) write Invoke(SetTextP, value); + end; + + /// Элемент управления "Текст" + TextBlockWPF = class(CommonElementWPF) + private + property tb: GTextBlock read element as GTextBlock; + + procedure CreatePXY(x, y: real; Txt: string; width: real; fontsize: real); + begin + Init0(new GTextBlock, width, x, y); + //Margin := 3; + Text := Txt; + Self.FontSize := fontSize; + end; + procedure CreateP(text: string; fontSize: real) := CreatePXY(-1,-1,text,0,fontSize); + + procedure SetTextP(t: string) := tb.Text := t; + procedure SetFontSizeP(sz: real) := if sz>0 then tb.FontSize := sz; + procedure SetFontNameP(name: string) := tb.FontFamily := new FontFamily(name); + procedure SetTextWrappingP(value: boolean) := if value then tb.TextWrapping := TextWrapping.Wrap else + tb.TextWrapping := TextWrapping.NoWrap; + public + constructor Create(Txt: string; fontsize: real := 0):= Invoke(CreateP, Txt, fontsize); + constructor Create(x, y: real; Txt: string; width: real := 0; fontSize: real := 0):= Invoke(CreatePXY, x, y, Txt, width, fontSize); + + /// Текст блока текста + property Text: string read InvokeString(()->tb.Text) write Invoke(SetTextP, value); + /// Размер шрифта + property FontSize: real read InvokeReal(()->tb.FontSize) write Invoke(SetFontSizeP, value); virtual; + /// Имя шрифта + property FontName: string write Invoke(SetFontNameP, value); virtual; + /// Включён ли режим переноса слов + property Wrapping: boolean read InvokeBoolean(()->tb.TextWrapping = TextWrapping.Wrap) + write Invoke(SetTextWrappingP, value); virtual; + end; + + /// Элемент управления "Целое число" + IntegerBlockWPF = class(TextBlockWPF) + private + val := 0; + message: string; + procedure CreatePXY(x, y: real; message: string; width: real; initValue: integer := 0; fontSize: real := 0); + begin + inherited CreatePXY(x,y,message + ' ' + initValue, width, fontSize); + Self.message := message; + val := initValue; + end; + procedure CreateP(message: string; initValue: integer := 0; fontSize: real := 0) := CreatePXY(-1,-1,message,0,initValue,fontSize); + public + constructor Create(message: string; initValue: integer := 0; fontSize: real := 0) := Invoke(CreateP, message, initValue, fontSize); + constructor Create(x, y: real; message: string; width: real := 0; initValue: integer := 0; fontSize: real := 0) := Invoke(CreatePXY, x, y, message, width, initValue, fontSize); + + /// Значение целого + property Value: integer read val write begin val := value; Text := message + ' ' + val; end; + static function operator implicit(ib: IntegerBlockWPF) := ib.Value; + static function operator=(ib: IntegerBlockWPF; v: integer) := ib.Value = v; + static function operator=(v: integer; ib: IntegerBlockWPF) := ib.Value = v; + static function operator<>(ib: IntegerBlockWPF; v: integer) := ib.Value <> v; + static function operator<>(v: integer; ib: IntegerBlockWPF) := ib.Value <> v; + static procedure operator+=(ib: IntegerBlockWPF; v: integer); + begin + ib.Value += v; + end; + static procedure operator-=(ib: IntegerBlockWPF; v: integer); + begin + ib.Value -= v; + end; + static procedure operator:=(ib: IntegerBlockWPF; v: integer) := ib.Value := v; + end; + + /// Элемент управления "Вещественное число" + RealBlockWPF = class(TextBlockWPF) + private + val := 0.0; + message: string; + procedure CreatePXY(x, y: real; message: string; width: real; initValue: real := 0; fontSize: real := 0); + begin + inherited CreatePXY(x,y,message + ' ' + initValue.ToString(FracDigits), width, fontSize); + Self.message := message; + val := initValue; + end; + procedure CreateP(message: string; initValue: real := 0; fontSize: real := 0) := CreatePXY(-1,-1,message,0,initValue,fontSize); + public + constructor Create(message: string; initValue: real := 0; fontSize: real := 0) := Invoke(CreateP, message, initValue, fontSize); + constructor Create(x, y: real; message: string; width: real := 0; initValue: real := 0; fontSize: real := 0) := Invoke(CreatePXY, x, y, message, width, initValue, fontSize); + + /// Значение вещественного + property Value: real read val write begin val := value; Text := message + ' ' + val.ToString(FracDigits); end; + /// Количество цифр после десятичной точки + auto property FracDigits: integer := 1; + static function operator implicit(ib: RealBlockWPF) := ib.Value; + static function operator=(ib: RealBlockWPF; v: real) := ib.Value = v; + static function operator=(v: real; ib: RealBlockWPF) := ib.Value = v; + static function operator<>(ib: RealBlockWPF; v: real) := ib.Value <> v; + static function operator<>(v: real; ib: RealBlockWPF) := ib.Value <> v; + static procedure operator+=(rb: RealBlockWPF; v: real); + begin + rb.Value += v; + end; + static procedure operator-=(rb: RealBlockWPF; v: real); + begin + rb.Value -= v; + end; + static procedure operator:=(rb: RealBlockWPF; v: real) := rb.Value := v; + end; + + /// Элемент управления "Текстовое поле" + TextBoxNoTitleWPF = class(CommonControlWPF) + private + property tb: GTextBox read element as GTextBox; + + procedure SetTextP(t: string) := tb.Text := t; + + procedure CreatePXY(x,y: real; txt: string; width: real); + begin + Init0(new GTextBox,width,x,y); + Text := txt; + tb.TextChanged += (o,e) -> if TextChanged <> nil then TextChanged; + element.Focusable := True; + //element.HorizontalAlignment := HorizontalAlignment.Stretch; + end; + procedure CreateP(text: string) := CreatePXY(-1,-1,text,0); + + procedure CreatePP; + begin + element := new TextBox(); + element.Focusable := False; + tb.AcceptsReturn := True; + //tb.TextWrapping := TextWrapping.Wrap; + tb.VerticalScrollBarVisibility := ScrollBarVisibility.Auto; + tb.HorizontalScrollBarVisibility := ScrollBarVisibility.Auto; + MainDockPanel.children.RemoveAt(MainDockPanel.children.Count-1); + MainDockPanel.children.Add(element); + end; + procedure SetReadOnlyP(value: boolean); + begin + element.Focusable := not value; + end; + constructor Create(i: integer) := Invoke(CreatePP); + public + /// Событие изменения текста + TextChanged: procedure; + constructor Create(text: string := '') := Invoke(CreateP, text); + constructor Create(x,y: real; text: string := ''; width: real := 0) := Invoke(CreatePXY, x, y, text, width); + + /// Текст в текстовом поле + property Text: string read InvokeString(()->tb.Text) write Invoke(SetTextP, value); + /// Добавление строки в конец + procedure Print(s: string); + begin + Text += s + ' '; + end; + /// Добавление строки в конец и переход на новую строку + procedure Println(s: string); + begin + Text += s + NewLine; + end; + /// Очистка текста в текстовом поле + procedure Clear := Text := ''; + /// Разрешено ли ручное редактирование текста + property ReadOnly: boolean read InvokeBoolean(()->not element.Focusable) write Invoke(SetReadOnlyP,value); + end; + + ///!# + ControlWithTitleWPF = class(CommonControlWPF) + private + property tb: GTextBlock read (element as StackPanel).Children[0] as TextBlock; + property MainElement: GControl read (element as StackPanel).Children[1] as GControl; + procedure SetTitleP(t: string); + begin + if t = '' then + tb.Visibility := System.Windows.Visibility.Collapsed + else tb.Visibility := System.Windows.Visibility.Visible; + tb.Text := t; + end; + procedure SetTitleVisibilityP(v: boolean); + begin + if v then + tb.Visibility := System.Windows.Visibility.Visible + else tb.Visibility := System.Windows.Visibility.Collapsed; + end; + procedure SetHP(h: real) := MainElement.Height := h; + + function CreateStackPanel(el: FrameworkElement; title: string): StackPanel; + begin + var sp := new StackPanel; + var tb := new TextBlock; + tb.Text := title; + tb.Margin := new Thickness(0,0,0,3); + sp.Children.Add(tb); + if title = '' then + tb.Visibility := System.Windows.Visibility.Collapsed; + sp.Children.Add(el); + Result := sp; + end; + + procedure Init1(el: FrameworkElement; title: string; width: real := 0; x: real := -1; y: real := -1); + begin + var sp := CreateStackPanel(el,title); + Init0(sp,width,x,y); + end; + procedure SetFSzP(size: real); + begin + if size<=0 then + exit; + tb.FontSize := size; + MainElement.FontSize := size; + end; + procedure SetFontNameP(name: string); + begin + tb.FontFamily := new FontFamily(name); + MainElement.FontFamily := new FontFamily(name); + end; + public + /// Заголовок + property Title: string read InvokeString(()->tb.Text) write Invoke(SetTitleP, value); virtual; + /// Видим ли заголовок + property TitleVisible: boolean read InvokeBoolean(()->tb.Visibility <> System.Windows.Visibility.Collapsed) + write Invoke(SetTitleVisibilityP, value); virtual; + /// Высота элемента управления + property Height: real read InvokeReal(()->MainElement.ActualHeight) write Invoke(SetHP, value); override; + /// Размер шрифта + property FontSize: real read InvokeReal(()->MainElement.FontSize) write Invoke(SetFSzP, value); override; + /// Имя шрифта + property FontName: string write Invoke(SetFontNameP, value); override; + end; + + /// Элемент управления "Текстовое поле с заголовком" + TextBoxWPF = class(ControlWithTitleWPF) + private + property tbx: GTextBox read MainElement as TextBox; + + procedure SetTextP(t: string) := tbx.Text := t; + procedure SetMultiLineP(b: boolean) := if b then tbx.TextWrapping := TextWrapping.Wrap else tbx.TextWrapping := TextWrapping.NoWrap; + + procedure CreatePXY(x,y: real; title,txt: string; width: real); + begin + Init1(new TextBox, title, width, x, y); + //tbx.TextWrapping := TextWrapping.Wrap; + tbx.Text := txt; + tbx.TextChanged += (o,e) -> if ValueChanged <> nil then ValueChanged; + end; + procedure CreateAsMainControlP; + begin + element := CreateStackPanel(new TextBox,''); + Wrapping := True; + tbx.TextChanged += (o,e) -> if ValueChanged <> nil then ValueChanged; + MainDockPanel.children.RemoveAt(MainDockPanel.children.Count-1); + MainDockPanel.children.Add(element); + end; + procedure CreateP(title,text: string) := CreatePXY(-1,-1,title,text,0); + constructor Create(i: integer) := Invoke(CreateAsMainControlP); + public + /// Событие "значение изменилось" + ValueChanged: procedure; + constructor Create(title: string := '') := Invoke(CreateP, title, ''); + constructor Create(x,y: real; title: string := ''; width: real := 120) := Invoke(CreatePXY, x, y, title,'', width); + + /// Очистка текста в текстовом поле + procedure Clear := Text := ''; + /// Текст в текстовом поле + property Text: string read InvokeString(()->tbx.Text) write Invoke(SetTextP, value); + /// Включён ли режим переноса слов + property Wrapping: boolean read InvokeBoolean(()->tbx.TextWrapping = TextWrapping.Wrap) write Invoke(SetMultiLineP, value); + end; + + /// Элемент управления "Целое поле" + IntegerBoxWPF = class(TextBoxWPF) + private + function GetValue: integer; + begin + if Trim(Text) = '' then + Result := 0 + else Result := integer.Parse(Text); + Result := Result.Clamp(Minimum,Maximum); + end; + + procedure SetValue(x: integer) := Text := x.Clamp(Minimum,Maximum).ToString; + procedure Rest(min,max:integer); + begin + Invoke(()-> begin + Self.Minimum := min; + Self.Maximum := max; + Value := Minimum; + tbx.MouseWheel += (o, e) -> begin + if e.Delta > 0 then + Value := Value + 1 + else if e.Delta < 0 then + Value := Value - 1 + end; + tbx.KeyDown += (o, e) -> begin + if not ((e.Key >= Key.D0) and (e.Key <= Key.D9)) then + e.Handled := True; + end; + end); + end; + public + constructor Create(title: string := ''; min: integer := 0; max: integer := 10); + begin + inherited Create(title); + Rest(min,max); + end; + constructor Create(x,y: real; title: string; min,max: integer; width: real := 0); + begin + inherited Create(x,y,title,width); + Rest(min,max); + end; + + /// Минимальное значение в тектовом поле + auto property Minimum: integer := 0; + /// Максимальное значение в тектовом поле + auto property Maximum: integer := 100; + /// Текущее значение текстового поля + property Value: integer read GetValue write SetValue; + + static function operator implicit(ib: IntegerBoxWPF) := ib.Value; + static function operator=(ib: IntegerBoxWPF; v: integer) := ib.Value = v; + static function operator=(v: integer; ib: IntegerBoxWPF) := ib.Value = v; + static function operator<>(ib: IntegerBoxWPF; v: integer) := ib.Value <> v; + static function operator<>(v: integer; ib: IntegerBoxWPF) := ib.Value <> v; + static procedure operator:=(ib: IntegerBoxWPF; v: integer) := ib.Value := v; + end; + + /// Элемент управления "Список" + ListBoxWPF = class(ControlWithTitleWPF) + protected + function lb: GListBox := MainElement as GListBox; + procedure CreatePXY(x,y: real; title: string; width,height: real); + begin + Init1(new GListBox,title,width,x,y); + //element.HorizontalAlignment := HorizontalAlignment.Stretch; + Self.Height := height; + lb.SelectionChanged += (o,e) -> if SelectionChanged<>nil then SelectionChanged; + end; + procedure CreateP(title: string; height: real) := CreatePXY(-1,-1,title,0,height); + + procedure AddP(s: string); + begin + var lbi := new ListBoxItem(); + lbi.Content := s; + lb.Items.Add(lbi); + end; + + procedure AddRangeP(ss: sequence of string); + begin + foreach var s in ss do + AddP(s); + end; + + procedure SortP := lb.Items.SortDescriptions.Add(new SortDescription('Content', ListSortDirection.Ascending)); + procedure SortPDescending := lb.Items.SortDescriptions.Add(new SortDescription('Content', ListSortDirection.Descending)); + public + /// Событие, возникающее при изменении текущего выделения + SelectionChanged: procedure; + constructor Create(title: string := ''; height: real := 150):= Invoke(CreateP, title, height); + constructor Create(x,y: real; title: string := ''; width: real := 150; height: real := 150):= Invoke(CreatePXY, x, y, title, width, height); + /// Сортировка строк в списке по возрастанию + procedure Sort := Invoke(SortP); + /// Сортировка строк в списке по убыванию + procedure SortDescending := Invoke(SortPDescending); + /// Добавляет элемент в список + procedure Add(s: string) := Invoke(AddP, s); + /// Добавляет набор элементов в список + procedure AddRange(params ss: array of string) := Invoke(AddRangeP, ss); + /// Количество элементов в списке + property Count: integer read InvokeInteger(()->lb.Items.Count); + /// Индекс выбранного элемента + property SelectedIndex: integer read InvokeInteger(()->lb.SelectedIndex) write Invoke(procedure(t: integer) -> lb.SelectedIndex := t, value); + /// Текст выбранного элемента + property SelectedText: string read InvokeString(()->(lb.SelectedItem as ListBoxItem).Content.ToString) + write Invoke(procedure(t: string) -> (lb.SelectedItem as ListBoxItem).Content := t, value); + end; + + /// Элемент управления "Раскрывающийся список" + ComboBoxWPF = class(ControlWithTitleWPF) + private + property cb: ComboBox read MainElement as ComboBox; + + procedure CreatePXY(x,y: real; title: string; width: real); + begin + Init1(new ComboBox, title, width, x, y); + cb.SelectionChanged += (o,e) -> if SelectionChanged <> nil then SelectionChanged; + end; + procedure CreateP(title: string) := CreatePXY(-1,-1,title,0); + procedure AddP(s: string); + begin + cb.Items.Add(s); + if cb.Items.Count = 1 then + cb.SelectedIndex := 0; + end; + procedure AddRangeP(params ss: array of string); + begin + foreach var s in ss do + AddP(s); + end; + public + /// Событие, возникающее при изменении текущего выделения + SelectionChanged: procedure; + constructor Create(title: string := '') := Invoke(CreateP, title); + constructor Create(x,y: real; title: string := ''; width: real := 120) := Invoke(CreatePXY, x, y, title, width); + + /// Добавляет элемент в список + procedure Add(s: string) := Invoke(AddP, s); + /// Добавляет набор элементов в список + procedure AddRange(params ss: array of string) := Invoke(AddRangeP, ss); + /// Выбранная строка + function SelectedText := InvokeString(()->cb.SelectedItem as string); + /// Индекс выбранной строки + function SelectedIndex := InvokeInteger(()->cb.SelectedIndex); + property Items[i: integer]: string read InvokeString(()->cb.Items[i] as string); default; + end; + + SliderBase = class(ControlWithTitleWPF) + private + titl: string; // часть заголовка без числа + function sl: Slider := MainElement as Slider; + function GetMinimum: real := InvokeReal(()->sl.Minimum); + procedure SetMinimumP(r: real) := sl.Minimum := r; + procedure SetMinimum(r: real) := Invoke(SetMinimumP, r); + function GetMaximum: real := InvokeReal(()->sl.Maximum); + procedure SetMaximumP(r: real) := sl.Maximum := r; + procedure SetMaximum(r: real) := Invoke(SetMaximumP, r); + function GetValue: real := InvokeReal(()->sl.Value); + procedure SetValueP(r: real) := sl.Value := r; + procedure SetValue(r: real) := Invoke(SetValueP, r); + function GetFrequency: real := InvokeReal(()->sl.TickFrequency); + procedure SetFrequencyP(r: real) := sl.TickFrequency := r; + procedure SetFrequency(r: real) := Invoke(SetFrequencyP, r); + private + procedure CreatePXY(x,y: real; title: string; min, max, val, freq: real; width: real); + begin + Init1(new Slider,title,width,x,y); + Remainder(title,min, max, val, freq); + end; + procedure Remainder(tit: string; min, max, val, freq: real); + begin + titl := tit; + sl.ValueChanged += procedure(o, e) -> if ValueChanged <> nil then ValueChanged; + sl.ValueChanged += procedure(o, e) -> if title <> '' then tb.Text := Title + ' ' + sl.Value; + if titl <> '' then tb.Text := Title + ' ' + sl.Value; + sl.TickPlacement := System.Windows.Controls.Primitives.TickPlacement.BottomRight; + sl.Minimum := min; + sl.Maximum := max; + sl.Value := val.Clamp(min,max); + if freq<=0 then + sl.TickFrequency := (max-min)/10 + else sl.TickFrequency := freq; + sl.Foreground := Brushes.Black; + sl.IsSnapToTickEnabled := True; + end; + procedure CreateP(title: string; min, max, val, freq: real) := CreatePXY(-1, -1, title, min, max, val, freq, 0); + procedure SetTitleP1(tit: string); + begin + titl := tit; + SetTitleP(tit +' ' + sl.Value); + end; + public + /// Событие, возникающее при изменении значения + ValueChanged: procedure; + /// Заголовок + property Title: string read InvokeString(()->titl) write Invoke(SetTitleP1, value); override; + end; + + /// Элемент управления "Слайдер" с целыми значениями + SliderWPF = class(SliderBase) + private + procedure CreatePXYI(x,y: real; title: string; min, max, val, freq: integer; width: integer); + begin + Init1(new Slider,title,width,x,y); + if freq<=0 then + freq := (max-min) div 10; + if freq = 0 then + freq := 1; + Remainder(title,min, max, val, freq); + end; + procedure CreatePI(title: string; min, max, val, freq: integer) := CreatePXYI(-1, -1, title, min, max, val, freq, 0); + public + constructor Create(min, max: integer; val: integer := integer.MinValue; freq: integer := 0) + := Invoke(CreatePI, '', min, max, val, freq); + constructor Create(title: string := ''); + begin + Create(title, 0, 10, 0); + end; + constructor Create(title: string; min, max: integer; val: integer := integer.MinValue; freq: integer := 0) + := Invoke(CreatePI, title, min, max, val, freq); + constructor Create(x,y: real; title: string; min, max: integer; width: integer; val: integer := integer.MinValue; freq: integer := 0) + := Invoke(CreatePXYI, x,y,title,min, max, val, freq, width); + /// Минимальное значение + property Minimum: integer read GetMinimum.Round write SetMinimum(value); + /// Максимальное значение + property Maximum: integer read GetMaximum.Round write SetMaximum(value); + /// Текущее значение + property Value: integer read GetValue.Round write SetValue(value); + /// Интервал между делениями + property Frequency: integer read GetFrequency.Round write SetFrequency(value); + end; + + /// Элемент управления "Слайдер" с вещественными значениями + SliderRealWPF = class(SliderBase) + public + constructor Create(min, max: real; val: real := real.MinValue; freq: real := 0) := Invoke(CreateP, '', min, max, val, freq); + constructor Create(title: string := '') := Create(title, 0, 10, 0); + constructor Create(title: string; min, max: real; val: real := real.MinValue; freq: real := 0) := Invoke(CreateP, title, min, max, val, freq); + constructor Create(x,y: real; title: string; min, max: real; width: real; val: real := real.MinValue; freq: real := 0) := Invoke(CreatePXY, x,y,title,min, max, val, freq, width); + /// Минимальное значение + property Minimum: real read GetMinimum write SetMinimum; + /// Максимальное значение + property Maximum: real read GetMaximum write SetMaximum; + /// Текущее значение + property Value: real read GetValue write SetValue; + /// Интервал между делениями + property Frequency: real read GetFrequency write SetFrequency; + end; + + /// Элемент управления "Флажок" + CheckBoxWPF = class(ClickableControlWPF) + private + property cb: CheckBox read element as CheckBox; + protected + procedure CreatePXY(x,y: real; text: string; width: real); + begin + Init0(new CheckBox,width,x,y); + cb.Content := text; + cb.Click += ClickP; + end; + procedure CreateP(text: string) := CreatePXY(-1,-1,text,0); + public + constructor Create(text: string) := Invoke(CreateP, text); + constructor Create(x,y: real; text: string; width: real := 0) := Invoke(CreatePXY, x,y,text,width); + + /// Текст элемента управления + property Text: string read InvokeString(()->cb.Content as string) write Invoke(procedure(t: string) -> cb.Content := t, value); + /// Включен ли флажок + property Checked: boolean read InvokeBoolean(()->cb.IsChecked.Value) write Invoke(procedure(t: boolean) -> cb.IsChecked := t, value); + end; + + /// Элемент управления "Переключатель" + RadioButtonWPF = class(ClickableControlWPF) + private + property rb: RadioButton read element as RadioButton; + protected + procedure CreatePXY(x,y: real; text: string; width: real); + begin + Init0(new RadioButton,width,x,y); + rb.Content := text; + rb.Click += ClickP; + end; + procedure CreateP(text: string) := CreatePXY(-1,-1,text,0); + public + constructor Create(text: string) := Invoke(CreateP, text); + constructor Create(x,y: real; text: string; width: real := 0) := Invoke(CreatePXY, x,y,text,width); + + /// Текст элемента управления + property Text: string read InvokeString(()->rb.Content as string) write Invoke(procedure(t: string) -> rb.Content := t, value); + /// Включена ли радиокнопка + property Checked: boolean read InvokeBoolean(()->rb.IsChecked.Value) write Invoke(procedure(t: boolean) -> rb.IsChecked := t, value); + end; + + /// Элемент управления "Строка статуса" + StatusBarWPF = class(CommonControlWPF) + private + property sb: GStatusBar read element as GStatusBar; + procedure SetTextP(text: string) := (sb.Items[0] as StatusBarItem).Content := text; + procedure SetTextPI(i: integer; text: string) := (sb.Items[i] as StatusBarItem).Content := text; + protected + procedure CreateP(height: real; itemWidth: real); + begin + element := new GStatusBar; + element.Focusable := False; + element.Height := height; + DockPanel.SetDock(sb, Dock.Bottom); + MainDockPanel.children.Insert(0, sb); + + var sbi := new StatusBarItem(); + sbi.Content := ''; + if itemWidth > 0 then + sbi.Width := itemWidth; + sb.Items.Add(sbi); + + // последняя фиктивная панель - для заполнения + sbi := new StatusBarItem(); + sbi.Content := ''; + sb.Items.Add(sbi); + end; + procedure AddItemP(text: string; itemWidth: real); + begin + var sbi := new StatusBarItem(); + sbi.Content := text; + if itemWidth > 0 then + sbi.Width := itemWidth; + sb.Items.Insert(sb.Items.Count-1,sbi); + end; + public + constructor Create(height: real := 24; itemWidth: real := 0) := Invoke(CreateP,height,itemWidth); + /// Добавить текстовое поле указанной ширины к строке статуса + procedure AddText(text: string; itemWidth: real := 0) := Invoke(AddItemP,text,itemWidth); + + /// Текст основного текстового поля в строке статуса + property Text: string read InvokeString(()->(sb.Items[0] as StatusBarItem).Content as string) + write Invoke(SetTextP,value); + /// Текст i-того текстового поля в строке статуса + property ItemText[i: integer]: string read InvokeString(()->(sb.Items[i] as StatusBarItem).Content as string) + write Invoke(SetTextPI,i,value); + end; + + /// Элемент управления "Канва" + CanvasWPF = class(CommonControlWPF) + protected + property can: Canvas read element as Canvas; + procedure CreatePP; + begin + element := new Canvas(); + element.Focusable := False; + MainDockPanel.children.RemoveAt(MainDockPanel.children.Count-1); + MainDockPanel.children.Add(can); + __SetActivePanelInternal(can); + //ActivePanel := can; + end; + constructor (i: integer) := Invoke(CreatePP); // фиктивный первый параметр + procedure SetColorP(c: GColor); + begin + can.Background := GetBrush(c); + end; + function GetColorP := (can.Background as SolidColorBrush).Color; + public + /// Цвет элемента управления + property Color: GColor read Invoke&(GetColorP) write Invoke(SetColorP, value); + end; + +function GetProperties(t1: T): sequence of string; +function GetFields(t1: T): sequence of string; + +type + /// Элемент управления "Список данных" + ListViewWPF = class(CommonControlWPF) + private + gv: GridView; + property lv: ListView read element as ListView; + procedure CreatePP; + begin + element := new ListView(); + element.Focusable := False; + MainDockPanel.children.RemoveAt(MainDockPanel.children.Count-1); + MainDockPanel.children.Add(lv); + gv := new GridView; + lv.View := gv; + end; + function ColumnCountP: integer := gv.Columns.Count; + function RowCountP: integer := lv.Items.Count; + constructor (i: integer); + begin + Invoke(CreatePP); + end; + public + /// Заполнить элемент управления данными + procedure Fill(data: sequence of T); + begin + Invoke(()-> begin + var properties := GetProperties(data.First); + gv.Columns.Clear; + foreach var fld in properties do + begin + var col := new GridViewColumn; + col.Header := fld; + col.Width := 150; + col.DisplayMemberBinding := new System.Windows.Data.Binding(fld); + gv.Columns.Add(col); + end; + lv.ItemsSource := data; + end); + end; + /// Очистить данные + procedure Clear; + begin + Invoke(()-> begin + gv.Columns.Clear; + end); + end; + /// Установить заголовки для данных + procedure SetHeaders(params a: array of string); + begin + Invoke(()-> begin + for var i:=0 to a.Length - 1 do + gv.Columns[i].Header := a[i]; + end); + end; + /// Число столбцов данных + function ColumnCount: integer := InvokeInteger(ColumnCountP); + /// Число строк данных + function RowCount: integer := InvokeInteger(RowCountP); + end; + + ///!# + /// Пункт меню + MenuItemWPF = class + private + mi: MenuItem; + litem := new List; + procedure CreateP(mii: MenuItem; text: string); + begin + mi := mii; + mi.Header := text; + mi.Click += (o,e) -> begin + if Click<>nil then Click; + end; + end; + constructor Create(mi: MenuItem; text: string) := Invoke(CreateP,mi,text); + procedure SetTextP(text: string); + begin + mi.Header := text; + end; + function AddMenuItemP(text: string; p: procedure): MenuItemWPF; + begin + if text='-' then + begin + mi.Items.Add(new Separator); + exit + end; + var mii := new MenuItem; + mii.Header := text; + mi.Items.Add(mii); + mii.Click += (o,e)->if Click<>nil then Click; + Result := new MenuItemWPF(mii,text); + Result.Click := p; + litem.Add(Result); + end; + procedure AddSeparatorP := mi.Items.Add(new Separator); + public + /// Событие выбора пункта меню + Click: procedure; + /// Текст пункта меню + property Text: string read InvokeString(()-> mi.Header as string) write Invoke(SetTextP,text); + /// Набор пунктов меню + property Items[i: integer]: MenuItemWPF read Invoke&(()->litem[i]); default; + /// Добавить пункт подменю + function Add(text: string; p: procedure := nil): MenuItemWPF + := Invoke&(()->AddMenuItemP(text,p)); + + /// Добавить разделитель + procedure AddSeparator := Invoke(AddSeparatorP); + /// Добавить набор пунктов меню + procedure AddRange(params items: array of string); + begin + foreach var it in items do + Add(it); + end; + end; + + /// Элемент управления "Главное меню" + MenuWPF = class(CommonControlWPF) + private + litem := new List; + property m: Menu read element as Menu; + procedure CreatePP; + begin + element := new Menu(); + element.Height := 20; + DockPanel.SetDock(m, Dock.Top); + MainDockPanel.children.Insert(0,element); + end; + function AddMenuItemP(text: string): MenuItemWPF; + begin + var mi := new MenuItem; + mi.Header := text; + m.Items.Add(mi); + Result := new MenuItemWPF(mi,text); + litem.Add(Result); + end; + public + constructor Create := Invoke(CreatePP); + property Items[i: integer]: MenuItemWPF read Invoke&(()->litem[i]); default; + + /// Добавить пункт горизонтального меню + function Add(text: string): MenuItemWPF := Invoke&(()->AddMenuItemP(text)); + /// Добавить набор пунктов меню + procedure AddRange(params items: array of string); + begin + foreach var it in items do + Add(it); + end; + end; + + ///!# + /// Статический класс для создания главных элементов управления + SetMainControl = static class + public + static function AsImage: ImageWPF := new ImageWPF(0); + static function AsCanvas: CanvasWPF := new CanvasWPF(0); + static function AsListView: ListViewWPF := new ListViewWPF(0); + static function AsTextBox: TextBoxNoTitleWPF := new TextBoxNoTitleWPF(0); + static function AsGrid(rows: integer := 1; columns: integer := 1): GridWPF := new GridWPF(true,rows,columns); + end; + + ///!# + /// Базовый класс стандартных окон диалога + FileDialogWPF = class + private + d: Microsoft.Win32.FileDialog; + procedure SetFilterP(value: string) := d.Filter := value; + procedure SetInitialDirectoryP(value: string) := d.InitialDirectory := value; + function ShowDialogP: boolean; + begin + var r := d.ShowDialog; + Result := r.HasValue and r.Value; + end; + public + function ShowDialog: boolean := InvokeBoolean(ShowDialogP); + function FileName: string := InvokeString(()->d.FileName); + property Filter: string read InvokeString(()->d.Filter) write Invoke(SetFilterP,value); + property InitialDirectory: string read InvokeString(()->d.InitialDirectory) write Invoke(SetInitialDirectoryP,value); + end; + + /// Стандартное окно диалога открытия файла + OpenFileDialogWPF = class(FileDialogWPF) + private + procedure CreateP(initDirectory,filter: string); + begin + d := new Microsoft.Win32.OpenFileDialog; + d.InitialDirectory := initDirectory; + d.Filter := filter; + end; + public + constructor Create(initDirectory: string := ''; filter: string := '') := Invoke(CreateP,initDirectory,filter); + end; + + /// Стандартное окно диалога сохранения файла + SaveFileDialogWPF = class(FileDialogWPF) + private + procedure CreateP(initDirectory,filter: string); + begin + d := new Microsoft.Win32.SaveFileDialog; + d.InitialDirectory := initDirectory; + d.Filter := filter; + end; + public + constructor Create(initDirectory: string := ''; filter: string := '') := Invoke(CreateP,initDirectory,filter); + end; + +{-----------------------------------------------------} +// Для каждого контрола - пара функций. +// Функция без координат и ширины рассчитана на создание внутри вертикальной StackPanel (LeftPanel, RightPanel) +// Panel - вспомогательная, нужна только для создания LeftPanel, RightPanel + +/// Элемент управления "Кнопка" +function Button(Txt: string; fontSize: real := 0): ButtonWPF; +/// Элемент управления "Кнопка" с заданными координатами +function Button(x, y: real; Txt: string; width: real := 0; fontSize: real := 0): ButtonWPF; + +/// Элемент управления "Текст" +function TextBlock(Txt: string; fontSize: real := 0): TextBlockWPF; +/// Элемент управления "Текст" с заданными координатами +function TextBlock(x, y: real; Txt: string; width: real := 0; fontSize: real := 0): TextBlockWPF; + +/// Элемент управления "Целое число" +function IntegerBlock(message: string; initValue: integer := 0; fontSize: real := 0): IntegerBlockWPF; +/// Элемент управления "Целое число" с заданными координатами +function IntegerBlock(x, y: real; message: string; width: real := 0; initValue: integer := 0; fontSize: real := 0): IntegerBlockWPF; + +/// Элемент управления "Вещественное число" +function RealBlock(message: string; initValue: real := 0; fontSize: real := 0): RealBlockWPF; +/// Элемент управления "Вещественное число" с заданными координатами +function RealBlock(x, y: real; message: string; width: real := 0; initValue: real := 0; fontSize: real := 0): RealBlockWPF; + +/// Элемент управления "Флажок" +function CheckBox(text: string): CheckBoxWPF; +/// Элемент управления "Флажок" с заданными координатами +function CheckBox(x, y: real; text: string; width: real := 0): CheckBoxWPF; + +/// Элемент управления "Переключатель" +function RadioButton(text: string): RadioButtonWPF; +/// Элемент управления "Переключатель" с заданными координатами +function RadioButton(x, y: real; text: string; width: real := 0): RadioButtonWPF; + + +/// Элемент управления "Текстовое поле с заголовком" +function TextBox(text: string := ''): TextBoxWPF; +/// Элемент управления "Текстовое поле с заголовком" с заданными координатами +function TextBox(x, y: real; text: string := ''; width: real := 0): TextBoxWPF; + +/// Элемент управления "Целое поле" с диапазоном 0..10 +function IntegerBox(title: string): IntegerBoxWPF; +/// Элемент управления "Целое поле" с заданным диапазоном значений +function IntegerBox(title: string; min,max: integer): IntegerBoxWPF; +/// Элемент управления "Целое поле" с заданными координатами +function IntegerBox(x, y: real; title: string; min,max: integer; width: real := 0): IntegerBoxWPF; + +/// Элемент управления "Список" +function ListBox(title: string := ''; height: real := 150): ListBoxWPF; +/// Элемент управления "Список" с заданными координатами +function ListBox(x,y: real; title: string := ''; width: real := 150; height: real := 150): ListBoxWPF; + +/// Элемент управления "Слайдер с вещественными значениями" +function SliderReal(title: string := ''): SliderRealWPF; +/// Элемент управления "Слайдер с вещественными значениями" с заданным диапазоном значений и заголовком +function SliderReal(title: string; min,max: real; val: real := real.MinValue; freq: real := 0): SliderRealWPF; +/// Элемент управления "Слайдер с вещественными значениями" с заданным диапазоном значений +function SliderReal(min, max: real; val: real := real.MaxValue; freq: real := 0): SliderRealWPF; +/// Элемент управления "Слайдер с вещественными значениями" с заданными координатами +function SliderReal(x,y: real; title: string; min,max: real; width: real; val: real := real.MinValue; freq: real := 0): SliderRealWPF; + +/// Элемент управления "Слайдер" +function Slider(title: string := ''): SliderWPF; +/// Элемент управления "Слайдер" с заданным диапазоном значений и заголовком +function Slider(title: string; min,max: integer; val: integer := integer.MinValue; freq: integer := 0): SliderWPF; +/// Элемент управления "Слайдер" с заданным диапазоном значений +function Slider(min, max: integer; val: integer := integer.MinValue; freq: integer := 0): SliderWPF; +/// Элемент управления "Слайдер" с заданными координатами +function Slider(x,y: real; title: string; min,max: integer; width: integer; val: integer := integer.MinValue; freq: integer := 0): SliderWPF; + +/// Элемент управления "Изображение" +function Image(name: string): ImageWPF; +/// Элемент управления "Изображение" с заданными координатами +function Image(x,y: real; name: string; width: real := 0): ImageWPF; + +/// Элемент управления "Раскрывающийся список" +function ComboBox(title: string := ''): ComboBoxWPF; +/// Элемент управления "Раскрывающийся список" с заданными координатами +function ComboBox(x,y: real; title: string := ''; width: real := 120): ComboBoxWPF; + +/// Элемент управления "Главное меню" +function Menu: MenuWPF; + +/// Стандартное окно диалога открытия файла +function OpenFileDialog(initDirectory: string := ''; filter: string := ''): OpenFileDialogWPF; +/// Стандартное окно диалога сохранения файла +function SaveFileDialog(initDirectory: string := ''; filter: string := ''): SaveFileDialogWPF; + +/// Элемент управления "Левая панель" +function LeftPanel(width: real; c: Color; InternalMargin: real := 10): PanelWPF; +/// Элемент управления "Левая панель" +function LeftPanel(width: real := 150): PanelWPF; +/// Элемент управления "Правая панель" +function RightPanel(width: real; c: Color; InternalMargin: real := 10): PanelWPF; +/// Элемент управления "Правая панель" +function RightPanel(width: real := 150): PanelWPF; + +/// Элемент управления "Строка статуса" +function StatusBar(height: real := 24; itemWidth: real := 0): StatusBarWPF; + +/// Пустой блок для задания промежутков между компонентами +procedure EmptyBlock(sz: integer := 16); + +/// Установка активной панели, на которую размещаются элементы управления +procedure SetActivePanel(p: CommonElementWPF); + +/// Толщина границ элемента +function Margins(l,t,r,b: real): (real,real,real,real); + +/// Толщина границ элемента +function Margins(all: real): (real,real,real,real); + +/// Графическое окно +//function Window: WindowType; + +///-- +procedure __InitModule__; +///-- +procedure __FinalizeModule__; + +implementation + +//uses GraphWPF; +uses System.Windows; +uses System.Windows.Controls; +uses System.Windows.Controls.Primitives; +uses System.Windows.Media.Imaging; + +//function Window: WindowType := GraphWPF.Window; + +function Button(Txt: string; fontSize: real): ButtonWPF := ButtonWPF.Create(Txt,fontSize); +function Button(x, y: real; Txt: string; width: real; fontSize: real): ButtonWPF := ButtonWPF.Create(x, y, Txt, width, fontSize); + +function TextBlock(Txt: string; fontSize: real): TextBlockWPF := TextBlockWPF.Create(Txt, fontSize); +function TextBlock(x, y: real; Txt: string; width: real; fontSize: real): TextBlockWPF := TextBlockWPF.Create(x, y, Txt, width, fontSize); + +function IntegerBlock(message: string; initValue: integer; fontSize: real): IntegerBlockWPF := IntegerBlockWPF.Create(message, initValue, fontSize); +function IntegerBlock(x, y: real; message: string; width: real; initValue: integer; fontSize: real): IntegerBlockWPF := IntegerBlockWPF.Create(x,y,message,width,initValue,fontSize); + +function RealBlock(message: string; initValue: real; fontSize: real): RealBlockWPF := RealBlockWPF.Create(message, initValue, fontSize); +function RealBlock(x, y: real; message: string; width: real; initValue: real; fontSize: real): RealBlockWPF := RealBlockWPF.Create(x,y,message,width,initValue,fontSize); + +function CheckBox(text: string): CheckBoxWPF := CheckBoxWPF.Create(text); +function CheckBox(x, y: real; text: string; width: real): CheckBoxWPF := CheckBoxWPF.Create(x,y,text,width); + +function RadioButton(text: string): RadioButtonWPF := RadioButtonWPF.Create(text); +function RadioButton(x, y: real; text: string; width: real): RadioButtonWPF := RadioButtonWPF.Create(x,y,text,width); + +function TextBox(text: string): TextBoxWPF := TextBoxWPF.Create(text); +function TextBox(x, y: real; text: string; width: real): TextBoxWPF := TextBoxWPF.Create(x,y,text,width); + +function IntegerBox(title: string): IntegerBoxWPF := IntegerBoxWPF.Create(title,0,10); +function IntegerBox(title: string; min,max: integer): IntegerBoxWPF := IntegerBoxWPF.Create(title,min,max); +function IntegerBox(x, y: real; title: string; min,max: integer; width: real) := IntegerBoxWPF.Create(x,y,title,min,max,width); + +function ListBox(title: string; height: real): ListBoxWPF := ListBoxWPF.Create(title,height); +function ListBox(x,y: real; title: string; width: real; height: real): ListBoxWPF := ListBoxWPF.Create(x,y,title,width,height); + +function SliderReal(title: string): SliderRealWPF := SliderRealWPF.Create(title,0, 10, 0, 0); +function SliderReal(title: string; min, max, val, freq: real): SliderRealWPF; +begin + if val = real.MinValue then + val := min; + Result := SliderRealWPF.Create(title, min, max, val, freq); +end; +function SliderReal(min, max, val, freq: real): SliderRealWPF := SliderReal('',min, max, val, freq); +function SliderReal(x,y: real; title: string; min,max,width,val,freq: real): SliderRealWPF; +begin + if val = real.MinValue then + val := min; + Result := SliderRealWPF.Create(x, y, title, min, max, width, val, freq); +end; + +function Slider(title: string): SliderWPF := SliderWPF.Create(title); +function Slider(title: string; min, max, val, freq: integer): SliderWPF; +begin + if val = real.MinValue then + val := min; + Result := SliderWPF.Create(title, min, max, val, freq); +end; +function Slider(min, max, val, freq: integer): SliderWPF := Slider('',min, max, val, freq); +function Slider(x,y: real; title: string; min,max,width,val,freq: integer): SliderWPF; +begin + if val = real.MinValue then + val := min; + Result := SliderWPF.Create(x, y, title, min, max, width, val, freq); +end; + +function Image(name: string): ImageWPF := new ImageWPF(name); +function Image(x,y: real; name: string; width: real): ImageWPF := new ImageWPF(x,y,name,width); + +function ComboBox(title: string): ComboBoxWPF := new ComboBoxWPF(title); +function ComboBox(x,y: real; title: string; width: real): ComboBoxWPF := new ComboBoxWPF(x,y,title,width); + +function Menu: MenuWPF := new MenuWPF; + +function OpenFileDialog(initDirectory: string; filter: string) := new OpenFileDialogWPF(initDirectory,filter); +function SaveFileDialog(initDirectory: string; filter: string) := new SaveFileDialogWPF(initDirectory,filter); + +function LeftPanel(width: real; c: Color; internalMargin: real) := new LeftPanelWPF(width,c,internalMargin); +function LeftPanel(width: real): PanelWPF := new LeftPanelWPF(width,PanelsColor,10); + +function RightPanel(width: real; c: Color; internalMargin: real) := new RightPanelWPF(width,c,internalMargin); +function RightPanel(width: real): PanelWPF := new RightPanelWPF(width,PanelsColor,10); + + +function StatusBar(height: real; itemWidth: real): StatusBarWPF := new StatusBarWPF(height,itemWidth); + + +procedure EmptyBlock(sz: integer); +begin + var e := TextBlock(''); + e.Height := sz; + e.Width := sz; +end; + +function GetProperties(t1: T): sequence of string; +begin + var props := t1.GetType.GetProperties(); + Result := props.OrderBy(f->f.CustomAttributes.FirstOrDefault?.ToString ?? 'NoAttr').Select(f->f.Name); +end; + +function GetFields(t1: T): sequence of string; +begin + var flds := t1.GetType.GetFields(); + //var flds := t1.GetType.GetFields(System.Reflection.BindingFlags.Instance or System.Reflection.BindingFlags.Public or System.Reflection.BindingFlags.NonPublic); + Result := flds.OrderBy(f->f.CustomAttributes.FirstOrDefault?.ToString ?? 'NoAttr').Select(f->f.Name); +end; + +type ControlsCannotBeRunWithoutGraphModules = class(System.ApplicationException) end; + +procedure Invoke(d: System.Delegate; params args: array of object); +begin + if app = nil then + raise new ControlsCannotBeRunWithoutGraphModules('Модуль Controls должен испольоваться только совместно с модулями GraphWPF и WPFObjects либо Graph3D'); + GraphWPFBase.Invoke(d, args); +end; + +procedure InvokeP(p: procedure(r: real); r: real); +begin + if app = nil then + raise new ControlsCannotBeRunWithoutGraphModules('Модуль Controls должен испольоваться только совместно с модулями GraphWPF и WPFObjects либо Graph3D'); + GraphWPFBase.Invoke(p,r); +end; + +function Invoke(d: Func0): T; +begin + if app = nil then + raise new ControlsCannotBeRunWithoutGraphModules('Модуль Controls должен испольоваться только совместно с модулями GraphWPF и WPFObjects либо Graph3D'); + Result := T(app.Dispatcher.Invoke(d)); +end; + +procedure __SetActivePanelInternal(p: GPanel); +begin + Invoke(()->begin + _ActivePanel := p; + end); +end; + +procedure SetActivePanel(p: CommonElementWPF); +begin + if p.element is GPanel then + __SetActivePanelInternal(p.element as GPanel) +end; + +procedure SetActivePanelInit; +begin + __SetActivePanelInternal(MainWindow.MainPanel.Children[0] as GPanel); + //ActivePanel := MainWindow.MainPanel.Children[0] as GPanel +end; + +function __ActivePanelInternal: GPanel; +begin + if _ActivePanel = nil then + Invoke(SetActivePanelInit); + Result := _ActivePanel; +end; + +function Margins(l,t,r,b: real): (real,real,real,real) := (l,t,r,b); + +function Margins(all: real): (real,real,real,real) := (all,all,all,all); + +procedure CommonElementWPF.Init0(el: FrameworkElement; width: real; x: real; y: real); +begin + element := el; + element.Focusable := False; + if __ActivePanelInternal is StackPanel(var sp) then + if sp.Orientation = Orientation.Vertical then + element.Margin := new Thickness(0,0,0,GlobalHMargin); + //else element.Margin := new Thickness(0,0,GlobalHMargin,0); + if x<>-1 then + begin + element.SetLeft(x); + element.SetTop(y); + end; + if width>0 then + element.Width := width; + __ActivePanelInternal.Children.Add(element); + if __ActivePanelInternal.Tag is PanelWPF(var pwpf) then + PanelWPF.SetFSzElement(element,pwpf.fsize); + if __ActivePanelInternal.Tag is GridWPF(var grwpf) then + element.Margin := new Thickness(grwpf.InternalMargin); +end; + + +var + ///-- + __initialized := false; + +var + ///-- + __finalized := false; + +///-- +procedure __InitModule__; +begin + if not __initialized then + begin + __initialized := true; + + end; +end; + +///-- +procedure __FinalizeModule__; +begin + if not __finalized then + begin + __finalized := true; + end; +end; + +initialization +finalization +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/LightPT.pas b/TestSuite/CompilationSamples/LightPT.pas new file mode 100644 index 000000000..a5e61c853 --- /dev/null +++ b/TestSuite/CompilationSamples/LightPT.pas @@ -0,0 +1,3083 @@ +/// Модуль LightPT автоматической легковесной проверки заданий +unit LightPT; +{$reference System.Net.Http.dll} +{$reference System.Security.dll} + +interface + +uses System.Runtime.InteropServices; + +{==============================================================} +{ Класс для формирования вывода } +{==============================================================} +type + /// Класс для формирования вывода + ObjectList = class + lst := new List; + public + static function New: ObjectList := ObjectList.Create; + procedure Add(o: object) := lst.Add(o); + function AddRange(sq: sequence of integer): ObjectList; begin lst.AddRange(sq.Select(x -> object(x))); Result := Self end; + function AddRange(sq: sequence of real): ObjectList; begin lst.AddRange(sq.Select(x -> object(x))); Result := Self end; + function AddRange(sq: sequence of string): ObjectList; begin lst.AddRange(sq.Select(x -> object(x))); Result := Self end; + function AddRange(sq: sequence of char): ObjectList; begin lst.AddRange(sq.Select(x -> object(x))); Result := Self end; + function AddRange(sq: sequence of boolean): ObjectList; begin lst.AddRange(sq.Select(x -> object(x))); Result := Self end; + function AddRange(sq: sequence of object): ObjectList; begin lst.AddRange(sq); Result := Self end; + function AddRange(sq: sequence of System.Type): ObjectList; begin lst.AddRange(sq.Select(x -> object(x))); Result := Self end; + function AddFill(n: integer; elem: object): ObjectList; begin lst.AddRange(ArrFill(n,elem)); Result := Self end; + function AddArithm(n: integer; a0,step: integer): ObjectList; begin lst.AddRange(ArrGen(n,a0,x->x+step).Select(x -> object(x))); Result := Self end; + function AddArithm(n: integer; a0,step: real): ObjectList; begin lst.AddRange(ArrGen(n,a0,x->x+step).Select(x -> object(x))); Result := Self end; + function AddFib(n: integer): ObjectList; begin lst.AddRange(ArrGen(n,1,1,(x,y)->x+y).Select(x -> object(x))); Result := Self end; + function AddGeom(n: integer; a0,step: integer): ObjectList; begin lst.AddRange(ArrGen(n,a0,x->x*step).Select(x -> object(x))); Result := Self end; + function AddGeom(n: integer; a0,step: real): ObjectList; begin lst.AddRange(ArrGen(n,a0,x->x*step).Select(x -> object(x))); Result := Self end; + end; + +{==================================================================================} +{ Сервисные типы } +{==================================================================================} +type + MessageColorT = (MsgColorGreen, MsgColorRed, MsgColorOrange, MsgColorMagenta, MsgColorGray); + TaskStatus = (NotUnderControl, Solved, IOError, BadSolution, PartialSolution, InitialTask, BadInitialTask, InitialTaskPT4, ErrFix, Demo); // Короткий результат для БД + +{==================================================================================} +{ Переопределенные функций стандартного модуля с заполнением ввода и вывода } +{==================================================================================} +/// Возвращает случайное целое в диапазоне от a до b +function Random(a, b: integer): integer; +/// Возвращает случайное целое в диапазоне от 0 до n-1 +function Random(n: integer): integer; +/// Возвращает случайное вещественное в диапазоне [0..1) +function Random: real; +/// Возвращает случайное вещественное в диапазоне [a,b) +function Random(a, b: real): real; +/// Возвращает случайное вещественное в диапазоне [a,b] c количеством значащих цифр после точки, равным digits +function RandomReal(a, b: real; digits: integer := 1): real; +/// Возвращает случайный символ в диапазоне от a до b +function Random(a, b: char): char; +/// Возвращает случайное целое в диапазоне +function Random(diap: IntRange): integer; +/// Возвращает случайное вещественное в диапазоне +function Random(diap: RealRange): real; +/// Возвращает случайный символ в диапазоне +function Random(diap: CharRange): char; + +/// Возвращает кортеж из двух случайных целых в диапазоне от a до b +function Random2(a, b: integer): (integer, integer); +/// Возвращает кортеж из двух случайных вещественных в диапазоне от a до b +function Random2(a, b: real): (real, real); +/// Возвращает кортеж из двух случайных символов в диапазоне от a до b +function Random2(a, b: char): (char, char); +/// Возвращает кортеж из двух случайных целых в диапазоне +function Random2(diap: IntRange): (integer, integer); +/// Возвращает кортеж из двух случайных символов в диапазоне +function Random2(diap: CharRange): (char, char); +/// Возвращает кортеж из двух случайных вещественных в диапазоне +function Random2(diap: RealRange): (real, real); + +/// Возвращает кортеж из трех случайных целых в диапазоне от a до b +function Random3(a, b: integer): (integer, integer, integer); +/// Возвращает кортеж из трех случайных вещественных в диапазоне от a до b +function Random3(a, b: real): (real, real, real); +/// Возвращает кортеж из трех случайных символов в диапазоне от a до b +function Random3(a, b: char): (char, char, char); +/// Возвращает кортеж из трех случайных целых в диапазоне +function Random3(diap: IntRange): (integer, integer, integer); +/// Возвращает кортеж из трех случайных вещественных в диапазоне +function Random3(diap: RealRange): (real, real, real); +/// Возвращает кортеж из трех случайных символов в диапазоне +function Random3(diap: CharRange): (char, char, char); + +/// Возвращает массив размера n, заполненный случайными целыми значениями в диапазоне от a до b +function ArrRandomInteger(n: integer; a: integer; b: integer): array of integer; +/// Возвращает массив размера n, заполненный случайными целыми значениями в диапазоне от 0 до 100 +function ArrRandomInteger(n: integer): array of integer; +/// Возвращает массив размера n, заполненный случайными вещественными значениями в диапазоне от a до b +function ArrRandomReal(n: integer; a: real; b: real; digits: integer := 1): array of real; + +/// Возвращает массив размера n, заполненный случайными вещественными значениями в диапазоне от 0 до 10 +function ArrRandomReal(n: integer; digits: integer := 1): array of real; + +/// Возвращает двумерный массив размера m x n, заполненный случайными целыми значениями +function MatrRandomInteger(m: integer; n: integer; a: integer; b: integer): array [,] of integer; +/// Возвращает двумерный массив размера m x n, заполненный случайными целыми значениями +function MatrRandomInteger(m: integer; n: integer): array [,] of integer; +/// Возвращает двумерный массив размера m x n, заполненный случайными вещественными значениями +function MatrRandomReal(m: integer; n: integer; a: real; b: real): array [,] of real; +/// Возвращает двумерный массив размера m x n, заполненный случайными вещественными значениями +function MatrRandomReal(m: integer; n: integer): array [,] of real; + +/// Возвращает двумерный массив размера m x n, заполненный элементами gen(i,j) +//function MatrGen(m, n: integer; gen: (integer,integer)->T): array [,] of T; + +/// Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры +function ReadInteger(prompt: string): integer; +/// Выводит приглашение к вводу и возвращает два значения типа integer, введенные с клавиатуры +function ReadInteger2(prompt: string): (integer, integer); +/// Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры +function ReadlnInteger(prompt: string): integer; + +/// Выводит приглашение к вводу и возвращает значение типа string, введенное с клавиатуры +function ReadString(prompt: string): string; +/// Выводит приглашение к вводу и возвращает значение типа string, введенное с клавиатуры +function ReadlnString(prompt: string): string; + + +///- procedure Print(a,b,...); +/// Выводит значения a,b,... на экран, после каждого значения выводит пробел +procedure Print(params args: array of object); +///- procedure Println(a,b,...); +/// Выводит значения a,b,... на экран, после каждого значения выводит пробел и переходит на новую строку +procedure Println(params args: array of object); +/// Выводит значение экран и выводит пробел +procedure Print(ob: object); +/// Выводит значение экран и выводит пробел +procedure Print(s: string); +/// Выводит значение экран и выводит пробел +procedure Print(c: char); + +{=========================================================================} +{ Сервисные процедуры } +{=========================================================================} + +// Вывести цветовое сообщение в окно вывода +procedure ColoredMessage(msg: string; color: MessageColorT); + +// Вывести сообщение красным цветом в окно вывода +procedure ColoredMessage(msg: string); + +function ToObjArray(a: sequence of integer): array of object; + +function ToObjArray(a: sequence of real): array of object; + +function ToObjArray(a: sequence of string): array of object; + +function ToObjArray(a: sequence of char): array of object; + +function ToObjArray(a: sequence of boolean): array of object; + + + +{=========================================================================} +{ Основные процедуры для проверки правильности ввода-вывода } +{=========================================================================} + +// Самые часто используемые: CheckInput, CheckOutput, CheckOutputSeq + +/// Проверить типы вводимых данных +procedure CheckInput(a: array of System.Type); +/// Проверить значения при выводе +procedure CheckOutput(params arr: array of object); +/// Проверить значения при выводе. Сообщения ColoredMessage гасить. Нужно для повторных вызовов CheckOutput +procedure CheckOutputSilent(params arr: array of object); + + +/// Проверить, что данные не вводились +procedure CheckInputIsEmpty; + +/// Проверить, что помимо начального ввода других данных не вводилось +procedure CheckInputIsInitial; + +/// Синоним CheckInput +procedure CheckInputTypes(a: array of System.Type); + +/// Проверить количество вводимых данных +procedure CheckInputCount(n: integer); +/// Проверить количество вводимых данных +procedure CheckInput2Count(i: integer); +/// Проверить количество выводимых данных +procedure CheckOutput2Count(i: integer); + +/// Проверить последовательность значений при выводе +procedure CheckOutputSeq(a: sequence of integer); +/// Проверить последовательность значений при выводе +procedure CheckOutputSeq(a: sequence of real); +/// Проверить последовательность значений при выводе +procedure CheckOutputSeq(a: sequence of string); +/// Проверить последовательность значений при выводе +procedure CheckOutputSeq(a: sequence of char); +/// Проверить последовательность значений при выводе +procedure CheckOutputSeq(a: sequence of boolean); +/// Проверить последовательность значений при выводе +procedure CheckOutputSeq(a: sequence of object); +/// Проверить последовательность значений при выводе +procedure CheckOutputSeq(a: sequence of word); +/// Проверить последовательность значений при выводе +procedure CheckOutputSeq(a: ObjectList); + +/// Проверить последовательность значений при выводе. Не выводить сообщения ColoredMessages +procedure CheckOutputSeqSilent(a: sequence of integer); +/// Проверить последовательность значений при выводе. Не выводить сообщения ColoredMessages +procedure CheckOutputSeqSilent(a: sequence of real); +/// Проверить последовательность значений при выводе. Не выводить сообщения ColoredMessages +procedure CheckOutputSeqSilent(a: sequence of string); +/// Проверить последовательность значений при выводе. Не выводить сообщения ColoredMessages +procedure CheckOutputSeqSilent(a: sequence of char); +/// Проверить последовательность значений при выводе. Не выводить сообщения ColoredMessages +procedure CheckOutputSeqSilent(a: sequence of boolean); +/// Проверить последовательность значений при выводе. Не выводить сообщения ColoredMessages +procedure CheckOutputSeqSilent(a: sequence of object); +/// Проверить последовательность значений при выводе. Не выводить сообщения ColoredMessages +procedure CheckOutputSeqSilent(a: sequence of word); +/// Проверить последовательность значений при выводе. Не выводить сообщения ColoredMessages +procedure CheckOutputSeqSilent(a: ObjectList); + +/// Проверить вывод в виде строки +procedure CheckOutputString(str: string); + +/// Сравнить типы выведенных значений с указанными +procedure CompareTypeWithOutput(params a: array of System.Type); + +/// Сравнить два значения +function CompareValues(o1, o2: Object): boolean; + +/// Сравнить два массива +function CompareArrValues(a,lst: array of object): boolean; + +/// Сравнить значения с выводом +function CompareValuesWithOutput(params a: array of object): boolean; + +// Для совместимости +procedure CheckOutputNew(params arr: array of object); +procedure CheckOutputSeqNew(a: sequence of integer); +procedure CheckOutputSeqNew(a: sequence of real); +procedure CheckOutputSeqNew(a: sequence of string); +procedure CheckOutputSeqNew(a: sequence of char); +procedure CheckOutputSeqNew(a: sequence of boolean); +procedure CheckOutputSeqNew(a: sequence of object); +procedure CheckOutputSeqNew(a: sequence of word); +procedure CheckOutputSeqNew(a: ObjectList); + +{============================================================================================} +{ Подпрограммы для проверки начального ввода-вывода, представленного в заготовке задания } +{============================================================================================} + +/// Проверить типы данных начального ввода, начального вывода и ввода. Если ввод Input = nil, то он совпадает с начальным вводом +procedure CheckData(InitialInput: array of System.Type := nil; + InitialOutput: array of System.Type := nil; + Input: array of System.Type := nil); + +procedure CheckInitialIO; +procedure CheckInitialIOIsEmpty; +procedure InitialOutput(a: array of System.Type); +procedure InitialInput(a: array of System.Type); +//procedure CheckInitialOutputValues(params a: array of object); - тут значений быть не должно! +procedure CheckInitialOutput(params a: array of System.Type); +procedure CheckInitialInput(params a: array of System.Type); + +procedure CheckInitialOutputSeq(a: sequence of System.Type); +procedure CheckInitialInputSeq(a: sequence of System.Type); + +procedure CheckInitialIOSeqs(input,output: sequence of System.Type); + +procedure CheckOutputAfterInitial(params arr: array of object); // проверить только то, что после исходного вывода + +procedure CheckOutputAfterInitialSilent(params arr: array of object); + +/// Проверить последовательность значений при выводе после начального вывода +procedure CheckOutputAfterInitialSeq(seq: sequence of integer); +/// Проверить последовательность значений при выводе после начального вывода +procedure CheckOutputAfterInitialSeq(seq: sequence of real); +/// Проверить последовательность значений при выводе после начального вывода +procedure CheckOutputAfterInitialSeq(seq: sequence of string); +/// Проверить последовательность значений при выводе после начального вывода +procedure CheckOutputAfterInitialSeq(seq: sequence of boolean); +/// Проверить последовательность значений при выводе после начального вывода +procedure CheckOutputAfterInitialSeq(seq: sequence of char); +/// Проверить последовательность значений при выводе после начального вывода +procedure CheckOutputAfterInitialSeq(seq: sequence of object); +/// Проверить последовательность значений при выводе после начального вывода +procedure CheckOutputAfterInitialSeq(seq: ObjectList); + +/// Проверить последовательность значений при выводе после начального вывода. Не выводить сообщения ColoredMessages +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of integer); +/// Проверить последовательность значений при выводе после начального вывода. Не выводить сообщения ColoredMessages +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of real); +/// Проверить последовательность значений при выводе после начального вывода. Не выводить сообщения ColoredMessages +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of string); +/// Проверить последовательность значений при выводе после начального вывода. Не выводить сообщения ColoredMessages +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of boolean); +/// Проверить последовательность значений при выводе после начального вывода. Не выводить сообщения ColoredMessages +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of char); +/// Проверить последовательность значений при выводе после начального вывода. Не выводить сообщения ColoredMessages +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of object); +/// Проверить последовательность значений при выводе после начального вывода. Не выводить сообщения ColoredMessages +procedure CheckOutputAfterInitialSeqSilent(seq: ObjectList); + +{=========================================================} +{ Функции для проверки элементов ввода-вывода } +{=========================================================} + +/// i-тый элемент ввода - целое +function IsInt(i: integer): boolean; +/// i-тый элемент ввода - вещественное +function IsRe(i: integer): boolean; +/// i-тый элемент ввода - строка +function IsStr(i: integer): boolean; +/// i-тый элемент ввода - логическое +function IsBoo(i: integer): boolean; +/// i-тый элемент ввода - символ +function IsChr(i: integer): boolean; + +/// i-тый элемент вывода - целое +function OutIsInt(i: integer): boolean; +/// i-тый элемент вывода - вещественное +function OutIsRe(i: integer): boolean; +/// i-тый элемент вывода - строка +function OutIsStr(i: integer): boolean; +/// i-тый элемент вывода - логическое +function OutIsBoo(i: integer): boolean; +/// i-тый элемент вывода - символ +function OutIsChr(i: integer): boolean; + +/// i-тый элемент ввода как целое +function Int(i: integer): integer; +/// i-тый элемент ввода как вещественное +function Re(i: integer): real; +/// i-тый элемент ввода как строка +function Str(i: integer): string; +/// i-тый элемент ввода как логическое +function Boo(i: integer): boolean; +/// i-тый элемент ввода как символ +function Chr(i: integer): char; + +/// i-тый элемент вывода как целое +function OutInt(i: integer): integer; +/// i-тый элемент вывода как вещественное +function OutRe(i: integer): real; +/// i-тый элемент вывода как строка +function OutBoo(i: integer): boolean; +/// i-тый элемент вывода как логическое +function OutChr(i: integer): char; +/// i-тый элемент вывода как символ +function OutStr(i: integer): string; + +/// Следующий элемент ввода как целое +function Int: integer; +/// Следующий элемент ввода как вещественное +function Re: real; +/// Следующий элемент ввода как строка +function Str: string; +/// Следующий элемент ввода как логическое +function Boo: boolean; +/// Следующий элемент ввода как символ +function Chr: char; + +/// Следующие два элемента ввода как целые +function Int2: (integer, integer); +/// Следующие два элемента ввода как вещественные +function Re2: (real, real); + +/// Следующие n элементов ввода как массив целых +function IntArr(n: integer): array of integer; +/// Следующие n элементов ввода как массив вещественных +function ReArr(n: integer): array of real; +/// Следующие n элементов ввода как массив логических +function BooArr(n: integer): array of boolean; +/// Следующие n элементов ввода как массив символов +function ChrArr(n: integer): array of char; +/// Следующие n элементов ввода как массив строк +function StrArr(n: integer): array of string; + +// функции, возвращающие входные и выходные списки, а также их срезы, приведенные к нужному типу + +function InputListAsIntegers: array of integer; +function InputListAsReals: array of real; +function InputListAsBooleans: array of boolean; +function InputListAsChars: array of char; +function InputListAsStrings: array of string; + +function OutputListAsIntegers: array of integer; +function OutputListAsReals: array of real; +function OutputListAsBooleans: array of boolean; +function OutputListAsChars: array of char; +function OutputListAsStrings: array of string; + +function InSliceIntArr(a,b: integer): array of integer; +function InSliceReArr(a,b: integer): array of real; +function InSliceBooArr(a,b: integer): array of boolean; +function InSliceChrArr(a,b: integer): array of char; +function InSliceStrArr(a,b: integer): array of string; + +/// Срез элементов вывода от a до b как массив целых +function OutSliceIntArr(a,b: integer): array of integer; +/// Срез элементов вывода от a до b как массив вещественных +function OutSliceReArr(a,b: integer): array of real; +/// Срез элементов вывода от a до b как массив логических +function OutSliceBooArr(a,b: integer): array of boolean; +/// Срез элементов вывода от a до b как массив символов +function OutSliceChrArr(a,b: integer): array of char; +/// Срез элементов вывода от a до b как массив строк +function OutSliceStrArr(a,b: integer): array of string; + +{=========================================================} +{ Тип TestCell и функции для генерации тестов } +{=========================================================} +type + [StructLayout(LayoutKind.Explicit)] + /// Ячейка генерации данных для тестов + TestCell = class + public + [FieldOffset(0)] + typ: System.Type; + [FieldOffset(8)] + a: integer; + [FieldOffset(12)] + b: integer; + [FieldOffset(8)] + ra: real; + [FieldOffset(16)] + rb: real; + [FieldOffset(24)] + digits: integer; + [FieldOffset(8)] + ca: char; + [FieldOffset(10)] + cb: char; + constructor (typ: System.Type); + begin + Self.typ := typ; + end; + function GenerateData: object; + begin + if typ = typeof(integer) then + Result := Random(a,b) + else if typ = typeof(char) then + Result := Random(ca,cb) + else if typ = typeof(real) then + Result := RandomReal(ra,rb,digits) + else if typ = typeof(boolean) then + Result := Random(2)=0 ? False : True + else Result := nil; + end; + end; + +/// Сгенерировать по последовательности спецификаций в тестовых ячейках список данных для теста +function GenValuesByTestCells(a: sequence of TestCell): List; + +/// Сгенерировать целую тестовую ячейку +function tInt(a: integer := 1; b: integer := 10): TestCell; + +/// Сгенерировать вещественную тестовую ячейку +function tRe(ra: real := 1; rb: Real := 10; digits: integer := 0): TestCell; + +/// Сгенерировать символьную тестовую ячейку +function tChr(ca: char := 'а'; cb: char := 'я'): TestCell; + +/// Сгенерировать логическую тестовую ячейку +function tBoo: TestCell; + + +{=========================================================} +{ Процедуры генерации ошибок } +{=========================================================} + +/// Генерация ошибки неверного количества входных значений +procedure ErrorInputCount(Count, n: integer); + +/// Генерация ошибки неверного количества выходных значений +procedure ErrorOutputCount(Count, n: integer); + +/// Генерация ошибки неверного типа n-того входного значения +procedure ErrorInputType(n: integer; ExpectedType, ActualType: string); + +/// Генерация ошибки неверного типа n-того выходного значения +procedure ErrorOutputType(n: integer; ExpectedType, ActualType: string); + + +{=========================================================} +{ Процедура генерации автоматических тестов } +{=========================================================} + +function AutoTest: integer->(); + +/// Генерация автоматических тестов - повторно вызывается заполнение из основной программы. Не использовать если в основной программе есть Read!!! +procedure GenerateAutoTests(n: integer); + +/// Генерация тестов по описанию тестовых данных +procedure GenerateTests(n: integer; testcells: sequence of TestCell); + +/// Генерация тестов по набору значений тестовых данных +procedure GenerateTests(params a: array of integer); + +/// Генерация тестов по набору значений тестовых данных +procedure GenerateTests(params a: array of real); + +/// Генерация тестов по набору значений тестовых данных +procedure GenerateTests(params a: array of string); + +/// Генерация тестов по набору значений тестовых данных +procedure GenerateTests(params a: array of char); + +/// Генерация тестов по набору значений тестовых данных +procedure GenerateTests(params a: array of boolean); + +/// Генерация тестов по набору кортежей тестовых данных +procedure GenerateTests(params a: array of (T1,T2)); + +/// Генерация тестов по набору кортежей тестовых данных +procedure GenerateTests(params a: array of (T1,T2,T3)); + +{=========================================================} +{ Фильтрация выходного списка } +{=========================================================} +/// Преобразование строк, являющихся целыми, в целые в OutputList +procedure ConvertStringsToNumbersInOutputList; +/// Если в OutputList массивы, вытянуть их в единый список +procedure FlattenOutput; +/// Очистить выходной список от пробелов +procedure ClearOutputListFromSpaces; +/// Отфильтровать в выходном списке только числа +procedure FilterOnlyNumbers; +/// Отфильтровать в выходном списке только числа и логические +procedure FilterOnlyNumbersAndBools; + +var + TaskResult: TaskStatus := NotUnderControl; // Записывается в БД + /// Строка, содержащая вывод. Нужна для проверки решения как многострочной строки + OutputString := new StringBuilder; + /// Список выведенных элементов + OutputList := new List; + /// Список введенных элементов + InputList := new List; + /// Список типов элементов, выведенных в заготовке задания (cRe, cInt и т.д.) + InitialOutputList := new List; + /// Список типов элементов, введенных в заготовке задания + InitialInputList := new List; + /// Ссылка на основную процедуру проверки в модуле Task + CheckTask: procedure(name: string); + /// Погасить сообщения о неверном вводе-выводе если задача содержит только начальный ввод-вывод + CancelMessagesIfInitial := True; + /// Тихий режим - сообщения ColoredMessage гасятся. Нужен для обработки нескольких вызовов CheckOutput + Silent := False; + +/// Целый тип для проверки ввода-вывода +function cInt: System.Type; +/// Вещественный тип для проверки ввода-вывода +function cRe: System.Type; +/// Строковый тип для проверки ввода-вывода +function cStr: System.Type; +/// Логический тип для проверки ввода-вывода +function cBool: System.Type; +/// Символьный тип для проверки ввода-вывода +function cChar: System.Type; + +type + /// Константа для обозначения пустого ввода или вывода + EmptyType = (Empty); + TestModeType = (tmNone, tmTest, tmGenTest, tmAutoTest); + +var + TestCount := 0; + GenerateTestData: integer -> () := nil; + TestMode: TestModeType := tmNone; + TestNumber: integer; + +implementation + +uses __RedirectIOMode; + +uses System.Management; +uses System.Security.Cryptography; +uses System.IO; + +uses System; +uses System.Net.Http; +uses System.Threading.Tasks; + +// Исключения - для вывода сообщения +// TaskResult - для базы данных +// Запоминать исключение в глобальной переменной TaskException - для доп. параметров для БД в формате +// ПодтипИсключения(парам1,...,парамn) +// Эту строку также можно писать в БД как доп параметры TaskResultInfo +// Чем хороши исключения - их можно делать разными с абсолютно разными параметрами + +// Сервисная функция - чтобы можно было вводу, начальному вводу или начальному выводу в CheckData присвоить Empty вместо nil +function operator implicit(Self: EmptyType): array of System.Type; extensionmethod := nil; + +const lightptname = 'lightpt.dat'; + +type + LightPTException = class(Exception) + function Info: string; virtual := 'NoInfo'; + end; + +var + CreateNewLineBeforeMessage := False; + TaskResultInfo: string; // доп. информация о результате. Как правило пуста. Или содержит TaskException.Info. Или содержит для Solved и BadSolution информацию о модуле: Robot, Drawman, PT4 + TaskException: LightPTException := new LightPTException; + + WriteInfoCallBack: procedure (LessonName,TaskName,TaskPlatform: string; result: TaskStatus; AdditionalInfo: string); + + LessonName: string := ''; + TaskNamesMap := new Dictionary; + + ServerAddr := 'https://air.mmcs.sfedu.ru/pascalabc'; + +{=========================================================} +{ Типы, связанные с сетью } +{=========================================================} +type + UserTypeEnum = (None, Student, Teacher, Admin); + ServerAccessProvider = class + private + client: HTTPClient; + public + ServerAddr: string; + auto property ShortFIO: string; + auto property FullFIO: string; + auto property Password: string; + auto property Group: string; + auto property UserType: UserTypeEnum; + constructor (ServerAddr: string); + begin + Self.ServerAddr := ServerAddr; + client := new HttpClient(); + client.Timeout := TimeSpan.FromSeconds(10); + end; + + function SendPostRequest(FullFIO, Password, LessonName, TaskName, TaskPlatform, TaskResult, text, TaskResultInfo: string): Task; + begin + var values := Dict( + ( 'shortFIO', '' ), + ( 'FIO', FullFIO ), + ( 'taskName', TaskName ), + ( 'lessonName', LessonName ), + ( 'taskPlatform', TaskPlatform ), + ( 'taskResult', TaskResult ), + ( 'taskResultInfo', TaskResultInfo ), + ( 'content', text ), + ( 'password', Password ) + ); + var content := new FormUrlEncodedContent(values); + var response := client.PostAsync(ServerAddr + '/add.php', content); + Result := response.Result.Content.ReadAsStringAsync(); + end; + end; + +{=========================================================} +{ Типы исключений при решении } +{=========================================================} +type + InputCountException = class(LightPTException) // Ровно Count + Count: integer; // Count - сколько введено + n: integer; // n - сколько требуется ввести + constructor(Count, n: integer); + begin + Self.Count := Count; + Self.n := n; + TaskResult := IOError; + TaskException := Self; + end; + + function Info: string; override := $'InputCount({Count},{n})'; + end; + InputCount2Exception = class(LightPTException) // Не меньше Count + Count: integer; // Count - сколько введено + i: integer; // i - какой номер требуется ввести (с нуля) + constructor(Count, i: integer); + begin + Self.Count := Count; + Self.i := i; + TaskResult := IOError; + TaskException := Self; + end; + + function Info: string; override := $'InputCount2({Count},{i})'; + end; + + InputCountTest2Exception = class(LightPTException) // Не меньше Count + Count: integer; // Count - сколько введено + i: integer; // i - какой номер требуется ввести (с нуля) + constructor(Count, i: integer); + begin + Self.Count := Count; + Self.i := i; + end; + + function Info: string; override := $'InputCountTest2({Count},{i})'; + end; + + InputTypeException = class(LightPTException) + n: integer; // номер параметра + ExpectedType, ActualType: string; + constructor(n: integer; ExpectedType, ActualType: string); + begin + Self.n := n; + Self.ExpectedType := ExpectedType; + Self.ActualType := ActualType; + TaskResult := IOError; + TaskException := Self; + end; + + function Info: string; override := $'InputType({n},{ExpectedType},{ActualType})'; + end; + + InputTypeTestException = class(LightPTException) + n: integer; // номер параметра + ExpectedType, ActualType: string; + constructor(n: integer; ExpectedType, ActualType: string); + begin + Self.n := n; + Self.ExpectedType := ExpectedType; + Self.ActualType := ActualType; + end; + + function Info: string; override := $'InputTypeTest({n},{ExpectedType},{ActualType})'; + end; + + OutputCountException = class(LightPTException) // Ровно Count + Count: integer; // Count - сколько выведено + n: integer; // n - сколько требуется вывести + constructor(Count, n: integer); + begin + Self.Count := Count; + Self.n := n; + TaskResult := IOError; + TaskException := Self; + end; + + function Info: string; override := $'OutputCount({Count},{n})'; + end; + OutputCount2Exception = class(LightPTException) // Ровно Count + Count: integer; // Count - сколько выведено + i: integer; // n - какой номер требуется вывести + constructor(Count, i: integer); + begin + Self.Count := Count; + Self.i := i; + TaskResult := IOError; + TaskException := Self; + end; + + function Info: string; override := $'Output2Count({Count},{i})'; + end; + OutputTypeException = class(LightPTException) + n: integer; // номер параметра + ExpectedType, ActualType: string; + constructor(n: integer; ExpectedType, ActualType: string); + begin + Self.n := n; + Self.ExpectedType := ExpectedType; + Self.ActualType := ActualType; + TaskResult := IOError; + TaskException := Self; + end; + + function Info: string; override := $'OutputType({n},{ExpectedType},{ActualType})'; + end; + + NotInTestGenModeException = class(LightPTException) + FuncName: string; + constructor (FuncName: string) := Self.Funcname := Funcname; + end; + + NotInTestModeException = class(LightPTException) + FuncName: string; + constructor (FuncName: string) := Self.Funcname := Funcname; + end; + + InputTestCountMismatchException = class(LightPTException); + + InputTestTypesMismatchException = class(LightPTException); + +var + CurPosInInputList := 0; + CurPosInInputListInTestMode := 0; + TaskName := ExtractFileName(System.Environment.GetCommandLineArgs[0]).Replace('.exe', ''); + +{=========================================================} +{ Функции для генерации тестов } +{=========================================================} + +/// Сгенерировать по последовательности спецификаций в тестовых ячейках список данных для теста +function GenValuesByTestCells(a: sequence of TestCell): List; +begin + Result := a.Select(tc -> tc.GenerateData).ToList; +end; + +/// Сгенерировать целую тестовую ячейку +function tInt(a: integer; b: integer): TestCell; +begin + Result := new TestCell(typeof(integer)); + Result.a := a; + Result.b := b; +end; + +/// Сгенерировать вещественную тестовую ячейку +function tRe(ra: real; rb: real; digits: integer): TestCell; +begin + Result := new TestCell(typeof(real)); + Result.ra := ra; + Result.rb := rb; + Result.digits := digits; +end; + +/// Сгенерировать символьную тестовую ячейку +function tChr(ca: char; cb: char): TestCell; +begin + Result := new TestCell(typeof(char)); + Result.ca := ca; + Result.cb := cb; +end; + +/// Сгенерировать логическую тестовую ячейку +function tBoo: TestCell; +begin + Result := new TestCell(typeof(boolean)); +end; + +function operator*(cell: TestCell; n: integer): array of TestCell; extensionmethod; +begin + Result := ArrFill(n,cell) +end; + +function operator*(n: integer; cell: TestCell): array of TestCell; extensionmethod; +begin + Result := ArrFill(n,cell) +end; + +function operator*(cell: System.Type; n: integer): array of System.Type; extensionmethod; +begin + Result := ArrFill(n,cell) +end; + +function operator*(n: integer; cell: System.Type): array of System.Type; extensionmethod; +begin + Result := ArrFill(n,cell) +end; + +{=========================================================} +{ Сервисные функции } +{=========================================================} + +procedure ErrorInputCount(Count, n: integer) := raise new InputCountException(Count,n); + +procedure ErrorOutputCount(Count, n: integer) := raise new OutputCountException(Count,n); + +procedure ErrorInputType(n: integer; ExpectedType, ActualType: string) + := raise new InputTypeException(n,ExpectedType,ActualType); + +procedure ErrorOutputType(n: integer; ExpectedType, ActualType: string) + := raise new OutputTypeException(n,ExpectedType,ActualType); + +function AutoTest: integer->() := testnum -> (TestMode := tmAutoTest); + +procedure GenerateAutoTests(n: integer); +begin + TestCount := n; + GenerateTestData := AutoTest; +end; + +procedure GenerateTests(n: integer; testcells: sequence of TestCell); +begin + // Нужно сравнить типы в InputList и здесь. При несоотверствии бросить исключение + // Это можно делать только здесь - где количество входных данных заранее известно + // В задачах где вначале вводится n, а потом массив из n элементов, это не работает - количество данных меняется от теста нк тесту + var testTypes := testcells.Select(ts -> ts.typ).ToArray; + var inputTypes := InputList.Select(ob -> ob.GetType).ToArray; + if (testTypes.Length <> inputTypes.Length) then + raise new InputTestCountMismatchException; + for var i:=0 to testTypes.Length - 1 do + if (testTypes[i] <> inputTypes[i]) then + raise new InputTestTypesMismatchException; + + TestCount := n; + GenerateTestData := tnum -> begin + InputList := GenValuesByTestCells(testcells); + end; +end; + +var + _isPT, _isRobot, _isDrawman, _isLightPT: boolean; + _IsPTcalculated := False; + _IsLightPTcalculated := False; + _IsRobotcalculated := False; + _IsDrawmancalculated := False; + +/// Является ли задание заданием для задачника PT +function IsPT: boolean; +begin + if _IsPTcalculated then + Result := _isPT + else Result := System.Type.GetType('PT4.PT4') <> nil; + _isPT := Result; + _IsPTcalculated := True; +end; + +/// Является ли задание заданием для Робота +function IsRobot: boolean; +begin + if _IsRobotcalculated then + Result := _isRobot + else Result := System.Type.GetType('RobotField.RobotField') <> nil; + _isRobot := Result; + _IsRobotcalculated := True; +end; + +/// Является ли задание заданием для Чертежника +function IsDrawman: boolean; +begin + if _IsDrawmancalculated then + Result := _isDrawman + else Result := System.Type.GetType('DrawManField.DrawManField') <> nil; + _isDrawman := Result; + _IsDrawmancalculated := True; +end; + +/// Является ли задание заданием для легковесного задачника +function IsLightPT: boolean; +begin + if _IsLightPTcalculated then + Result := _IsLightPT + else Result := not IsPT and not IsRobot and not IsDrawman; + _IsLightPT := Result; + _IsLightPTcalculated := True; +end; + +/// надо ли пополнять список ввода в функциях, используемых для ввода +function NeedAddDataToInputList: boolean := IsLightPT and ((TestMode = tmNone) or (TestMode = tmAutoTest)); + +/// Полный путь к папке auth-файла +function FindAuthDat: string; +begin + var auth := 'auth.dat'; + Result := ''; + // В текущем каталоге + if FileExists(auth) then + Result := ExpandFileName(auth) + // Если нет, в каталоге уровня выше + else if FileExists(System.IO.Path.Combine('..',auth)) then + begin + Result := ExpandFileName(System.IO.Path.Combine('..',auth)) + end + // Если нет, в корневом каталоге сетевого диска - Это не работает на старых Win 10 куда не устанавливается NET 4/7/1 + {else begin + var fullname := ExpandFileName(auth); + var drive := ExtractFileDrive(fullname); + var di := new System.IO.DriveInfo(drive); + if di.DriveType = System.IO.DriveType.Network then + begin + var af := System.IO.Path.Combine(di.RootDirectory.FullName,auth); + if FileExists(af) then + Result := af; + end + end;} +end; + +{=================================================================} +{ Функции для шифрования-дешифрования при записи в auth.dat } +{=================================================================} + +// На некоторых компьютерах давала сбой, поэтому просто возвращает константу +function ProcessorId: string; +begin + {var mbs := new ManagementObjectSearcher('Select ProcessorId From Win32_processor'); + var mbsList := mbs.Get(); + Result := ''; + foreach var mo: ManagementObject in mbsList do + begin + var pId := mo['ProcessorId']; + if pId <> nil then + Result := pId.ToString() + else Result := 'AAAAAAAAAAAAAAAA'; + break; + end;} + Result := 'AAAAAAAAAAAAAAAA'; +end; + +function Encrypt(src: string): array of byte; // записать в файл +begin + var ae := Aes.Create(); + var key := Encoding.UTF8.GetBytes(ProcessorId); + var crypt := ae.CreateEncryptor(key, key); + var ms := new MemoryStream(); + var cs := new CryptoStream(ms, crypt, CryptoStreamMode.Write); + var sw := new StreamWriter(cs); + sw.Write(src); + sw.Close; + cs.Close; + ms.Close; + Result := ms.ToArray; +end; + +function Decrypt(data: array of byte): string; +begin + if data = nil then + begin + Result := ''; + exit + end; + var ae := Aes.Create(); + var key := Encoding.UTF8.GetBytes(ProcessorId); + var crypt := ae.CreateDecryptor(key, key); + var ms := new MemoryStream(data); + var cs := new CryptoStream(ms, crypt, CryptoStreamMode.Read); + var sr := new StreamReader(cs); + var text := sr.ReadToEnd; + sr.Close; + cs.Close; + ms.Close; + Result := text; +end; + +{=========================================================} +{ Функции для проверки ввода-вывода } +{=========================================================} + +function cInt := typeof(integer); +function cRe := typeof(real); +function cStr := typeof(string); +function cBool := typeof(boolean); +function cChar := typeof(char); + + +procedure CheckData(InitialInput, InitialOutput, Input: array of System.Type); +begin + CheckInitialIOSeqs(InitialInput, InitialOutput); + if Input = nil then + CheckInputIsInitial + else CheckInput(Input); +end; + +procedure CheckInitialIO; +begin + if (OutputList.Count = InitialOutputList.Count) and (InputList.Count = InitialInputList.Count) then + TaskResult := InitialTask + else if (InputList.Count < InitialInputList.Count) or (InputList.Count = InitialInputList.Count) and (OutputList.Count < InitialOutputList.Count) then + TaskResult := BadInitialTask; +end; + +procedure CheckInitialIOIsEmpty := CheckInitialIO; + +procedure InitialOutput(a: array of System.Type); +begin + InitialOutputList.Clear; + if a<>nil then + InitialOutputList.AddRange(a); +end; + +procedure InitialInput(a: array of System.Type); +begin + InitialInputList.Clear; + if a<>nil then + InitialInputList.AddRange(a); +end; + +function CompareValues(o1, o2: Object): boolean; +begin + if (o1 is real) and (o2 is real) then + begin + var r1 := real(o1); + var r2 := real(o2); + Result := Abs(r1 - r2) < 0.0001; + exit; + end; + Result := o1.Equals(o2); +end; + +function CompareArrValues(a,lst: array of object): boolean; +begin + Result := True; + if a.Length <> OutputList.Count then + Result := False; + for var i := 0 to a.Length - 1 do + if not CompareValues(a[i], lst[i]) then + begin + Result := False; + exit; + end; +end; + +function CompareValuesWithOutput(params a: array of object): boolean := CompareArrValues(a,OutputList.ToArray); + +{procedure CheckInitialOutputValues(params a: array of object); +begin + if CompareArrValues(a,OutputList.ToArray) then + TaskResult := InitialTask; +end;} + +// По сути отдельные функции - это неправильно. Необходим CheckInitialInputOutput +procedure CheckInitialOutput(params a: array of System.Type); +begin + InitialOutput(a); + CheckInitialIO; +end; + +procedure CheckInitialInput(params a: array of System.Type); +begin + InitialInput(a); + CheckInitialIO; +end; + +procedure CheckInitialOutputSeq(a: sequence of System.Type) := CheckInitialOutput(a.ToArray); + +procedure CheckInitialInputSeq(a: sequence of System.Type) := CheckInitialInput(a.ToArray); + +procedure CheckInitialIOSeqs(input,output: sequence of System.Type); +begin + InitialInput(input?.ToArray); + InitialOutput(output?.ToArray); + CheckInitialIO; +end; + +procedure CheckInputCount(n: integer); +begin + if InputList.Count <> n then + raise new InputCountException(InputList.Count, n) +end; + +procedure CheckInput2Count(i: integer); +begin + if InputList.Count <= i then + raise new InputCount2Exception(InputList.Count, i + 1) +end; + +procedure CheckInputTest2Count(i: integer); +begin + if InputList.Count <= i then + raise new InputCountTest2Exception(InputList.Count, i + 1) +end; + +procedure CheckOutput2Count(i: integer); +begin + if OutputList.Count <= i then + raise new OutputCount2Exception(OutputList.Count, i + 1) +end; + +function IsInt(i: integer) := InputList[i] is integer; +function IsRe(i: integer) := InputList[i] is real; +function IsStr(i: integer) := InputList[i] is string; +function IsBoo(i: integer) := InputList[i] is boolean; +function IsChr(i: integer) := InputList[i] is char; + +function OutIsInt(i: integer) := OutputList[i] is integer; +function OutIsRe(i: integer) := OutputList[i] is real; +function OutIsStr(i: integer) := OutputList[i] is string; +function OutIsBoo(i: integer) := OutputList[i] is boolean; +function OutIsChr(i: integer) := OutputList[i] is char; + + +function Int(i: integer): integer; +begin + CheckInput2Count(i); + if not IsInt(i) then + raise new InputTypeException(i + 1, 'integer', TypeName(InputList[i])); + Result := integer(InputList[i]); +end; + +function Re(i: integer): real; +begin + CheckInput2Count(i); + if not IsRe(i) then + raise new InputTypeException(i + 1, 'real', TypeName(InputList[i])); + Result := real(InputList[i]); +end; + +function Str(i: integer): string; +begin + CheckInput2Count(i); + if not IsStr(i) then + raise new InputTypeException(i + 1, 'string', TypeName(InputList[i])); + Result := string(InputList[i]); +end; + +function Boo(i: integer): boolean; +begin + CheckInput2Count(i); + if not IsBoo(i) then + raise new InputTypeException(i + 1, 'boolean', TypeName(InputList[i])); + Result := boolean(InputList[i]); +end; + +function Chr(i: integer): char; +begin + CheckInput2Count(i); + if not IsChr(i) then + raise new InputTypeException(i + 1, 'char', TypeName(InputList[i])); + Result := char(InputList[i]); +end; + +function IntTest(i: integer): integer; +begin + CheckInputTest2Count(i); + if not IsInt(i) then + raise new InputTypeTestException(i + 1, 'integer', TypeName(InputList[i])); + Result := integer(InputList[i]); +end; + +function ReTest(i: integer): real; +begin + CheckInputTest2Count(i); + if not IsRe(i) then + raise new InputTypeTestException(i + 1, 'real', TypeName(InputList[i])); + Result := real(InputList[i]); +end; + +function StrTest(i: integer): string; +begin + CheckInputTest2Count(i); + if not IsStr(i) then + raise new InputTypeTestException(i + 1, 'string', TypeName(InputList[i])); + Result := string(InputList[i]); +end; + +function BooTest(i: integer): boolean; +begin + CheckInputTest2Count(i); + if not IsBoo(i) then + raise new InputTypeTestException(i + 1, 'boolean', TypeName(InputList[i])); + Result := boolean(InputList[i]); +end; + +function ChrTest(i: integer): char; +begin + CheckInputTest2Count(i); + if not IsChr(i) then + raise new InputTypeTestException(i + 1, 'char', TypeName(InputList[i])); + Result := char(InputList[i]); +end; + +function OutInt(i: integer): integer; +begin + CheckOutput2Count(i); + if not OutIsInt(i) then + raise new OutputTypeException(i + 1, 'integer', TypeName(OutputList[i])); + Result := integer(OutputList[i]); +end; + +function OutRe(i: integer): real; +begin + CheckOutput2Count(i); + if not OutIsRe(i) then + raise new OutputTypeException(i + 1, 'real', TypeName(OutputList[i])); + Result := real(OutputList[i]); +end; + +function OutBoo(i: integer): boolean; +begin + CheckOutput2Count(i); + if not OutIsBoo(i) then + raise new OutputTypeException(i + 1, 'boolean', TypeName(OutputList[i])); + Result := boolean(OutputList[i]); +end; + +function OutChr(i: integer): char; +begin + CheckOutput2Count(i); + if not OutIsChr(i) then + raise new OutputTypeException(i + 1, 'char', TypeName(OutputList[i])); + Result := char(OutputList[i]); +end; + +function OutStr(i: integer): string; +begin + CheckOutput2Count(i); + if not OutIsStr(i) then + raise new OutputTypeException(i + 1, 'string', TypeName(OutputList[i])); + Result := string(OutputList[i]); +end; + +function Int: integer; +begin + Result := Int(CurPosInInputList); + CurPosInInputList += 1; +end; + +function Re: real; +begin + Result := Re(CurPosInInputList); + CurPosInInputList += 1; +end; + +function Str: string; +begin + Result := Str(CurPosInInputList); + CurPosInInputList += 1; +end; + +function Boo: boolean; +begin + Result := Boo(CurPosInInputList); + CurPosInInputList += 1; +end; + +function Chr: char; +begin + Result := Chr(CurPosInInputList); + CurPosInInputList += 1; +end; + +function IntTest: integer; +begin + Result := IntTest(CurPosInInputListInTestMode); + CurPosInInputListInTestMode += 1; +end; + +function ReTest: real; +begin + Result := ReTest(CurPosInInputListInTestMode); + CurPosInInputListInTestMode += 1; +end; + +function StrTest: string; +begin + Result := StrTest(CurPosInInputListInTestMode); + CurPosInInputListInTestMode += 1; +end; + +function BooTest: boolean; +begin + Result := BooTest(CurPosInInputListInTestMode); + CurPosInInputListInTestMode += 1; +end; + +function ChrTest: char; +begin + Result := ChrTest(CurPosInInputListInTestMode); + CurPosInInputListInTestMode += 1; +end; + + +function Int2: (integer, integer) := (Int, Int); + +function Re2: (real, real) := (Re, Re); + +function IntArr(n: integer): array of integer := (1..n).Select(x -> Int).ToArray; +function ReArr(n: integer): array of real := (1..n).Select(x -> Re).ToArray; +function BooArr(n: integer): array of boolean := (1..n).Select(x -> Boo).ToArray; +function ChrArr(n: integer): array of char := (1..n).Select(x -> Chr).ToArray; +function StrArr(n: integer): array of string := (1..n).Select(x -> Str).ToArray; + +// функции, возвращающие входные и выходные списки, а также их срезы, приведенные к нужному типу + +function InputListAsIntegers: array of integer := InputList.Select((x,i) -> Int(i)).ToArray; +function InputListAsReals: array of real := InputList.Select((x,i) -> Re(i)).ToArray; +function InputListAsBooleans: array of boolean := InputList.Select((x,i) -> Boo(i)).ToArray; +function InputListAsChars: array of char := InputList.Select((x,i) -> Chr(i)).ToArray; +function InputListAsStrings: array of string := InputList.Select((x,i) -> Str(i)).ToArray; + +function OutputListAsIntegers: array of integer := OutputList.Select((x,i) -> OutInt(i)).ToArray; +function OutputListAsReals: array of real := OutputList.Select((x,i) -> OutRe(i)).ToArray; +function OutputListAsBooleans: array of boolean := OutputList.Select((x,i) -> OutBoo(i)).ToArray; +function OutputListAsChars: array of char := OutputList.Select((x,i) -> OutChr(i)).ToArray; +function OutputListAsStrings: array of string := OutputList.Select((x,i) -> OutStr(i)).ToArray; + +function InSliceIntArr(a,b: integer): array of integer := (a..b).Select(i->Int(i)).ToArray; +function InSliceReArr(a,b: integer): array of real := (a..b).Select(i->Re(i)).ToArray; +function InSliceBooArr(a,b: integer): array of boolean := (a..b).Select(i->Boo(i)).ToArray; +function InSliceChrArr(a,b: integer): array of char := (a..b).Select(i->Chr(i)).ToArray; +function InSliceStrArr(a,b: integer): array of string := (a..b).Select(i->Str(i)).ToArray; + +function OutSliceIntArr(a,b: integer): array of integer := (a..b).Select(i->OutInt(i)).ToArray; +function OutSliceReArr(a,b: integer): array of real := (a..b).Select(i->OutRe(i)).ToArray; +function OutSliceBooArr(a,b: integer): array of boolean := (a..b).Select(i->OutBoo(i)).ToArray; +function OutSliceChrArr(a,b: integer): array of char := (a..b).Select(i->OutChr(i)).ToArray; +function OutSliceStrArr(a,b: integer): array of string := (a..b).Select(i->OutStr(i)).ToArray; + +function ConvertOne(ob: Object): Object; +begin + Result := ob; + if ob is string then + begin + var s := string(ob); + var ival: integer; + var rval: real; + if s.TryToInteger(ival) then + Result := ival + else if s.TryToReal(rval) then + Result := rval + end +end; + +procedure ConvertStringsToNumbersInOutputList; +begin + for var i:=0 to OutputList.Count - 1 do + OutputList[i] := ConvertOne(OutputList[i]); +end; + +function ToObjArray(a: sequence of integer): array of object := a.Select(x -> object(x)).ToArray; + +function ToObjArray(a: sequence of real): array of object := a.Select(x -> object(x)).ToArray; + +function ToObjArray(a: sequence of string): array of object := a.Select(x -> object(x)).ToArray; + +function ToObjArray(a: sequence of char): array of object := a.Select(x -> object(x)).ToArray; + +function ToObjArray(a: sequence of boolean): array of object := a.Select(x -> object(x)).ToArray; + +function ToObjArray(a: sequence of word): array of object := a.Select(x -> object(x)).ToArray; + + +{============================================} +{ Методы расширения для List } +{============================================} +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: sequence of integer); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.AddRange(ToObjArray(data)); +end; + +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: sequence of real); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.AddRange(ToObjArray(data)); +end; + +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: sequence of string); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.AddRange(ToObjArray(data)); +end; + +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: sequence of char); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.AddRange(ToObjArray(data)); +end; + +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: sequence of boolean); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.AddRange(ToObjArray(data)); +end; + +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: sequence of word); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.AddRange(ToObjArray(data)); +end; + +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: sequence of object); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.AddRange(data.ToArray); +end; + + +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: integer); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.Add(data); +end; + +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: real); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.Add(data); +end; + +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: string); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.Add(data); +end; + +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: char); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.Add(data); +end; + +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: boolean); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.Add(data); +end; + +/// Только для InputList и только во время тестирования!!! TestMode = tmTest! Это внутренний метод - разработчику тестов не вызывать!!! +function ReadTestDataInt(Self: List): integer; extensionmethod; +begin + if TestMode <> tmTest then + raise new NotInTestModeException('ReadTestDataInt'); + Result := IntTest; +end; + +/// Только для InputList и только во время тестирования!!! TestMode = tmTest! Это внутренний метод - разработчику тестов не вызывать!!! +function ReadTestDataReal(Self: List): real; extensionmethod; +begin + if TestMode <> tmTest then + raise new NotInTestModeException('ReadTestDataReal'); + Result := ReTest; +end; + +/// Только для InputList и только во время тестирования!!! TestMode = tmTest! Это внутренний метод - разработчику тестов не вызывать!!! +function ReadTestDataString(Self: List): string; extensionmethod; +begin + if TestMode <> tmTest then + raise new NotInTestModeException('ReadTestDataString'); + Result := StrTest; +end; + +/// Только для InputList и только во время тестирования!!! TestMode = tmTest! Это внутренний метод - разработчику тестов не вызывать!!! +function ReadTestDataChar(Self: List): char; extensionmethod; +begin + if TestMode <> tmTest then + raise new NotInTestModeException('ReadTestDataChar'); + Result := ChrTest; +end; + +/// Только для InputList и только во время тестирования!!! TestMode = tmTest! Это внутренний метод - разработчику тестов не вызывать!!! +function ReadTestDataBoolean(Self: List): boolean; extensionmethod; +begin + if TestMode <> tmTest then + raise new NotInTestModeException('ReadTestDataBoolean'); + Result := BooTest; +end; + +/// Только для InputList и только во время тестирования!!! TestMode = tmTest! Это внутренний метод - разработчику тестов не вызывать!!! +function ReadTestDataIntArr(Self: List; n: integer): array of integer; extensionmethod; +begin + if TestMode <> tmTest then + raise new NotInTestModeException('ReadTestDataIntArr'); + Result := (1..n).Select(x->IntTest).ToArray; +end; + +/// Только для InputList и только во время тестирования!!! TestMode = tmTest! Это внутренний метод - разработчику тестов не вызывать!!! +function ReadTestDataReArr(Self: List; n: integer): array of real; extensionmethod; +begin + if TestMode <> tmTest then + raise new NotInTestModeException('ReadTestDataReArr'); + Result := (1..n).Select(x->ReTest).ToArray; +end; + +/// Только для InputList и только во время тестирования!!! TestMode = tmTest! Это внутренний метод - разработчику тестов не вызывать!!! +function ReadTestDataStrArr(Self: List; n: integer): array of string; extensionmethod; +begin + if TestMode <> tmTest then + raise new NotInTestModeException('ReadTestDataStrArr'); + Result := (1..n).Select(x->StrTest).ToArray; +end; + +/// Только для InputList и только во время тестирования!!! TestMode = tmTest! Это внутренний метод - разработчику тестов не вызывать!!! +function ReadTestDataChrArr(Self: List; n: integer): array of char; extensionmethod; +begin + if TestMode <> tmTest then + raise new NotInTestModeException('ReadTestDataChrArr'); + Result := (1..n).Select(x->ChrTest).ToArray; +end; + +/// Только для InputList и только во время тестирования!!! TestMode = tmTest! Это внутренний метод - разработчику тестов не вызывать!!! +function ReadTestDataBooArr(Self: List; n: integer): array of boolean; extensionmethod; +begin + if TestMode <> tmTest then + raise new NotInTestModeException('ReadTestDataBooArr'); + Result := (1..n).Select(x->BooTest).ToArray; +end; + + +function SliceAsInt(Self: List; a,b: integer): array of integer; extensionmethod + := Self[a:b].Select(x->integer(x)).ToArray; + +function SliceAsReal(Self: List; a,b: integer): array of real; extensionmethod + := Self[a:b].Select(x->real(x)).ToArray; + +function SliceAsString(Self: List; a,b: integer): array of string; extensionmethod + := Self[a:b].Select(x->string(x)).ToArray; + +function SliceAsChar(Self: List; a,b: integer): array of char; extensionmethod + := Self[a:b].Select(x->char(x)).ToArray; + +function SliceAsBoolean(Self: List; a,b: integer): array of boolean; extensionmethod + := Self[a:b].Select(x->boolean(x)).ToArray; + +{=========================================================} +{ Сервисные функции - продолжение } +{=========================================================} +procedure GenerateTests(params a: array of integer); +begin + if InputList.Count <> 1 then + raise new InputTestCountMismatchException; + if InputList[0].GetType <> typeof(integer) then + raise new InputTestTypesMismatchException; + + TestCount := a.Length; + GenerateTestData := tnum -> begin + InputList.AddTestData(a[tnum-1]); + end; +end; + +procedure GenerateTests(params a: array of real); +begin + if InputList.Count <> 1 then + raise new InputTestCountMismatchException; + if InputList[0].GetType <> typeof(real) then + raise new InputTestTypesMismatchException; + + TestCount := a.Length; + GenerateTestData := tnum -> begin + InputList.AddTestData(a[tnum-1]); + end; +end; + +procedure GenerateTests(params a: array of string); +begin + if InputList.Count <> 1 then + raise new InputTestCountMismatchException; + if InputList[0].GetType <> typeof(string) then + raise new InputTestTypesMismatchException; + + TestCount := a.Length; + GenerateTestData := tnum -> begin + InputList.AddTestData(a[tnum-1]); + end; +end; + +procedure GenerateTests(params a: array of char); +begin + if InputList.Count <> 1 then + raise new InputTestCountMismatchException; + if InputList[0].GetType <> typeof(char) then + raise new InputTestTypesMismatchException; + + TestCount := a.Length; + GenerateTestData := tnum -> begin + InputList.AddTestData(a[tnum-1]); + end; +end; + +procedure GenerateTests(params a: array of boolean); +begin + if InputList.Count <> 1 then + raise new InputTestCountMismatchException; + if InputList[0].GetType <> typeof(boolean) then + raise new InputTestTypesMismatchException; + + TestCount := a.Length; + GenerateTestData := tnum -> begin + InputList.AddTestData(a[tnum-1]); + end; +end; + +procedure GenerateTests(params a: array of (T1,T2)); +begin + if InputList.Count <> 2 then + raise new InputTestCountMismatchException; + if InputList[0].GetType <> typeof(T1) then + raise new InputTestTypesMismatchException; + if InputList[1].GetType <> typeof(T2) then + raise new InputTestTypesMismatchException; + + TestCount := a.Length; + GenerateTestData := tnum -> begin + var tt := a[tnum-1]; + InputList.AddTestData(|object(tt[0]),object(tt[1])|); + end; +end; + +procedure GenerateTests(params a: array of (T1,T2,T3)); +begin + if InputList.Count <> 2 then + raise new InputTestCountMismatchException; + if InputList[0].GetType <> typeof(T1) then + raise new InputTestTypesMismatchException; + if InputList[1].GetType <> typeof(T2) then + raise new InputTestTypesMismatchException; + if InputList[2].GetType <> typeof(T3) then + raise new InputTestTypesMismatchException; + + TestCount := a.Length; + GenerateTestData := tnum -> begin + var tt := a[tnum-1]; + InputList.AddTestData(|object(tt[0]),object(tt[1]),object(tt[2])|); + end; +end; + +{=========================================================================} +{ Переопределенные функции PABCSystem с заполнением ввода и вывода } +{=========================================================================} +/// Возвращает случайное целое в диапазоне от a до b +function Random(a, b: integer): integer; +begin + if TestMode = tmTest then + Result := InputList.ReadTestDataInt // считать следующее данное из заполненного в GenTestMode InputList + else Result := PABCSystem.Random(a, b); + + if NeedAddDataToInputList then + InputList.Add(Result); +end; + +/// Возвращает случайное целое в диапазоне от 0 до n-1 +function Random(n: integer): integer; +begin + if TestMode = tmTest then + Result := InputList.ReadTestDataInt + else Result := PABCSystem.Random(n); + if NeedAddDataToInputList then + InputList.Add(Result); +end; + +/// Возвращает случайное вещественное в диапазоне [0..1) +function Random: real; +begin + if TestMode = tmTest then + Result := InputList.ReadTestDataReal + else Result := PABCSystem.Random; + if NeedAddDataToInputList then + InputList.Add(Result); +end; + +/// Возвращает случайное вещественное в диапазоне [a,b) +function Random(a, b: real): real; +begin + if TestMode = tmTest then + Result := InputList.ReadTestDataReal + else Result := PABCSystem.Random(a, b); + if NeedAddDataToInputList then + InputList.Add(Result); +end; + +/// Возвращает случайный символ в диапазоне от a до b +function Random(a, b: char): char; +begin + if TestMode = tmTest then + Result := InputList.ReadTestDataChar + else Result := PABCSystem.Random(a, b); + if NeedAddDataToInputList then + InputList.Add(Result); +end; + +function RandomReal(a, b: real; digits: integer): real; +begin + if TestMode = tmTest then + Result := InputList.ReadTestDataReal + else Result := PABCSystem.RandomReal(a, b, digits); + if NeedAddDataToInputList then + InputList.Add(Result); +end; + +/// Возвращает случайное целое в диапазоне +function Random(diap: IntRange): integer; +begin + if TestMode = tmTest then + Result := InputList.ReadTestDataInt + else Result := PABCSystem.Random(diap); + if NeedAddDataToInputList then + InputList.Add(Result); +end; + +/// Возвращает случайное вещественное в диапазоне +function Random(diap: RealRange): real; +begin + if TestMode = tmTest then + Result := InputList.ReadTestDataReal + else Result := PABCSystem.Random(diap); + if NeedAddDataToInputList then + InputList.Add(Result); +end; + +/// Возвращает случайный символ в диапазоне +function Random(diap: CharRange): char; +begin + if TestMode = tmTest then + Result := InputList.ReadTestDataChar + else Result := PABCSystem.Random(diap); + if NeedAddDataToInputList then + InputList.Add(Result); +end; + +/// Возвращает кортеж из двух случайных целых в диапазоне от a до b +function Random2(a, b: integer): (integer, integer); +begin + Result := (Random(a, b), Random(a, b)); +end; + +/// Возвращает кортеж из двух случайных вещественных в диапазоне от a до b +function Random2(a, b: real): (real, real); +begin + Result := (Random(a, b), Random(a, b)); +end; + +/// Возвращает кортеж из двух случайных символов в диапазоне от a до b +function Random2(a, b: char): (char, char); +begin + Result := (Random(a, b), Random(a, b)); +end; + +/// Возвращает кортеж из двух случайных целых в диапазоне +function Random2(diap: IntRange): (integer, integer); +begin + Result := (Random(diap), Random(diap)); +end; + +/// Возвращает кортеж из двух случайных символов в диапазоне +function Random2(diap: CharRange): (char, char); +begin + Result := (Random(diap), Random(diap)); +end; + +/// Возвращает кортеж из двух случайных вещественных в диапазоне +function Random2(diap: RealRange): (real, real); +begin + Result := (Random(diap), Random(diap)); +end; + +/// Возвращает кортеж из трех случайных целых в диапазоне от a до b +function Random3(a, b: integer): (integer, integer, integer); +begin + Result := (Random(a, b), Random(a, b), Random(a, b)); +end; + +/// Возвращает кортеж из трех случайных вещественных в диапазоне от a до b +function Random3(a, b: real): (real, real, real); +begin + Result := (Random(a, b), Random(a, b), Random(a, b)); +end; + +/// Возвращает кортеж из трех случайных символов в диапазоне от a до b +function Random3(a, b: char): (char, char, char); +begin + Result := (Random(a, b), Random(a, b), Random(a, b)); +end; + +/// Возвращает кортеж из трех случайных целых в диапазоне +function Random3(diap: IntRange): (integer, integer, integer); +begin + Result := (Random(diap), Random(diap), Random(diap)); +end; + +/// Возвращает кортеж из трех случайных вещественных в диапазоне +function Random3(diap: RealRange): (real, real, real); +begin + Result := (Random(diap), Random(diap), Random(diap)); +end; + +/// Возвращает кортеж из трех случайных символов в диапазоне +function Random3(diap: CharRange): (char, char, char); +begin + Result := (Random(diap), Random(diap), Random(diap)); +end; + +/// Возвращает массив размера n, заполненный случайными целыми значениями в диапазоне от a до b +function ArrRandomInteger(n: integer; a: integer; b: integer): array of integer; +begin + // Есть три состояния: + // 1. Вызов в основной программе (первый запуск) - TestMode = tmNone + // 2. Вызов в основной программе (последующие запуски) - TestMode = tmTest + // 3. Вызов в функции GenerateTestData - TestMode = tmGenTest - это только в состоянии TestMode = True + {if GenTest then + begin + Result := PABCSystem.ArrRandomInteger(n, a, b); // приходится вызывать дважды! + exit; + end;} + if TestMode = tmTest then + Result := InputList.ReadTestDataIntArr(n) + else Result := PABCSystem.ArrRandomInteger(n, a, b); + + if NeedAddDataToInputList then // IsLightPT and (TestMode = tmNone) + for var i:=0 to n-1 do + InputList.Add(Result[i]); +end; + +/// Возвращает массив размера n, заполненный случайными целыми значениями в диапазоне от 0 до 100 +function ArrRandomInteger(n: integer): array of integer := ArrRandomInteger(n,0,100); + +/// Возвращает массив размера n, заполненный случайными вещественными значениями в диапазоне от a до b +function ArrRandomReal(n: integer; a: real; b: real; digits: integer): array of real; +begin + if TestMode = tmTest then + Result := InputList.ReadTestDataReArr(n) + else Result := PABCSystem.ArrRandomReal(n, a, b, digits); + + if NeedAddDataToInputList then + for var i:=0 to n-1 do + InputList.Add(Result[i]); +end; + +/// Возвращает массив размера n, заполненный случайными вещественными значениями в диапазоне от 0 до 10 +function ArrRandomReal(n: integer; digits: integer): array of real := ArrRandomReal(n,0,10,digits); + +/// Возвращает двумерный массив размера m x n, заполненный случайными целыми значениями +function MatrRandomInteger(m: integer; n: integer; a: integer; b: integer): array [,] of integer; +begin + if TestMode = tmTest then + Result := Matr(m,n,InputList.ReadTestDataIntArr(m*n)) + else Result := PABCSystem.MatrRandomInteger(m,n,a,b); + + if NeedAddDataToInputList then + foreach var x in Result.ElementsByRow do + InputList.Add(x); +end; + +/// Возвращает двумерный массив размера m x n, заполненный случайными целыми значениями +function MatrRandomInteger(m: integer; n: integer): array [,] of integer := MatrRandomInteger(m,n,0,100); + +/// Возвращает двумерный массив размера m x n, заполненный случайными вещественными значениями +function MatrRandomReal(m: integer; n: integer; a: real; b: real): array [,] of real; +begin + if TestMode = tmTest then + Result := Matr(m,n,InputList.ReadTestDataReArr(m*n)) + else Result := PABCSystem.MatrRandomReal(m,n,a,b); + + if NeedAddDataToInputList then + foreach var x in Result.ElementsByRow do + InputList.Add(x); +end; + +/// Возвращает двумерный массив размера m x n, заполненный случайными вещественными значениями +function MatrRandomReal(m: integer; n: integer): array [,] of real := MatrRandomReal(m,n,0,10); + +/// Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры +function ReadInteger(prompt: string): integer; +begin + Result := PABCSystem.ReadInteger(prompt); + if IsPT then exit; + OutputList.RemoveAt(OutputList.Count - 1); + OutputList.RemoveAt(OutputList.Count - 1); + CreateNewLineBeforeMessage := False; +end; + +/// Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры +function ReadlnInteger(prompt: string): integer; +begin + Result := PABCSystem.ReadlnInteger(prompt); + if IsPT then exit; + OutputList.RemoveAt(OutputList.Count - 1); + OutputList.RemoveAt(OutputList.Count - 1); + CreateNewLineBeforeMessage := False; +end; + +/// Выводит приглашение к вводу и возвращает два значения типа integer, введенные с клавиатуры +function ReadInteger2(prompt: string): (integer, integer); +begin + Result := PABCSystem.ReadInteger2(prompt); + if IsPT then exit; + OutputList.RemoveAt(OutputList.Count - 1); + OutputList.RemoveAt(OutputList.Count - 1); + CreateNewLineBeforeMessage := False; +end; + +function ReadString(prompt: string): string; +begin + Result := PABCSystem.ReadString(prompt); + if IsPT then exit; + OutputList.RemoveAt(OutputList.Count - 1); + OutputList.RemoveAt(OutputList.Count - 1); + CreateNewLineBeforeMessage := False; +end; + +function ReadlnString(prompt: string) := ReadString(prompt); + + +///- procedure Print(a,b,...); +/// Выводит значения a,b,... на экран, после каждого значения выводит пробел +procedure Print(params args: array of object); +begin + foreach var ob in args do + begin + PABCSystem.Print(ob); + if not IsPT then + OutputList.RemoveAt(OutputList.Count - 1) + end; + CreateNewLineBeforeMessage := True; +end; + +///- procedure Println(a,b,...); +/// Выводит значения a,b,... на экран, после каждого значения выводит пробел и переходит на новую строку +procedure Println(params args: array of object); +begin + Print(args); + Writeln; + if IsPT then exit; + CreateNewLineBeforeMessage := False; +end; + +/// Выводит значение экран и выводит пробел +procedure Print(ob: object); +begin + PABCSystem.Print(ob); + if IsPT then exit; + OutputList.RemoveAt(OutputList.Count - 1); + CreateNewLineBeforeMessage := True; +end; + +/// Выводит значение экран и выводит пробел +procedure Print(s: string); +begin + PABCSystem.Print(s); + if IsPT then exit; + OutputList.RemoveAt(OutputList.Count - 1); + CreateNewLineBeforeMessage := True; +end; + +/// Выводит значение экран и выводит пробел +procedure Print(c: char); +begin + PABCSystem.Print(object(c)); + if IsPT then exit; + OutputList.RemoveAt(OutputList.Count - 1); + CreateNewLineBeforeMessage := True; +end; + +// конец переопределенных функций с заполнением ввода-вывода + +procedure CompareTypeWithOutput(params a: array of System.Type); +begin + TaskResult := Solved; + var mn := Min(a.Length, OutputList.Count); + for var i := 0 to mn - 1 do + if a[i] <> OutputList[i].GetType then + raise new OutputTypeException(i + 1, TypeToTypeName(a[i]), TypeName(OutputList[i])); + if a.Length <> OutputList.Count then + raise new OutputCountException(OutputList.Count, a.Length); +end; + +/// Не меняет TaskResult если типы правильные +procedure CheckInputTypes(a: array of System.Type); +begin + // Несоответствие количества вводимых параметров + if a.Length <> InputList.Count then + raise new InputCountException(InputList.Count, a.Length); + for var i := 0 to a.Length - 1 do + if a[i] <> InputList[i].GetType then + raise new InputTypeException(i + 1, TypeToTypeName(a[i]), TypeName(InputList[i])); +end; + +/// Синоним CheckInputTypes +procedure CheckInput(a: array of System.Type) := CheckInputTypes(a); +procedure CheckInputIsEmpty := CheckInputTypes(new System.Type[0]); + +procedure CheckInputIsInitial; +begin + CheckInput(InitialInputList.ToArray); +end; + +procedure CheckInput(seq: sequence of System.Type) := CheckInputTypes(seq.ToArray); + +procedure CheckOutputAfterInitialSeq(seq: sequence of integer) := CheckOutputAfterInitial(ToObjArray(seq)); +procedure CheckOutputAfterInitialSeq(seq: sequence of real) := CheckOutputAfterInitial(ToObjArray(seq)); +procedure CheckOutputAfterInitialSeq(seq: sequence of string) := CheckOutputAfterInitial(ToObjArray(seq)); +procedure CheckOutputAfterInitialSeq(seq: sequence of boolean) := CheckOutputAfterInitial(ToObjArray(seq)); +procedure CheckOutputAfterInitialSeq(seq: sequence of char) := CheckOutputAfterInitial(ToObjArray(seq)); +procedure CheckOutputAfterInitialSeq(seq: sequence of object) := CheckOutputAfterInitial(seq.ToArray); +procedure CheckOutputAfterInitialSeq(seq: ObjectList) := CheckOutputAfterInitial(seq.lst.ToArray); + +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of integer); begin Silent := True; CheckOutputAfterInitialSeq(seq); Silent := False; end; +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of real); begin Silent := True; CheckOutputAfterInitialSeq(seq); Silent := False; end; +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of string); begin Silent := True; CheckOutputAfterInitialSeq(seq); Silent := False; end; +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of boolean); begin Silent := True; CheckOutputAfterInitialSeq(seq); Silent := False; end; +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of char); begin Silent := True; CheckOutputAfterInitialSeq(seq); Silent := False; end; +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of object); begin Silent := True; CheckOutputAfterInitialSeq(seq); Silent := False; end; +procedure CheckOutputAfterInitialSeqSilent(seq: ObjectList); begin Silent := True; CheckOutputAfterInitialSeq(seq); Silent := False; end; + + +procedure ClearOutputListFromSpaces; +begin + OutputList := OutputList.Where(s -> (not (s is string)) or ((s as string) <> ' ')).ToList; + OutputList := OutputList.Where(s -> (not (s is char)) or ((char(s)) <> ' ')).ToList; +end; + +procedure FilterOnlyNumbers; +begin + OutputList := OutputList.Where(x -> (x is integer) or (x is real) or (x is int64)).ToList; +end; + +procedure FilterOnlyNumbersAndBools; +begin + OutputList := OutputList.Where(x -> (x is integer) or (x is real) or (x is int64) or (x is boolean)).ToList; +end; + +function MsgColorCode(color: MessageColorT): char; +begin + Result := #65530; // Black + case color of + MsgColorGreen: Result := #65535; + MsgColorRed: Result := #65534; + MsgColorOrange: Result := #65533; + MsgColorMagenta: Result := #65532; + MsgColorGray: Result := #65531; + end; +end; + +procedure ColoredMessage(msg: string; color: MessageColorT); +begin + if Silent then exit; + + if CreateNewLineBeforeMessage then + Console.WriteLine; + Console.WriteLine(MsgColorCode(color) + msg); + CreateNewLineBeforeMessage := False; +end; + +procedure ColoredMessage(msg: string); +begin + if Silent then exit; + if CreateNewLineBeforeMessage then + Console.WriteLine; + Console.WriteLine(MsgColorCode(MsgColorRed) + msg); + CreateNewLineBeforeMessage := False; +end; + +procedure CheckOutputHelper(i0: integer; params arr: array of object); + procedure OutputTestResult; + begin + ColoredMessage($'Основной запуск верный',MsgColorGray); + ColoredMessage($'Ошибочное решение на тесте:',MsgColorOrange); + ColoredMessage($'Тестовые данные : {InputList.JoinToString}',MsgColorGray); + ColoredMessage($'Полученный результат : {OutputList.JoinToString}',MsgColorGray); + if i0 = 0 then + ColoredMessage($'Правильный результат : {arr.JoinToString}',MsgColorGray) + else ColoredMessage($'Правильный результат : {(OutputList[:i0]+arr).JoinToString}',MsgColorGray) + end; + +begin + if (TaskResult = InitialTask) and CancelMessagesIfInitial + or (TaskResult = BadInitialTask) then + exit; + + // Если мы попали сюда, то OutputList.Count >= InitialOutputList.Count + var mn := Min(arr.Length, OutputList.Count - i0); + + for var i := i0 to i0 + mn - 1 do + begin + // Если типы не совпадают + if (arr[i-i0].GetType.Name <> 'RuntimeType') and (arr[i-i0].GetType <> OutputList[i].GetType) or + (arr[i-i0].GetType.Name = 'RuntimeType') and (arr[i-i0] <> OutputList[i].GetType) + then + begin + if TestNumber > 0 then + OutputTestResult + else + begin + if i > InitialOutputList.Count then + ColoredMessage('Часть выведенных данных правильная',MsgColorGray); + end; + raise new OutputTypeException(i + 1, TypeToTypeName(arr[i-i0].GetType), TypeName(OutputList[i])); + end; + // Если значения не совпадают (если задан маркер типа, то проверка значений пропускается) + if (arr[i-i0].GetType.Name <> 'RuntimeType') and not CompareValues(arr[i-i0], OutputList[i]) then + begin + if i >= InitialOutputList.Count then // ? Если первое данное неправильное - всё равно попадаем сюда!!! + begin + if TestNumber > 0 then + OutputTestResult + else + begin + if i > InitialOutputList.Count then + ColoredMessage('Часть выведенных данных правильная',MsgColorGray); + if (i0 = 0) and (arr.Length = 1) then + //ColoredMessage($'Ожидалось значение {arr[i-i0]}, а выведено {OutputList[i]}',MsgColorGray) + else ColoredMessage($'Элемент {i + 1}: ожидалось значение {arr[i-i0]}, а выведено {OutputList[i]}',MsgColorGray); + end; + end; + TaskResult := BadSolution; + exit; + end; + end; + + if arr.Length <> OutputList.Count - i0 then + begin + if TestNumber > 0 then + OutputTestResult + else + if OutputList.Count > 0 then begin + if arr.Length > OutputList.Count - i0 then // выведено меньше чем надо + ColoredMessage('Все выведенные данные правильны',MsgColorGray) + else if arr.Length < OutputList.Count - i0 then // выведено больше чем надо + ColoredMessage('Все необходимые выведенные данные правильны',MsgColorGray); + end; + raise new OutputCountException(OutputList.Count, arr.Length + i0); + end; + TaskResult := Solved; +end; + +// Поправим сообщения об ошибке в соответствии с TestNumber +procedure CheckOutput(params arr: array of object); +begin + CheckOutputHelper(0,arr); +end; + +procedure CheckOutputSilent(params arr: array of object); +begin + Silent := True; + CheckOutput(arr); + Silent := False; +end; + +procedure CheckOutputAfterInitial(params arr: array of object); +begin + CheckOutputHelper(InitialOutputList.Count,arr); +end; + +procedure CheckOutputAfterInitialSilent(params arr: array of object); +begin + Silent := True; + CheckOutputAfterInitial(arr); + Silent := False; +end; + +procedure CheckOutputSeq(a: sequence of integer) := CheckOutput(ToObjArray(a)); +procedure CheckOutputSeq(a: sequence of real) := CheckOutput(ToObjArray(a)); +procedure CheckOutputSeq(a: sequence of string) := CheckOutput(ToObjArray(a)); +procedure CheckOutputSeq(a: sequence of char) := CheckOutput(ToObjArray(a)); +procedure CheckOutputSeq(a: sequence of boolean) := CheckOutput(ToObjArray(a)); +procedure CheckOutputSeq(a: sequence of object) := CheckOutput(a.ToArray); +procedure CheckOutputSeq(a: ObjectList) := CheckOutput(a.lst.ToArray); +procedure CheckOutputSeq(a: sequence of word) := CheckOutputSeq(ToObjArray(a)); + +procedure CheckOutputSeqSilent(a: sequence of integer) := begin Silent := True; CheckOutputSeq(a); Silent := False end; +procedure CheckOutputSeqSilent(a: sequence of real) := begin Silent := True; CheckOutputSeq(a); Silent := False end; +procedure CheckOutputSeqSilent(a: sequence of string) := begin Silent := True; CheckOutputSeq(a); Silent := False end; +procedure CheckOutputSeqSilent(a: sequence of char) := begin Silent := True; CheckOutputSeq(a); Silent := False end; +procedure CheckOutputSeqSilent(a: sequence of boolean) := begin Silent := True; CheckOutputSeq(a); Silent := False end; +procedure CheckOutputSeqSilent(a: sequence of object) := begin Silent := True; CheckOutputSeq(a); Silent := False end; +procedure CheckOutputSeqSilent(a: ObjectList) := begin Silent := True; CheckOutputSeq(a); Silent := False end; +procedure CheckOutputSeqSilent(a: sequence of word) := begin Silent := True; CheckOutputSeq(a); Silent := False end; + +procedure CheckOutputNew(params arr: array of object) := CheckOutput(arr); +procedure CheckOutputSeqNew(a: sequence of integer) := CheckOutputSeq(a); +procedure CheckOutputSeqNew(a: sequence of real) := CheckOutputSeq(a); +procedure CheckOutputSeqNew(a: sequence of string) := CheckOutputSeq(a); +procedure CheckOutputSeqNew(a: sequence of char) := CheckOutputSeq(a); +procedure CheckOutputSeqNew(a: sequence of boolean) := CheckOutputSeq(a); +procedure CheckOutputSeqNew(a: sequence of object) := CheckOutputSeq(a); +procedure CheckOutputSeqNew(a: sequence of word) := CheckOutputSeq(a); +procedure CheckOutputSeqNew(a: ObjectList) := CheckOutputSeq(a); + +procedure CheckOutputString(str: string); + function Char2Str(c: char): string; + begin + if (c = #10) or (c = #13) then + Result := '''ПереходНаНовуюСтроку''' + else Result := '''' + c + ''''; + end; +begin + if (TaskResult = InitialTask) or (TaskResult = BadInitialTask) then + exit; + var ostr := OutputString.ToString; + var mn := Min(str.Length, ostr.Length); + + var ind := -1; + for var i := 1 to mn do + begin + if str[i] <> ostr[i] then + begin + ind := i; + ColoredMessage($'Элемент {i}: ожидался символ {Char2Str(str[i])}, а выведен символ {Char2Str(ostr[i])}',MsgColorGray); + TaskResult := BadSolution; + exit; + end; + end; + if ind = -1 then + ind := mn; + + if str.Length <> ostr.Length then + begin + if (ind = mn) and (ind<>0) then + ColoredMessage('Все выведенные данные правильны',MsgColorGray) + else if ind > 0 then + ColoredMessage('Часть выведенных данных правильная',MsgColorGray); + raise new OutputCountException(ostr.Length, str.Length); + end; + + TaskResult := Solved; +end; + + +type + IntAr = array of integer; + RealAr = array of real; + IntAr2 = array [,] of integer; + RealAr2 = array [,] of real; + +function FlattenElement(x: object): List; +begin + var lst := new List; + if x is IntAr (var iarr) then + lst.AddRange(iarr.Select(x -> object(x))) + else if x is RealAr (var rarr) then + lst.AddRange(rarr.Select(x -> object(x))) + else if x is IntAr2 (var iarr) then + lst.AddRange(iarr.ElementsByRow.Select(x -> object(x))) + else if x is RealAr2 (var rarr) then + lst.AddRange(rarr.ElementsByRow.Select(x -> object(x))) + else if x is List (var larr) then + lst.AddRange(larr.Select(x -> object(x))) + else if x is List (var lrarr) then + lst.AddRange(lrarr.Select(x -> object(x))) + else lst.Add(x); + Result := lst; +end; + +procedure FlattenOutput; +begin + // если в OutputList массивы, вытянуть их в единый список + OutputList := OutputList.SelectMany(x -> FlattenElement(x)).ToList; +end; + +function NValues(n: integer): string; +begin + case n of + 0: Result := n + ' значений'; + 1: Result := n + ' значение'; + 2, 3, 4: Result := n + ' значения'; + 5..100000: Result := n + ' значений'; + end; +end; + +{=========================================================} +{ Итоговые функции для проверки решения } +{=========================================================} + +procedure RobotCheckSolution; +begin + TaskResult := BadSolution; + var t := System.Type.GetType('RobotField.RobotField'); + if t<>nil then + begin + TaskResultInfo := 'Robot'; + var f := t.GetField('RobField',System.Reflection.BindingFlags.Public or System.Reflection.BindingFlags.Static); + var IsSol := f.FieldType.GetMethod('IsSolution'); + var bool := IsSol.Invoke(f.GetValue(nil),nil); + if boolean(bool) then + TaskResult := Solved; + // RobField.TaskName + var RBTaskNameInfo := f.FieldType.GetField('TaskName'); + var v := string(RBTaskNameInfo.GetValue(f.GetValue(nil))); + // Добавлять RB к имени задания если его там нет + if not v.ToLower.StartsWith('rb') then + v := v.Insert(0,'RB'); + TaskName := v; + end; +end; + +procedure DrawmanCheckSolution; +begin + TaskResult := BadSolution; + var t := System.Type.GetType('DrawManField.DrawManField'); + if t<>nil then + begin + TaskResultInfo := 'Drawman'; + var f := t.GetField('DMField',System.Reflection.BindingFlags.Public or System.Reflection.BindingFlags.Static); + var IsSol := f.FieldType.GetMethod('IsSolution'); + var bool := IsSol.Invoke(f.GetValue(nil),nil); + if boolean(bool) then + TaskResult := Solved; + // DMField.TaskName + var DMTaskNameInfo := f.FieldType.GetField('TaskName'); + var v := string(DMTaskNameInfo.GetValue(f.GetValue(nil))); + // Добавлять DM к имени задания если его там нет + if not v.ToLower.StartsWith('dm') then + v := v.Insert(0,'DM'); + TaskName := v; + end; +end; + +// Вызов PT4.PT4.__FinalizeModule__ отражением +procedure PT4CheckSolution; +begin + var t := System.Type.GetType('PT4.PT4'); + if t<>nil then + begin + var meth := t.GetMethod('__FinalizeModule__',System.Reflection.BindingFlags.Public or System.Reflection.BindingFlags.Static); + if meth <> nil then + meth.Invoke(nil,nil); + // + var f := t.GetField('TaskName',System.Reflection.BindingFlags.Public or System.Reflection.BindingFlags.Static); + TaskName := string(f.GetValue(nil)); + end; +end; + +// Вызов PT4.PT4.GetSolutionInfo отражением +function GetSolutionInfoPT4: string; +begin + var t := System.Type.GetType('PT4.PT4'); + if t<>nil then + begin + var meth := t.GetMethod('GetSolutionInfo',System.Reflection.BindingFlags.Public or System.Reflection.BindingFlags.Static); + if meth <> nil then + Result := string(meth.Invoke(nil,nil)) + else Result := ''; + end; +end; + +procedure CalcPT4Result(info: string; var TaskResult: TaskStatus; var TaskResultInfo: string); +// info - строка, возвращаемая GetSolutionInfoPT4 + + function HasSubstr(s_ru, s_en: string): boolean; + begin + result := false; + if Pos(s_ru, info) > 0 then + result := true + else if Pos(s_en, info) > 0 then + result := true + end; + + function TypeNamePT(s: string): string; + begin + result := ''; + case s of + 'логического типа', 'of logical type': + result := 'boolean'; + 'целого типа', 'of integer type': + result := 'integer'; + 'вещественного типа', 'of real-number type': + result := 'real'; + 'символьного типа', 'of character type': + result := 'char'; + 'строкового типа', 'of string type': + result := 'string'; + end; + if result = '' then + if s.startswith('типа') then + result := copy(s, 6, 100) + else if s.startswith('of') then + begin + delete(s, 1, 3); + delete(s, length(s) - 4, 100); + result := s; + end; + end; + + procedure ExtractParts(var p1, p2, p3: string); + begin + var m := Regex.Match(info, 'Для ввода (.*)-го элемента \((.*)\) использована переменная (.*).'); + if m.Success then + begin + p1 := m.Groups[1].Value; + p2 := TypeNamePT(m.Groups[2].Value); + p3 := TypeNamePT(m.Groups[3].Value); + exit; + end; + m := Regex.Match(info, 'A variable (.*) is used for input of data item with the order number (.*) \((.*)\).'); + if m.Success then + begin + p1 := m.Groups[2].Value; + p2 := TypeNamePT(m.Groups[3].Value); + p3 := TypeNamePT(m.Groups[1].Value); + exit; + end; + + m := Regex.Match(info, 'Для вывода (.*)-го элемента \((.*)\) использовано выражение (.*).'); + if m.Success then + begin + p1 := m.Groups[1].Value; + p2 := TypeNamePT(m.Groups[2].Value); + p3 := TypeNamePT(m.Groups[3].Value); + exit; + end; + m := Regex.Match(info, 'An expression (.*) is used for output of data item with the order number (.*) \((.*)\).'); + if m.Success then + begin + p1 := m.Groups[2].Value; + p2 := TypeNamePT(m.Groups[3].Value); + p3 := TypeNamePT(m.Groups[1].Value); + exit; + end; + + m := Regex.Match(info, 'Количество выведенных данных: (.*) \(из (.*)\).'); + if m.Success then + begin + p1 := m.Groups[1].Value; + p2 := m.Groups[2].Value; + p3 := ''; + exit; + end; + m := Regex.Match(info, 'The program has output (.*) data item\(s\) \(the amount of the required items is (.*)\).'); + if m.Success then + begin + p1 := m.Groups[1].Value; + p2 := m.Groups[2].Value; + p3 := ''; + exit; + end; + + m := Regex.Match(info, 'Количество прочитанных данных: (.*) \(из (.*)\).'); + if m.Success then + begin + p1 := m.Groups[1].Value; + p2 := m.Groups[2].Value; + p3 := ''; + exit; + end; + m := Regex.Match(info, 'The program has used (.*) input data item\(s\) \(the amount of the required items is (.*)\).'); + if m.Success then + begin + p1 := m.Groups[1].Value; + p2 := m.Groups[2].Value; + p3 := ''; + exit; + end; + end; + +begin + // Если мы сюда зашли, то TaskResult уже под контролем. Но она и так должна быть TaskStatus.InitialTaskPT4 + TaskResult := TaskStatus.InitialTaskPT4; + TaskResultInfo := 'PT4'; + var p1, p2, p3: string; + if info = '' then + exit; + if HasSubstr('Задание выполнено', 'The task is solved') then + //ColoredMessage('Задание выполнено', MsgColorGreen) + TaskResult := TaskStatus.Solved + else if HasSubstr('Ошибочное решение', 'Wrong solution') then + //ColoredMessage('Неверное решение') + TaskResult := TaskStatus.BadSolution + else if HasSubstr('Неверно указан тип при выводе результатов', 'Invalid type is used for an output data item') then + begin + ExtractParts(p1, p2, p3); + TaskResult := TaskStatus.IOError; + TaskResultInfo := $'OutputType({p1},{p2},{p3})'; + //ColoredMessage($'Ошибка вывода. При выводе {p1}-го элемента типа {p2} выведено значение типа {p3}'); + end + else if HasSubstr('Выведены не все результирующие данные', 'Some data are not output') then + begin + ExtractParts(p1, p2, p3); + TaskResult := TaskStatus.IOError; + TaskResultInfo := $'OutputCount({p1},{p2})'; + //ColoredMessage($'Выведено {p1}, а требуется вывести {p2}', MsgColorOrange); + end + else if HasSubstr('Неверно указан тип при вводе исходных данных', 'Invalid type is used for an input data item') then + begin + ExtractParts(p1, p2, p3); + TaskResult := TaskStatus.IOError; + TaskResultInfo := $'InputType({p1},{p2},{p3})'; + //ColoredMessage($'Ошибка ввода. При вводе {p1}-го элемента типа {p2} использована переменная типа {p3}'); + end + else if HasSubstr('Введены не все требуемые исходные данные', 'Some required data are not input.') then + begin + ExtractParts(p1, p2, p3); + TaskResult := TaskStatus.IOError; + TaskResultInfo := $'InputCount({p1},{p2})'; + //ColoredMessage($'Введено {p1}, а требуется ввести {p2}', MsgColorOrange); + end + else if HasSubstr('Запуск с правильным вводом данных', 'Correct data input') then + begin + TaskResult := TaskStatus.PartialSolution; + //ColoredMessage('Запуск с правильным вводом данных', MsgColorGray) + end; + {else + ColoredMessage('PT4: '+info.Replace(#13#10, ' ').TrimStart().TrimEnd('.',' '));} +end; + +function ConvertTaskName(tn: string): string; +begin + var TName := tn; + // Если есть номер с подчеркиванием в начале, то отбросить его + var ind := TName.IndexOf('_'); + if (ind >= 0) and TName[1].IsDigit then // Значит, в начале - номер, он служит лишь для упорядочения файлов + TName := TName.Remove(0,ind + 1); + if TName.ToLower in TaskNamesMap then + TName := TaskNamesMap[TName.ToLower]; + Result := TName; +end; + +procedure ClearLists; +begin + CurPosInInputList := 0; + CurPosInInputListInTestMode := 0; + OutputString.Clear; + OutputList.Clear; + InputList.Clear; + InitialOutputList.Clear; + InitialInputList.Clear; +end; + +function InitSolveProcPair: (System.Reflection.MethodInfo, System.Reflection.MethodInfo); +begin + // Взял из PT.pas + var asm := System.Reflection.Assembly.GetExecutingAssembly; + var nm := asm.FullName; + Delete(nm, Pos(',', nm), length(nm)); + var prg := asm.GetType(nm+'.Program'); + var solveproc := prg.GetMethod('$Main'); + var initproc := prg.GetMethod('$_InitVariables_'); + if (solveproc = nil) or (initproc = nil) then + foreach var prg0 in asm.GetTypes() do + begin + prg := prg0; + solveproc := prg0.GetMethod('$Main'); + initproc := prg0.GetMethod('$_InitVariables_'); + if (solveproc <> nil) and (initproc <> nil) then + break; + end; + Result := (InitProc,SolveProc); +end; + +procedure CheckMyPT; +begin + if CheckTask = nil then + exit; + var TName := TaskName; + try + TName := ConvertTaskName(TaskName); + TestMode := tmNone; + TestNumber := 0; + CheckTask(TName); // может выдавать сообщения, предваряющие неверное решение, в CheckOutput. + if {not IsPT and not IsRobot and not IsDrawMan and} (TestCount > 0) then // То это LightPT - т.к. только в LightPT TestCount м.б. > 0 + begin + var (InitProc,SolveProc) := InitSolveProcPair; + + if (GenerateTestData <> nil) and (TaskResult = Solved) then + for var i:=1 to TestCount do + begin + TestNumber := i; + ClearLists; + TestMode := tmGenTest; + GenerateTestData(i); + + if TestMode<>tmAutoTest then + TestMode := tmTest; + try + if InitProc<>nil then + InitProc.Invoke(nil,nil); + SolveProc.Invoke(nil,nil); + except + on e: System.Reflection.TargetInvocationException do + raise e.InnerException; + end; + //InputList := InputList; + //OutputList := OutputList; + + CheckTask(TName); + if TaskResult = BadSolution then + break; // хоть один тест неудачный - выходим! + // Подумать над выводом ошибки при тестах + end; + end; + Silent := False; + // Если это задача из задачника, то результат будет NotUnderControl. И дальше необходимо это преобразовывать + case TaskResult of + Solved: ColoredMessage('Задание выполнено', MsgColorGreen); + BadSolution: begin + ColoredMessage('Неверное решение'); + end; + InitialTask: ; + BadInitialTask: ColoredMessage('Вы удалили часть кода - восстановите его!', MsgColorMagenta); + end; + except + // При тестировании тут вряд ли будут ошибки. Но могут + on e: OutputTypeException do + begin + Silent := False; + ColoredMessage($'Ошибка вывода. При выводе {e.n}-го элемента типа {e.ExpectedType} выведено значение типа {e.ActualType}'); + end; + on e: OutputCountException do + begin + Silent := False; + if e.Count = 0 then + ColoredMessage($'Требуется вывести {NValues(e.n)}', MsgColorGray) + else ColoredMessage($'Выведено {NValues(e.Count)}, а требуется вывести {e.n}', MsgColorOrange); + end; + on e: OutputCount2Exception do + begin + Silent := False; + if e.Count = 0 then + ColoredMessage($'Требуется вывести по крайней мере {NValues(e.i)}', MsgColorGray) + else ColoredMessage($'Выведено {NValues(e.Count)}, а требуется вывести по крайней мере {e.i}', MsgColorOrange); + end; + on e: InputTypeException do + begin + Silent := False; + ColoredMessage($'Ошибка ввода. При вводе {e.n}-го элемента типа {e.ExpectedType} использована переменная типа {e.ActualType}'); + end; + on e: InputCountException do + begin + Silent := False; + if e.Count = 0 then + ColoredMessage($'Требуется ввести {NValues(e.n)}', MsgColorGray) + else if e.n <> 0 then + ColoredMessage($'Введено {NValues(e.Count)}, а требуется ввести {e.n}', MsgColorOrange) + else ColoredMessage($'Введено {NValues(e.Count)}, хотя ничего вводить не требуется', MsgColorOrange); + end; + on e: InputCount2Exception do + begin + Silent := False; + if e.Count = 0 then + ColoredMessage($'Требуется ввести по крайней мере {NValues(e.i)}', MsgColorGray) + else ColoredMessage($'Введено {NValues(e.Count)}, а требуется ввести по крайней мере {e.i}', MsgColorOrange); + end; + on e: NotInTestModeException do + begin + Silent := False; + ColoredMessage($'Метод {e.FuncName} может вызываться только в режиме тестирования вне GenerateTestData! Он - внутренний и не предназначен для вызова разработчиком теста!', MsgColorOrange); + end; + on e: NotInTestGenModeException do + begin + Silent := False; + ColoredMessage($'Метод {e.FuncName} может вызываться только в режиме генерации тестов (в GenerateTestData)!', MsgColorOrange); + end; + on e: InputCountTest2Exception do + begin + Silent := False; + ColoredMessage($'Неверно составлен тест! Введено {NValues(e.Count)}, а требуется ввести по крайней мере {e.i}. Возможно, неверно заполнен InputList в GenerateTestData', MsgColorOrange); + end; + on e: InputTypeTestException do + begin + Silent := False; + ColoredMessage($'Неверно составлен тест! При вводе {e.n}-го элемента типа {e.ExpectedType} использована переменная типа {e.ActualType}. Возможно, неверно заполнен InputList в GenerateTestData'); + end; + on e: InputTestCountMismatchException do + begin + Silent := False; + ColoredMessage($'Неверно составлен тест! Несоответствие количества входных данных в тесте и основном запуске. Возможно, неверно заполнен InputList в GenerateTestData'); + end; + on e: InputTestTypesMismatchException do + begin + Silent := False; + ColoredMessage($'Неверно составлен тест! Несоответствие типов входных данных в тесте и основном запуске. Возможно, неверно заполнен InputList в GenerateTestData'); + end; + end; + // Для задачника надо вызывать процедуру __FinalizeModule__ из модуля PT4 jnhf;tybtv, а в модуле PT4 эту процедуру тогда не вызывть + // Для задачника в CheckTaskPT надо сказать, что проверяется задача из задачника. И выводить на экран ничего не надо - только в базу. + TaskResultInfo := TaskException.Info; + + var TaskPlatform := 'LT'; + + // Теперь тщательно проверяем задачник и исполнителей + if IsPT then + begin + PT4CheckSolution; + TName := TaskName; + var info := GetSolutionInfoPT4; + CalcPT4Result(info,TaskResult,TaskResultInfo); + TaskPlatform := 'PT'; + end + else if IsRobot then + begin + RobotCheckSolution; + TName := TaskName; + TaskPlatform := 'RB'; + end + else if IsDrawman then + begin + DrawmanCheckSolution; + TName := TaskName; + TaskPlatform := 'DM'; + end; + // Хотелось бы писать в БД для Робота и др. имя задания в Task + if WriteInfoCallBack<>nil then + WriteInfoCallBack(LessonName,TName,TaskPlatform,TaskResult,TaskResultInfo); +end; + +procedure LoadLightPTInfo; +begin + try + var lines := ReadAllLines(lightptname); + foreach var line in lines do + begin + if line.Trim = '' then + continue; + if LessonName = '' then + LessonName := line.ToWords.First // первое слово + else begin + var (name1,name2) := Regex.Split(line,'->'); + TaskNamesMap[name1.Trim.ToLower] := name2.Trim; + end; + end; + if LessonName = '' then + begin + // Имя текущей папки. Плохо - в lightpt забыли написать имя урока + //var ttt := ExtractFileDir(System.Environment.GetCommandLineArgs[0]); + var ttt := ExpandFileName('.'); + var LastDir := ttt.ToWords(System.IO.Path.DirectorySeparatorChar).LastOrDefault; + // Каталог может содержать пробелы. Брать первое слово + if LastDir<>nil then + LessonName := LastDir.ToWords.First; + end; + except + + end; +end; + +{=========================================================} +{ Процедуры для записи в базы данных } +{=========================================================} + +procedure WriteInfoToRemoteDatabase(auth: string; LessonName, TaskName, TaskPlatform, TaskResult, text, AdditionalInfo: string); +begin + // Считать логин пароль из auth + var data := System.IO.File.ReadAllBytes(auth); + var arr := Decrypt(data).Split(#10); + var login,pass: string; + if arr.Length >= 2 then + begin + login := arr[0]; + pass := arr[1]; + // Теперь как-то записать в БД информацию + var User := new ServerAccessProvider(ServerAddr); + var t2 := User.SendPostRequest(login, pass, LessonName, TaskName, TaskPlatform, TaskResult, text, AdditionalInfo); + var v := t2.Result; + v := v; + if v <> 'Success' then + ColoredMessage('Ошибка сервера: '+v, MsgColorGray); + //Console.WriteLine(v); + end; +end; + +procedure WriteInfoToDatabases(LessonName,TaskName,TaskPlatform: string; TaskResult: TaskStatus; AdditionalInfo: string := ''); +begin + try + System.IO.File.AppendAllText('db.txt', $'{LessonName} {TaskName} {dateTime.Now.ToString(''u'')} {TaskResult.ToString} {AdditionalInfo}' + #10); + except + on e: Exception do + ColoredMessage('Ошибка записи в файл db.txt. Обратитесь к преподавателю',MsgColorGray); + end; + // Разделили ошибки записи в локальную и глобальную базу + try + var auth := FindAuthDat(); // файл авторизации ищется либо в текущей папке либо в папке на уровень выше + var args := System.Environment.GetCommandLineArgs; + if (auth <> '') and (args.Length >= 3) and (args[2].ToLower = 'true') then + begin + var text := ''; + if (TaskResult <> InitialTask) and (args.Length >= 4) then + text := args[3]; + // Есть проблема паузы при плохой сети + WriteInfoToRemoteDatabase(auth,LessonName,TaskName,TaskPlatform,TaskResult.ToString, text, AdditionalInfo); + end + except + on e: System.AggregateException do + begin + foreach var x in e.InnerExceptions do + if x is HTTPRequestException then + ColoredMessage(x.InnerException?.Message??'',MsgColorGray) + else ColoredMessage(x.Message,MsgColorGray); + end; + on e: Exception do + ColoredMessage(e.Message,MsgColorGray); + end; +end; + +{===========================================================} +{ Переопределенные подсистемы ввода и вывода } +{===========================================================} +type + IOLightSystem = class(__ReadSignalOISystem) + public + procedure write(obj: object); override; + begin + if TestMode = tmNone then + inherited write(obj); + OutputString += _ObjectToString(obj); + OutputList += obj; + CreateNewLineBeforeMessage := True; + end; + + procedure writeln; override; + begin + if TestMode = tmNone then + inherited writeln; + OutputString += NewLine; + CreateNewLineBeforeMessage := False; + end; + + function ReadLine: string; override; + begin + if TestMode = tmTest then + Result := InputList.ReadTestDataString + else Result := inherited ReadLine; + + if not NeedAddDataToInputList then exit; + + InputList.Add(Result); + CreateNewLineBeforeMessage := False; + end; + + procedure readln; override; + begin + if TestMode = tmTest then + + else inherited readln; + CreateNewLineBeforeMessage := False; + end; + + procedure read(var x: integer); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataInt + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: real); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataReal + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: char); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataChar + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: string); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataString + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: byte); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataInt + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: shortint); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataInt + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: smallint); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataInt + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: word); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataInt + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: longword); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataInt + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: int64); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataInt + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: uint64); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataInt + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: single); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataReal + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: boolean); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataBoolean + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: BigInteger); override; + begin + inherited Read(x); + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + end; + +initialization + // Если LightPT добавляется в конец uses, то ее секция инициализации вызывается первой + // В этом случае ввод-вывод обязательно переключается, но потом он перекрывается и в основной программе не срабатывает + // Но в CheckPT используется ColoredMessage, которая выводит с помощью Console.WriteLine - ей всё равно + var tn := TypeName(CurrentIOSystem); + if (tn = 'IOStandardSystem') or (tn = '__ReadSignalOISystem') or (tn = 'IOGraphABCSystem') then + CurrentIOSystem := new IOLightSystem; + WriteInfoCallBack := WriteInfoToDatabases; + // Расшифровка LightPT.dat + LoadLightPTInfo; +finalization + CheckMyPT +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/NUnitABC.pas b/TestSuite/CompilationSamples/NUnitABC.pas new file mode 100644 index 000000000..62db4591b --- /dev/null +++ b/TestSuite/CompilationSamples/NUnitABC.pas @@ -0,0 +1,71 @@ +unit NUnitABC; + +{$reference nunit.framework.dll} +uses NUnit.Framework; + +procedure InitPABCSystem; +begin + __InitPABCSystem; + System.Console.OutputEncoding := Encoding.GetEncoding(866); +end; + +type + CombinatorialAttribute = NUnit.Framework.CombinatorialAttribute; + PairwiseAttribute = NUnit.Framework.PairwiseAttribute; + IgnoreAttribute = NUnit.Framework.IgnoreAttribute; + OrderAttribute = NUnit.Framework.OrderAttribute; + SetUpAttribute = NUnit.Framework.SetUpAttribute; + TearDownAttribute = NUnit.Framework.TearDownAttribute; + TestAttribute = NUnit.Framework.TestAttribute; + TestCaseAttribute = NUnit.Framework.TestCaseAttribute; + TimeoutAttribute = NUnit.Framework.TimeoutAttribute; + RandomAttribute = NUnit.Framework.RandomAttribute; + RangeAttribute = NUnit.Framework.RangeAttribute; + RepeatAttribute = NUnit.Framework.RepeatAttribute; + TestFixtureAttribute = NUnit.Framework.TestFixtureAttribute; + ValuesAttribute = NUnit.Framework.ValuesAttribute; + + Assert = NUnit.Framework.Assert; + Assume = NUnit.Framework.Assume; + Does = NUnit.Framework.Does; + Has = NUnit.Framework.Has; + &Is = NUnit.Framework.Is; + StringAssert = NUnit.Framework.StringAssert; + Warn = NUnit.Framework.Warn; + + AllOperator = NUnit.Framework.Constraints.AllOperator; + AndOperator = NUnit.Framework.Constraints.AndOperator; + BinaryOperator = NUnit.Framework.Constraints.BinaryOperator; + CollectionOperator = NUnit.Framework.Constraints.CollectionOperator; + Interval = NUnit.Framework.Constraints.Interval; + OrOperator = NUnit.Framework.Constraints.OrOperator; + WithOperator = NUnit.Framework.Constraints.WithOperator; + + Tolerance = NUnit.Framework.Constraints.Tolerance; + + Constraint = NUnit.Framework.Constraints.Constraint; + + AndConstraint = NUnit.Framework.Constraints.AndConstraint; + AnyOfConstraint = NUnit.Framework.Constraints.AnyOfConstraint; + BinaryConstraint = NUnit.Framework.Constraints.BinaryConstraint; + CollectionConstraint = NUnit.Framework.Constraints.CollectionConstraint; + EndsWithConstraint = NUnit.Framework.Constraints.EndsWithConstraint; + EqualConstraint = NUnit.Framework.Constraints.EqualConstraint; + FalseConstraint = NUnit.Framework.Constraints.FalseConstraint; + GreaterThanConstraint = NUnit.Framework.Constraints.GreaterThanConstraint; + GreaterThanOrEqualConstraint = NUnit.Framework.Constraints.GreaterThanOrEqualConstraint; + LessThanConstraint = NUnit.Framework.Constraints.LessThanConstraint; + LessThanOrEqualConstraint = NUnit.Framework.Constraints.LessThanOrEqualConstraint; + NotConstraint = NUnit.Framework.Constraints.NotConstraint; + OrConstraint = NUnit.Framework.Constraints.OrConstraint; + RangeConstraint = NUnit.Framework.Constraints.RangeConstraint; + StartsWithConstraint = NUnit.Framework.Constraints.StartsWithConstraint; + StringConstraint = NUnit.Framework.Constraints.StringConstraint; + SubStringConstraint = NUnit.Framework.Constraints.SubStringConstraint; + TrueConstraint = NUnit.Framework.Constraints.TrueConstraint; + + AssertionException = NUnit.Framework.AssertionException; + +begin + +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/PT4Databases.pas b/TestSuite/CompilationSamples/PT4Databases.pas new file mode 100644 index 000000000..dbe3f8767 --- /dev/null +++ b/TestSuite/CompilationSamples/PT4Databases.pas @@ -0,0 +1,509 @@ +unit PT4Databases; +//uses PrintAttributeUnit; + +function PrintAttributeString(a: object): string; forward; +function PrintAttributeString(a: object; fProvider: System.IFormatProvider): string; forward; + +type + Country = auto class + private + _name, _capital: string; + _population: integer; + _continent: string; + public + [PrintAttribute(0, -32)] + property Name: string read _name; + [PrintAttribute(' ', 1, -19)] + property Capital: string read _capital; + [PrintAttribute(3, 13, 'd')] + property Population: integer read _population; + [PrintAttribute(' ', 2, -9)] + property Continent: string read _continent; + end; + + Страна = auto class + private + _name, _capital: string; + _population: integer; + _continent: string; + public + [PrintAttribute(0, -32)] + property Название: string read _name; + [PrintAttribute(' ', 1, -19)] + property Столица: string read _capital; + [PrintAttribute(3, 13, 'd')] + property Население: integer read _population; + [PrintAttribute(' ', 2, -9)] + property Континент: string read _continent; + end; + + + ТипПола = (Муж, Жен); + + Pupil = auto class + private + _name: string; + _gender: ТипПола; + _height: integer; + _cls: integer; + _inSunSchool: boolean; + function getGender: ТипПола := _gender; + public + [PrintAttribute(0, -16)] + property Name: string read _name; + [PrintAttribute(' ', 1, -3)] + property Gender: ТипПола read getGender; + [PrintAttribute(' ', 2, 3, 'd')] + property Height: integer read _height; + [PrintAttribute(' ',3, 2, 'd')] + property Cls: integer read _cls; + [PrintAttribute(' ', 4, -5)] + property InSunSchool: boolean read _inSunSchool; + end; + + Ученик = auto class + private + _name: string; + _gender: ТипПола; + _height: integer; + _cls: integer; + _inSunSchool: boolean; + function getGender: ТипПола := _gender; + public + [PrintAttribute(0, -16)] + property Фамилия: string read _name; + [PrintAttribute(' ', 1, -3)] + property Пол: ТипПола read getGender; + [PrintAttribute(' ', 2, 3, 'd')] + property Рост: integer read _height; + [PrintAttribute(' ',3, 2, 'd')] + property Класс: integer read _cls; + [PrintAttribute(' ', 4, -5)] + property УчитсяВКШ: boolean read _inSunSchool; + end; + +function GenderToТипПола(a: string): ТипПола := a = 'Муж' ? Муж : Жен; +function InSunSchoolToBoolean(a: string): boolean := a = 'Да'; + +type + Fitness = auto class + private + _code, _year, _month, _time: integer; + public +// [PrintAttribute('( Code = ', 0, 2)] +// property Код: integer read _code; + [PrintAttribute('( Code = ', 0, 2)] + property Code: integer read _code; +// [PrintAttribute(' , Year = ', 1, 4)] +// property Год: integer read _year; + [PrintAttribute(' , Year = ', 1, 4)] + property Year: integer read _year; +// [PrintAttribute(' , Month = ', 2, 2)] +// property Месяц: integer read _month; + [PrintAttribute(' , Month = ', 2, 2)] + property Month: integer read _month; +// [PrintAttribute(' , Time = ', 3, 2)] +// property Время: integer read _time; + [PrintAttribute(' , Time = ', 3, 2)] + property Time: integer read _time; + function ToString: string; override; + begin + result := PrintAttributeString(self); + end; + end; + + Abitur = auto class + private + _name: string; + _year: integer; + _school: integer; + public +// [PrintAttribute('( Name = ', 0, -11)] +// property Фамилия: string read _name; + [PrintAttribute('( Name = ', 0, -11)] + property Name: string read _name; +// [PrintAttribute(', Year = ', 1, 4)] +// property Год: integer read _year; + [PrintAttribute(', Year = ', 1, 4)] + property Year: integer read _year; +// [PrintAttribute(' , School = ', 2, 2)] +// property Школа: integer read _school; + [PrintAttribute(' , School = ', 2, 2)] + property School: integer read _school; + function ToString: string; override; + begin + result := PrintAttributeString(self); + end; + end; + + Debtor = auto class + private + _name: string; + _flat: integer; + _debt: real; + public +// [PrintAttribute('( Name = ', 0, -11)] +// property Фамилия: string read _name; + [PrintAttribute('( Name = ', 0, -11)] + property Name: string read _name; +// [PrintAttribute(', Flat = ', 1, 3)] +// property Квартира: integer read _flat; + [PrintAttribute(', Flat = ', 1, 3)] + property Flat: integer read _flat; +// [PrintAttribute(' , Debt = ', 2, 7, 'f2')] +// property Долг: real read _debt; + [PrintAttribute(' , Debt = ', 2, 7, 'f2')] + property Debt: real read _debt; +// [PrintAttribute(' , Entrance = ', 3, 1)] +// property Подъезд: integer read (_flat - 1) div 36 + 1; + [PrintAttribute(' , Entrance = ', 3, 1)] + property Entrance: integer read (_flat - 1) div 36 + 1; +// [PrintAttribute(' , Floor = ', 4, 1)] +// property Этаж: integer read (_flat - 1) mod 36 div 4 + 1; + [PrintAttribute(' , Floor = ', 4, 1)] + property Floor: integer read (_flat - 1) mod 36 div 4 + 1; + function ToString: string; override; + begin + result := PrintAttributeString(self); + end; + end; + +FuelStation = auto class + private + _brand, _price: integer; + _company, _street: string; + public +// [PrintAttribute('( Brand = ', 0, 2)] +// property Марка: integer read _brand; + [PrintAttribute('( Brand = ', 0, 2)] + property Brand: integer read _brand; +// [PrintAttribute(', Price = ', 1, 4)] +// property Цена: integer read _price; + [PrintAttribute(', Price = ', 1, 4)] + property Price: integer read _price; +// [PrintAttribute(', Company = ', 2, -12)] +// property Компания: string read _company; + [PrintAttribute(', Company = ', 2, -12)] + property Company: string read _company; +// [PrintAttribute(', Street = ', 3, -15)] +// property Улица: string read _street; + [PrintAttribute(', Street = ', 3, -15)] + property Street: string read _street; + function ToString: string; override; + begin + result := PrintAttributeString(self); + end; + end; + +PupilExam = auto class + private + _name: string; + _school, _point0, _point1, _point2: integer; +// [PrintAttribute(' , Point : ', 2, 3)] +// property Балл0: integer read _point0; + [PrintAttribute(' , Point : ', 2, 3)] + property Point0: integer read _point0; +// [PrintAttribute(' , ', 3, 3)] +// property Балл1: integer read _point1; + [PrintAttribute(' , ', 3, 3)] + property Point1: integer read _point1; +// [PrintAttribute(' , ', 4, 3)] +// property Балл2: integer read _point2; + [PrintAttribute(' , ', 4, 3)] + property Point2: integer read _point2; + public +// [PrintAttribute('( Name = ', 0, -16)] +// property ФИО: string read _name; + [PrintAttribute('( Name = ', 0, -16)] + property Name: string read _name; +// [PrintAttribute(', School = ', 1, 2)] +// property Школа: integer read _school; + [PrintAttribute(', School = ', 1, 2)] + property School: integer read _school; +// property Балл: array of integer read Arr(_point0, _point1, _point2); + property Point: array of integer read Arr(_point0, _point1, _point2); + function ToString: string; override; + begin + result := PrintAttributeString(self); + end; + end; + +PupilMark = auto class + private + _name: string; + _cls: integer; + _subject: string; + _mark: integer; + public +// [PrintAttribute('( Name = ', 0, -16)] +// property ФИО: string read _name; + [PrintAttribute('( Name = ', 0, -16)] + property Name: string read _name; +// [PrintAttribute(', Cls = ', 1, 2)] +// property Класс: integer read _cls; + [PrintAttribute(', Cls = ', 1, 2)] + property Cls: integer read _cls; +// [PrintAttribute(' , Subject = ', 2, -11)] +// property Предмет: string read _subject; + [PrintAttribute(' , Subject = ', 2, -11)] + property Subject: string read _subject; +// [PrintAttribute(' , Mark = ', 3, 1)] +// property Оценка: integer read _mark; + [PrintAttribute(' , Mark = ', 3, 1)] + property Mark: integer read _mark; + function ToString: string; override; + begin + result := PrintAttributeString(self); + end; + end; + +function ЗаполнитьМассивСтран: array of Страна; +begin + var fname := 'c:\Program files (x86)\PascalABC.NET\Files\Databases\Страны.csv'; + if fname = '' then + raise new System.ApplicationException('Не найден массив стран Databases\Страны.csv'); + Result := ReadLines(fname) + .Select(s->s.ToWords(';')) + .Select(w->new Страна(w[0],w[1],w[2].ToInteger,w[3])).ToArray; +end; + +function GetCountries: array of Country; +begin + var fname := 'c:\Program files (x86)\PascalABC.NET\Files\Databases\Страны.csv'; + if fname = '' then + raise new System.ApplicationException('Не найден массив стран Databases\Страны.csv'); + Result := ReadLines(fname) + .Select(s->s.ToWords(';')) + .Select(w->new Country(w[0],w[1],w[2].ToInteger,w[3])).ToArray; +end; + +function ЗаполнитьМассивУчеников: array of Ученик; +begin + var fname := 'c:\Program files (x86)\PascalABC.NET\Files\Databases\Ученики.csv'; + if fname = '' then + raise new System.ApplicationException('Не найден массив учеников Databases\Ученики.csv'); + Result := ReadLines(fname) + .Select(s->s.ToWords(';')) + .Select(w->new Ученик(w[0],GenderToТипПола(w[2]),w[4].ToInteger,w[1].ToInteger, + InSunschoolToBoolean(w[3]))).ToArray; +end; + +function GetPupils: array of Pupil; +begin + var fname := 'c:\Program files (x86)\PascalABC.NET\Files\Databases\Ученики.csv'; + if fname = '' then + raise new System.ApplicationException('Не найден массив учеников Databases\Ученики.csv'); + Result := ReadLines(fname) + .Select(s->s.ToWords(';')) + .Select(w->new Pupil(w[0],GenderToТипПола(w[2]),w[4].ToInteger,w[1].ToInteger, + InSunschoolToBoolean(w[3]))).ToArray; +end; + +function GetFitness: array of Fitness; +begin + var fname := 'Fitness.tst'; + if not FileExists(fname) then + begin + fname := 'Fitness.txt'; + if not FileExists(fname) then + raise new System.IO.FileNotFoundException('Не найден файл-источник для массива объектов Fitness'); + end; + try + Result := ReadLines(fname) + .Select(s->s.ToWords(',')) + .Select(w->new Fitness(w[0].ToInteger,w[1].ToInteger,w[2].ToInteger,w[3].ToInteger)).ToArray; + except + raise new System.FormatException('Файл-источник для массива объектов Fitness содержит неверные данные'); + end; +end; + +function GetAbiturs: array of Abitur; +begin + var fname := 'Abitur.tst'; + if not FileExists(fname) then + begin + fname := 'Abitur.txt'; + if not FileExists(fname) then + raise new System.IO.FileNotFoundException('Не найден файл-источник для массива объектов Abitur'); + end; + try + Result := ReadLines(fname) + .Select(s->s.ToWords(',')) + .Select(w->new Abitur(w[0],w[1].ToInteger,w[2].ToInteger)).ToArray; + except + raise new System.FormatException('Файл-источник для массива объектов Abitur содержит неверные данные'); + end; +end; + +function GetDebtors: array of Debtor; +begin + var fname := 'Debtor.tst'; + if not FileExists(fname) then + begin + fname := 'Debtor.txt'; + if not FileExists(fname) then + raise new System.IO.FileNotFoundException('Не найден файл-источник для массива объектов Debtor'); + end; + try + Result := ReadLines(fname) + .Select(s->s.ToWords(',')) + .Select(w->new Debtor(w[0],w[1].ToInteger,w[2].ToReal)).ToArray; + except + raise new System.FormatException('Файл-источник для массива объектов Debtor содержит неверные данные'); + end; +end; + +function GetFuelStations: array of FuelStation; +begin + var fname := 'FuelStation.tst'; + if not FileExists(fname) then + begin + fname := 'FuelStation.txt'; + if not FileExists(fname) then + raise new System.IO.FileNotFoundException('Не найден файл-источник для массива объектов FuelStation'); + end; + try + Result := ReadLines(fname) + .Select(s->s.ToWords(',')) + .Select(w->new FuelStation(w[0].ToInteger,w[1].ToInteger,w[2],w[3])).ToArray; + except + raise new System.FormatException('Файл-источник для массива объектов FuelStation содержит неверные данные'); + end; +end; + +function GetPupilExams: array of PupilExam; +begin + var fname := 'PupilExam.tst'; + if not FileExists(fname) then + begin + fname := 'PupilExam.txt'; + if not FileExists(fname) then + raise new System.IO.FileNotFoundException('Не найден файл-источник для массива объектов PupilExam'); + end; + try + Result := ReadLines(fname) + .Select(s->s.ToWords(',')) + .Select(w->new PupilExam(w[0],w[1].ToInteger,w[2].ToInteger,w[3].ToInteger,w[4].ToInteger)).ToArray; + except + raise new System.FormatException('Файл-источник для массива объектов PupilExam содержит неверные данные'); + end; +end; + +function GetPupilMarks: array of PupilMark; +begin + var fname := 'PupilMark.tst'; + if not FileExists(fname) then + begin + fname := 'PupilMark.txt'; + if not FileExists(fname) then + raise new System.IO.FileNotFoundException('Не найден файл-источник для массива объектов PupilMark'); + end; + try + Result := ReadLines(fname) + .Select(s->s.ToWords(',')) + .Select(w->new PupilMark(w[0],w[1].ToInteger,w[2],w[3].ToInteger)).ToArray; + except + raise new System.FormatException('Файл-источник для массива объектов PupilMark содержит неверные данные'); + end; +end; + +function PrintAttributeString(a: object; fProvider: System.IFormatProvider): string; +begin + var t := a.GetType(); + var res := new Dictionary(); + foreach var p in t.GetProperties(System.Reflection.BindingFlags.Public + or System.Reflection.BindingFlags.NonPublic or System.Reflection.BindingFlags.Instance) do + begin + var att := p.GetCustomAttribute(typeof(PrintAttribute), false) as PrintAttribute; + if att = nil then + continue; + var (c, n, w, f) := (att.Comment, att.Num, att.Width, att.Fmt); + var val := ''; + var o := p.GetValue(a, nil); + if (f <> '') and (o is System.IFormattable) then + begin + val := System.IFormattable(o).ToString(f, fProvider); + end + else + begin + val := o.ToString; + end; + if w > 0 then + val := val.PadLeft(w) + else if w < 0 then + val := val.PadRight(-w); + res[n] := c + val; + end; + result := nil; + if res.Keys.Count = 0 then + exit; + result := ''; + foreach var k in res.Keys.OrderBy(e -> e) do + begin + result += res[k]; + end; + var delim := Copy(result, 2, 1); + if result.StartsWith('{') then + result += (delim = ' ') ? ' }' : '}' + else if result.StartsWith('[') then + result += (delim = ' ') ? ' ]' : ']' + else if result.StartsWith('(') then + result += (delim = ' ') ? ' )' : ')' + else if result.StartsWith('''') then + result += (delim = ' ') ? ' ''' : '''' + else if result.StartsWith('"') then + result += (delim = ' ') ? ' "' : '"'; +end; + +function PrintAttributeString(a: object): string; +begin + result := PrintAttributeString(a, nil); +end; + +function ToStr(params a: array of object): string; +begin + result := ''; + var b := false; + foreach var e in a do + begin + if b then + result += ' ' + else + b := true; + if e is real then + result += real(e).ToString(2) + else if e is string then + result += e.ToString() + else if e.GetType.FullName.StartsWith('System.Tuple') then + begin + var b1 := false; + foreach var e1 in e.GetType.GetProperties do + begin + if b1 then + result += ' ' + else + b1 := true; + result += ToStr(Arr(e1.GetValue(e,nil))); + end; + end + else if e is System.Collections.IEnumerable then + begin + var b1 := false; + var e1 := (e as System.Collections.IEnumerable).GetEnumerator; + while e1.MoveNext do + begin + if b1 then + result += ' ' + else + b1 := true; + result += ToStr(Arr(e1.Current)); + end; + end + else + result += e.ToString(); + end; +end; + +begin + +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Speech.pas b/TestSuite/CompilationSamples/Speech.pas new file mode 100644 index 000000000..24067a128 --- /dev/null +++ b/TestSuite/CompilationSamples/Speech.pas @@ -0,0 +1,32 @@ +// Copyright (c) Ivan Bondarev, Stanislav Mikhalkovich (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) +{$reference System.Speech.dll} +unit Speech; + +interface + +procedure Speak(s: string); + +procedure SpeakAsync(s: string); + +implementation + +uses System.Speech.Synthesis; + +var ss: SpeechSynthesizer; + +procedure Speak(s: string); +begin + ss.Speak(s) +end; + +procedure SpeakAsync(s: string); +begin + ss.SpeakAsync(s) +end; + +begin + ss := new SpeechSynthesizer; + var voices := ss.GetInstalledVoices; + ss.SelectVoice(voices[0].VoiceInfo.Name) +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Tasks.pas b/TestSuite/CompilationSamples/Tasks.pas new file mode 100644 index 000000000..9fa381d27 --- /dev/null +++ b/TestSuite/CompilationSamples/Tasks.pas @@ -0,0 +1,15 @@ +// Базовый модуль-заглушка. Переопределяется в каталогах решаемых заданий +unit Tasks; + +uses LightPT; + +procedure CheckTaskT(name: string); +begin + TaskResult := NotUnderControl; + +end; + +initialization + CheckTask := CheckTaskT; +finalization +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Tasks1Arr.pas b/TestSuite/CompilationSamples/Tasks1Arr.pas new file mode 100644 index 000000000..5ec92597c --- /dev/null +++ b/TestSuite/CompilationSamples/Tasks1Arr.pas @@ -0,0 +1,258 @@ +unit Tasks1Arr; + +uses LightPT; + +var AllTaskNames: array of string; + +procedure CheckTaskT(name: string); +begin + FlattenOutput; + ClearOutputListFromSpaces; + case name of + 'Arr0': begin + ClearOutputListFromSpaces; + CheckData(Empty); + CheckOutputSeq(Arr(5,4,3,2,1,777,5,4,3,2,1,777)); + end; + 'Arr1': begin + ClearOutputListFromSpaces; + CheckData(Empty); + CheckOutputSeq(Arr(777,1,1,1,777)); + end; + 'Arr2': begin + var n := 5; + ClearOutputListFromSpaces; + CheckData(Input := |cInt|*n); + GenerateTests(10,tInt*n); + var il := IntArr(n); + CheckOutputSeq(il.Select(x->x+1)); + end; + 'Arr3': begin + var n := 5; + ClearOutputListFromSpaces; + CheckData(Input := |cInt|*n); + GenerateTests(10,tInt*n); + var il := IntArr(n); + CheckOutputSeq(il.Select(x->x*2)); + end; + 'Arr4': begin + var n := 10; + ClearOutputListFromSpaces; + CheckData(Input := |cInt|*n); + GenerateTests(10,tInt*n); + var il := IntArr(n); + CheckOutputSeq(il+il.Select(x->x*x)); + end; + 'Arr5': begin + var n := 10; + ClearOutputListFromSpaces; + CheckData(Input := |cInt|*n); + GenerateTests(10,tInt*n); + var il := IntArr(n); + CheckOutputSeq(il+il.Reverse); + end; + 'ArrErr1': begin + TaskResult := TaskStatus.ErrFix + end; + 'ArrErr2': begin + TaskResult := TaskStatus.ErrFix + end; + 'Arr1Sum': begin + var n := 10; + ClearOutputListFromSpaces; + CheckData(Input := |cInt|*n); + GenerateTests(10,tInt*n); + var il := InputListAsIntegers.Select(x->x*0.1); + CheckOutputSeq(il+il.Sum); + end; + 'Arr2Prod': begin + CancelMessagesIfInitial := False; + ClearOutputListFromSpaces; + var n := 8; + CheckData(|cRe|*n, |cRe|*n); + GenerateTests(10,tRe(1,10,1)*n); + var il := ReArr(n).Select(x->x); + CheckOutputAfterInitial(il.Product); + end; + 'Arr1_If': begin + CancelMessagesIfInitial := False; + ClearOutputListFromSpaces; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt*n); + var il := IntArr(n); + CheckOutputSeq(il+il.Where(x->x.IsEven)); + end; + 'Arr2_If': begin + CancelMessagesIfInitial := False; + ClearOutputListFromSpaces; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt*n); + var il := IntArr(n); + CheckOutputSeq(il+il.Where((x,i)->i.IsOdd)); + end; + 'Arr0_Count': begin + CancelMessagesIfInitial := False; + ClearOutputListFromSpaces; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt*n); + var il := IntArr(n); + CheckOutputSeq(il+il.Count(x->x.IsOdd)); + end; + 'Arr1_Sum': begin + ClearOutputListFromSpaces; + var n := InputList.Count; + GenerateTests(10,tInt*n); + var il := InputListAsIntegers.Where(x->x in 3..5).ToArray; + CheckOutputSeq(InputListAsIntegers+il+il.sum); + end; + 'Arr2_Count': begin + ClearOutputListFromSpaces; + var n := InputList.Count; + GenerateTests(10,tInt*n); + var il := InputListAsIntegers; + CheckOutputSeq(il+il.CountOf(2)+il.CountOf(3)+il.CountOf(4)+il.CountOf(5)); + end; + 'Arr1_MinMax': begin + ClearOutputListFromSpaces; + var n := InputList.Count; + GenerateTests(10,tInt*n); + var il := InputListAsIntegers; + CheckOutputSeq(il+il.Min); + end; + 'Arr2_MinMax': begin + ClearOutputListFromSpaces; + var n := InputList.Count; + GenerateTests(10,tInt*n); + var il := InputListAsIntegers; + CheckOutputSeq(il+il.Max); + end; + 'Arr3_MinMax': begin + ClearOutputListFromSpaces; + var n := InputList.Count; + GenerateTests(10,tInt*n); + var il := InputListAsIntegers; + CheckOutputSeq(il+il.IndexMin); + end; + 'ПоискВМассиве': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt*n); + var a := InputListAsIntegers; + CheckOutputAfterInitial(5 in a); + end; + 'ПоискВМассивеСтрок': begin + CheckData(InitialInput := |cStr|, InitialOutput := |cStr|*8); + GenerateTests('Козлов','Серов','Иванова','Петров','Умнова','Хулиганкин','Белова','Ослов'); + var s := Str(0); + var a := Arr('Козлов','Серов','Иванова','Петров','Умнова','Хулиганкин','Белова','Ослов'); + CheckOutputAfterInitial(s in a); + end; + 'Заполнение1': begin + CheckData(Empty); + CheckOutputSeq(Arr(0,1,4,9,16,25,36,49,64,81)); + end; + 'Заполнение2Арифм': begin + CheckData(Empty); + CheckOutputSeq(ArrGen(10,1,x->x+2)); + end; + 'Заполнение3Арифм': begin + CheckData(Empty); + CheckOutputSeq(ArrGen(10,1,x->x+2)); + end; + 'Заполнение4Арифм': begin + CheckData(Empty); + CheckOutputSeq(ArrGen(10,1.0,x->x+0.5)); + end; + 'Заполнение1Геом': begin + CheckData(Empty); + CheckOutputSeq(ArrGen(10,1,x->x*2)); + end; + 'ЗаполнениеЧисламиФибоначчи': begin + CheckData(Empty); + CheckOutputSeq(ArrGen(10,1,1,(x,y)->x+y)); + end; + 'СоседниеЭлементы1': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt*n); + var a := IntArr(n); + var ol := new ObjectList; + ol.AddRange(a.Pairwise.Where(\(x,y)->xt[1])); + CheckOutputAfterInitialSeq(ol); + end; + 'СоседниеЭлементы2': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt*n); + var a := InputListAsIntegers; + var ol := new ObjectList; + ol.AddRange(a); + ol.Add(a.Pairwise.Where(\(x,y)->x begin + var n := Random(5,10); + var a := ArrRandomInteger(n); + InputList.AddTestData(|n|+a); + end; + var a := IntArr(n); + var ares := a.Reverse.ToArray; + CheckOutputAfterInitialSeq(ares); + end; + 'СтрокаКакМассив1': begin + CancelMessagesIfInitial := False; + CheckData(InitialOutput := |cStr|*2); + CheckOutputSeq(Arr('бочка','ночка','дочка','кочка','почка','точка')); + end; + 'СтрокаКакМассив2': begin + CheckOutputSeq(Arr('миг','мир','пир','пар')); + end; + 'СтрокаКакМассив3': begin + CancelMessagesIfInitial := False; + var s := 'на паркете написана абракадабра'; + CheckData(InitialOutput := |cStr|*1); + + var ol := new ObjectList; + ol.Add(s); + ol.Add(s.CountOf('а')); + CheckOutputSeq(ol); + end; + 'СтрокаКакМассив4': begin + CheckOutput(True); + end; + 'СтрокаКакМассив5': begin + CheckOutputSeq(Arr('абракадабра','эбрэкэдэбрэ')); + end; + + + end; +end; + +initialization + CheckTask := CheckTaskT; + AllTaskNames := Arr('Arr0','Arr1','Arr2','Arr3','Arr4','Arr5', + 'ArrErr1','ArrErr2','Arr1Sum','Arr2Prod','Arr1_If','Arr2_If','Arr0_Count','Arr1_Sum','Arr2_Count', + 'Arr1_MinMax','Arr2_MinMax','Arr3_MinMax', + 'ПоискВМассиве','ПоискВМассивеСтрок', + 'Заполнение1','Заполнение2Арифм','Заполнение3Арифм','Заполнение4Арифм','Заполнение1Геом','ЗаполнениеЧисламиФибоначчи', + 'СоседниеЭлементы1','СоседниеЭлементы2', + 'ИнвертированиеМассива1','ИнвертированиеМассива2', + 'СтрокаКакМассив1','СтрокаКакМассив2','СтрокаКакМассив3','СтрокаКакМассив4','СтрокаКакМассив5' ); +finalization +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Tasks1Begin.pas b/TestSuite/CompilationSamples/Tasks1Begin.pas new file mode 100644 index 000000000..ddb5d95f1 --- /dev/null +++ b/TestSuite/CompilationSamples/Tasks1Begin.pas @@ -0,0 +1,235 @@ +unit Tasks1Begin; + +uses LightPT; + +var AllTaskNames: array of string; + +procedure CheckTaskT(name: string); +begin + ClearOutputListFromSpaces; + + case name of + 'Var_1': begin + CheckData(InitialOutput := |cInt|); + CheckOutput(3,32); + end; + 'Var_2': begin + CheckData(InitialOutput := |cInt|*2); + CheckOutput(3,4,20,45); + end; + 'Var_4': begin + CheckData(Input := Empty); + CheckOutput(25,3.14,100,0.75); + end; + 'Var_5': begin + TaskResult := Solved; + end; + 'Var_6': begin + CheckData(Input := Empty); + CompareTypeWithOutput(cStr,cStr,cStr,cStr,cInt,cInt); + end; + 'Calculations1': begin + CheckData(InitialOutput := |cInt|*3); + CheckOutput(35,65,35+65,35*65); + end; + 'Calculations2': begin + CheckData(InitialOutput := |cInt,cInt,cStr,cInt|); + CheckOutput(35,65,cStr,35+65,cStr,35*65); + end; + 'Calculations3': begin + CheckData(InitialOutput := |cStr,cInt,cInt,cInt|); + CheckOutput(cStr,3,4,5,cStr,3+4+5); + end; + 'Calculations4': begin + CheckData(InitialOutput := |cStr,cInt|); + CheckOutput(cStr,253,cStr,253/10,cStr,253/100); + end; + 'Read1': begin + CheckData(InitialInput := |cInt,cInt|); + TestCount := 5; + GenerateTestData := tnum -> begin + var (a,b) := Random2(1,100); + InputList.AddTestData(|a,b|); + end; + CheckOutput(Int(0)+Int(1)); + end; + 'Read2': begin + FilterOnlyNumbersAndBools; + CheckData(Input := |cRe,cRe|); + var S := Re(0)*Re(1); + var P := 2*(Re(0)+Re(1)); + TestCount := 10; + GenerateTests(10, tRe(1,10,digits := 0)*2); + CheckOutputSilent(S,P); // Все сообщения ColoredMessage гасятся + if TaskResult <> Solved then + CheckOutput(P,S); + end; + 'Task1': begin + FilterOnlyNumbersAndBools; + CheckData(Input := |cRe,cRe|); + var S := Re(0)+Re(1); + var P := Re(0)*Re(1); + GenerateTests(10,tRe(1,10,0)*2); // Это когда нет особых случаев + CheckOutputSilent(S,P); // Все сообщения ColoredMessage гасятся + if TaskResult <> Solved then + CheckOutput(P,S); + end; + 'Task2': begin + FilterOnlyNumbersAndBools; + CheckData(Input := |cRe|); + var x := Re(0); + TestCount := 10; + GenerateTestData := tnum -> begin // это когда есть особый случай + var a: real; + if tnum = 5 then + a := RandomReal(1,100,digits := 0) + else a := RandomReal(1,10,digits := 0); + InputList.AddTestData(|a|); + end; + CheckOutput(x*x,x*x*x,x*x*x*x); + end; + 'Intermediate1': begin + CheckData(Input := Empty); + CheckOutput(27); + end; + 'Intermediate2': begin + CheckData(Input := Empty); + CheckOutput(2.5); + end; + 'Swap1': + begin + FilterOnlyNumbers; + CheckData(Input := Empty); + CheckOutput(666.666, 555.555); + end; + 'Swap2': CheckOutput('Иванов', 'Петров', 'Петров', 'Иванов'); + 'AssignAdd1': + begin + FilterOnlyNumbers; + CheckData(InitialOutput := |cInt, cInt|); + CheckOutputSeq(Arr(1..9)); + end; + 'AssignAdd2': + begin + FilterOnlyNumbers; + CheckInitialOutput(cInt, cInt, cInt); + CheckOutput(1, 2, 4, 7, 11, 16, 22, 29, 37, 46); + end; + 'AssignMult': + begin + FilterOnlyNumbers; + CheckInitialOutput(cInt, cInt); + CheckOutput(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024); + end; + 'AssignMultAddGame': + begin + FilterOnlyNumbers; + CheckData(Input := Empty); + if OutputList.Count <> 1 then + begin + ColoredMessage('Вы должны вывести ровно одно значение'); + exit; + end; + TaskResult := TaskStatus.PartialSolution; + if CompareValues(OutputList[0],18) then + exit; + if CompareValues(OutputList[0],33) then + ColoredMessage('Молодец! Теперь получи в переменной a значение 67',MsgColorGray) + else CheckOutput(67); + end; + 'AssignMultAddКруги': + begin + FilterOnlyNumbers; + CheckData(Input := Empty); + CheckOutput(38); + end; + 'Sqrt1': + begin + FilterOnlyNumbers; + CheckData(Input := Empty); + if OutputList.Count <> 1 then + begin + ColoredMessage('Вы должны вывести ровно одно значение'); + exit; + end; + TaskResult := TaskStatus.PartialSolution; + if CompareValues(OutputList[0],Sqrt(2)) then + exit; + if CompareValues(OutputList[0],Sqrt(3)) then + ColoredMessage('Молодец! Теперь получи значение Sqrt(5)',MsgColorGray) + else if CompareValues(OutputList[0],Sqrt(5)) then + ColoredMessage('Молодец! Теперь получи значение Sqrt(7)',MsgColorGray) + else if CompareValues(OutputList[0],Sqrt(7)) then + CheckOutput(Sqrt(7)) // Верно + else CheckOutput(Sqrt(7)) // Неверно + end; + 'Abs_1': + begin + FilterOnlyNumbers; + CheckData(Input := Empty); + // Просто поясняющее сообщение + ColoredMessage('Abs - функция, убирающая знак числа. В математике известна как модуль числа', MsgColorGray); + end; + 'Abs_2_AB': + begin + FilterOnlyNumbers; + CheckData(InitialOutput := |cInt| * 6); + CheckOutput(5,3,2,-1,5,6,7,4,3,9,18,9); + end; + 'SwapProc1': + begin + FilterOnlyNumbers; + CheckData(Input := Empty); + CheckOutput(3,1,7,5,1,3,5,7); + end; + 'SwapProc2': + begin + FilterOnlyNumbers; + CheckData(Input := Empty); + CheckOutput(1,2,3,4,2,1,3,4,2,3,1,4,2,3,4,1); + end; + 'DivMod01': + begin + FilterOnlyNumbers; + CheckData(Input := Empty); + // Просто поясняющее сообщение + ColoredMessage('Перепишите результат в тетрадь', MsgColorGray); + end; + 'DivMod02': + begin + FilterOnlyNumbers; + CheckData(InitialOutput := |cInt|*6); + CheckOutputAfterInitial(3,1,5,1,7,1); + //ColoredMessage('Если x - четно, то x mod 2 = 0', MsgColorGray); + end; + 'DivMod03': + begin + TaskResult := PartialSolution; + FilterOnlyNumbers; + CheckData(Input := Empty); + if OutputList.Count = 6 then + begin + if CompareValues(OutputList[0],37) then + ColoredMessage('Измените значение a на 123', MsgColorGray) + else if CompareValues(OutputList[0],123) then + ColoredMessage('Верно. Проверьте еще значение a = 12345', MsgColorGray) + else if CompareValues(OutputList[0],12345) then + begin + ColoredMessage('Верно!', MsgColorGreen); + TaskResult := Solved; + end; + end; + end; + + end; +end; + +initialization + CheckTask := CheckTaskT; + AllTaskNames := Arr('Var_1','Var_2','Var_4','Var_5','Var_6', + 'Calculations1','Calculations2','Calculations3','Calculations4', + 'Read1','Read2','Task1','Task2','Intermediate1','Intermediate2','Swap1','Swap2', + 'AssignAdd1','AssignAdd2','AssignMult','AssignMultAddGame','AssignMultAddКруги', + 'Sqrt1','Abs_1','Abs_2_AB','SwapProc1','SwapProc2','DivMod01','DivMod02','DivMod03' ); +finalization +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Tasks1BoolIfCase.pas b/TestSuite/CompilationSamples/Tasks1BoolIfCase.pas new file mode 100644 index 000000000..034b3778f --- /dev/null +++ b/TestSuite/CompilationSamples/Tasks1BoolIfCase.pas @@ -0,0 +1,435 @@ +unit Tasks1BoolIfCase; + +uses LightPT; + +var AllTaskNames: array of string; + +procedure CheckTaskT(name: string); +begin + ClearOutputListFromSpaces; + + case name of + 'Types1': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutput(cInt,cRe,cStr); + end; + 'Types2': begin + CheckData(Input := |cInt,cRe,cStr|); + CheckOutput(Int(0),Re(1),Str(2)); + end; + 'Types3': begin + CheckData(Empty); + CheckOutput(cInt,cRe,cStr); + end; + 'Boo1': begin + end; + 'Boo2': begin + CheckOutput(False,True); + if TaskResult = BadSolution then + TaskResult := InitialTask + end; + 'Boo3': begin + FilterOnlyNumbersAndBools; + CheckData(Empty); + CheckOutput(54,54 mod 3 = 0,54,54 mod 3 = 5) + end; + 'Boo4': begin + // Задачник + end; + 'Boo5_And_Or': begin + FilterOnlyNumbersAndBools; + CheckData(Empty); + CheckOutput(cBool,cBool); + end; + 'Boo7': begin + FilterOnlyNumbersAndBools; + CheckOutput(True); + //if TaskResult = BadSolution then + // TaskResult := InitialTask + end; + 'If1Пароль': begin + CheckData(InitialInput := |cInt|); + //if int(0)=777 then + CheckOutput('Пароль правильный'); + end; + 'If2Пароль': begin + CheckData(Input := |cInt|); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := Random(1,1000); + if tnum = 5 then + a := 777; + InputList.AddTestData(|a|); + end; + if int(0)=777 then + CheckOutput('Пароль правильный') + else CheckOutput('Попытка взлома системы!'); + end; + 'If3ПроверкаИмени': begin + CheckData(InitialInput := |cStr|); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := Arr('Саша','Петя','Вася','Оля').RandomElement; + if tnum = 5 then + a := 'Саша'; + InputList.AddTestData(|a|); + end; + if Str(0)='Саша' then + CheckOutput('Привет Саша! Я тебя знаю') + else CheckOutput('Я тебя не знаю'); + end; + 'If4Четное': begin + CheckData(InitialInput := |cInt|); + GenerateTests(20,|tInt(1,100)|); + if Int(0) mod 2 = 0 then + CheckOutput(Int(0),'Четное') + else CheckOutput(Int(0),'Нечетное'); + end; + 'If5ЛогинПарольAnd': begin + CancelMessagesIfInitial := False; + CheckData(InitialInput := |cStr,cInt|); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := Arr('Angel','Demon','Ogr').RandomElement; + var p := Arr(777,666,555).RandomElement; + if tnum = 5 then + (a,p) := ('Angel',777); + InputList.AddTestData(|object(a),object(p)|); + end; + if (Str(0) = 'Angel') and (Int(1) = 777) then + CheckOutput('Вход разрешен') + else CheckOutput('Попытка взлома системы!'); + end; + 'If6ЛогинOr': begin + CheckData(InitialInput := |cStr|); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := Arr('Angel','Demon','Alex','John','Olga','Iris').RandomElement; + if tnum = 5 then + a := 'Angel' + else if tnum = 6 then + a := 'Demon'; + InputList.AddTestData(a); + end; + if (Str(0) = 'Angel') or (Str(0) = 'Devil') then + CheckOutput('Вход разрешен') + else CheckOutput('Попытка взлома системы!'); + end; + 'If7Not': begin + FilterOnlyNumbersAndBools; + CheckOutput(True,False); + if TaskResult = BadSolution then + TaskResult := PartialSolution; + end; + 'If8Зима': begin + CheckData(Input := |cInt|); + var m := Int(0); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := Random(1,12); + case tnum of + 5: a := 12; + 6: a := 1; + 7: a := 2; + end; + InputList.AddTestData(a); + end; + CheckOutput(m in |12,1,2|? 'Зима':'Не зима') + end; + 'If8ЧетДвузнач': begin + CheckData(Input := |cInt|); + var x := Int(0); + TestCount := 20; + GenerateTestData := tnum -> begin + var x := Random(5,15); + case tnum of + 5: x := 9; + 6: x := 10; + 7: x := 99; + 8: x := 100; + end; + InputList.AddTestData(x); + end; + var b := x.IsEven and (x in 10..99); + if b then + CheckOutput('Это чётное двузначное') + else CheckOutput(); + end; + 'If9ВДиапазоне': begin + CheckData(Input := |cInt|); + var x := Int(0); + var b := x in 3..5; + TestCount := 20; + GenerateTestData := tnum -> begin + var x := Random(1,5); + case tnum of + 5: x := 2; + 6: x := 3; + 7: x := 5; + 8: x := 6; + end; + InputList.AddTestData(x); + end; + if b then + CheckOutput('экзамен сдан') + else CheckOutput('экзамен не сдан') + end; + 'If9НеВДиапазоне': begin + CheckData(Input := |cInt|); + var H := Int(0); + TestCount := 20; + GenerateTestData := tnum -> begin + var x := Random(100,200); + case tnum of + 5: x := 149; + 6: x := 150; + 7: x := 190; + 8: x := 191; + end; + InputList.AddTestData(x); + end; + + var b := H not in 150..190; + if b then + CheckOutput('Необычный рост') + else CheckOutput('Норма') + end; + 'Minmax_2': begin + CheckData(InitialOutput := |cInt|); + CheckOutputSeq(Arr(3,5,3,5,6,6)); + end; + 'ВложенныеIf2': begin + CheckData(Input := |cStr,cInt|); + TestCount := 10; + GenerateTestData := tnum -> begin + var name := Arr('Alex','Bob','John').RandomElement; + var pass := Arr(555,666,777).RandomElement; + case tnum of + 1: (name,pass) := ('Alex',666); + 2: (name,pass) := ('Alex',777); + 3: (name,pass) := ('Bob',666); + 4: (name,pass) := ('Bob',444); + end; + InputList.AddTestData(name); + InputList.AddTestData(pass); + end; + if (Str(0) = 'Alex') then + if (Int(1) = 666) then + CheckOutput('Вход разрешен') + else CheckOutput('Пароль неверен') + else CheckOutput('Логин неверен'); + end; + 'ЦепочечныеIf1': begin + CheckData(Input := |cInt|); + GenerateTests(20,|tInt(1,4)|); + case Int(0) of + 1: CheckOutput('Зима'); + 2: CheckOutput('Весна'); + 3: CheckOutput('Лето'); + 4: CheckOutput('Осень'); + end; + end; + 'ЦепочечныеIf2': begin + CheckData(Input := |cInt|); + GenerateTests(20,|tInt(2,5)|); + case Int(0) of + 2: CheckOutput('неудовлетворительно'); + 3: CheckOutput('удовлетворительно'); + 4: CheckOutput('хорошо'); + 5: CheckOutput('отлично'); + end; + end; + //'ЦепочечныеIf3': begin end; + 'ЦепочечныеIf4': begin + CheckData(Input := |cStr|); + TestCount := 4; + GenerateTestData := tnum -> begin + var word: string; + case tnum of + 1: word := 'черное'; + 2: word := 'высокий'; + 3: word := 'худой'; + 4: word := 'хорошо'; + end; + // жуткое исключение если в InputList ничего не добавить!!! + InputList.AddTestData(word); + end; + case Str(0) of + 'черное' : CheckOutput('белое'); + 'высокий': begin + CheckOutputSilent('низкий'); + if TaskResult = TaskStatus.BadSolution then + CheckOutput('невысокий'); + end; + 'худой' : begin + CheckOutputSilent('толстый'); + if TaskResult = TaskStatus.BadSolution then + CheckOutputSilent('полный'); + if TaskResult = TaskStatus.BadSolution then + CheckOutput('жирный'); + end; + 'хорошо' : CheckOutput('плохо'); + else CheckOutput(''); + end; + end; + 'ЦепочечныеIf5': begin + CheckData(Input := |cInt|); + //GenerateTests(20,tInt(1,6)*1); + GenerateTests(1,2,3,4,5,6); + // Хотелось бы генерировать неслучайные тесты из некоторого диапазона + // Непонятно, как совмещать несколько параметров + case Int(0) of + 1,5: CheckOutput(1); + 3,4: CheckOutput(2); + 2,6: CheckOutput(3); + end; + end; + 'If0Situations1': begin + CheckData(Input := |cInt|); + GenerateTests(10,tInt(-1,1)*1); + if Int(0)<0 then + CheckOutput('отрицательное') + else if Int(0)=0 then + CheckOutput('равно 0') + else CheckOutput('положительное') + end; + 'Holidays': begin + CheckData(Input := |cInt,cInt|); + var (d,m) := (Int(0),Int(1)); + //GenerateTests(список кортежей) + //GenerateTests(список значений) + GenerateTests((1,1),(23,2),(8,3),(1,5),(9,5),(12,6),(4,11),(12,12),(7,13)); + if (d,m) = (1,1) then + CheckOutput('Новый год') + else if (d,m) = (23,2) then + CheckOutput('День защитника Отечества') + else if (d,m) = (8,3) then + CheckOutput('Международный женский день') + else if (d,m) = (1,5) then + CheckOutput('Первомай') + else if (d,m) = (9,5) then + CheckOutput('День Победы') + else if (d,m) = (12,6) then + CheckOutput('День России') + else if (d,m) = (4,11) then + CheckOutput('День народного единства') + else CheckOutput(''); + end; + 'IfXSituations2': begin + CheckData(Input := |cInt|); + GenerateTests(-2,-1,0,1,2); + if Int(0) < 3 then + CheckOutput('x меньше 3') + else if Int(0) in 3..5 then + CheckOutput('x от 3 до 5') + else if Int(0) > 5 then + CheckOutput('x больше 5') + end; + 'IfDiscriminant': begin + CheckData(Input := |cRe,cRe,cRe|); + GenerateTests(20,tRe(-3,3,digits := 1)*3); + var (a,b,c) := (Re(0),Re(1),Re(2)); + var d := B*B-4*A*C; + if d<0 then + CheckOutput('Корней нет') + else if d=0 then + CheckOutput('Один корень') + else CheckOutput('Два корня') + end; + 'Case1': begin + CheckData(InitialInput := |cInt|); + GenerateTests(1,2,3,4,5,6,7); + case Int(0) of + 1: CheckOutput('Понедельник'); + 2: CheckOutput('Вторник'); + 3: CheckOutput('Среда'); + 4: CheckOutput('Четверг'); + 5: CheckOutput('Пятница'); + 6: CheckOutput('Суббота'); + 7: CheckOutput('Воскресенье'); + end; + end; + 'Case2': begin + CheckData(InitialInput := |cInt|); + GenerateTests(1,2,3,4,5,6); + case Int(0) of + 2: CheckOutput('Двойка'); + 3: CheckOutput('Тройка'); + 4: CheckOutput('Четверка'); + 5: CheckOutput('Пятерка'); + else CheckOutput('Не оценка'); + end; + end; + 'Case3': begin + CheckData(InitialInput := |cInt|); + GenerateTests(1,2,3,4,5,6,7,8,9,10,11,12); + case Int(0) of + 12,1,2: CheckOutput('Зима'); + 3..5: CheckOutput('Весна'); + 6..8: CheckOutput('Лето'); + 9..11: CheckOutput('Осень'); + end; + end; + 'Case4': begin + CheckData(InitialInput := |cInt|); + GenerateTests(1,2,3,4,5,6,7,8,9,10,11,12); + case Int(0) of + 4,6,9,11: CheckOutput(30); + 2: CheckOutput(28); + else CheckOutput(31); + end; + end; + 'Diapason1_Case': begin + CheckData(InitialInput := |cInt|); + GenerateTests(20,tInt(80,230)*1); + case Int(0) of + 80..119: CheckOutput('Карлик'); + 120..149: CheckOutput('Низкий'); + 150..179: CheckOutput('Средний'); + 180..230: CheckOutput('Высокий'); + end; + end; + 'TranslateRobot': begin + CheckData(InitialInput := |cInt|); + GenerateTests('Left','Right','Up','Down'); + case Str(0) of + 'Left': CheckOutput('Влево'); + 'Right': CheckOutput('Вправо'); + 'Up': CheckOutput('Вверх'); + 'Down': CheckOutput('Вниз'); + end; + end; + 'Комнаты': begin + CheckData(InitialInput := |cInt|); + GenerateTests(1,2,3,4,5,6); + case Int(0) of + 1,5: CheckOutput(1); + 3,4: CheckOutput(2); + 2,6: CheckOutput(3); + end; + end; + 'Спецагенты': begin + CheckData(InitialInput := |cStr|); + GenerateTests('Икс','Омега','Игрек','Кси','Бета','Зед','Пси','Вася','Петя','Оля'); + case Str(0) of + 'Икс', 'Омега': CheckOutput(1); + 'Игрек', 'Кси', 'Бета': CheckOutput(2); + 'Зед', 'Пси': CheckOutput(3); + else CheckOutput(999); + end; + end; + end; +end; + +initialization + CheckTask := CheckTaskT; + AllTaskNames := Arr('Types1','Types2','Types3', + 'Boo1','Boo2','Boo3','Boo4','Boo5_And_Or','Boo7', + 'If1Пароль','If2Пароль','If3ПроверкаИмени','If4Четное','If5ЛогинПарольAnd','If6ЛогинOr','If7Not', + 'If8Зима','Зима','If8ЧетДвузнач','If9ВДиапазоне','If9НеВДиапазоне','Minmax_2','ВложенныеIf2', + 'ЦепочечныеIf1','ЦепочечныеIf2','ЦепочечныеIf3','ЦепочечныеIf4','ЦепочечныеIf5', + 'If0Situations1','Holidays','IfXSituations2','IfDiscriminant', + 'Case1','Case2','Case3','Case4','Diapason1_Case','TranslateRobot','Комнаты','Спецагенты'); +finalization +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Tasks1Loops.pas b/TestSuite/CompilationSamples/Tasks1Loops.pas new file mode 100644 index 000000000..91f79360c --- /dev/null +++ b/TestSuite/CompilationSamples/Tasks1Loops.pas @@ -0,0 +1,865 @@ +unit Tasks1Loops; + +uses LightPT; + +var AllTaskNames: array of string; + +procedure CheckTaskT(name: string); +begin + ClearOutputListFromSpaces; + + case name of + 'LoopErr2': begin + TaskResult := ErrFix; + if OutputString.ToString = '*' then + ColoredMessage('Сотри ; после do!',MsgColorGray); + if OutputString.ToString = '*'*50 then + ColoredMessage('Молодец! И помни: нельзя ставить ; после do!',MsgColorGray); + end; + 'LoopErr3': begin + TaskResult := ErrFix; + if OutputList.Count = 11 then + ColoredMessage('Используй begin end для объединения нескольких операторов в один!',MsgColorGray); + if OutputList.Count = 20 then + ColoredMessage('Молодец! Если в цикле - несколько действий, окайми их операторными скобками begin-end',MsgColorGray); + end; + 'Loop_Arithm1': begin + ClearOutputListFromSpaces; + var n := 10; + CheckData(InitialOutput := |cInt|*n); + CheckOutputAfterInitialSeq(ArrGen(n,1,i->i+2)); + end; + 'Loop_Arithm2': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + var sq := ObjectList.New.AddArithm(10,19,-2).AddArithm(9,1.1,0.1); + CheckOutputSeq(sq); + end; + 'For1': begin + ClearOutputListFromSpaces; + CheckData(Empty); + TaskResult := InitialTask; + ColoredMessage('Что лучше в данном случае: цикл loop или цикл for?',msgColorGray); + end; + 'For1a': begin + ClearOutputListFromSpaces; + var n := 10; + CheckData(InitialOutput := |cInt|*n); + var sq := ObjectList.New.AddArithm(10,2,2).AddArithm(10,2,2); + CheckOutputSeq(sq); + end; + 'For1b': begin + ClearOutputListFromSpaces; + var n := 10; + CheckData(InitialOutput := |cInt|*n); + var sq := ObjectList.New.AddArithm(10,1,2).AddArithm(10,1,2); + CheckOutputSeq(sq); + end; + 'For1b_step': begin + ClearOutputListFromSpaces; + CheckData(Empty); + var sq := ObjectList.New.AddArithm(10,2,2).AddArithm(10,1,2); + CheckOutputSeq(sq); + end; + 'For1c': begin + ClearOutputListFromSpaces; + CheckData(Empty); + var sq := ObjectList.New.AddArithm(11,15,-1); + CheckOutputSeq(sq); + end; + 'For1d': begin + ClearOutputListFromSpaces; + CheckData(Empty); + var sq := ObjectList.New.AddArithm(10,20,-2); + CheckOutputSeq(sq); + end; + 'For1e': begin + ClearOutputListFromSpaces; + CheckData(Empty); + var sq := ObjectList.New.AddArithm(10,5,5).AddArithm(7,40,-4); + CheckOutputSeq(sq); + end; + 'For1f': begin + ClearOutputListFromSpaces; + CheckData(Empty); + var sq := ObjectList.New.AddArithm(9,1.9,-0.1).AddArithm(9,1.9,-0.1); + CheckOutputSeq(sq); + end; + 'ForErr1': begin + TaskResult := ErrFix; // Задание на исправление ошибок + ColoredMessage('Всегда описывайте переменную i в заголовке цикла for',msgColorGray); + end; + 'ForErr2': begin + TaskResult := ErrFix; + var a := OutputString.ToString.ToWords(NewLine); + ColoredMessage('Описывайте переменную i в заголовке цикла for: for var i',msgColorGray); + if a.Length < 2 then + ColoredMessage('Между циклами необходимо вызвать команду Println перехода на новую строку',msgColorRed); + end; + 'ForErr3': begin + TaskResult := ErrFix; + ColoredMessage('Запомните: операторы не могут писаться до begin основной программы',msgColorGray); + end; + 'ForErr4': begin + CheckData(Empty); + var sq := ObjectList.New.AddArithm(11,15,-1); + CheckOutputSeq(sq); + end; + 'ForErr5': begin + CheckData(Empty); + //CheckInitialOutputValues('*'); + CheckOutputSeq(ArrFill(50,'*')); + end; + 'ForErr6': begin + TaskResult := ErrFix; + ColoredMessage('Если в цикле выполняется два и более действий, окаймите их begin end',msgColorGray); + end; + 'ForErr7': begin + TaskResult := ErrFix; + ColoredMessage('В данном случае лучше использовать цикл loop',msgColorGray); + end; + 'Tabl1': begin + CheckData(InitialOutput := |cInt|*20); + var sq := (1..10).SelectMany(x -> |x,x*x,x*x*x|); + CheckOutputSeq(sq); + end; + 'Tabl2': begin + CheckData(Empty); + var sq := (1..10).SelectMany(x -> |object(x),object(sqrt(x))|); // приводим к object поскольку типы разные + CheckOutputSeq(sq); + end; + 'Tabl4': begin + CheckData(Empty); + var sq := PartitionPoints(1.1,1.9,8).SelectMany(x -> |x,x*x|); + CheckOutputSeq(sq); + end; + 'Sum1': begin + // Частичные решения не проработаны. Они крайне редки конечно + TaskResult := PartialSolution; // Решение состоит в последовательном решении нескольких родственных задач + FilterOnlyNumbers; + //CheckInitialOutputValues(55); + if (OutputList.Count = 1) and OutIsInt(0) then + begin + var a := OutInt(0); + if a=4905 then + ColoredMessage('Отлично! Теперь найдите сумму квадратов всех двузначных чисел', MsgColorGray) + else if a=328065 then + TaskResult := Solved; + end; + end; + 'Sum1a': begin + FilterOnlyNumbers; + CheckData(Input := |cInt|*2); + var (a,b) := (Int(0),Int(1)); + TestCount := 10; + GenerateTestData := tnum -> begin + var (a,b) := Random2(1..20); + if a>b then Swap(a,b); + InputList.AddTestData(|a,b|); + end; + CheckOutput((a..b).Sum); + end; + 'Sum2': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutput((11..99).Step(2).Sum); + end; + 'Sum3': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutput((1..9).Select(x->x*0.1+1.0).Sum); + end; + 'Sum4': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutput((1..9).Select(x->1/x).Sum); + end; + 'Prod1': begin + TaskResult := PartialSolution; + FilterOnlyNumbers; + if CompareValuesWithOutput(3*3*3*3*3*3*3) then + ColoredMessage('Вычислите 4 в степени 6', MsgColorGray) + else if CompareValuesWithOutput(4*4*4*4*4*4) then + ColoredMessage('Вычислите 5 в степени 5', MsgColorGray) + else if CompareValuesWithOutput(5*5*5*5*5) then + TaskResult := Solved + else if not CompareValuesWithOutput(2*2*2*2*2) then + TaskResult := BadSolution + end; + 'Prod2_Power': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutput(2**3,3**7,4**6,5**5); + end; + 'Prod3_Fact': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutput(2*3*4*5*6*7,2*3*4*5*6*7*8,2*3*4*5*6*7*8*9*10); + end; + 'Geom1': begin + FilterOnlyNumbers; + CheckData(InitialOutput := |cInt|*11); + var sq := ObjectList.New.AddGeom(15,1,3); + CheckOutputAfterInitialSeq(sq); + end; + 'Geom2': begin + FilterOnlyNumbers; + CheckData(Empty); + var sq := ObjectList.New.AddGeom(11,1,10); + sq.Add(integer.MaxValue); + if OutputList.Count = 11 then + ColoredMessage('Выведите integer.MaxValue - самое большое целое типа integer',MsgColorMagenta); + CheckOutputSeqNew(sq); + end; + 'Geom3': begin + FilterOnlyNumbers; + CheckData(Empty); + var sq := ObjectList.New.AddGeom(20,1.0,10.0); + sq.Add(real.MaxValue); + if OutputList.Count = 20 then + ColoredMessage('Выведите real.MaxValue - самое большое целое типа real',MsgColorMagenta); + CheckOutputSeqNew(sq); + end; + 'Geom4': begin + FilterOnlyNumbers; + CheckData(Empty); + var sq := ObjectList.New.AddGeom(8,1.0,0.999); + CheckOutputSeq(sq); + end; + 'Loop_If_1': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialInput := |cInt|*n); + GenerateTests(10,tInt(1,100)*n); + + var a := IntArr(n); + CheckOutputSeq(a.Where(x->x.IsEven)); + end; + 'Loop_If_2': begin + var n := 10; + CheckData(Input := |cInt|*n); + TestCount := 10; + GenerateTestData := tnum -> begin + var x := ArrRandomInteger(n,1,100); + x[0] := 1; + x[2] := -1; + x[3] := 9; + x[4] := 10; + x[5] := 99; + x[6] := 100; + InputList.AddTestData(x); + end; + var lst := new ObjectList; + for var i:=0 to n-1 do + if Int(i) in 10..99 then + lst.Add(Int(i)); + CheckOutputSeq(lst); + end; + 'Loop_If_2a': begin + var n := 10; + CheckData(Input := |cInt|*n); + GenerateTests(20,tInt(1,100)*n); + var lst := new ObjectList; + for var i:=0 to n-1 do + if Int(i).Divs(3) and Int(i).NotDivs(5) then + lst.Add(Int(i)); + CheckOutputSeq(lst); + end; + 'Loop_If_3': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(Input := |cInt|*n); + var lst := new ObjectList; + GenerateTests(10,tInt(1,100)*n); + for var i:=1 to n do + if i.IsEven then + lst.Add(Int(i-1)); + CheckOutputSeq(lst); + end; + 'Loop_If_4': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(Input := |cInt|*n); + GenerateTests(10,tInt(1,100)*n); + var lst := new ObjectList; + for var i:=0 to n-1 do + if Int(i).IsEven then + lst.Add(i+1); + CheckOutputSeq(lst); + end; + 'Loop_If_5_Count': begin + var n := 10; + CheckData(Input := |cInt|*n); + GenerateTests(10,tInt(1,100)*n); + var c := 0; + for var i:=0 to n-1 do + if Int(i).IsEven then + c += 1; + CheckOutput(c); + end; + 'Loop_If_7_Count': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(Input := |cInt|*n); + GenerateTests(10,tInt(1,6)*n); + var c := 0; + for var i:=0 to n-1 do + if Int(i) in 2..5 then + c += 1; + CheckOutput(c); + end; + 'Loop_If_8_Count': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(Input := |cInt|*n); + var c := 0; + GenerateTests(10,tInt(1,10)*n); + for var i:=0 to n-1 do + if Int(i) not in 2..5 then + c += 1; + CheckOutput(c); + end; + 'Loop_If_9_Count': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(Input := |cInt|*n); + GenerateTests(10,tInt(1,100)*n); + var c := 0; + for var i:=0 to n-1 do + if (Int(i) in 10..99) and Int(i).IsOdd then + c += 1; + CheckOutput(c); + end; + 'Loop_If_1_Sum': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(Input := |cInt|*n); + GenerateTests(10,tInt(1,10)*n); + var s := 0; + for var i:=0 to n-1 do + if Int(i)<5 then + s += Int(i); + CheckOutput(s); + end; + 'Loop_If_2_Sum': begin + FilterOnlyNumbersAndBools; + var N := Int(0); + CheckData(Input := |cInt|*(N+1)); + GenerateTests(10,tInt(1,10)*n); + var s := 0; + for var i:=1 to N do + if Int(i).IsEven then + s += Int(i); + CheckOutput(s); + end; + 'Зацикливание2': begin + FilterOnlyNumbers; + CheckOutputSeq(1..9); + if TaskResult = Solved then + ColoredMessage('Не ставьте ; после do!'); + end; + 'Wh1': begin + FilterOnlyNumbers; + CheckData(InitialOutput := |cInt|*18); + + CheckOutputSeq(Arr(1..9)*3); + end; + 'Wh2': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutputSeq(ArrGen(10,1,x->x+2)); + end; + 'Wh3': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutputSeq(ArrGen(45,99,x->x-2)); + end; + 'Дюймы1': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutputSeq(ArrGen(7,17.49,x->x-2.51)); + end; + 'Дюймы2': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutput(7); + end; + 'Дюймы3': begin + FilterOnlyNumbers; + CheckData(Input := cRe * 2); + GenerateTests(10,tRe(2,10,1)*2); + CheckOutput(Trunc(Re(0)/Re(1))); + end; + 'Дюймы4': begin + FilterOnlyNumbers; + CheckData(Input := cRe * 2); + CheckData(Input := cRe * 2); + CheckOutput(Re(0) - Trunc(Re(0)/Re(1))); + end; + 'Sum1W': begin + FilterOnlyNumbers; + CheckData(InitialOutput := |cInt|); + CheckOutput(165,165); + end; + 'Sum2W': begin + FilterOnlyNumbers; + CheckData(InitialOutput := |cInt|); + CheckOutput(385,385); + end; + 'Sum3W': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutput(1035); + end; + 'Умножение1': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutputSeq(ArrGen(14,1,x->x*2)); + end; + 'Умножение2': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutput(11); + end; + 'Деление1': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutputSeq(ArrGen(6,26.5,x->x/2)); + end; + 'Деление2': begin + FilterOnlyNumbers; + CheckInitialOutputSeq(Arr(cInt)*0); + CheckOutput(7); + end; + 'Digits': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutput(4,3,5,2,6,1,7); + end; + 'Bank_ForLeaders': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutputSeq(ArrGen(9,109000.0,x->x*1.09)); + end; + 'Digits1': begin + FilterOnlyNumbers; + CheckData(InitialInput := |cInt|); + GenerateTests(2,23,345,4567,56789,678901,7890123); + var c := Abs(Int(0)); + var res := c.ToString.Select(cc->cc.ToDigit).Count; + CheckOutput(res); + end; + 'Digits2': begin + FilterOnlyNumbers; + CheckData(InitialInput := |cInt|); + GenerateTests(2,23,345,4567,56789,678901,7890123); + var c := Abs(Int(0)); + var res := c.ToString.Select(cc->cc.ToDigit).Sum; + CheckOutput(res); + end; + 'Digits3': begin + FilterOnlyNumbers; + CheckData(InitialInput := |cInt|); + GenerateTests(2,23,345,4567,56789,678901,7890123); + var c := Abs(Int(0)); + var res := c.ToString.Select(cc->cc.ToDigit).Count(x->x.IsEven); + CheckOutput(res); + end; + 'Digits4': begin + FilterOnlyNumbers; + CheckData(InitialInput := |cInt|); + GenerateTests(2,23,345,4567,56789,678901,7890123); + var c := Abs(Int(0)); + var res := c.ToString.Select(cc->cc.ToDigit).Where(x->x.IsOdd).Sum; + CheckOutput(res); + end; + 'Digits5': begin + FilterOnlyNumbers; + CheckData(InitialInput := |cInt|); + GenerateTests(1,23,345,4567,56789,678901,7890123); + var c := Abs(Int(0)); + var res := c.ToString.First.ToDigit; + CheckOutput(res); + end; + 'BinNumSystem': begin + FilterOnlyNumbers; + CheckData(InitialInput := |cInt|); + GenerateTests(23,14,481); + var x := Int(0); + var L := new List; + while x<>0 do + begin + L.Add(x mod 2); + x := x div 2; + end; + CheckOutputSeq(L.ToArray); + end; + 'BinNumSystem2': begin + FilterOnlyNumbers; + CheckData(InitialInput := |cInt|); + GenerateTests(23,14,255); + var x := Int(0); + var L := new List; + while x<>0 do + begin + L.Add(x mod 2); + x := x div 2; + end; + CheckOutput(L.Count(x->x=1)); + end; + 'Difficult_Power2': begin + FilterOnlyNumbersAndBools; + CheckData(InitialInput := |cInt|); + GenerateTests(23,14,256,16); + var x := Int(0); + while x mod 2 = 0 do + x := x div 2; + CheckOutput(x = 1); + end; + 'Min1': begin + CheckData(InitialInput := |cRe|*2); + Generatetests(10,tRe(1,100)*2); + CheckOutput(Min(Re(0),Re(1)),Max(Re(0),Re(1))); + end; + 'Min2': begin + CheckData(InitialInput := |cRe|*2); + Generatetests(10,tRe(1,100)*2); + CheckOutput(Min(Re(0),Re(1))); + end; + 'Min3': begin + CheckData(InitialInput := |cRe|*3); + Generatetests(10,tRe(1,100)*2); + CheckOutput(Min(Re(0),Re(1),Re(2))); + end; + 'SeriesMin2': begin + var n := 10; + CheckData(Input := |cInt|*n); + GenerateTests(10,tInt(1,100)*n); + CheckOutput(InputListAsIntegers.Max - InputListAsIntegers.Min) + end; + 'Break1': begin + var n := 10; + CheckData(Input := |cInt|*n); + GenerateTests(20,tInt(1,10)*n); + CheckOutput(3 in InputListAsIntegers); + end; + 'Break2': begin + TestCount := 3; + GenerateTestData := tnum -> begin + case tnum of + 1: InputList.AddTestData(|1,2,8,4,5,6,7,1,2,9|); + 2: InputList.AddTestData(|1,1,3|); + 3: InputList.AddTestData(|7,6,4,3|); + end; + end; + var n := 10; + var f := false; + for var i:=0 to n-1 do + begin + var x := Int(i); + if x = 3 then + begin + f := True; + break; + end; + end; + CheckOutput(f) + end; + 'Break3': begin + var n := 10; + TestCount := 3; + GenerateTestData := tnum -> begin + case tnum of + 1: InputList.AddTestData(|1,2,3,4,5,6,7,1,2,3|); + 2: InputList.AddTestData(|1,1,9|); + 3: InputList.AddTestData(|7,6,8|); + end; + end; + var f := 0; + for var i:=0 to n-1 do + begin + var x := Int(i); + if x >= 8 then + begin + f := x; + break; + end; + end; + CheckOutput(f) + end; + 'Break4': begin + CheckData(Input := |cInt|); + GenerateTests(123,1023,134,11110); + var x := Int(0); + var h := False; + while x<>0 do + begin + var c := x mod 10; + if c = 0 then + begin + h := True; + break + end; + x := x div 10; + end; + CheckOutput(h) + end; + 'BreakIntheMiddle1': begin + var i := 0; + var c := 0; + repeat + var x := Int(i); + i += 1; + if x = 0 then + break; + if x < 5 then + c += 1; + until False; + TestCount := 10; + GenerateTestData := tnum -> begin + var n := Random(7,12); + var a := ArrRandomInteger(n,1,10); + a[^1] := 0; + InputList.AddTestData(a); + end; + CheckOutput(c) + end; + 'BreakIntheMiddle2': begin + var i := 0; + var c := 0; + repeat + var x := Int(i); + i += 1; + if x = 0 then + break; + c += x; + until False; + TestCount := 10; + GenerateTestData := tnum -> begin + var n := Random(7,12); + var a := ArrRandomInteger(n,1,10); + a[^1] := 0; + InputList.AddTestData(a); + end; + CheckOutput(c) + end; + 'Divisors': begin + CheckData(Input := |cInt|); + GenerateTests(72,234,17,2); + var x := Int(0); + var L := new List; + for var i:=2 to x-1 do + if x mod i = 0 then + L.Add(i); + CheckOutputSeq(L); + end; + 'SimpleNumbers': begin + CheckData(Input := |cInt|); + GenerateTests(72,234,17,2); + var x := Int(0); + var L := new List; + for var i:=2 to x-1 do + if x mod i = 0 then + L.Add(i); + CheckOutput(L.Count = 0); + end; + 'сс1': begin + CheckOutputString((9*'*'+#13#10) * 5); + end; + 'сс2': begin + CheckOutputString(9*'1'+#13#10 + 9*'2'+#13#10 + 9*'3'+#13#10 + 9*'4'+#13#10 + 9*'5'+#13#10) + end; + 'сс3': begin + CheckOutputString(5*('123456789'+#13#10)); + end; + 'сс4': begin + CheckOutputString('012345'+#13#10 + '123456'+#13#10 + '234567'+#13#10 + '345678'+#13#10 + '456789'+#13#10 ); + end; + 'сс5': begin + CheckOutputString('12345'+#13#10 + '246810'+#13#10 + '3691215'+#13#10 + '48121620'+#13#10 + '510152025'+#13#10 ); + end; + 'сс6': begin + CheckOutputString(' 1 2 3 4 5'+#13#10 + ' 2 4 6 8 10'+#13#10 + ' 3 6 9 12 15'+#13#10 + ' 4 8 12 16 20'+#13#10 + ' 5 10 15 20 25'+#13#10 ); + end; + 'сс7': begin + var sb := new StringBuilder; + for var i:=1 to 19 do + begin + for var j:=1 to 19 do + sb.Append($'{(i*j),4}'); + sb.Append(#13#10); + end; + CheckOutputString(sb.ToString); + end; + 'сс8': begin + var sb := new StringBuilder; + for var i:=1 to 5 do + begin + for var j:=1 to 5 do + sb.Append($'({i},{j}) '); + sb.Append(#13#10); + end; + CheckOutputString(sb.ToString); + end; + 'ссi1': begin + var sb := new StringBuilder; + for var i:=1 to 5 do + begin + for var j:=1 to i do + sb.Append('*'); + sb.Append(#13#10); + end; + CheckOutputString(sb.ToString); + end; + 'ссi2': begin + var sb := new StringBuilder; + for var i:=1 to 5 do + begin + for var j:=1 to 2*i do + sb.Append('*'); + sb.Append(#13#10); + end; + CheckOutputString(sb.ToString); + end; + 'ссi3': begin + var sb := new StringBuilder; + for var i:=1 to 5 do + begin + for var j:=1 to 2*i-1 do + sb.Append('*'); + sb.Append(#13#10); + end; + CheckOutputString(sb.ToString); + end; + 'ссi4': begin + var sb := new StringBuilder; + for var i:=1 to 5 do + begin + for var j:=1 to 6-i do + sb.Append('*'); + sb.Append(#13#10); + end; + CheckOutputString(sb.ToString); + end; + 'ссi5': begin + var sb := new StringBuilder; + for var i:=1 to 5 do + begin + for var j:=1 to i do + sb.Append(i); + sb.Append(#13#10); + end; + CheckOutputString(sb.ToString); + end; + 'ссi6': begin + var sb := new StringBuilder; + for var i:=1 to 5 do + begin + for var j:=1 to i do + sb.Append(j); + sb.Append(#13#10); + end; + CheckOutputString(sb.ToString); + end; + 'Combinations': begin + ClearOutputListFromSpaces; + CheckData(Empty); + var lst := ObjectList.New; + for var c := 'a' to 'z' do + for var i := 0 to 9 do + begin + lst.Add(c); + lst.Add(i); + end; + CheckOutputSeq(lst); + end; + 'Primes': begin + FilterOnlyNumbersAndBools; + CheckData(Empty); + var lst := ObjectList.New; + for var n := 2 to 1000 do + begin + var IsPrime := True; + for var i:=2 to Round(Sqrt(n)) do + if n mod i = 0 then + begin + IsPrime := False; + break; + end; + if IsPrime then + lst.Add(n); + end; + CheckOutputSeq(lst); + end; + 'Счастливые билеты': begin + FilterOnlyNumbersAndBools; + CheckData(Empty); + CheckOutputNew(55252); + end; + '1_ПрямоугольныеТреугольники': begin + FilterOnlyNumbers; + CheckData(Empty); + var lst := ObjectList.New; + for var a:=1 to 20 do + for var b:=1 to 20 do + for var c:=1 to 20 do + if (a*a + b*b = c*c) and (a PartialSolution then + exit; + + CheckOutputSeq(InputList); + end; + 'Arr5','Arr6': begin + // Проверка того что введено и выведено 10 значений, что ввод совпадает с выводом и что вывод в диапазоне от 2 до 5 + // Что плохо - все Check неявно меняют TaskResult, а здесь надо еще и явно + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + + TaskResult := PartialSolution; // потому что если просто запустить - будет InitialSolution + + CheckOutputSeq(InputList); + // Дополнительная проверка + if TaskResult = Solved then + begin + // проверим на диапазон от 2 до 5 + var a := IntArr(n); + if a.Any(x->x not in 2..5) then + begin + TaskResult := BadSolution; + ColoredMessage('Результирующие данные должны быть от 2 до 5',MsgColorGray); + exit; + end; + end; + end; + 'Arr_Sum0': begin + // Это паттерн: вводится n, а потом вводится n элементов массива + FilterOnlyNumbersAndBools; + var n := Int; + CheckInput(|cInt| + n*|cInt|); + var a := IntArr(n); + CheckOutput(a.Sum) + end; + 'Arr_Sum1','Arr_Sum2': begin + FilterOnlyNumbersAndBools; + // Это всё надо. Начальный ввод - 10 целых, весь ввод - тоже + var n := 10; + CheckData(|cInt|*n, |cInt|*(n+1), |cInt|*n); + + var a := IntArr(n); + var p := integer(a.Product); + CheckOutputAfterInitial(p) + end; + 'Arr_Sum3': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*(n+1), |cInt|*n); + + var a := IntArr(n); + CheckOutputAfterInitial(a.Product) + end; + 'Arr_Sum4': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + + var a := IntArr(n); + var ave := a.Average; + CheckOutputAfterInitialSeq(|ave|*2) + end; + 'Arr_CountA1': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + var a := IntArr(n); + CheckOutputAfterInitial(a.CountOf(3)); + end; + 'Arr_CountA2': begin + ClearOutputListFromSpaces; // Кроме чисел тут строки + var n := 10; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + + var lst := ObjectList.New; + var a := IntArr(n); + var cnt4 := a.CountOf(4); + var cnt5 := a.CountOf(5); + + case cnt4.CompareTo(cnt5) of + 1: lst.Add('четвёрок больше'); + 0: lst.Add('одинаково'); + -1: lst.Add('пятёрок больше'); + end; + CheckOutputAfterInitialSeq(lst); + end; + 'Arr_Replace1': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + + var arr := IntArr(n); + arr.Replace(2,3); + CheckOutputAfterInitialSeq(arr); + end; + 'Arr_Replace2': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + + var arr := IntArr(n); + arr.Replace(2,22); + arr.Replace(5,55); + arr.Replace(22,5); + arr.Replace(55,2); + CheckOutputAfterInitialSeq(arr); + end; + 'Arr_Find1': begin + FilterOnlyNumbersAndBools; + var n := 5; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + + var a := IntArr(n); + var has2 := 2 in a; + CheckOutputAfterInitial(has2); + end; + 'Arr_Find2': begin + FilterOnlyNumbersAndBools; + var n := 5; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := ArrRandomInteger(n,2,5); + if tnum = 2 then + a := ArrFill(n,1); + InputList.AddTestData(a); + end; + + var a := IntArr(n); + var haseven := a.FindIndex(x -> x.IsEven) <> -1; + CheckOutputAfterInitial(haseven); + end; + 'Arr_Find3': begin + FilterOnlyNumbersAndBools; + var n := 5; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := ArrRandomInteger(n,1,99); + if tnum = 2 then + a := ArrRandomInteger(n,1,30) + else if tnum = 3 then + a := ArrRandomInteger(n,51,99); + InputList.AddTestData(a); + end; + + var a := IntArr(n); + var haseven := a.ToArray.FindIndex(x -> x in 40..50) <> -1; + CheckOutputAfterInitial(haseven); + end; + + 'Arr_Find4': begin + FilterOnlyNumbersAndBools; + var n := 3; + CheckData(|cInt|*n, |cInt|*n); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := ArrRandomInteger(n,2,5); + if tnum = 2 then + a := ArrFill(n,11); + InputList.AddTestData(a); + end; + + var a := IntArr(n); + var allodd := a.All(x -> x.IsOdd); + CheckOutputAfterInitial(allodd); + end; + 'Arr_Index1': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := ArrRandomInteger(n,2,5); + if tnum = 2 then + a := ArrFill(n,5); + InputList.AddTestData(a); + end; + + var a := IntArr(n); + var ind := a.FindIndex(x -> x = 2); + CheckOutputAfterInitial(ind); + end; + 'Arr_Index2': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := ArrRandomInteger(n,2,5); + if tnum = 2 then + a := ArrFill(n,4); + InputList.AddTestData(a); + end; + + var a := IntArr(n); + var ind := a.FindLastIndex(x -> x = 5); + CheckOutputAfterInitial(ind); + end; + 'Arr_Index2a': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + var a := IntArr(n); + var ind2 := a.IndexOf(2); + var ind5 := a.IndexOf(5); + CheckOutputAfterInitialSeq(|ind2,ind5|); + end; + 'Arr_Index3': begin + FilterOnlyNumbersAndBools; + var n := 20; + CheckData(|cInt|*n, |cInt|*n); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := ArrRandomInteger(n,2,5); + a[^2] := 2; + a[^1] := 5; + InputList.AddTestData(a); + end; + + var arr := IntArr(n); + var ind2 := arr.IndexOf(2); + var ind5 := arr.IndexOf(5); + Swap(arr[ind2],arr[ind5]); + CheckOutputAfterInitialSeq(arr); + end; + 'Arr_Index4': begin + FilterOnlyNumbersAndBools; + var n := 30; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + var arr := IntArr(n); + var ind := arr.IndexOf(2); + ind := arr.IndexOf(2,ind + 1); + CheckOutputAfterInitial(ind); + end; + + 'Arr_MinMax1': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt|*n); + + var a := OutSliceIntArr(0,n-1); + var min := a.Min; + CheckOutputAfterInitial(min); + end; + 'Arr_MinMax2': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + + var a := IntArr(n); + var max := a.Max; + CheckOutputAfterInitial(max); + end; + 'Arr_MinMax3': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + + var a := IntArr(n); + CheckOutputAfterInitial(a.Min); + end; + 'Arr_MinMax4': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + + var a := IntArr(n); + CheckOutputAfterInitialSeq(|a.Min,a.Max|); + end; + + 'Arr_Neighbors1': begin + FilterOnlyNumbersAndBools; + var n := 20; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt*n); + + var a := IntArr(n); + var cnt := 0; + for var i := 0 to n-2 do + if (a[i] = 2) and (a[i+1] = 5) then + cnt += 1; + CheckOutputAfterInitial(cnt); + end; + 'Arr_MinMaxInd1': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateAutoTests(10); + + var a := IntArr(n); + CheckOutputAfterInitial(a.IndexMax,a.IndexMax); + end; + 'Arr_MinMaxInd2': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateAutoTests(10); + + var a := IntArr(n); + var acopy := Copy(a); + var indmax := a.IndexMax; + var indmin := a.IndexMin; + Swap(a[indmax],a[indmin]); + CheckOutputSeq(acopy + a); + end; + + 'Arr_Fill1': begin + FilterOnlyNumbersAndBools; + CheckData(Input := nil); + + CheckOutputSeq(ArrFill(10,1)); + end; + 'Arr_Fill2': begin + FilterOnlyNumbersAndBools; + CheckData(Input := nil); + + CheckOutputSeq(ArrFill(10,1)); + end; + 'Заполнение1','ЗаполнениеЛямбда1': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutputSeq(ArrGen(10,i->i*i)); + end; + 'Заполнение2','ЗаполнениеЛямбда2': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutputSeq(ArrGen(10,1,i->i+2)); + end; + 'ЗаполнениеПоПред1','ЗаполнениеПоПред2': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutputSeq(ArrGen(10,5,i->i+5)); + end; + 'ЗаполнениеГеом1','ЗаполнениеГеом2': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutputSeq(ArrGen(10,1,i->i*2)); + end; + 'ЗаполнениеСумма1': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutput(ArrGen(10,5,i->i+5).Sum); + end; + 'ЗаполнениеСумма2': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutput(ArrGen(10,1,i->i*2).Sum); + end; + + // 'Arr_Transf1' 'Arr_Transf1a' 'Arr_Transf2' 'Arr_Transf3' 'Arr_Transf4' 'Arr_Transf5' 'Arr_Transf7' 'Arr_Transf8' 'Arr_Transf9'- задачник + 'Arr_Transf6': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + foreach var i in a.Indices do + if i.IsOdd then + a[i] := 0; + CheckOutputAfterInitialSeq(a); + end; + + 'Arr_Reverse1','Arr_Reverse2': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + CheckOutputAfterInitialSeq(a.Reverse); + end; + 'Arr_Reverse3': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + for var i:= 0 to n div 2 - 1 do + Swap(a[i],a[i + n div 2]); + CheckOutputAfterInitialSeq(a); + end; + + 'Arr_Reverse3a': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + + var out := IntArr(n); + var out0 := Copy(out); + Reverse(out, 0, 5); + Reverse(out, 5, 5); + CheckOutputSeq(out0 + out); + end; + + 'Arr_Count1','Arr_Count2': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + CheckOutputAfterInitial(a.Count(x -> x.IsEven)); + end; + 'Arr_Count3': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + CheckOutputAfterInitial(a.CountOf(3),a.CountOf(4),a.CountOf(5)); + end; + 'Arr_Count4': begin + var n := 30; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + CheckOutputAfterInitialSeq(|a.CountOf(a.Min),a.CountOf(a.Max)|); + end; + + 'Arr_FindIndex1': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + CheckOutputAfterInitialSeq(|a.FindIndex(x-> x.IsOdd),a.FindLastIndex(x-> x.IsOdd)|); + end; + 'Arr_FindIndex2': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + var i1 := a.FindIndex(x -> x.IsEven); + var i2 := a.FindLastIndex(x -> x.IsOdd); + Swap(a[i1],a[i2]); + CheckOutputAfterInitialSeq(a); + end; + + 'Arr_Filter1': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt(1,100) * n); + + var a := IntArr(n); + CheckOutputAfterInitialSeq(a.Where(x->x<50)); + end; + 'Arr_GenFilter1': begin + CheckData(Input := Empty); + var a := ArrGen(50,1,x->x+2); + CheckOutputSeq(a.Where(x->x mod 7 = 0)); + end; + 'Arr_GenFilter2': begin + var n := 40; + CheckData(InitialOutput := |cInt|*n); + var a := ArrGen(40,1,1,(x,y)->x+y); + CheckOutputAfterInitialSeq(a.Where(x->x mod 5 = 0)); + end; + + 'Arr_Op1': begin + CheckData(Empty); + var a := |1,2,3|*5; + var b := |0| * 6 + |1| * 6; + var c := |1,2,3|*3 + |4,5,6|*3; + var d := |1| * 5 + |2| * 5 + |1| * 5 + |2| * 5; + CheckOutputSeq(a+b+c+d); + end; + + 'Arr_Slice1': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt| * n); + var a := Arr(0..9); + CheckOutputSeq(a + a[2:6] + a[:4] + a[2:]); + end; + 'Arr_Slice2': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt| * n); + var a := Arr(0..9); + CheckOutputSeq(a + a[:2] + a[5:] + a[1:^1]); + end; + 'Arr_Slice3': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt| * n + |cInt| * 2); + var a := Arr(0..9); + CheckOutputSeq(a + |9| + |8| + |7| + a[^2:] + a[1:^1]) + end; + 'Arr_Slice7': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt| * n); + var a := Arr(0..9); + CheckOutputSeq(a + a[4::-1] + a[9::-2]) + end; + 'Arr_Slice10': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + var a := |6,2,4,3,6,1,7,8,2,4|; + CheckOutput(a[:5].Sum); + end; + 'Arr_Slice11': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + var a := |6,2,4,3,6,1,7,8,2,4|; + CheckOutput(a[5:].Min); + end; + 'Arr_Slice12': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + var a := |6,2,4,3,6,1,7,8,2,4|; + CheckOutput(a[::2].Average); + end; + + 'Arr_InsDel1': begin + FilterOnlyNumbersAndBools; + var n := 10; + var a := Arr(0..9); + CheckData(InitialOutput := |cInt| * n); + CheckOutputSeq(a + a[:5] + a[6:]); + end; + 'Arr_InsDel2': begin + FilterOnlyNumbersAndBools; + var n := 10; + var a := Arr(0..9); + CheckData(InitialOutput := |cInt| * n); + CheckOutputSeq(a + a[:5] + |333| + a[5:]); + end; + 'Arr_InsDel3': begin + FilterOnlyNumbersAndBools; + var n := 10; + var a := Arr(0..9); + CheckData(InitialOutput := |cInt| * n); + CheckOutputSeq(a + a[:1] + |555| + a[1:^1] + |555| + a[^1:]); + end; + + 'Arr_Shift1': begin + FilterOnlyNumbersAndBools; + var n := 10; + var a := Arr(0..9); + CheckData(InitialOutput := |cInt| * n); + CheckOutputSeq(a + a[1:] + |0|); + end; + 'Arr_Shift2': begin + FilterOnlyNumbersAndBools; + var n := 10; + var a := Arr(0..9); + CheckData(InitialOutput := |cInt| * n); + CheckOutputSeq(a + |0| + a[:^1]); + end; + + 'List1': begin + ClearOutputListFromSpaces; + CheckData(InitialOutput := |cInt|); + CheckOutput('Иванов','Петров','Сидоров'); + end; + 'List2': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutput(11,2,13,4,15); + end; + 'List3': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutput(1,3,5,7); + end; + 'List4': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutputSeq((1..7).Select(x->x*x)); + end; + 'List5': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateAutoTests(10); + + var a := IntArr(n); + CheckOutputAfterInitialSeq(a.Where(x->x.IsEven)); + end; + 'List6': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateAutoTests(10); + + var a := IntArr(n); + CheckOutputAfterInitialSeq(a.Where(x->x.IsEven)+a.Where(x->x.IsOdd)); + end; + 'List6a': begin + FilterOnlyNumbersAndBools; + CheckData(InitialInput := |cInt|*3); + GenerateAutoTests(10); + + var a := IntArr(3); + CheckOutputSeq(|1,3,5|+a); + end; + 'List6b': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutputSeq(|1,3,5,2,4,6,9,8,7|); + end; + 'List7': begin + FilterOnlyNumbersAndBools; + var n := 20; + CheckData(|cInt|*n, |cInt|*n); + GenerateAutoTests(5); + var a := IntArr(10); + var b := IntArr(10); + CheckOutputAfterInitialSeq(a.Interleave(b)); + end; + 'List8': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt|*n); + var a := OutSliceIntArr(0,n-1); + var b := a.ToList; + b.Insert(2,555); + CheckOutputSeq(a+b); + end; + 'List9': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt|*n); + var a := OutSliceIntArr(0,n-1); + var b := a.ToList; + if b.Count>0 then + b.RemoveAt(2); + CheckOutputSeq(a+b); + end; + 'List9a': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutputSeq((1..10)); + end; + 'List9b': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialInput := |cInt|*n); + var a := IntArr(n); + CheckOutputSeq(a); + end; + + 'Sort1': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateAutoTests(5); + var a := IntArr(n); + CheckOutputSeq(a+a.Sorted); + end; + 'Sort2': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateAutoTests(5); + var a := IntArr(n); + CheckOutputSeq(a+a.SortedDescending); + end; + 'Sort3': begin + FilterOnlyNumbersAndBools; + var n := 9; + CheckData(InitialOutput := |cInt|*n); + + var a := OutSliceIntArr(0,n-1); + CheckOutputSeq(a + a.Sorted); + end; + 'BubbleSort': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt|*n); + + var a := OutSliceIntArr(0,n-1); + var b := Copy(a); + for var j:=n-1 downto 1 do + if b[j-1] > b[j] then + Swap(b[j-1], b[j]); + CheckOutputSeq(a + b); + end; + 'BubbleSort2': begin + FilterOnlyNumbersAndBools; + var n := 9; + CheckData(InitialOutput := |cInt|*n); + + var a := OutSliceIntArr(0,n-1); + CheckOutputSeq(a+a.Sorted); + end; + end; +end; + +initialization + CheckTask := CheckTaskT; + AllTaskNames := Arr('Arr1','Arr2','Arr3','Arr4','Arr5','Arr6', + 'Arr_Sum0','Arr_Sum1','Arr_Sum2','Arr_Sum3','Arr_Sum4','Arr_CountA1','Arr_CountA2', + 'Arr_Replace1','Arr_Replace2','Arr_Find1','Arr_Find2','Arr_Find3','Arr_Find4', + 'Arr_Index1','Arr_Index2','Arr_Index2a','Arr_Index3','Arr_Index4', + 'Arr_MinMax1','Arr_MinMax2','Arr_MinMax3','Arr_MinMax4','Arr_Neighbors1','Arr_MinMaxInd1','Arr_MinMaxInd2', + 'Arr_Fill1','Arr_Fill2','Заполнение1','ЗаполнениеЛямбда1','Заполнение2','ЗаполнениеЛямбда2', + 'ЗаполнениеПоПред1','ЗаполнениеПоПред2','ЗаполнениеГеом1','ЗаполнениеГеом2','ЗаполнениеСумма1','ЗаполнениеСумма2', + 'Arr_Transf1','Arr_Transf1a','Arr_Transf2','Arr_Transf3','Arr_Transf4','Arr_Transf5','Arr_Transf7', + 'Arr_Transf8','Arr_Transf9','Arr_Transf6', + 'Arr_Reverse1','Arr_Reverse2','Arr_Reverse3','Arr_Reverse3a', + 'Arr_Count1','Arr_Count2','Arr_Count3','Arr_Count4', + 'Arr_FindIndex1','Arr_FindIndex2', + 'Arr_Filter1','Arr_GenFilter1','Arr_GenFilter2', + 'Arr_Op1', + 'Arr_Slice1','Arr_Slice2','Arr_Slice3','Arr_Slice7','Arr_Slice10','Arr_Slice11','Arr_Slice12', + 'Arr_InsDel1','Arr_InsDel2','Arr_InsDel3', + 'Arr_Shift1','Arr_Shift2', + 'List1','List2','List3','List4','List5','List6','List6a','List6b','List7','List8','List9','List9a','List9b', + 'Sort1','Sort2','Sort3', + 'BubbleSort','BubbleSort2'); +finalization +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/TasksMatr.pas b/TestSuite/CompilationSamples/TasksMatr.pas new file mode 100644 index 000000000..303d4ce8f --- /dev/null +++ b/TestSuite/CompilationSamples/TasksMatr.pas @@ -0,0 +1,105 @@ +unit TasksMatr; + +uses LightPT; + +var AllTaskNames: array of string; + +procedure CheckTaskT(name: string); +begin + FlattenOutput; // Во всех задачах на массивы + ClearOutputListFromSpaces; // Это чтобы a.Print работал. По идее, надо писать всегда. Яне знаю задач, где пробелы в ответе + + case name of + 'ДвумерныеМассивы1': begin + ConvertStringsToNumbersInOutputList; + //FilterOnlyNumbersAndBools; + CheckOutputSeq(|5,4,5,5,2,4,3,3,5,3,5,4|); + end; + 'ДвумерныеМассивы2': begin + // Преобразовать в 6 целых по строкам + ConvertStringsToNumbersInOutputList; + CheckOutputSeq(|5,4,5,5,2,4,3,3,5,3,5,4|); + end; + 'ДвумерныеМассивы3': begin + ConvertStringsToNumbersInOutputList; + CheckData(Input := |cInt|*12); + CheckOutputSeq(InputList); + end; + 'Заполн1_Формула','Заполн2_Matr': begin + ConvertStringsToNumbersInOutputList; + CheckData(Input := Empty); + + var ob := new ObjectList; + for var i:=0 to 8 do + for var j:=0 to 8 do + ob.Add((i+1)*(j+1)); + CheckOutputSeq(ob); + end; + 'Заполн3_Шахм': begin + ConvertStringsToNumbersInOutputList; + CheckData(Input := Empty); + + var ob := new ObjectList; + for var i:=0 to 8 do + for var j:=0 to 8 do + if (i + j).IsEven then + ob.Add(1) + else ob.Add(0); + CheckOutputSeq(ob); + end; + 'SumInMatr': begin + ConvertStringsToNumbersInOutputList; + var n := 12; + CheckData(InitialInput := |cInt|*n, InitialOutput := |cInt|*n); + var res := IntArr(n).Sum; + CheckOutputAfterInitial(res); + end; + 'MaxInMatr': begin + ConvertStringsToNumbersInOutputList; + var n := 12; + CheckData(|cInt|*n, |cInt|*n); + var res := IntArr(n).Max; + CheckOutputAfterInitial(res); + end; + 'СтрокаСтолбец1','СтрокаСтолбец3': begin + ConvertStringsToNumbersInOutputList; + var n := 54; + CheckData(|cInt|*n, |cInt|*n); + + var m := MatrByRow(6,9,IntArr(n)); + CheckOutputAfterInitialSeq(m.Row(2)); + end; + 'СтрокаСтолбец2','СтрокаСтолбец4': begin + ConvertStringsToNumbersInOutputList; + var n := 54; + CheckData(|cInt|*n, |cInt|*n); + + var m := MatrByRow(6,9,IntArr(n)); + CheckOutputAfterInitialSeq(m.Col(8)); + end; + 'MaxInRow': begin + ConvertStringsToNumbersInOutputList; + var n := 54; + CheckData(|cInt|*n, |cInt|*n); + + var m := MatrByRow(6,9,IntArr(n)); + CheckOutputAfterInitial(m.Row(0).Max,m.Row(5).Min,m.Col(4).Average); + end; + 'CountInRowsCols': begin + ConvertStringsToNumbersInOutputList; + var n := 54; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt(1,5) * n); + + var m := MatrByRow(6,9,IntArr(n)); + CheckOutputAfterInitial(m.Row(1).CountOf(2), m.Col(2).Count(x->x.IsOdd)); + end; end; +end; + +initialization + CheckTask := CheckTaskT; + AllTaskNames := Arr('ДвумерныеМассивы1','ДвумерныеМассивы2','ДвумерныеМассивы3', + 'Заполн1_Формула','Заполн2_Matr','Заполн3_Шахм','SumInMatr','MaxInMatr', + 'СтрокаСтолбец1','СтрокаСтолбец3','СтрокаСтолбец2','СтрокаСтолбец4','MaxInRow','CountInRowsCols' ); +finalization +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/TasksStr.pas b/TestSuite/CompilationSamples/TasksStr.pas new file mode 100644 index 000000000..2492a3f13 --- /dev/null +++ b/TestSuite/CompilationSamples/TasksStr.pas @@ -0,0 +1,356 @@ +unit TasksStr; + +uses LightPT; + +var AllTaskNames: array of string; + +procedure CheckTaskT(name: string); +begin + FlattenOutput; + ClearOutputListFromSpaces; + + case name of + 'Char1': begin + CheckData(Input := Empty); + var a := Arr(word(48), word(100), word(68), word(1102), word(8594)); + CheckOutputSeq(a); + end; + 'Char2': begin + CheckData(Input := Empty); + var a := Arr(Chr(169), Chr(931), Chr(960), Chr(1105), Chr(8551), Chr(8734), Chr(8776), Chr(8986), Chr(9327), Chr(9775), Chr(9917), Chr(10054)); + CheckOutputSeq(a); + end; + 'CharTable': begin + CheckData(Input := Empty); + var obj := new ObjectList; + for var i:=32 to 1200 do + begin + Obj.Add(i); obj.Add(Chr(i)); + end; + CheckOutputSeq(obj); + end; + 'CharPredSucc': begin + CheckData(Input := |cChar|); + GenerateTests('b','c','2','y'); + var c := LightPT.Chr(0); + CheckOutput(Pred(c),Succ(c)); + end; + 'CharIs': begin + CheckData(Input := |cChar|); + GenerateTests('b','X','2','ю'); + var c := LightPT.Chr(0); + CheckOutputSeq(Arr(c.IsLetter, c.IsDigit, c.IsLower, c.IsUpper)); + end; + 'CharRange1': begin + CheckData(Input := Empty); + CheckOutputSeq(Arr('0'..'9')+Arr('a'..'z')+Arr('а'..'я')); + end; + 'CharRange2': begin + CheckData(Input := |cChar|); + GenerateTests('a','V','z','Ю','д','1'); + var c := LightPT.Chr(0); + CheckOutput(c in 'a'..'z'); + end; + 'CharRange3': begin + CheckData(Input := |cChar|); + GenerateTests('a','V','ю','A','1','Z'); + var c := LightPT.Chr(0); + CheckOutput(c in 'A'..'Z'); + end; + 'CharRange4': begin + CheckData(Input := |cChar|); + GenerateTests('a','V','z','A','1','Ю'); + var c := LightPT.Chr(0); + CheckOutput(c.ToLower in 'a'..'z'); + end; + 'CharTransform': begin + CheckData(Input := |cChar|); + var c := LightPT.Chr(0); + GenerateTests('a','V','z','A','1','Ю'); + if c.IsLower then + c := c.ToUpper + else if c.IsUpper then + c := c.ToLower; + CheckOutput(c); + end; + 'Strings1': begin + CheckData(Input := Empty); + CheckOutputSeq('трос'.ToCharArray); + end; + 'Strings2': begin + CheckData(Input := Empty); + CheckOutputSeq('сорт'.ToCharArray); + end; + 'Strings2a': begin + CheckData(Input := Empty); + CheckOutputSeq(Arr('грозы','осы','ложки','кошки')); + end; + 'Strings3': begin + CheckData(Input := Empty); + CheckOutputSeq(Arr('миг', 'мир', 'пир', 'пар')); + end; + 'Strings4': begin + CheckData(Input := Empty); + var hs := HSet('кошка','мышка','комик','комок','ножка','ножик','коржик','камыш'); + var hs1 := OutputListAsStrings.ToHashSet; + if (hs*hs1).Count >= 5 then + TaskResult := Solved + else begin + TaskResult := PartialSolution; + ColoredMessage($'Выведите еще по крайней мере {5-(hs*hs1).Count} правильных слов',MessageColorT.MsgColorGray) + end; + end; + 'Strings5': begin + CheckData(Input := Empty); + CheckOutputSeq(Arr('********************', '010101010101010101010101010101')); + end; + 'Strings6': begin + CheckData(Input := Empty); + CheckOutputSeq(Arr('кросс', 'атолл', 'Гримм', 'быстрее')); + end; + 'String13': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput(9); + end; + 'String15': begin + ClearOutputListFromSpaces; + CheckData(Input := |cStr|); + var s := Str(0); + CheckOutput(s.Count(c -> c.IsLetter and c.IsLower)); + end; + 'String16': begin + ClearOutputListFromSpaces; + CheckData(Input := |cStr|); + GenerateTests('HeLLo','привет','ИНФОРМАТИКА'); + var s := Str(0); + CheckOutput(s.ToLower); + end; + 'StrCode': begin + CheckData(Input := Empty); + CheckOutputSeq(Arr('рсйгжу', 'сткдзф', 'тулеих')); + end; + 'StrDeCode': begin + CheckData(Input := Empty); + CheckOutput('мы великие взломщики шифров'); + end; + 'StrCountAlg': begin + CheckData(Input := Empty); + CheckOutputSeq(Arr(3,5,2)); + end; + 'StrGenerate1': begin + CheckData(Input := Empty); + CheckOutput('abcdefghijklmnopqrstuvwxyz'); + end; + 'StrGenerate2': begin + CheckData(Input := Empty); + CheckOutput('каждый охотник желает знать где сидит фазан'); + end; + 'StrCount': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput(14,15); + end; + 'StrCountOf': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput(3,5,2); + end; + 'StrCreate1': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput('abcdefghijklmnopqrstuvwxyz'); + end; + 'StrCreate2': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput('каждый охотник желает знать где сидит фазан'); + end; + 'StrWhere1': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutputSeq(Arr('каждый охотник желает знать где сидит фазан','буря мглою небо кроет вихри снежные крутя')); + end; + 'StrWhere2': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutputSeq(Arr('1223113221113','12112571191460')); + end; + 'StrSelect1': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutputSeq(Arr('вфсѐ!ндмпя!ожвп!лспжу!гйцсй!тожзоьж!лсфуѐ')); + end; + 'StrSelect2': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + var a := Arr(1082,1072,1078,1076,1099,1081,32,1086,1093,1086,1090,1085,1080,1082,32,1078,1077,1083,1072,1077,1090,32,1079,1085,1072,1090,1100,32,1075,1076,1077,32,1089,1080,1076,1080,1090,32,1092,1072,1079,1072,1085 ); + var a1 := a.Select(x->word(x)); + CheckOutputSeq(a1); + end; + 'StrMinMax': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutputSeq(Arr('а','ё')); + end; + 'StrWhereSelect': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput(23); + end; + 'StrAllAny1': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput(True,False); + end; + 'StrAllAny2': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput(True,False); + end; + 'StrEachCount1': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + var res := 'The grass is always greener on the other side of the fence'.EachCount; + var ob := new ObjectList; + foreach var x in res.ToArray do + ob.Add(x); + CheckOutputSeq(ob); + end; + 'StrEachCount2': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + var res := 'L1o24st tim437364e is nev567e9r fo089874u89nd041342 ag8432ai6897'.EachCount; + var ob := new ObjectList; + foreach var x in res.ToArray do + if x.Key.IsDigit then + ob.Add(x); + CheckOutputSeq(ob); + end; + 'StrOrder1': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput(' adefgilmnorstuv'); + end; + 'StrOrder2': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput('0','1','3','5','8'); + end; + 'ToWords1': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput('головой жак звонарь как однажды сломал фонарь'); + end; + 'ToWords2': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput('как жак сломал фонарь однажды звонарь головой'); + end; + 'ToWordsWhere1': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput('косой кривоногий косой косой косой косой'); + end; + 'Pos1': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutputSeq(Arr(2,9)); + end; + 'Pos2': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutputSeq(Arr(7)); + end; + 'Delete1': begin + CheckData(Input := Empty); + CheckOutput('информатика'); + end; + 'Delete2': begin + CheckData(Input := Empty); + CheckOutput('программирование'); + end; + 'Delete3': begin + CheckData(Input := Empty); + CheckOutput('алгоритм'); + end; + 'Insert1': begin + CheckData(Input := Empty); + CheckOutput('Петр Первый был первым русским императором'); + end; + 'Insert2': begin + CheckData(Input := Empty); + CheckOutput('Петр первый был великим русским императором'); + end; + 'StrChange1': begin + CheckData(Input := Empty); + CheckOutput('красный коричневый желтый зеленый бирюзовый синий фиолетовый'); + end; + 'StrChange2': begin + CheckData(Input := Empty); + CheckOutput('Алекс у Мелиссы украл кораллы, а Мелисса у Алекса украла кларнет'); + end; + 'StrBorder0': begin + CheckData(Input := Empty); + CheckOutput('наклонный жирный подчеркнутый жирный жирный подчеркнутый'); + end; + 'StrBorder1': begin + CheckData(Input := Empty); + CheckOutput('наклонный жирный подчеркнутый жирный жирный подчеркнутый'); + end; + 'StrSlice1': begin + CheckData(Input := Empty); + CheckOutputSeq(Arr('Pascal','ABC','NET')); + end; + 'StrSlice2': begin + CheckData(Input := Empty); + CheckOutputSeq(Arr('клад зарыт на юго западе', 'клад зарыт на юго западе')); + end; + 'StrSlice4': begin + CheckData(Input := Empty); + CheckOutputSeq(Arr('mydocument', 'docx', 'picture', 'jpg')); + end; + 'Str_Number0': begin + CheckData(Input := Empty); + CheckOutput('оценка1', 'балл2', 'окно3'); + end; + 'Str_Number03': begin + CheckData(Input := Empty); + ClearOutputListFromSpaces; + CheckOutput(386); + end; + 'Str_Number04': begin + ClearOutputListFromSpaces; + CheckData(Input := |cInt|); + GenerateTests(2,34,567,67890); + var n := Int(0); + CheckOutput(n.ToString.Select(s->s.ToDigit).Sum); + end; + 'Str_Number05': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput(31.6666666666667,27.0,42.0); + end; + 'Str_Number06': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput(420); + end; + end; +end; + +initialization + CheckTask := CheckTaskT; + AllTaskNames := Arr('Char1','Char2','CharTable','CharPredSucc','CharIs', + 'CharRange1','CharRange2','CharRange3','CharRange4','CharTransform', + 'Strings1','Strings2','Strings2a','Strings3','Strings4','Strings5','Strings6','String13','String15','String16', + 'StrCode','StrDeCode','StrCountAlg','StrGenerate1','StrGenerate2','StrCount','StrCountOf', + 'StrCreate1','StrCreate2','StrWhere1','StrWhere2','StrSelect1','StrSelect2', + 'StrMinMax','StrWhereSelect','StrAllAny1','StrAllAny2','StrEachCount1','StrEachCount2', + 'StrOrder1','StrOrder2','ToWords1','ToWords2','ToWordsWhere1', + 'Pos1','Pos2','Delete1','Delete2','Delete3','Insert1','Insert2', + 'StrChange1','StrChange2','StrBorder0','StrBorder1', + 'StrSlice1','StrSlice2','StrSlice4', + 'Str_Number0','Str_Number03','Str_Number04','Str_Number05','Str_Number06' ); +finalization +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Turtle.pas b/TestSuite/CompilationSamples/Turtle.pas new file mode 100644 index 000000000..83d531e26 --- /dev/null +++ b/TestSuite/CompilationSamples/Turtle.pas @@ -0,0 +1,52 @@ +/// Исполнитель Черепаха +unit Turtle; + +uses GraphWPF; + +type Colors = GraphWPF.Colors; + +var + tp: Point; + a: real := 0; + dr := False; + +/// Поворачивает Черепаху на угол da по часовой стрелке +procedure Turn(da: real); +begin + a += da; +end; + +/// Продвигает Черепаху вперёд на расстояние r +procedure Forw(r: real); +begin + tp += r * Vect(Cos(DegToRad(a)),Sin(DegToRad(a))); + if dr then + LineTo(tp.X,tp.Y) + else MoveTo(tp.X,tp.Y) +end; + +/// Опускает хвост Черепахи +procedure Down := dr := True; + +/// Поднимает хвост Черепахи +procedure Up := dr := False; + +/// Устанавливает ширину линии +procedure SetWidth(w: real) := Pen.Width := w; + +/// Устанавливает цвет линии +procedure SetColor(c: GColor) := Pen.Color := c; + +/// Перемещает Черепаху в точку (x,y) +procedure ToPoint(x,y: real); +begin + tp := Pnt(x,y); + MoveTo(tp.X,tp.Y); +end; + +begin + //tp := Pnt(Window.Width / 2, Window.Height / 2); + tp := Pnt(400,300); + Pen.RoundCap := True; + MoveTo(tp.X,tp.Y); +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/TurtleWPF.pas b/TestSuite/CompilationSamples/TurtleWPF.pas new file mode 100644 index 000000000..c96482858 --- /dev/null +++ b/TestSuite/CompilationSamples/TurtleWPF.pas @@ -0,0 +1,272 @@ +unit TurtleWPF; + +interface + +uses GraphWPF; + +/// Передвигает Черепаху вперёд на расстояние r +procedure Forw(r: real); + +/// Передвигает Черепаху назад на расстояние r +procedure Back(r: real); + +/// Поворачивает Черепаху на угол da по часовой стрелке +procedure Turn(da: real); + +/// Поворачивает Черепаху на угол da влево +procedure TurnLeft(da: real); + +/// Поворачивает Черепаху на угол da вправо +procedure TurnRight(da: real); + +/// Возвращает случайный цвет +function RandomColor: Color; + +/// Возвращает цвет по красной, зеленой и синей составляющей (в диапазоне 0..255) +function RGB(r,g,b: byte): Color; + +/// Устанавливает скорость черепашки (от 1 до 10) +procedure SetSpeed(sp: integer); + +/// Прячет Черепаху +procedure Hide; + +/// Показывает Черепаху +procedure Show; + +/// Опускает перо Черепахи +procedure Down; + +/// Поднимает перо Черепахи +procedure Up; + +/// Устанавливает ширину линии +procedure SetWidth(w: real); + +/// Устанавливает цвет линии +procedure SetColor(c: GColor); + +/// Перемещает Черепаху в точку (x,y) +procedure MoveTo(x,y: real); + +/// Сохраняет изображение, нарисованное Черепахой, в файл fname (например, 'a.png') +procedure Save(fname: string); + +type Colors = GraphWPF.Colors; + +{type turtle = static class + /// Передвигает Черепаху вперёд на расстояние r + static procedure Forw(r: real) := TurtleWPF.Forw(r); + /// Поворачивает Черепаху на угол da по часовой стрелке + static procedure Turn(da: real) := TurtleWPF.Turn(da); + /// Возвращает случайный цвет + static function RandomColor: Color := TurtleWPF.RandomColor; + /// Возвращает цвет по красной, зеленой и синей составляющей (в диапазоне 0..255) + static function RGB(r,g,b: byte): Color := TurtleWPF.RGB(r,g,b); + /// Устанавливает скорость черепашки (от 1 до 10) + static procedure SetSpeed(sp: integer) := TurtleWPF.SetSpeed(sp); + /// Прячет Черепаху + static procedure Hide := TurtleWPF.Hide; + /// Показывает Черепаху + static procedure Show := TurtleWPF.Show; + /// Опускает перо Черепахи + static procedure Down := TurtleWPF.Down; + /// Поднимает перо Черепахи + static procedure Up := TurtleWPF.Up; + /// Устанавливает ширину линии + static procedure SetWidth(w: real) := TurtleWPF.SetWidth(w); + /// Устанавливает цвет линии + static procedure SetColor(c: GColor) := TurtleWPF.SetColor(c); + /// Перемещает Черепаху в точку (x,y) + static procedure MoveTo(x,y: real) := TurtleWPF.MoveTo(x,y); + /// Сохраняет изображение, нарисованное Черепахой, в файл fname (например, 'a.png') + static procedure Save(fname: string) := TurtleWPF.Save(fname); +end;} + +implementation + +{$resource 'turtle.png'} + +uses WPFObjects,GraphWPFBase; +uses System.Windows.Media.Animation; +uses System.Windows.Media; +uses System.Windows.Media.Imaging; + +var + TurtleX: real := 400; + TurtleY: real := 300; + w := 24; // размер изображения Черепахи + +type + TurtleHelper = class(PictureWPF) + private + function CreateBitmapImageFromResource(resourcename: string): BitmapImage; + begin + var bi := new BitmapImage(); + bi.BeginInit(); + bi.StreamSource := GetResourceStream(resourcename); + bi.EndInit(); + Result := bi; + end; + procedure InitObFromResource(x,y,w,h: real; fname: string); + begin + var b := CreateBitmapImageFromResource(fname); + Rest(x,y,w,h,b); + end; + procedure AnimMoveByPE(a,b,sec: real); + begin + var v := CreateVisual; + var p := Center; + var (x,y) := (transl.X,transl.Y); + var ax := new DoubleAnimation(a + x, System.TimeSpan.FromSeconds(sec)); + var ay := new DoubleAnimation(b + y, System.TimeSpan.FromSeconds(sec)); + ax.FillBehavior := FillBehavior.Stop; + ay.FillBehavior := FillBehavior.Stop; + var transl1 := transl; + ax.Completed += (o,e) -> begin + DrawOnVisual(v,dc->dc.DrawLine(GraphWPF.Pen.PenConstruct,p,Pnt(p.X + a,p.Y + b))); + transl1.X := x + a; // transl - ошибка с лямбдами! + end; + ay.Completed += (o,e) -> begin + transl1.Y := y + b; + end; + ax.CurrentTimeInvalidated += (o,e) -> + DrawOnVisual(v,dc->dc.DrawLine(GraphWPF.Pen.PenConstruct,p,Pnt(Center.X,Center.Y))); + transl.BeginAnimation(TranslateTransform.XProperty, ax, HandoffBehavior.Compose); + transl.BeginAnimation(TranslateTransform.YProperty, ay, HandoffBehavior.Compose); + end; + public + constructor (x,y,w,h: real; fname: string) := Invoke(InitObFromResource,x,y,w,h,fname); + procedure AnimMoveByE(a,b,sec: real); + begin + Invoke(AnimMoveByPE,a,b,sec); + Sleep(Round(sec*1000 + 50)); // 50 мс - За это время анимация должна закончиться + end; + procedure AnimRotateE(a,sec: real); + begin + AnimRotate(a,sec); + Sleep(Round(sec*1000 + 50)); + end; + end; + +var t: TurtleHelper; + +var + a: real := 0; + dr := False; + speed := 10; + Window := GraphWPF.Window; + +function RandomColor := GraphWPF.RandomColor; +function RGB(r,g,b: byte) := GraphWPF.RGB(r, g, b); + +var sl := 30; + +procedure SetSpeed(sp: integer); +begin + speed := sp.Clamp(1,10); + if sp > 10 then + sl := 0 + else sl := 30; +end; + +procedure Hide; +begin + t.Visible := False; +end; + +procedure Show; +begin + t.Visible := True; +end; + +/// Поворачивает Черепаху на угол da по часовой стрелке +procedure Turn(da: real); +begin + a += da; + if speed = 10 then + begin + t.Rotate(da); + Sleep(sl); + end + else + begin + if dr then + t.AnimRotateE(da,Abs(da/(60*speed))) + else + begin + t.AnimRotate(da,Abs(da/(60*speed))); + Sleep(Round(Abs(da/(60*speed))*1000)+50); + end; + end; +end; + +procedure TurnLeft(da: real) := Turn(-da); + +procedure TurnRight(da: real) := Turn(da); + +/// Продвигает Черепаху вперёд на расстояние r +procedure Forw(r: real); +begin + var v := r * Vect(Cos(DegToRad(a)),Sin(DegToRad(a))); + var (a,b) := (v.X,v.Y); + TurtleX += a; + TurtleY += b; + if (speed = 10) or (r < 20) then + begin + if dr then + GraphWPF.LineTo(TurtleX,TurtleY) + else GraphWPF.MoveTo(TurtleX,TurtleY); + t.MoveBy(a,b); + Sleep(sl); + end + else + begin + if dr then + begin + t.AnimMoveByE(a,b,r/(50*speed)); // 450 в секунду при скорости 9 + GraphWPF.MoveTo(TurtleX,TurtleY); + end + else + begin + t.AnimMoveBy(a,b,r/(50*speed)); + Sleep(Round(r/(50*speed)*1000)+50); + GraphWPF.MoveTo(TurtleX,TurtleY); + end; + end; +end; + +procedure Back(r: real) := Forw(-r); + +/// Опускает хвост Черепахи +procedure Down := dr := True; + +/// Поднимает хвост Черепахи +procedure Up := dr := False; + +/// Устанавливает ширину линии +procedure SetWidth(w: real) := GraphWPF.Pen.Width := w; + +/// Устанавливает цвет линии +procedure SetColor(c: GColor) := GraphWPF.Pen.Color := c; + +/// Перемещает Черепаху в точку (x,y) +procedure MoveTo(x,y: real); +begin + TurtleX := x; + TurtleY := y; + GraphWPF.MoveTo(x,y); + t.Center := Pnt(x,y); +end; + +procedure Save(fname: string) := Window.Save(fname); + + +begin + Window.Title := 'Исполнитель Черепаха WPF'; + + t := new TurtleHelper(TurtleX-w/2,TurtleY-w/2,w,w,'turtle.png'); + //Pen.RoundCap := True; + MoveTo(TurtleX,TurtleY); + a -= 90; +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/TwoPanelsWindow.pas b/TestSuite/CompilationSamples/TwoPanelsWindow.pas new file mode 100644 index 000000000..186d9578e --- /dev/null +++ b/TestSuite/CompilationSamples/TwoPanelsWindow.pas @@ -0,0 +1,109 @@ +unit TwoPanelsWindow; + +{$reference 'PresentationFramework.dll'} +{$reference 'WindowsBase.dll'} +{$reference 'PresentationCore.dll'} + +{$apptype windows} + +uses System.Windows.Controls; +uses System.Windows; +uses System.Windows.Data; +uses System.Reflection; +uses System.Collections.ObjectModel; + + +var app := new Application(); +var MainWindow := new Window; + +procedure InitWPF; +begin + MainWindow.Title := 'WPF'; + MainWindow.WindowStartupLocation := WindowStartupLocation.CenterScreen; + MainWindow.Width := 800; + MainWindow.Height := 600; + MainWindow.Show; +end; + +function GetProperties(t1: T): sequence of string; +begin + var props := t1.GetType.GetProperties; + Result := props.OrderBy(f->f.CustomAttributes.FirstOrDefault?.ToString ?? 'NoAttr').Select(f->f.Name); +end; + +var + LeftPanel: StackPanel; + RightPanel: DockPanel; + +procedure Init(); +begin + var dp := new DockPanel; + MainWindow.Content := dp; + + LeftPanel := new StackPanel(); + LeftPanel.Width := 150; + dp.Children.Add(LeftPanel); + + RightPanel := new DockPanel(); + dp.Children.Add(RightPanel); +end; + +type + ///!# + Button = class + private + btn := new System.Windows.Controls.Button; + procedure p; + begin + if Click<>nil then + Click; + end; + public + Click: procedure; + constructor (Content: string); + begin + LeftPanel.Children.Add(btn); + btn.HorizontalAlignment := HorizontalAlignment.Stretch; + btn.Margin := new Thickness(5); + btn.Content := Content; + btn.Click += procedure (sender: object; args: RoutedEventArgs) -> + begin + p; + end; + end; + end; + + ///!# + ListView = class + private + lv := new System.Windows.Controls.ListView; + public + constructor (); + begin + var gv := new GridView; + lv.View := gv; + RightPanel.Children.Add(lv); + end; + procedure Отобразить(data: sequence of T); + begin + var gv := lv.View as GridView; + var properties := GetProperties(data.First); + gv.Columns.Clear; + foreach var fld in properties do + begin + var col := new GridViewColumn; + col.Header := fld; + col.Width := 150; + col.DisplayMemberBinding := new Binding(fld); + gv.Columns.Add(col); + end; + lv.ItemsSource := data.Skip(1); + end; + end; + +initialization + InitWPF; + Init; +finalization + app.Run(); +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/XLSX.pas b/TestSuite/CompilationSamples/XLSX.pas new file mode 100644 index 000000000..6459da698 --- /dev/null +++ b/TestSuite/CompilationSamples/XLSX.pas @@ -0,0 +1,290 @@ +unit XLSX; + +interface + +type + exCellBorder = class + IsLeft, IsRight, IsBottom, IsTop, IsDiagonal: boolean; + end; + + exCell = class + constructor(sheet: array of array of exCell; row, col: integer); + begin + _sheet := sheet; + Self.row := row; + Self.col := col; + end; + + private + row, col: integer; + _sheet: array of array of exCell; + function getBorders: (boolean, boolean, boolean, boolean);// (left,top,right,bottom) + begin + var left := Border.IsLeft or (col > 0) and _sheet[row, col - 1].Border.IsRight; + var top := Border.IsTop or (row > 0) and _sheet[row - 1, col].Border.IsBottom; + var right := Border.IsRight or (col + 1 < _sheet.First.Length) + and (_sheet[row, col + 1].Border <> nil) and _sheet[row, col + 1].Border.IsLeft; + var bottom := Border.IsBottom or (row + 1 < _sheet.Length) + and _sheet[row + 1, col].Border.IsTop; + Result := (left, top, right, bottom); + end; + + public + Border: exCellBorder; + Value: string; + property AsInt: integer read Value.ToInteger; + property Index: (integer, integer) read (row, col); + property Sheet: array of array of exCell read _sheet; + property Borders: (boolean, boolean, boolean, boolean) read getBorders; + end; + +function ReadXLSX(fileName: string): Dictionary; +function ReadXLSXAsCells(fileName: string; sheetNum: integer := 0): array of array of exCell; +function ReadXLSXAsInts(fileName: string; sheetNum: integer := 0): array of array of integer; +function ToDate(Self: string): DateTime; + +implementation + +{$reference System.IO.Compression.dll} +{$reference System.IO.Compression.FileSystem.dll} +{$reference System.Xml.dll} + +uses System.IO.Compression; +uses System.Xml,sf; + +var + numFmt, numBrd: List; + brdStyles: List; + arxiv: System.IO.Compression.ZipArchive; + shStr := new List; + DateTypeId := |14, 15, 16, 17, 22, 27, 30, 36, 50, 55, 57|.ToHS; + +function ToDate(Self: string): DateTime; +begin + Result := DateTime.Parse(Self); +end; + +function ToCR(Self: string): (integer, integer); extensionmethod; // 'AA7' -> (6,26) +begin + var clm := 0; + var row := 0; + foreach var c in Self do + if c in 'A'..'Z' then + clm := clm * 26 + (c - 'A' + 1) + else + row := row * 10 + (c - '0'); + Result := (row - 1, clm - 1); +end; + +function Load(path: string): XmlElement; +begin + if arxiv.Entries.Any(e -> (e as ZipArchiveEntry).FullName = path) then begin + var stream := arxiv.GetEntry(path).Open; + var doc := new XmlDocument(); + doc.Load(stream); + Result := doc.DocumentElement; + end; +end; + +function SheetRange(elms: XmlElement): ((int, int), (int, int)); +begin + var LU, RD: (int, int); + var dim := elms.Item['dimension']; + if dim = nil then begin // собираем габариты таблицы + var (l, u) := (maxint, maxint); + var (r, d) := (-1, -1); + foreach var node: XmlNode in elms.Item['sheetData'].ChildNodes do + begin + foreach var cell: XmlNode in node.ChildNodes do + begin + var (i, j) := cell.Attributes.GetNamedItem('r').Value.ToCR; + l := min(l, i); + u := min(u, j); + r := max(r, i); + d := max(d, j); + end + end; + LU := (l, u); + RD := (r, d); + end else begin // готовые габариты из таблицы + var ref := dim.GetAttribute('ref'); + if ':' in ref then + (LU, RD) := ref.Split(':').Sel(s -> s.ToCR) + else begin + RD := ref.ToCR; + LU := RD; + end; + end; + Result := (LU, RD); +end; + +function LoadSheet(path: string): array of array of string; +begin + var elms := Load(path); + var (LU, RD) := SheetRange(elms); + + var (w, h) := (RD[1] - LU[1] + 1, RD[0] - LU[0] + 1); + var sheet: array of array of string; + if (w < 0) or (h < 0) then + setLength(sheet, 0) + else begin + setLength(sheet, h); + for var i := 0 to h - 1 do sheet[i] := new string[w]; + + foreach var node: XmlNode in elms.Item['sheetData'].ChildNodes do + begin + foreach var cell: XmlNode in node.ChildNodes do + begin + var (i, j) := cell.Attributes.GetNamedItem('r').Value.ToCR; + i -= LU[0]; + j -= LU[1]; + var typ := cell.Attributes.GetNamedItem('t'); + var st := cell.Attributes.GetNamedItem('s'); + var shared := false; + if (typ <> nil) and (typ.Value = 's') then + shared := true; + var value := ''; + foreach var vl: XmlNode in cell.ChildNodes do + if vl.Name = 'v' then value := vl.InnerText; + if shared then + sheet[i, j] := shStr[value.ToInteger] + else if (st <> nil) and (numFmt[st.Value.ToI] in DateTypeId) then + sheet[i, j] := (new DateTime(1900, 1, 1)).AddDays(value.ToI - 2).ToString('dd.MM.yyyy') + else + sheet[i, j] := value; + end; + end; + end; + Result := sheet; +end; + +function LoadSheetAsCells(path: string): array of array of exCell; +begin + var elms := Load(path); + var (LU, RD) := SheetRange(elms); + + var (w, h) := (RD[1] - LU[1] + 1, RD[0] - LU[0] + 1); + var sheet: array of array of exCell; + if (w < 0) or (h < 0) then + setLength(sheet, 0) + else begin + setLength(sheet, h); + for var i := 0 to h - 1 do sheet[i] := new exCell[w]; + + foreach var node: XmlNode in elms.Item['sheetData'].ChildNodes do + begin + foreach var cell: XmlNode in node.ChildNodes do + begin + var (i, j) := cell.Attributes.GetNamedItem('r').Value.ToCR; + i -= LU[0]; + j -= LU[1]; + var typ := cell.Attributes.GetNamedItem('t'); + var st := cell.Attributes.GetNamedItem('s'); + var shared := false; + if (typ <> nil) and (typ.Value = 's') then + shared := true; + + var value := ''; + foreach var vl: XmlNode in cell.ChildNodes do + if vl.Name = 'v' then + value := vl.InnerText; + + var cellValue := new exCell(sheet, i, j); + sheet[i, j] := cellValue; + if st <> nil then + cellValue.Border := brdStyles[numBrd[st.Value.ToI]]; + + if shared then + cellValue.Value := shStr[value.ToInteger] + else if (st <> nil) and (numFmt[st.Value.ToI] in DateTypeId) then + cellValue.Value := (new DateTime(1900, 1, 1)).AddDays(value.ToI - 2).ToString('dd.MM.yyyy') + else + cellValue.Value := value; + end; + end; + end; + Result := sheet; +end; + +function ReadXLSXAsCells(fileName: string; sheetNum: integer): array of array of exCell; +begin + arxiv := ZipFile.OpenRead(fileName); + + // общие строки + var elms := Load('xl/sharedStrings.xml'); + if elms <> nil then + foreach var node: XmlNode in elms.ChildNodes do + shStr.Add(node.Item['t'].InnerText.Trim); + + // бордюры + elms := Load('xl/styles.xml'); + brdStyles := new List; + foreach var node: XmlNode in elms.Item['borders'].ChildNodes do + begin + var brd := new exCellBorder; + brd.IsLeft := node.Item['left'].Attributes.Count > 0; + brd.IsRight := node.Item['right'].Attributes.Count > 0; + brd.IsTop := node.Item['top'].Attributes.Count > 0; + brd.IsBottom := node.Item['bottom'].Attributes.Count > 0; + brd.IsDiagonal := node.Item['diagonal'].Attributes.Count > 0; + brdStyles.Add(brd); + end; + + // стили + numFmt := new List; + numBrd := new List; + foreach var node: XmlNode in elms.Item['cellXfs'].ChildNodes do + begin + numFmt.Add(node.Attributes.GetNamedItem('numFmtId').Value.ToI); + numBrd.Add(node.Attributes.GetNamedItem('borderId').Value.ToI); + end; + + elms := Load('xl/workbook.xml'); + foreach var node: XmlNode in elms.Item['sheets'].ChildNodes do + begin + var name := node.Attributes.GetNamedItem('name').Value; + var attrs := new List; + foreach var attr: XmlAttribute in node.Attributes do + attrs.Add(attr.Name); + var sheetId := node.Attributes.GetNamedItem('r:id').Value[4:]; + Result := LoadSheetAsCells($'xl/worksheets/sheet{sheetId}.xml'); + sheetNum -= 1; + if sheetNum = 0 then + break; + end; +end; + +function ReadXLSX(fileName: string): Dictionary; +begin + arxiv := ZipFile.OpenRead(fileName); + + // общие строки + var elms := Load('xl/sharedStrings.xml'); + if elms <> nil then + foreach var node: XmlNode in elms.ChildNodes do + shStr.Add(node.Item['t'].InnerText.Trim); + + // стили + elms := Load('xl/styles.xml'); + numFmt := new List; + foreach var node: XmlNode in elms.Item['cellXfs'].ChildNodes do + numFmt.Add(node.Attributes.GetNamedItem('numFmtId').Value.ToI); + + elms := Load('xl/workbook.xml'); + Result := new Dictionary; + foreach var node: XmlNode in elms.Item['sheets'].ChildNodes do + begin + var name := node.Attributes.GetNamedItem('name').Value; + var attrs := new List; + foreach var attr: XmlAttribute in node.Attributes do + attrs.Add(attr.Name); + var sheetId := node.Attributes.GetNamedItem('r:id').Value[4:]; + Result[name] := LoadSheet($'xl/worksheets/sheet{sheetId}.xml'); + end; +end; + + +function ReadXLSXAsInts(fileName: string; sheetNum: integer) +:= ReadXLSX(fileName).Values.Skip(sheetNum).First.Select(r -> r.Select(c -> c.ToInteger).ToArray).ToArray; + +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/xPT4MakerNetX.pas b/TestSuite/CompilationSamples/xPT4MakerNetX.pas new file mode 100644 index 000000000..6125c6bed --- /dev/null +++ b/TestSuite/CompilationSamples/xPT4MakerNetX.pas @@ -0,0 +1,1692 @@ +{$reference System.Windows.Forms.dll} + +/// Конструктор учебных заданий для задачника Programming Taskbook. +/// Версия 1.9 от 26.03.2023 (С) М. Э. Абрамян, 2016-2023. +/// Все компоненты конструктора могут вызываться либо как классовые методы класса pt, +/// либо как обычные константы и процедуры. +unit xPT4MakerNetX; + +interface + +const + OptionAllLanguages = 1; // группа доступна для всех языков + OptionPascalLanguages = 2; // группа доступна для всех реализаций Паскаля + OptionNETLanguages = 4; // группа доступна для всех NET-языков + OptionUseAddition = 8; // группа доступна только при наличии файла дополнений + OptionHideExamples = 16; // не отображать раздел с примером верного решения + +/// Процедура, с которой должно начинаться определение нового задания. +/// Должна вызываться в процедуре с именем, начинающемся с текста Task. +/// Параметр topic определяет имя подгруппы и является необязательным. +/// Параметр tasktext содержит формулировку задания; отдельные строки +/// формулировки должны разделяться символами #13, #10 или #13#10. +procedure NewTask(topic, tasktext: string); + + +/// Процедура, с которой должно начинаться определение нового задания. +/// Должна вызываться в процедуре с именем, начинающемся с текста Task. +/// Параметр tasktext содержит формулировку задания; отдельные строки +/// формулировки должны разделяться символами #13, #10 или #13#10. +procedure NewTask(tasktext: string); + + +/// Добавляет комментарий в новой строке раздела исходных даннных. +procedure DataComm(comm: string); + +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +procedure Data(comm: string; a: object); + +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +procedure Data(comm1: string; a1: object; comm2: string); + +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +procedure Data(comm1: string; a1: object; comm2: string; a2: object); + +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +procedure Data(comm1: string; a1: object; comm2: string; a2: object; comm3: string); + +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +procedure Data(comm1: string; a1: object; comm2: string; a2: object; comm3: string; a3: object); + +/// Добавляет последовательность логических данных в раздел исходных данных. +procedure Data(seq: sequence of boolean); + +/// Добавляет последовательность целых чисел в раздел исходных данных. +procedure Data(seq: sequence of integer); + +/// Добавляет последовательность вещественных чисел в раздел исходных данных. +procedure Data(seq: sequence of real); + +/// Добавляет последовательность символов в раздел исходных данных. +procedure Data(seq: sequence of char); + +/// Добавляет последовательность строк в раздел исходных данных. +procedure Data(seq: sequence of string); + +/// Добавляет комментарий в новой строке раздела результатов. +procedure ResComm(comm: string); + +/// Добавляет данные и комментарии в новой строке раздела результатов. +procedure Res(comm: string; a: object); + +/// Добавляет данные и комментарии в новой строке раздела результатов. +procedure Res(comm1: string; a1: object; comm2: string); + +/// Добавляет данные и комментарии в новой строке раздела результатов. +procedure Res(comm1: string; a1: object; comm2: string; a2: object); + +/// Добавляет данные и комментарии в новой строке раздела результатов. +procedure Res(comm1: string; a1: object; comm2: string; a2: object; comm3: string); + +/// Добавляет данные и комментарии в новой строке раздела результатов. +procedure Res(comm1: string; a1: object; comm2: string; a2: object; comm3: string; a3: object); + +/// Добавляет последовательность логических данных в раздел результатов. +procedure Res(seq: sequence of boolean); + +/// Добавляет последовательность целых чисел в раздел результатов. +procedure Res(seq: sequence of integer); + +/// Добавляет последовательность вещественных чисел в раздел результатов. +procedure Res(seq: sequence of real); + +/// Добавляет последовательность символов в раздел результатов. +procedure Res(seq: sequence of char); + +/// Добавляет последовательность строк в раздел результатов. +procedure Res(seq: sequence of string); + +/// Задает минимальную ширину поля вывода для числовых данных +/// (числа выравниваются по правому краю поля вывода, +/// т.е. при необходимости дополняются слева пробелами). +/// Если n не лежит в диапазоне 0..10, то вызов процедуры игнорируется. +/// По умолчанию минимальная ширина поля вывода полагается равной 0. +procedure SetWidth(n: integer); + +/// Задает формат отображения вещественных чисел: +/// с фиксированной точкой и n дробными знаками при n > 0, +/// с плавающей точкой и n дробными знаками при n < 0, +/// с плавающей точкой и 6 дробными знаками при n = 0. +/// Если n по модулю превосходит 10, то вызов процедуры игнорируется. +/// По умолчанию устанавливается формат с фиксированной точкой +/// и 2 дробными знаками. +procedure SetPrecision(n: integer); + +/// Задает количество тестовых запусков, выполняемых +/// для проверки правильности программы (от 2 до 10). +/// По умолчанию число тестовых запусков полагается равным 5. +procedure SetTestCount(n: integer); + +/// Задает минимально необходимое количество элементов +/// исходных данных, которое требуется ввести для правильного +/// решения задачи в случае текущего набора исходных данных. +/// При отсутствии процедуры предполагается, +/// что для правильного решения надо ввести все исходные данные. +procedure SetRequiredDataCount(n: integer); + +/// Возвращает номер текущего тестового запуска +/// (запуски нумеруются от 1). +function CurrentTest: integer; + +/// Генерирует случайное целое число в диапазоне от M до N включительно. +/// Если M >= N, то возвращает M. +function Random(M, N: integer): integer; + +/// Генерирует случайное вещественное число на промежутке [A, B). +/// Если промежуток [A, B) пуст, то возвращает A. +function Random(A, B: real): real; + +/// Генерирует случайное вещественное число на промежутке [A, B) +/// с одним дробным знаком и случайной добавкой порядка 1e-7. +/// Если промежуток [A, B) пуст, то возвращает A, округленное +/// до одного дробного знака и снабженное добавкой порядка 1e-7. +function Random1(A, B: real): real; + +/// Генерирует случайное вещественное число на промежутке [A, B) +/// с двумя дробными знаками и случайной добавкой порядка 1e-7. +/// Если промежуток [A, B) пуст, то возвращает A, округленное +/// до двух дробных знаков и снабженное добавкой порядка 1e-7. +function Random2(A, B: real): real; + +/// Генерирует случайную строку длины len, состоящую +/// из цифр и строчных (т.е. маленьких) латинских букв. +function RandomName(len: integer): string; + +/// Создает новую группу с кратким описанием GroupDescription, +/// информацией об авторе GroupAuthor и набором необязательных опций, объединяемых операцией or. +/// Имя группы определяется по имени библиотеки (путем отбрасывания префикса xPT4 +/// и возможных суффиксов _ru или _en). +/// В группу включаются задания, определенные в процедурах, имена которых начинаются с текста Task. +/// Процедура NewGroup должна быть вызвана в процедуре inittaskgroup без параметров, которую +/// необходимо описать в библиотеке с группой заданий (все буквы в имени inittaskgroup - строчные). +procedure NewGroup(GroupDescription, GroupAuthor: string; Options: integer := 0); + +/// Создает новую группу с кратким описанием GroupDescription, английским описанием GroupEnDescription, +/// информацией об авторе GroupAuthor и набором необязательных опций, объединяемых операцией or. +/// Имя группы определяется по имени библиотеки (путем отбрасывания префикса PT4 +/// и возможных суффиксов _ru или _en). +/// В группу включаются задания, определенные в процедурах, имена которых начинаются с текста Task. +/// Процедура NewGroup должна быть вызвана в процедуре inittaskgroup без параметров, которую +/// необходимо описать в библиотеке с группой заданий (все буквы в имени inittaskgroup - строчные). +procedure NewGroup(GroupDescription, GroupEnDescription, GroupAuthor: string; Options: integer := 0); + +/// Обеспечивает регистрацию созданной группы в электронном задачнике. +/// Процедура ActivateNET(S) должна быть вызвана в процедуре activate(S: string), +/// которую необходимо описать в библиотеке с группой заданий (все буквы в имени activate - строчные). +procedure ActivateNET(S: string); + +/// Импортирует в создаваемую группу существующее задание +/// из группы GroupName с номером TaskNumber. Должна вызываться +/// в процедуре с именем, начинающемся с текста Task. +procedure UseTask(GroupName: string; TaskNumber: integer); + +/// Импортирует в создаваемую группу существующее задание +/// из группы GroupName с номером TaskNumber. Должна вызываться +/// в процедуре с именем, начинающемся с текста Task. +procedure UseTask(GroupName: string; TaskNumber: integer; TopicDescription: string); + +/// Возвращает массив из 116 русских слов. +function GetWords: array of string; +/// Возвращает массив из 116 английских слов. +function GetEnWords: array of string; +/// Возвращает массив из 61 русского предложения. +function GetSentences: array of string; +/// Возвращает массив из 61 английского предложения. +function GetEnSentences: array of string; +/// Возвращает массив из 85 русских многострочных текстов. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +function GetTexts: array of string; +/// Возвращает массив из 85 английских многострочных текстов. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +function GetEnTexts: array of string; + +/// Возвращает случайное русское слово из массива, +/// входящего в конструктор учебных заданий. +function RandomWord: string; +/// Возвращает случайное английское слово из массива, +/// входящего в конструктор учебных заданий. +function RandomEnWord: string; +/// Возвращает случайное русское предложение из массива, +/// входящего в конструктор учебных заданий. +function RandomSentence: string; +/// Возвращает случайное английское предложение из массива, +/// входящего в конструктор учебных заданий. +function RandomEnSentence: string; +/// Возвращает случайный русский многострочный текст из массива, +/// входящего в конструктор учебных заданий. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +function RandomText: string; +/// Возвращает случайный английский многострочный текст из массива, +/// входящего в конструктор учебных заданий. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +function RandomEnText: string; + + +/// Добавляет в задание исходный файл целых чисел +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. +procedure DataFileInteger(FileName: string); +/// Добавляет в задание исходный файл вещественных чисел +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. +procedure DataFileReal(FileName: string); +/// Добавляет в задание исходный символьный файл +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. Символы должны +/// храниться в файле в однобайтной кодировке. +procedure DataFileChar(FileName: string); +/// Добавляет в задание исходный строковый файл +/// с элементами типа ShortString и именем FileName +/// и отображает его содержимое в разделе исходных данных. +/// Длина элементов файла не должна превосходить 70 символов. +/// Строки должны храниться в файле в однобайтной кодировке. +procedure DataFileString(FileName: string); +/// Добавляет в задание исходный текстовый файл +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. Длина каждой строки +/// текстового файла не должна превосходить 70 символов. +/// Текст должен храниться в файле в однобайтной кодировке. +procedure DataText(FileName: string; LineCount: integer := 4); + +/// Добавляет в задание результирующий файл целых чисел +/// с именем FileName и отображает его содержимое в разделе результатов. +procedure ResFileInteger(FileName: string); +/// Добавляет в задание результирующий файл вещественных чисел +/// с именем FileName и отображает его содержимое в разделе результатов. +procedure ResFileReal(FileName: string); +/// Добавляет в задание результирующий символьный файл +/// с именем FileName и отображает его содержимое в разделе результатов. +/// Символы должны храниться в файле в однобайтной кодировке. +procedure ResFileChar(FileName: string); +/// Добавляет в задание результирующий строковый файл +/// с элементами типа ShortString и именем FileName +/// и отображает его содержимое в разделе результатов. +/// Длина элементов файла не должна превосходить 70 символов. +/// Строки должны храниться в файле в однобайтной кодировке. +procedure ResFileString(FileName: string); +/// Добавляет в задание результирующий текстовый файл +/// с именем FileName и отображает его содержимое в разделе результатов. +/// Длина каждой строки текстового файла не должна превосходить 70 символов. +/// Текст должен храниться в файле в однобайтной кодировке. +procedure ResText(FileName: string; LineCount: integer := 5); + +type pt = class + private + constructor Create; + begin + end; + public +/// Дополнительная опция для процедуры NewGroup: +/// группа доступна для всех языков. + class function OptionAllLanguages: integer; + begin + result := xPT4MakerNetX.OptionAllLanguages; + end; +/// Дополнительная опция для процедуры NewGroup: +/// группа доступна для всех реализаций языка Pascal. + class function OptionPascalLanguages: integer; + begin + result := xPT4MakerNetX.OptionPascalLanguages; + end; +/// Дополнительная опция для процедуры NewGroup: +/// группа доступна для всех NET-языков. + class function OptionNETLanguages: integer; + begin + result := xPT4MakerNetX.OptionNETLanguages; + end; +/// Дополнительная опция для процедуры NewGroup: +/// группа доступна только при наличии связанного с ней файла дополнений. + class function OptionUseAddition: integer; + begin + result := xPT4MakerNetX.OptionUseAddition; + end; +/// Дополнительная опция для процедуры NewGroup: +/// в заданиях данной группы не будет отображаться пример верного решения. + class function OptionHideExamples: integer; + begin + result := xPT4MakerNetX.OptionHideExamples; + end; +/// Процедура, с которой должно начинаться определение нового задания. +/// Должна вызываться в процедуре с именем, начинающемся с текста Task. +/// Параметр topic определяет имя подгруппы (является необязательным). +/// Параметр tasktext содержит формулировку задания; отдельные строки +/// формулировки должны разделяться символами #13, #10 или #13#10. +class procedure NewTask(topic, tasktext: string); +begin + xPT4MakerNetX.NewTask(topic, tasktext); +end; + +/// Процедура, с которой должно начинаться определение нового задания. +/// Должна вызываться в процедуре с именем, начинающемся с текста Task. +/// Параметр tasktext содержит формулировку задания; отдельные строки +/// формулировки должны разделяться символами #13, #10 или #13#10. +class procedure NewTask(tasktext: string); +begin + xPT4MakerNetX.NewTask(tasktext); +end; + +/// Добавляет комментарий в новой строке раздела исходных даннных. +class procedure DataComm(comm: string); +begin + xPT4MakerNetX.DataComm(comm); +end; +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +class procedure Data(comm: string; a: object); +begin + xPT4MakerNetX.Data(comm, a); +end; +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +class procedure Data(comm1: string; a1: object; comm2: string); +begin + xPT4MakerNetX.Data(comm1, a1, comm2); +end; +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +class procedure Data(comm1: string; a1: object; comm2: string; a2: object); +begin + xPT4MakerNetX.Data(comm1, a1, comm2, a2); +end; +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +class procedure Data(comm1: string; a1: object; comm2: string; a2: object; comm3: string); +begin + xPT4MakerNetX.Data(comm1, a1, comm2, a2, comm3); +end; +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +class procedure Data(comm1: string; a1: object; comm2: string; a2: object; comm3: string; a3: object); +begin + xPT4MakerNetX.Data(comm1, a1, comm2, a2, comm3, a3); +end; +/// Добавляет последовательность логических данных в раздел исходных данных. +class procedure Data(seq: sequence of boolean); +begin + xPT4MakerNetX.Data(seq); +end; +/// Добавляет последовательность целых чисел в раздел исходных данных. +class procedure Data(seq: sequence of integer); +begin + xPT4MakerNetX.Data(seq); +end; +/// Добавляет последовательность вещественных чисел в раздел исходных данных. +class procedure Data(seq: sequence of real); +begin + xPT4MakerNetX.Data(seq); +end; +/// Добавляет последовательность символов в раздел исходных данных. +class procedure Data(seq: sequence of char); +begin + xPT4MakerNetX.Data(seq); +end; +/// Добавляет последовательность строк в раздел исходных данных. +class procedure Data(seq: sequence of string); +begin + xPT4MakerNetX.Data(seq); +end; + +/// Добавляет комментарий в новой строке раздела результатов. +class procedure ResComm(comm: string); +begin + xPT4MakerNetX.ResComm(comm); +end; +/// Добавляет данные и комментарии в новой строке раздела результатов. +class procedure Res(comm: string; a: object); +begin + xPT4MakerNetX.Res(comm, a); +end; +/// Добавляет данные и комментарии в новой строке раздела результатов. +class procedure Res(comm1: string; a1: object; comm2: string); +begin + xPT4MakerNetX.Res(comm1, a1, comm2); +end; +/// Добавляет данные и комментарии в новой строке раздела результатов. +class procedure Res(comm1: string; a1: object; comm2: string; a2: object); +begin + xPT4MakerNetX.Res(comm1, a1, comm2, a2); +end; +/// Добавляет данные и комментарии в новой строке раздела результатов. +class procedure Res(comm1: string; a1: object; comm2: string; a2: object; comm3: string); +begin + xPT4MakerNetX.Res(comm1, a1, comm2, a2, comm3); +end; +/// Добавляет данные и комментарии в новой строке раздела результатов. +class procedure Res(comm1: string; a1: object; comm2: string; a2: object; comm3: string; a3: object); +begin + xPT4MakerNetX.Res(comm1, a1, comm2, a2, comm3, a3); +end; +/// Добавляет последовательность логических данных в раздел результатов. +class procedure Res(seq: sequence of boolean); +begin + xPT4MakerNetX.Res(seq); +end; +/// Добавляет последовательность целых чисел в раздел результатов. +class procedure Res(seq: sequence of integer); +begin + xPT4MakerNetX.Res(seq); +end; +/// Добавляет последовательность вещественных чисел в раздел результатов. +class procedure Res(seq: sequence of real); +begin + xPT4MakerNetX.Res(seq); +end; +/// Добавляет последовательность символов в раздел результатов. +class procedure Res(seq: sequence of char); +begin + xPT4MakerNetX.Res(seq); +end; +/// Добавляет последовательность строк в раздел результатов. +class procedure Res(seq: sequence of string); +begin + xPT4MakerNetX.Res(seq); +end; + +/// Задает минимальную ширину поля вывода для числовых данных +/// (числа выравниваются по правому краю поля вывода, +/// т.е. при необходимости дополняются слева пробелами). +/// Если n не лежит в диапазоне 0..10, то вызов процедуры игнорируется. +/// По умолчанию минимальная ширина поля вывода полагается равной 0. +class procedure SetWidth(n: integer); +begin + xPT4MakerNetX.SetWidth(n); +end; +/// Задает формат отображения вещественных чисел: +/// с фиксированной точкой и n дробными знаками при n > 0, +/// с плавающей точкой и n дробными знаками при n < 0, +/// с плавающей точкой и 6 дробными знаками при n = 0. +/// Если n по модулю превосходит 10, то вызов процедуры игнорируется. +/// По умолчанию устанавливается формат с фиксированной точкой +/// и 2 дробными знаками. +class procedure SetPrecision(n: integer); +begin + xPT4MakerNetX.SetPrecision(n); +end; +/// Задает количество тестовых запусков, выполняемых +/// для проверки правильности программы (от 2 до 10). +/// По умолчанию число тестовых запусков полагается равным 5. +class procedure SetTestCount(n: integer); +begin + xPT4MakerNetX.SetTestCount(n); +end; +/// Задает минимально необходимое количество элементов +/// исходных данных, которое требуется ввести для правильного +/// решения задачи в случае текущего набора исходных данных. +/// При отсутствии процедуры предполагается, +/// что для правильного решения надо ввести все исходные данные. +class procedure SetRequiredDataCount(n: integer); +begin + xPT4MakerNetX.SetRequiredDataCount(n); +end; +/// Возвращает номер текущего тестового запуска +/// (запуски нумеруются от 1). +class function CurrentTest: integer; +begin + result := xPT4MakerNetX.CurrentTest; +end; + +/// Генерирует случайное целое число в диапазоне от M до N включительно. +/// Если M >= N, то возвращает M. +class function Random(M, N: integer): integer; +begin + result := xPT4MakerNetX.Random(M, N); +end; +/// Генерирует случайное вещественное число на промежутке [A, B). +/// Если промежуток [A, B) пуст, то возвращает A. +class function Random(A, B: real): real; +begin + result := xPT4MakerNetX.Random(A, B); +end; +/// Генерирует случайное вещественное число на промежутке [A, B) +/// с одним дробным знаком и случайной добавкой порядка 1e-7. +/// Если промежуток [A, B) пуст, то возвращает A, округленное +/// до одного дробного знака и снабженное добавкой порядка 1e-7. +class function Random1(A, B: real): real; +begin + result := xPT4MakerNetX.Random1(A, B); +end; +/// Генерирует случайное вещественное число на промежутке [A, B) +/// с двумя дробными знаками и случайной добавкой порядка 1e-7. +/// Если промежуток [A, B) пуст, то возвращает A, округленное +/// до двух дробных знаков и снабженное добавкой порядка 1e-7. +class function Random2(A, B: real): real; +begin + result := xPT4MakerNetX.Random2(A, B); +end; +/// Генерирует случайную строку длины len, состоящую +/// из цифр и строчных (т.е. маленьких) латинских букв. +class function RandomName(len: integer): string; +begin + result := xPT4MakerNetX.RandomName(len); +end; + +/// Создает новую группу с кратким описанием GroupDescription, +/// информацией об авторе GroupAuthor и набором необязательных опций, объединяемых операцией or. +/// Имя группы определяется по имени библиотеки (путем отбрасывания префикса xPT4 +/// и возможных суффиксов _ru или _en). +/// В группу включаются задания, определенные в процедурах, имена которых начинаются с текста Task. +/// Процедура NewGroup должна быть вызвана в процедуре inittaskgroup без параметров, которую +/// необходимо описать в библиотеке с группой заданий (все буквы в имени inittaskgroup - строчные). +class procedure NewGroup(GroupDescription, GroupAuthor: string; Options: integer := 0); +begin + xPT4MakerNetX.NewGroup(GroupDescription, GroupAuthor, Options); +end; +/// Создает новую группу с кратким описанием GroupDescription, английским описанием GroupEnDescription, +/// информацией об авторе GroupAuthor и набором необязательных опций, объединяемых операцией or. +/// Имя группы определяется по имени библиотеки (путем отбрасывания префикса PT4 +/// и возможных суффиксов _ru или _en). +/// В группу включаются задания, определенные в процедурах, имена которых начинаются с текста Task. +/// Процедура NewGroup должна быть вызвана в процедуре inittaskgroup без параметров, которую +/// необходимо описать в библиотеке с группой заданий (все буквы в имени inittaskgroup - строчные). +class procedure NewGroup(GroupDescription, GroupEnDescription, GroupAuthor: string; Options: integer := 0); +begin + xPT4MakerNetX.NewGroup(GroupDescription, GroupEnDescription, GroupAuthor, Options); +end; +/// Обеспечивает регистрацию созданной группы в электронном задачнике. +/// Процедура ActivateNET(S) должна быть вызвана в процедуре activate(S: string), +/// которую необходимо описать в библиотеке с группой заданий (все буквы в имени activate - строчные). +class procedure ActivateNET(S: string); +begin + xPT4MakerNetX.ActivateNET(S); +end; +/// Импортирует в создаваемую группу существующее задание +/// из группы GroupName с номером TaskNumber. Должна вызываться +/// в процедуре с именем, начинающемся с текста Task. +class procedure UseTask(GroupName: string; TaskNumber: integer); +begin + xPT4MakerNetX.UseTask(GroupName, TaskNumber); +end; +/// Импортирует в создаваемую группу существующее задание +/// из группы GroupName с номером TaskNumber. Должна вызываться +/// в процедуре с именем, начинающемся с текста Task. +class procedure UseTask(GroupName: string; TaskNumber: integer; TopicDescription: string); +begin + xPT4MakerNetX.UseTask(GroupName, TaskNumber, TopicDescription); +end; +/// Возвращает массив из 116 русских слов. +class function GetWords: array of string; +begin + result := xPT4MakerNetX.GetWords; +end; +/// Возвращает массив из 116 английских слов. +class function GetEnWords: array of string; +begin + result := xPT4MakerNetX.GetEnWords; +end; +/// Возвращает массив из 61 русского предложения. +class function GetSentences: array of string; +begin + result := xPT4MakerNetX.GetSentences; +end; +/// Возвращает массив из 61 английского предложения. +class function GetEnSentences: array of string; +begin + result := xPT4MakerNetX.GetEnSentences; +end; +/// Возвращает массив из 85 русских многострочных текстов. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +class function GetTexts: array of string; +begin + result := xPT4MakerNetX.GetTexts; +end; +/// Возвращает массив из 85 английских многострочных текстов. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +class function GetEnTexts: array of string; +begin + result := xPT4MakerNetX.GetEnTexts; +end; +/// Возвращает случайное русское слово из массива, +/// входящего в конструктор учебных заданий. +class function RandomWord: string; +begin + result := xPT4MakerNetX.RandomWord; +end; +/// Возвращает случайное английское слово из массива, +/// входящего в конструктор учебных заданий. +class function RandomEnWord: string; +begin + result := xPT4MakerNetX.RandomEnWord; +end; +/// Возвращает случайное русское предложение из массива, +/// входящего в конструктор учебных заданий. +class function RandomSentence: string; +begin + result := xPT4MakerNetX.RandomSentence; +end; +/// Возвращает случайное английское предложение из массива, +/// входящего в конструктор учебных заданий. +class function RandomEnSentence: string; +begin + result := xPT4MakerNetX.RandomEnSentence; +end; +/// Возвращает случайный русский многострочный текст из массива, +/// входящего в конструктор учебных заданий. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +class function RandomText: string; +begin + result := xPT4MakerNetX.RandomText; +end; +/// Возвращает случайный английский многострочный текст из массива, +/// входящего в конструктор учебных заданий. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +class function RandomEnText: string; +begin + result := xPT4MakerNetX.RandomEnText; +end; + +/// Добавляет в задание исходный файл целых чисел +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. +class procedure DataFileInteger(FileName: string); +begin + xPT4MakerNetX.DataFileInteger(FileName); +end; +/// Добавляет в задание исходный файл вещественных чисел +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. +class procedure DataFileReal(FileName: string); +begin + xPT4MakerNetX.DataFileReal(FileName); +end; +/// Добавляет в задание исходный символьный файл +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. Символы должны +/// храниться в файле в однобайтной кодировке. +class procedure DataFileChar(FileName: string); +begin + xPT4MakerNetX.DataFileChar(FileName); +end; +/// Добавляет в задание исходный строковый файл +/// с элементами типа ShortString и именем FileName +/// и отображает его содержимое в разделе исходных данных. +/// Длина элементов файла не должна превосходить 70 символов. +/// Строки должны храниться в файле в однобайтной кодировке. +class procedure DataFileString(FileName: string); +begin + xPT4MakerNetX.DataFileString(FileName); +end; +/// Добавляет в задание исходный текстовый файл +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. Длина каждой строки +/// текстового файла не должна превосходить 70 символов. +/// Текст должен храниться в файле в однобайтной кодировке. +class procedure DataText(FileName: string; LineCount: integer := 4); +begin + xPT4MakerNetX.DataText(FileName); +end; + +/// Добавляет в задание результирующий файл целых чисел +/// с именем FileName и отображает его содержимое в разделе результатов. +class procedure ResFileInteger(FileName: string); +begin + xPT4MakerNetX.ResFileInteger(FileName); +end; +/// Добавляет в задание результирующий файл вещественных чисел +/// с именем FileName и отображает его содержимое в разделе результатов. +class procedure ResFileReal(FileName: string); +begin + xPT4MakerNetX.ResFileReal(FileName); +end; +/// Добавляет в задание результирующий символьный файл +/// с именем FileName и отображает его содержимое в разделе результатов. +/// Символы должны храниться в файле в однобайтной кодировке. +class procedure ResFileChar(FileName: string); +begin + xPT4MakerNetX.ResFileChar(FileName); +end; +/// Добавляет в задание результирующий строковый файл +/// с элементами типа ShortString и именем FileName +/// и отображает его содержимое в разделе результатов. +/// Длина элементов файла не должна превосходить 70 символов. +/// Строки должны храниться в файле в однобайтной кодировке. +class procedure ResFileString(FileName: string); +begin + xPT4MakerNetX.ResFileString(FileName); +end; +/// Добавляет в задание результирующий текстовый файл +/// с именем FileName и отображает его содержимое в разделе результатов. +/// Длина каждой строки текстового файла не должна превосходить 70 символов. +/// Текст должен храниться в файле в однобайтной кодировке. +class procedure ResText(FileName: string; LineCount: integer := 5); +begin + xPT4MakerNetX.ResText(FileName); +end; +end; + + +implementation +{$reference system.windows.forms.dll} +uses System.Reflection, xPT4TaskMakerNET, System.Windows.Forms, System; + +const + alphabet = '0123456789abcdefghijklmnopqrstuvwxyz'; + ErrMes1 = 'Error: Раздел размером более 5 строк не может содержать файловые данные.'; + ErrMes2 = 'Error: При наличии файловых данных раздел не может содержать более 5 строк.'; + ErrMes3 = 'Error: Количество исходных данных превысило 200.'; + ErrMes4 = 'Error: Количество результирующих данных превысило 200.'; + ErrMes5 = 'Error: При определении задания первой должна вызываться процедура NewTask.'; + ErrMes6 = 'Error: При определении задания не указаны исходные данные.'; + ErrMes7 = 'Error: При определении задания не указаны результирующие данные.'; + +var + yd, yr, ye, nd, nr, pr, wd: integer; + nt, ut, fd, fr: boolean; + fmt: string; + tasks := new List(100); + +procedure Show(s: string); +begin + MessageBox.Show(s, 'Error', MessageBoxButtons.OK, MessageBoxIcon.Error); +end; + +function ErrorMessage(s: string): string; +begin + result := Copy(s + new string(' ', 100), 1, 78); +end; + +procedure ErrorInfo(s: string); +begin + xPT4TaskMakerNET.TaskText('\B'+ErrorMessage(s)+'\b', 0, ye); + ye := ye + 1; + if ye > 5 then ye := 0; +end; + +function CheckTT: boolean; +begin + result := ut; + if not nt then + begin + NewTask(''); + ErrorInfo(ErrMes5); + end; +end; + +function RandomName(len: integer): string; +begin + result := ArrRandom(len, 1, alphabet.Length) + .Select(e -> alphabet[e]).JoinIntoString(''); +end; + +procedure SetPrecision(n: integer); +begin + if CheckTT then exit; + if abs(n) > 10 then exit; + pr := n; + if n < 0 then + begin + fmt := 'e' + IntToStr(-n); + n := 0; + end + else if n = 0 then + fmt := 'e6' + else + fmt := 'f' + IntToStr(n); + xPT4TaskMakerNET.SetPrecision(n); +end; + +procedure SetWidth(n: integer); +begin + if (n >= 0) and (n <= 20) then + wd := n; +end; + +procedure NewTask(topic, tasktext: string); +begin + if nt then exit; + xPT4TaskMakerNET.CreateTask(topic); + xPT4TaskMakerNET.TaskText(tasktext); + nt := true; // вызвана процедура NewTask + ut := false; // было подключено существующее задание (процедурой UseTask) + ye := 1; // текущий номер строки для вывода сообщения об ошибке + yd := 0; // текущий номер строки в разделе исходных данных + yr := 0; // текущий номер строки в разделе результатов + nd := 0; // количество элементов исходных данных + nr := 0; // количество элементов результирующих данных + fd := false; // наличие файловых данных в разделе исходных данных + fr := false; // наличие файловых данных в разделе результатов + pr := 2; // текущая точность вывода вещественных данных + fmt := 'f2'; // текущий формат вывода вещественных данных + wd := 0; // текущая ширина поля вывода для чисел +end; + +function wreal(w: integer; x: real): integer; +begin + result := w; + if w = 0 then + begin + result := Format('{0,0:' + fmt + '}', x).Length; + if (pr <= 0) and (x >= 0) then + result := result + 1; + end; +end; + +function winteger(w: integer; x: integer): integer; +begin + result := w; + if w = 0 then + result := IntToStr(x).Length; +end; + +procedure NewTask(tasktext: string); +begin + NewTask('', tasktext); +end; + +procedure Data(s: string; a: object; x, y, w: integer); +begin + if (y > 5) and fd then + begin + ErrorInfo(ErrMes2); + exit; + end; + inc(nd); + if nd > 200 then + begin + ErrorInfo(ErrMes3); + exit; + end; + if a is boolean then + DataB(s, boolean(a), x, y) + else if a is integer then + DataN(s, integer(a), x, y, winteger(w, integer(a))) + else if a is real then + DataR(s, real(a), x, y, wreal(w, real(a))) + else if a is char then + DataC(s, char(a), x, y) + else if a is string then + DataS(s, string(a), x, y) + else + DataComment(Copy(s + '!WrongType:' + a.GetType.Name, 1, 38), x, y); +end; + +procedure Res(s: string; a: object; x, y, w: integer); +begin + if (y > 5) and fr then + begin + ErrorInfo(ErrMes2); + exit; + end; + inc(nr); + if nr > 200 then + begin + ErrorInfo(ErrMes4); + exit; + end; + if a is boolean then + ResultB(s, boolean(a), x, y) + else if a is integer then + ResultN(s, integer(a), x, y, winteger(w, integer(a))) + else if a is real then + ResultR(s, real(a), x, y, wreal(w, real(a))) + else if a is char then + ResultC(s, char(a), x, y) + else if a is string then + ResultS(s, string(a), x, y) + else + ResultComment(Copy(s + '!WrongType:' + a.GetType.Name, 1, 38), x, y); +end; + +procedure DataComm(comm: string); +begin + if CheckTT then exit; + inc(yd); + DataComment(comm, 0, yd); +end; + +procedure Data(comm: string; a: object); +begin + if CheckTT then exit; + inc(yd); + Data(comm, a, 0, yd, wd); +end; + +procedure Data(comm1: string; a1: object; comm2: string); +begin + if CheckTT then exit; + inc(yd); + Data(comm1, a1, xLeft, yd, wd); + DataComment(comm2, xRight, yd); +end; + +procedure Data(comm1: string; a1: object; comm2: string; a2: object); +begin + if CheckTT then exit; + inc(yd); + Data(comm1, a1, xLeft, yd, wd); + Data(comm2, a2, xRight, yd, wd); +end; + +procedure Data(comm1: string; a1: object; comm2: string; a2: object; comm3: string); +begin + if CheckTT then exit; + inc(yd); + Data(comm1, a1, xLeft, yd, wd); + Data(comm2, a2, 0, yd, wd); + DataComment(comm3, xRight, yd); +end; + +procedure Data(comm1: string; a1: object; comm2: string; a2: object; comm3: string; a3: object); +begin + if CheckTT then exit; + inc(yd); + Data(comm1, a1, xLeft, yd, wd); + Data(comm2, a2, 0, yd, wd); + Data(comm3, a3, xRight, yd, wd); +end; + +procedure Data(seq: sequence of boolean); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yd); + var w := 5; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yd); + i := 1; + end; + Data('', e, Center(i, n, w, 2), yd, w); + end; +end; + +procedure Data(seq: sequence of integer); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yd); + var w := wd; + if w = 0 then + w := seq.Select(e -> IntToStr(e)).Max(e -> e.Length); + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yd); + i := 1; + end; + Data('', e, Center(i, n, w, 2), yd, w); + end; +end; + +procedure Data(seq: sequence of real); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yd); + var w := wd; + if w = 0 then + w := seq.Select(e -> wreal(0, e)(*Format('{0,0:'+fmt+'}', e)*)).Max; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yd); + i := 1; + end; + Data('', e, Center(i, n, w, 2), yd, w); + end; +end; + +procedure Data(seq: sequence of char); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yd); + var w := 3; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yd); + i := 1; + end; + Data('', e, Center(i, n, w, 2), yd, w); + end; +end; + +procedure Data(seq: sequence of string); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yd); + var w := seq.Max(e -> e.Length) + 2; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yd); + i := 1; + end; + Data('', e, Center(i, n, w, 2), yd, w); + end; +end; + +procedure ResComm(comm: string); +begin + if CheckTT then exit; + inc(yr); + ResultComment(comm, 0, yr); +end; + +procedure Res(comm: string; a: object); +begin + if CheckTT then exit; + inc(yr); + Res(comm, a, 0, yr, wd); +end; + +procedure Res(comm1: string; a1: object; comm2: string); +begin + if CheckTT then exit; + inc(yr); + Res(comm1, a1, xLeft, yr, wd); + ResultComment(comm2, xRight, yr); +end; + +procedure Res(comm1: string; a1: object; comm2: string; a2: object); +begin + if CheckTT then exit; + inc(yr); + Res(comm1, a1, xLeft, yr, wd); + Res(comm2, a2, xRight, yr, wd); +end; + +procedure Res(comm1: string; a1: object; comm2: string; a2: object; comm3: string); +begin + if CheckTT then exit; + inc(yr); + Res(comm1, a1, xLeft, yr, wd); + Res(comm2, a2, 0, yr, wd); + ResultComment(comm3, xRight, yr); +end; + +procedure Res(comm1: string; a1: object; comm2: string; a2: object; comm3: string; a3: object); +begin + if CheckTT then exit; + inc(yr); + Res(comm1, a1, xLeft, yr, wd); + Res(comm2, a2, 0, yr, wd); + Res(comm3, a3, xRight, yr, wd); +end; + +procedure Res(seq: sequence of boolean); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yr); + var w := 5; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yr); + i := 1; + end; + Res('', e, Center(i, n, w, 2), yr, w); + end; +end; + +procedure Res(seq: sequence of integer); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yr); + var w := wd; + if w = 0 then + w := seq.Select(e -> IntToStr(e)).Max(e -> e.Length); + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yr); + i := 1; + end; + Res('', e, Center(i, n, w, 2), yr, w); + end; +end; + +procedure Res(seq: sequence of real); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yr); + var w := wd; + if w = 0 then + w := seq.Select(e -> wreal(0, e)).Max; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yr); + i := 1; + end; + Res('', e, Center(i, n, w, 2), yr, w); + end; +end; + +procedure Res(seq: sequence of char); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yr); + var w := 3; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yr); + i := 1; + end; + Res('', e, Center(i, n, w, 2), yr, w); + end; +end; + +procedure Res(seq: sequence of string); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yr); + var w := seq.Max(e -> e.Length) + 2; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yr); + i := 1; + end; + Res('', e, Center(i, n, w, 2), yr, w); + end; +end; + + +procedure ActivateNET(S: string); +begin + xPT4TaskMakerNET.ActivateNET(S); +end; + +procedure RunTask(num: integer); +var ut0: boolean; +begin + try + try + if (num > 0) and (num <= tasks.Count) then + tasks[num - 1].Invoke(nil, nil); + finally + nt := false; + ut0 := ut; + ut := false; + end; + except + on e: TargetInvocationException do + begin + ErrorInfo('Error ' + + e.InnerException.GetType.Name + ': ' + + e.InnerException.message); + end; + end; + if ut0 then exit; + if (nd = 0) and not fd then + DataS('\B'+Copy(ErrorMessage(ErrMes6),1,76)+'\b', '', 1, 1); + if (nr = 0) and not fr then + ResultS('\B'+Copy(ErrorMessage(ErrMes7),1,76)+'\b', '', 1, 1); +end; + +function GetGroupName(assname: string; var libname: string): string; +begin + libname := copy(assname, 1, pos(',', assname)-1); + result := libname; + var p := pos('_', libname); + if p > 0 then + delete(result, p, 100); // удаление суффикса, определяющего язык интерфейса + delete(result, 1, 4); // удаление префикса xPT4 +end; + +function AcceptedLanguage(opt: integer): boolean; +begin + var lang := CurrentLanguage; + result := (lang = lgPascalABCNET) + or (opt and OptionAllLanguages = OptionAllLanguages) + or (lang and lgNET <> 0) and (opt and OptionNETLanguages = OptionNETLanguages) + or (lang and lgPascal = lgPascal) and (opt and OptionPascalLanguages = OptionPascalLanguages); +end; + +procedure NewGroup(GroupDescription, GroupAuthor: string; Options: integer); +begin + NewGroup(GroupDescription, '', GroupAuthor, Options); +end; + +procedure NewGroup(GroupDescription, GroupEnDescription, GroupAuthor: string; Options: integer); +begin + if not AcceptedLanguage(Options) then + exit; // недопустимый текущий язык + var ass := Assembly.GetCallingAssembly; + var LibName := ''; + var GroupName := GetGroupName(ass.FullName, LibName); + tasks.Clear; + var GroupKey := 'GK'; + foreach var e in ass.GetType(LibName + '.' + LibName).GetMethods.OrderBy(e -> e.Name.ToUpper) do //2018.08 + if e.Name.ToUpper.StartsWith('TASK') then + begin + tasks.Add(e); + GroupKey := GroupKey + Copy(e.Name, 5, 100); + end; + if tasks.Count = 0 then + begin + Show('Группа ' + GroupName + ' не содержит заданий'#13#10+ + '(имена процедур с заданиями должны начинаться с текста "Task").'); + exit; + end; + if tasks.Count > 999 then + begin + Show('Группа ' + GroupName + ' содержит более 999 заданий.'); + exit; + end; + GroupKey := Copy(GroupKey, 1, 30); + if Options and OptionUseAddition = OptionUseAddition then + GroupKey := GroupKey + '#UseAddition#'; + if Options and OptionHideExamples = OptionHideExamples then + GroupKey := GroupKey + '#HideExamples#'; + if GroupEnDescription.Trim <> '' then + GroupKey := GroupKey + '#EnTopic<' + GroupEnDescription.Trim + '>#'; + CreateGroup(GroupName, GroupDescription, GroupAuthor, + GroupKey, tasks.Count, RunTask); +end; + + +procedure SetTestCount(n: integer); +begin + if CheckTT then exit; + xPT4TaskMakerNET.SetTestCount(n); +end; + +procedure SetRequiredDataCount(n: integer); +begin + if CheckTT then exit; + xPT4TaskMakerNET.SetRequiredDataCount(n); +end; + +function Random(M, N: integer): integer; +begin + result := xPT4TaskMakerNET.RandomN(M, N); +end; + +function Random(A, B: real): real; +begin + result := xPT4TaskMakerNET.RandomR(A, B); +end; + +function Random1(A, B: real): real; +begin + result := Random(Round(a*10), Round(b*10)) / 10 + + Random * 1.0e-7; +end; + +function Random2(A, B: real): real; +begin + result := Random(Round(a*100), Round(b*100)) / 100 + + Random * 1.0e-7; +end; + +function CurrentTest: integer; +begin + if CheckTT then exit; + result := xPT4TaskMakerNET.CurrentTest; +end; + +procedure UseTask(GroupName: string; TaskNumber: integer); +begin + if ut then exit; + xPT4TaskMakerNET.UseTask(GroupName, TaskNumber); + ut := true; +end; + +procedure UseTask(GroupName: string; TaskNumber: integer; TopicDescription: string); +begin + if ut then exit; + xPT4TaskMakerNET.UseTask(GroupName, TaskNumber, TopicDescription); + ut := true; +end; + +function GetWords: array of string; +begin + Result := ArrGen(WordCount, i -> WordSample(i)); +end; + +function RandomWord: string; +begin + Result := WordSample(RandomN(0, WordCount - 1)); +end; + +function GetEnWords: array of string; +begin + Result := ArrGen(EnWordCount, i -> EnWordSample(i)); +end; + +function RandomEnWord: string; +begin + Result := EnWordSample(RandomN(0, EnWordCount - 1)); +end; + +function GetSentences: array of string; +begin + Result := ArrGen(SentenceCount, i -> SentenceSample(i)); +end; + +function RandomSentence: string; +begin + Result := SentenceSample(RandomN(0, SentenceCount - 1)); +end; + +function GetEnSentences: array of string; +begin + Result := ArrGen(EnSentenceCount, i -> EnSentenceSample(i)); +end; + +function RandomEnSentence: string; +begin + Result := EnSentenceSample(RandomN(0, EnSentenceCount - 1)); +end; + +function GetTexts: array of string; +begin + Result := ArrGen(TextCount, i -> TextSample(i)); +end; + +function RandomText: string; +begin + Result := TextSample(RandomN(0, TextCount - 1)); +end; + +function GetEnTexts: array of string; +begin + Result := ArrGen(EnTextCount, i -> EnTextSample(i)); +end; + +function RandomEnText: string; +begin + Result := EnTextSample(RandomN(0, EnTextCount - 1)); +end; + +procedure DataFileInteger(FileName: string); +begin + if CheckTT then exit; + inc(yd); + if yd > 5 then + begin + DataComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + var w := 0; + try + var f: file of integer; + Reset(f, FileName); + while not EOF(f) do + begin + var a: integer; + read(f, a); + var s := IntToStr(a); + if s.Length > w then + w := s.Length; + end; + Close(f); + except + on ex: Exception do + begin + DataComm('\B'+ErrorMessage('FileError(' + FileName + '): ' + ex.Message)+'\b'); + exit; + end; + end; + fd := true; + DataFileN(FileName, yd, w + 2); +end; + +procedure DataFileReal(FileName: string); +begin + if CheckTT then exit; + inc(yd); + if yd > 5 then + begin + DataComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + var w := 0; + try + var f: file of real; + Reset(f, FileName); + while not EOF(f) do + begin + var a: real; + read(f, a); + var s := wreal(0, a); + if s > w then + w := s; + end; + Close(f); + except + on ex: Exception do + begin + DataComm('\B'+ErrorMessage('FileError(' + FileName + '): ' + ex.Message)+'\b'); + exit; + end; + end; + fd := true; + DataFileR(FileName, yd, w + 2); +end; + +procedure DataFileChar(FileName: string); +begin + if CheckTT then exit; + inc(yd); + if yd > 5 then + begin + DataComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + fd := true; + DataFileC(FileName, yd, 5); +end; + +procedure DataFileString(FileName: string); +begin + + if CheckTT then exit; + inc(yd); + if yd > 5 then + begin + DataComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + var w := 0; + try + var f: file of ShortString; + Reset(f, FileName); + while not EOF(f) do + begin + var a: ShortString; + read(f, a); + if Length(a) > w then + w := Length(a); + end; + Close(f); + except + on ex: Exception do + begin + DataComm('\B'+ErrorMessage('FileError(' + FileName + '): ' + ex.Message)+'\b'); + exit; + end; + end; + fd := true; + DataFileS(FileName, yd, w + 4); + +end; + +procedure DataText(FileName: string; LineCount: integer); +begin + if CheckTT then exit; + inc(yd); + if yd > 5 then + begin + DataComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + fd := true; + var yd2 := yd + LineCount - 1; + if yd2 > 5 then yd2 := 5; + DataFileT(FileName, yd, yd2); + yd := yd2; +end; + +procedure ResFileInteger(FileName: string); +begin + if CheckTT then exit; + inc(yr); + if yr > 5 then + begin + ResComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + var w := 0; + try + var f: file of integer; + Reset(f, FileName); + while not EOF(f) do + begin + var a: integer; + read(f, a); + var s := IntToStr(a); + if s.Length > w then + w := s.Length; + end; + Close(f); + except + on ex: Exception do + begin + ResComm('\B'+ErrorMessage('FileError(' + FileName + '): ' + ex.Message)+'\b'); + exit; + end; + end; + fr := true; + ResultFileN(FileName, yr, w + 2); +end; + +procedure ResFileReal(FileName: string); +begin + if CheckTT then exit; + ResComm(fmt); + inc(yr); + if yr > 5 then + begin + ResComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + var w := 0; + try + var f: file of real; + Reset(f, FileName); + while not EOF(f) do + begin + var a: real; + read(f, a); + var s := wreal(0, a); + if s > w then + w := s; + end; + Close(f); + except + on ex: Exception do + begin + ResComm('\B'+ErrorMessage('FileError(' + FileName + '): ' + ex.Message)+'\b'); + exit; + end; + end; + fr := true; + ResultFileR(FileName, yr, w + 2); +end; + +procedure ResFileChar(FileName: string); +begin + if CheckTT then exit; + inc(yr); + if yr > 5 then + begin + ResComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + fr := true; + ResultFileC(FileName, yr, 5); +end; + +procedure ResFileString(FileName: string); +begin + if CheckTT then exit; + inc(yr); + if yr > 5 then + begin + ResComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + var w := 0; + try + var f: file of ShortString; + Reset(f, FileName); + while not EOF(f) do + begin + var a: ShortString; + read(f, a); + if Length(a) > w then + w := Length(a); + end; + Close(f); + except + on ex: Exception do + begin + ResComm('\B'+ErrorMessage('FileError(' + FileName + '): ' + ex.Message)+'\b'); + exit; + end; + end; + fr := true; + ResultFileS(FileName, yr, w + 4); +end; + +procedure ResText(FileName: string; LineCount: integer); +begin + if CheckTT then exit; + inc(yr); + if yr > 5 then + begin + ResComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + fr := true; + var yr2 := yr + LineCount - 1; + if yr2 > 5 then yr2 := 5; + ResultFileT(FileName, yr, yr2); + yr := yr2; +end; + +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/xPT4TaskMakerNET.pas b/TestSuite/CompilationSamples/xPT4TaskMakerNET.pas new file mode 100644 index 000000000..98151f0e9 --- /dev/null +++ b/TestSuite/CompilationSamples/xPT4TaskMakerNET.pas @@ -0,0 +1,1233 @@ +{$reference System.Windows.Forms.dll} + +/// Конструктор для электронного задачника Programming Taskbook 4.23 + +unit xPT4TaskMakerNET; + +//------------------------------------------------------------------------------ +// Конструктор для электронного задачника Programming Taskbook 4.23 +//------------------------------------------------------------------------------ +// Модуль для создания NET-библиотек с группами заданий в системе PascalABC.NET +// +// Copyright (c) 2013-2023 М.Э.Абрамян +// Электронный задачник Programming Taskbook Copyright (c) М.Э.Абрамян,1998-2023 +//------------------------------------------------------------------------------ + + +interface + +const + + xCenter = 0; + xLeft = 100; + xRight = 200; + + SampleError = '#ERROR?'; + MaxLineCount = 50; + + lgPascal = $0000001; + lgPascalABCNET = $0000401; + lgPascalNET = $0000400; + lgPascalABCNET_flag + = $0000400; // добавлено в версии 4.14 + lgVB = $0000002; + lgCPP = $0000004; + lg1C = $0000040; + lgPython = $0000080; + lgPython3 = $1000080; // добавлено в версии 4.14 + lgPython3_flag = $1000000; // добавлено в версии 4.14 + lgCS = $0000100; + lgVBNET = $0000200; + lgJava = $0010000; // добавлено в версии 4.11 + lgRuby = $0020000; // добавлено в версии 4.12 + lgWithPointers = $000003D; + lgWithObjects = $0FFFF80; // изменено в версии 4.22 + lgNET = $000FF00; + lgAll = $0FFFFFF; // изменено в версии 4.10 + lgFS = $0000800; // добавлено в версии 4.19 + lgJulia = $0040000; // добавлено в версии 4.22 + lgC = $0000008; // добавлено в версии 4.23 + +type + +/// Процедурный тип, используемый при создании групп заданий + TInitTaskProc = procedure(N: integer); + +/// Указатель на узел динамической структуры + PNode = ^TNode; + +/// Узел динамической структуры + TNode = record + Data: integer; + Next: PNode; + Prev: PNode; + Left: PNode; + Right: PNode; + Parent: PNode; + end; + +/// Добавляет к задачнику новую группу заданий с указанными характеристиками +procedure CreateGroup(GroupName, GroupDescription, GroupAuthor, GroupKey: string; + TaskCount: integer; InitTaskProc: TInitTaskProc); + +/// Добавляет к создаваемой группе задание из другой группы +procedure UseTask(GroupName: string; TaskNumber: integer); + +/// Добавляет к создаваемой группе задание из другой группы +procedure UseTask(GroupName: string; TaskNumber: integer; TopicDescription: string); // добавлено в версии 4.19 + +/// Должна указываться первой при определении нового задания +procedure CreateTask(SubgroupName: string); overload; + + +/// Должна указываться первой при определении нового задания +procedure CreateTask; overload; + +/// Должна указываться первой при определении нового задания +/// (вариант для параллельного режима задачника) +procedure CreateTask(SubgroupName: string; var ProcessCount: integer); overload; + +/// Должна указываться первой при определении нового задания +/// (вариант для параллельного режима задачника) +procedure CreateTask(var ProcessCount: integer); overload; + +/// Позволяет определить текущий язык программирования, выбранный для задачника +/// Возвращает значения, связанные с константами lgXXX +function CurrentLanguage: integer; + +/// Возвращает двухбуквенную строку с описанием текущей локали +/// (в даной версии возвращается либо 'ru', либо 'en') +function CurrentLocale: string; + +/// Возвращает номер текущей версии задачника в формате 'd.dd' +/// (для версий, меньших 4.10, возвращает '4.00') +function CurrentVersion: string; // добавлено в версии 4.10 + +//----------------------------------------------------------------------------- + +/// Добавляет к формулировке задания строку +procedure TaskText(S: string; X, Y: integer); + +/// Определяет все строки формулировки задания +/// (в параметре S отдельные строки формулировки +/// должны разделяться символами #13, #10 или парой #13#10; +/// начальные и конечные пробелы в строках удаляются, +/// пустые строки в формулировку не включаются) +procedure TaskText(S: string); // добавлено в версии 4.11 + +//----------------------------------------------------------------------------- + +/// Добавляет к исходным данным элемент логического типа с комментарием +procedure DataB(Cmt: string; B: boolean; X, Y: integer); + +/// Добавляет к исходным данным элемент логического типа +procedure DataB(B: boolean; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным целочисленный элемент с комментарием +procedure DataN(Cmt: string; N: integer; X, Y, W: integer); + +/// Добавляет к исходным данным целочисленный элемент +procedure DataN(N: integer; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным два целочисленных элемента с общим комментарием +procedure DataN2(Cmt: string; N1, N2: integer; X, Y, W: integer); + +/// Добавляет к исходным данным два целочисленных элемента +procedure DataN2(N1, N2: integer; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным три целочисленных элемента с общим комментарием +procedure DataN3(Cmt: string; N1, N2, N3: integer; X, Y, W: integer); + +/// Добавляет к исходным данным три целочисленных элемента +procedure DataN3(N1, N2, N3: integer; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным вещественный элемент с комментарием +procedure DataR(Cmt: string; R: real; X, Y, W: integer); + +/// Добавляет к исходным данным вещественный элемент +procedure DataR(R: real; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным два вещественных элемента с общим комментарием +procedure DataR2(Cmt: string; R1, R2: real; X, Y, W: integer); + +/// Добавляет к исходным данным два вещественных элемента +procedure DataR2(R1, R2: real; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным три вещественных элемента с общим комментарием +procedure DataR3(Cmt: string; R1, R2, R3: real; X, Y, W: integer); + +/// Добавляет к исходным данным три вещественных элемента +procedure DataR3(R1, R2, R3: real; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным символьный элемент с комментарием +procedure DataC(Cmt: string; C: char; X, Y: integer); + +/// Добавляет к исходным данным символьный элемент +procedure DataC(C: char; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным строковый элемент с комментарием +procedure DataS(Cmt: string; S: string; X, Y: integer); + +/// Добавляет к исходным данным строковый элемент +procedure DataS(S: string; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным элемент типа PNode с комментарием +procedure DataP(Cmt: string; NP: integer; X, Y: integer); + +/// Добавляет к исходным данным элемент типа PNode +procedure DataP(NP: integer; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет комментарий в область исходных данных +procedure DataComment(Cmt: string; X, Y: integer); + +//----------------------------------------------------------------------------- + +/// Добавляет к результирующим данным элемент логического типа с комментарием +procedure ResultB(Cmt: string; B: boolean; X, Y: integer); + +/// Добавляет к результирующим данным элемент логического типа +procedure ResultB(B: boolean; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным целочисленный элемент с комментарием +procedure ResultN(Cmt: string; N: integer; X, Y, W: integer); + +/// Добавляет к результирующим данным целочисленный элемент +procedure ResultN(N: integer; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным два целочисленных элемента с общим комментарием +procedure ResultN2(Cmt: string; N1, N2: integer; X, Y, W: integer); + +/// Добавляет к результирующим данным два целочисленных элемента +procedure ResultN2(N1, N2: integer; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным три целочисленных элемента с общим комментарием +procedure ResultN3(Cmt: string; N1, N2, N3: integer; X, Y, W: integer); + +/// Добавляет к результирующим данным три целочисленных элемента +procedure ResultN3(N1, N2, N3: integer; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным вещественный элемент с комментарием +procedure ResultR(Cmt: string; R: real; X, Y, W: integer); + +/// Добавляет к результирующим данным вещественный элемент +procedure ResultR(R: real; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным два вещественных элемента с общим комментарием +procedure ResultR2(Cmt: string; R1, R2: real; X, Y, W: integer); + +/// Добавляет к результирующим данным два вещественных элемента +procedure ResultR2(R1, R2: real; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным три вещественных элемента с общим комментарием +procedure ResultR3(Cmt: string; R1, R2, R3: real; X, Y, W: integer); + +/// Добавляет к результирующим данным три вещественных элемента +procedure ResultR3(R1, R2, R3: real; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным символьный элемент с комментарием +procedure ResultC(Cmt: string; C: char; X, Y: integer); + +/// Добавляет к результирующим данным символьный элемент +procedure ResultC(C: char; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным строковый элемент с комментарием +procedure ResultS(Cmt: string; S: string; X, Y: integer); + +/// Добавляет к результирующим данным строковый элемент +procedure ResultS(S: string; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным элемент типа PNode с комментарием +procedure ResultP(Cmt: string; NP: integer; X, Y: integer); + +/// Добавляет к результирующим данным элемент типа PNode +procedure ResultP(NP: integer; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет комментарий в область результирующих данных +procedure ResultComment(Cmt: string; X, Y: integer); + +//----------------------------------------------------------------------------- + +/// Задает число дробных знаков при отображении вещественных чисел +procedure SetPrecision(N: integer); + +/// Задает число исходных данных, минимально необходимое +/// для нахождения правильных результирующих данных +procedure SetRequiredDataCount(N: integer); + +/// Задает число тестовых испытаний (от 2 до 9), при успешном +/// прохождении которых задание будет считаться выполненным +procedure SetTestCount(N: integer); + +/// Возвращает горизонтальную координату, начиная с которой следует выводить I-й элемент из набора, +/// содержащего N элементов, при условии, что ширина каждого элемента равна W, а между элементами +/// надо указывать B пробелов (элементы нумеруются от 1) +function Center(I, N, W, B: integer): integer; + +/// Возвращает случайное целое число, лежащее +/// в диапазоне от M до N включительно. Если указанный +/// диапазон пуст, то возвращает M. +function RandomN(M, N: integer): integer; // добавлено в версии 4.11 + +/// Возвращает случайное вещественное число, лежащее +/// на полуинтервале [A, B). Если указанный полуинтервал +/// пуст, то возвращает A. +function RandomR(A, B: real): real; // добавлено в версии 4.11 + +/// Возвращает порядковый номер текущего тестового запуска +/// (учитываются только успешные тестовые запуски). Если ранее успешных +/// запусков не было, то возвращает 1. Если задание уже выполнено +/// или запущено в демонстрационном режиме, то возвращает 0. +/// При использовании предыдущих версий задачника (до 4.10 включительно) +/// всегда возвращает 0. +function CurrentTest: integer; // добавлено в версии 4.11 + +//----------------------------------------------------------------------------- + +/// Добавляет к исходным данным двоичный файл с целочисленными элементами (file of integer) +procedure DataFileN(FileName: string; Y, W: integer); + +/// Добавляет к исходным данным двоичный файл с вещественными элементами (file of real) +procedure DataFileR(FileName: string; Y, W: integer); + +/// Добавляет к исходным данным двоичный файл с символьными элементами (file of char) +procedure DataFileC(FileName: string; Y, W: integer); + +/// Добавляет к исходным данным двоичный файл со строковыми элементами (file of ShortString) +procedure DataFileS(FileName: string; Y, W: integer); + +/// Добавляет к исходным данным текстовый файл +procedure DataFileT(FileName: string; Y1, Y2: integer); + +//----------------------------------------------------------------------------- + +/// Добавляет к результирующим данным двоичный файл с целочисленными элементами (file of integer) +procedure ResultFileN(FileName: string; Y, W: integer); + +/// Добавляет к результирующим данным двоичный файл с вещественными элементами (file of real) +procedure ResultFileR(FileName: string; Y, W: integer); + +/// Добавляет к результирующим данным двоичный файл с символьными элементами (file of char) +procedure ResultFileC(FileName: string; Y, W: integer); + +/// Добавляет к результирующим данным двоичный файл со строковыми элементами (file of ShortString) +procedure ResultFileS(FileName: string; Y, W: integer); + +/// Добавляет к результирующим данным текстовый файл +procedure ResultFileT(FileName: string; Y1, Y2: integer); + +//----------------------------------------------------------------------------- + +/// Связывает номер NP с указателем P +procedure SetPointer(NP: integer; P: PNode); + +/// Добавляет к исходным данным линейную динамическую структуру +procedure DataList(NP: integer; X, Y: integer); + +/// Добавляет к результирующим данным линейную динамическую структуру +procedure ResultList(NP: integer; X, Y: integer); + +/// Добавляет к исходным данным бинарное дерево +procedure DataBinTree(NP: integer; X, Y1, Y2: integer); + +/// Добавляет к результирующим данным бинарное дерево +procedure ResultBinTree(NP: integer; X, Y1, Y2: integer); + +/// Добавляет к исходным данным дерево общего вида +procedure DataTree(NP: integer; X, Y1, Y2: integer); + +/// Добавляет к результирующим данным дерево общего вида +procedure ResultTree(NP: integer; X, Y1, Y2: integer); + +/// Отображает в текущей динамической структуре указатель с номером NP +procedure ShowPointer(NP: integer); + +/// Помечает в текущей результирующей динамической структуре указатель, требующий создания +procedure SetNewNode(NNode: integer); + +/// Помечает в текущей исходной динамической структуре указатель, требующий удаления +procedure SetDisposedNode(NNode: integer); + +//----------------------------------------------------------------------------- + +/// Возвращает количество слов-образцов для языка, соответствующего текущей локали +function WordCount: integer; //116 + +/// Возвращает количество предложений-образцов для языка, соответствующего текущей локали +function SentenceCount: integer; //61 + +/// Возвращает количество текстов-образцов для языка, соответствующего текущей локали +function TextCount: integer; //85 + +/// Возвращает слово-образец с номером N (нумерация от 0) для языка, соответствующего текущей локали +function WordSample(N: integer): string; + +/// Возвращает предложение-образец с номером N (нумерация от 0) для языка, соответствующего текущей локали +function SentenceSample(N: integer): string; + +/// Возвращает текст-образец с номером N (нумерация от 0) для языка, соответствующего текущей локали, +/// между строками текста располагаются символы #13#10, в конце текста эти символы отсутствуют, +/// число строк не превышает MaxLineCount, между абзацами текста помещается одна пустая строка +function TextSample(N: integer): string; + +//----------------------------------------------------------------------------- + +/// Возвращает количество английских слов-образцов +function EnWordCount: integer; //116 + +/// Возвращает количество английских предложений-образцов +function EnSentenceCount: integer; //61 + +/// Возвращает количество английских текстов-образцов +function EnTextCount: integer; //85 + +/// Возвращает английское слово-образец с номером N (нумерация от 0) +function EnWordSample(N: integer): string; + +/// Возвращает английское предложение-образец с номером N (нумерация от 0) +function EnSentenceSample(N: integer): string; + +/// Возвращает английский текст-образец с номером N (нумерация от 0), +/// между строками текста располагаются символы #13#10, в конце текста эти символы отсутствуют, +/// число строк не превышает MaxLineCount, между абзацами текста помещается одна пустая строка +function EnTextSample(N: integer): string; + +//----------------------------------------------------------------------------- + +/// Добавляет строку комментария к текущей группе или подгруппе заданий +procedure CommentText(S: string); + +/// Добавляет комментарий из другой группы заданий (или ее подгруппы, +/// если ее второй параметр не является пустой строкой) +procedure UseComment(GroupName, SubgroupName: string); overload; + +/// Добавляет комментарий из другой группы заданий +procedure UseComment(GroupName: string); overload; + +/// Устанавливает режим добавления комментария к подгруппе заданий +procedure Subgroup(SubgroupName: string); + +//----------------------------------------------------------------------------- + +/// Процедура, обеспечивающая отображение динамических структур данных +/// в "объектном стиле" при выполнении заданий в среде PascalABC.NET +/// (при использовании других сред не выполняет никаких действий) +procedure SetObjectStyle; + +//----------------------------------------------------------------------------- + +/// Процедура для внутреннего использования; она должна быть вызвана +/// из процедуры с именем activate (с маленькой буквы) в любой +/// библиотеке NET с группой заданий (процедура activate имеет +/// тот же строковый параметр S, что и процедура ActivateNET) +procedure ActivateNET(S: string); + +//----------------------------------------------------------------------------- + +/// Устанавливает текущий процесс для последующей передачи ему данных +/// числовых типов (при выполнении задания в параллельном режиме) +procedure SetProcess(ProcessRank: integer); + +//----------------------------------------------------------------------------- + +implementation + +uses System.Runtime.InteropServices, System.Text; + +function LoadLibrary(FileName: string): integer; + external 'kernel32.dll' Name 'LoadLibrary'; + +function GetProcAddress(handle: integer; ProcName: string): System.IntPtr; + external 'kernel32.dll' Name 'GetProcAddress'; + +function FreeLibrary(handle: integer): boolean; + external 'kernel32.dll' Name 'FreeLibrary'; + +function MessageBox(hWnd: integer; lpText, lpCaption: string; uType: integer): Integer; + external 'user32.dll' Name 'MessageBoxA'; + +type TTaskText = procedure (s: string); + TCreateGroup = procedure (GroupName: string; InitTaskProc: TInitTaskProc); + +type + TNFunc = function : integer; + TNFuncN4 = function (N1, N2, N3, N4: integer): integer; + TProcSb = procedure (S: StringBuilder); + TProcNSb = procedure (N: integer; S: StringBuilder); + TProc = procedure; + TProcS = procedure (S: array of byte); + TProcSCN2 = procedure (S: array of byte; C: Char; N1, N2: integer); + TProcSN = procedure (S: array of byte; N: integer); + TProcSN2 = procedure (S: array of byte; N1, N2: integer); + TProcSN3 = procedure (S: array of byte; N1, N2, N3: integer); + TProcSN4 = procedure (S: array of byte; N1, N2, N3, N4: integer); + TProcSN5 = procedure (S: array of byte; N1, N2, N3, N4, N5: integer); + TProcSN6 = procedure (S: array of byte; N1, N2, N3, N4, N5, N6: integer); + TProcSRN3 = procedure (S: array of byte; R: real; N1, N2, N3: integer); + TProcSR2N3 = procedure (S: array of byte; R1, R2: real; N1, N2, N3: integer); + TProcSR3N3 = procedure (S: array of byte; R1, R2, R3: real; N1, N2, N3: integer); + TProcS2 = procedure (S1, S2: array of byte); + TProcS2N2 = procedure (S1, S2: array of byte; N1, N2: integer); + TProcS4NP = procedure (S1, S2, S3, S4: array of byte; N: integer; P: TInitTaskProc); + TProcN = procedure (N: integer); + TProcNP = procedure (N: integer; P: pointer); + TProcN3 = procedure (N1, N2, N3: integer); + TProcN4 = procedure (N1, N2, N3, N4: integer); + TProcSvN = procedure (S: array of byte; var N: integer); + TProcSNS = procedure (S1: array of byte; N: integer; S2: array of byte); + +var + creategroup_: TProcS4NP; + usetask_: TProcSN; + createtask_: TProcS; + currentlanguage_: TNFunc; + currentlocale_: TProcSb; + tasktext_: TProcSN2; + datab_, resultb_: TProcSN3; + datan_, resultn_: TProcSN4; + datan2_, resultn2_: TProcSN5; + datan3_, resultn3_: TProcSN6; + datar_, resultr_: TProcSRN3; + datar2_, resultr2_: TProcSR2N3; + datar3_, resultr3_: TProcSR3N3; + datac_, resultc_: TProcSCN2; + datas_, results_: TProcS2N2; + datap_, resultp_: TProcSN3; + datacomment_, resultcomment_: TProcSN2; + setprecision_, settestcount_, setrequireddatacount_: TProcN; + center_: TNFuncN4; + datafilen_, datafiler_, datafilec_, datafiles_, datafilet_: TProcSN2; + resultfilen_, resultfiler_, resultfilec_, resultfiles_, resultfilet_: TProcSN2; + setpointer_: TProcNP; + datalist_, resultlist_: TProcN3; + databintree_, datatree_, resultbintree_, resulttree_: TProcN4; + showpointer_, setnewnode_, setdisposednode_: TProcN; + wordcount_, sentencecount_, textcount_: TNFunc; + enwordcount_, ensentencecount_, entextcount_: TNFunc; + wordsample_, sentencesample_, textsample_: TProcNSb; + enwordsample_, ensentencesample_, entextsample_: TProcNSb; + commenttext_: TProcS; + usecomment_: TProcS2; + subgroup_{, registergroup_}: TProcS; // удалено в версии 4.11 + setobjectstyle_: TProc; + createtask2_: TProcSvN; + setprocess_: TProcN; + currentversion_: TProcSb; // добавлено в версии 4.10 + currenttest_: TNFunc; // добавлено в версии 4.11 + usetaskex_: TProcSNS; // добавлено в версии 4.19 + + FHandle: integer; + +function ToBytes(s: string): array of byte; +begin + var utf8 := Encoding.Unicode; + var ansi := Encoding.GetEncoding(1251); + result := Encoding.Convert(utf8, ansi, utf8.GetBytes(S)); +end; + +procedure ActivateNET(S: string); +begin + FHandle := LoadLibrary(S); + creategroup_ := TProcS4NP(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'creategroup'), typeof(TProcS4NP))); + usetask_ := TProcSN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'usetask'), typeof(TProcSN))); + createtask_ := TProcS(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'createtask'), typeof(TProcS))); + currentlanguage_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'currentlanguage'), typeof(TNFunc))); + currentlocale_ := TProcSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'currentlocale2'), typeof(TProcSb))); + tasktext_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'tasktext'), typeof(TProcSN2))); + datab_ := TProcSN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datab'), typeof(TProcSN3))); + datan_ := TProcSN4(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datan'), typeof(TProcSN4))); + datan2_ := TProcSN5(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datan2'), typeof(TProcSN5))); + datan3_ := TProcSN6(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datan3'), typeof(TProcSN6))); + datar_ := TProcSRN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datar'), typeof(TProcSRN3))); + datar2_ := TProcSR2N3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datar2'), typeof(TProcSR2N3))); + datar3_ := TProcSR3N3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datar3'), typeof(TProcSR3N3))); + datac_ := TProcSCN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datac'), typeof(TProcSCN2))); + datas_ := TProcS2N2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datas'), typeof(TProcS2N2))); + datap_ := TProcSN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datap'), typeof(TProcSN3))); + datacomment_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datacomment'), typeof(TProcSN2))); + resultb_ := TProcSN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultb'), typeof(TProcSN3))); + resultn_ := TProcSN4(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultn'), typeof(TProcSN4))); + resultn2_ := TProcSN5(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultn2'), typeof(TProcSN5))); + resultn3_ := TProcSN6(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultn3'), typeof(TProcSN6))); + resultr_ := TProcSRN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultr'), typeof(TProcSRN3))); + resultr2_ := TProcSR2N3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultr2'), typeof(TProcSR2N3))); + resultr3_ := TProcSR3N3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultr3'), typeof(TProcSR3N3))); + resultc_ := TProcSCN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultc'), typeof(TProcSCN2))); + results_ := TProcS2N2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'results'), typeof(TProcS2N2))); + resultp_ := TProcSN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultp'), typeof(TProcSN3))); + resultcomment_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultcomment'), typeof(TProcSN2))); + setprecision_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setprecision'), typeof(TProcN))); + settestcount_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'settestcount'), typeof(TProcN))); + setrequireddatacount_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setrequireddatacount'), typeof(TProcN))); + center_ := TNFuncN4(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'center'), typeof(TNFuncN4))); + datafilen_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datafilen'), typeof(TProcSN2))); + datafiler_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datafiler'), typeof(TProcSN2))); + datafilec_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datafilec'), typeof(TProcSN2))); + datafiles_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datafiles'), typeof(TProcSN2))); + datafilet_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datafilet'), typeof(TProcSN2))); + resultfilen_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultfilen'), typeof(TProcSN2))); + resultfiler_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultfiler'), typeof(TProcSN2))); + resultfilec_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultfilec'), typeof(TProcSN2))); + resultfiles_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultfiles'), typeof(TProcSN2))); + resultfilet_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultfilet'), typeof(TProcSN2))); + setpointer_ := TProcNP(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setpointer'), typeof(TProcNP))); + datalist_ := TProcN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datalist'), typeof(TProcN3))); + resultlist_ := TProcN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultlist'), typeof(TProcN3))); + databintree_ := TProcN4(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'databintree'), typeof(TProcN4))); + datatree_ := TProcN4(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datatree'), typeof(TProcN4))); + resultbintree_ := TProcN4(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultbintree'), typeof(TProcN4))); + resulttree_ := TProcN4(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resulttree'), typeof(TProcN4))); + showpointer_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'showpointer'), typeof(TProcN))); + setnewnode_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setnewnode'), typeof(TProcN))); + setdisposednode_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setdisposednode'), typeof(TProcN))); + wordcount_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'wordcount'), typeof(TNFunc))); + sentencecount_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'sentencecount'), typeof(TNFunc))); + textcount_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'textcount'), typeof(TNFunc))); + wordsample_ := TProcNSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'wordsample2'), typeof(TProcNSb))); + sentencesample_ := TProcNSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'sentencesample2'), typeof(TProcNSb))); + textsample_ := TProcNSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'textsample2'), typeof(TProcNSb))); + enwordcount_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'enwordcount'), typeof(TNFunc))); + ensentencecount_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'ensentencecount'), typeof(TNFunc))); + entextcount_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'entextcount'), typeof(TNFunc))); + enwordsample_ := TProcNSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'enwordsample2'), typeof(TProcNSb))); + ensentencesample_ := TProcNSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'ensentencesample2'), typeof(TProcNSb))); + entextsample_ := TProcNSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'entextsample2'), typeof(TProcNSb))); + commenttext_ := TProcS(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'commenttext'), typeof(TProcS))); + usecomment_ := TProcS2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'usecomment'), typeof(TProcS2))); + subgroup_ := TProcS(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'subgroup'), typeof(TProcS))); +// registergroup_ := TProcS(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'registergroup'), typeof(TProcS))); + setobjectstyle_ := TProc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setobjectstyle'), typeof(TProc))); + createtask2_ := TProcSvN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'createtask2'), typeof(TProcSvN))); + setprocess_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setprocess'), typeof(TProcN))); + currentversion_ := TProcSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'currentversion2'), typeof(TProcSb))); // добавлено в версии 4.10 + currenttest_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'curt'), typeof(TNFunc))); // добавлено в версии 4.11 + usetaskex_ := TProcSNS(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'usetaskex'), typeof(TProcSNS))); // добавлено в версии 4.19 + +end; + +//============================================================================= + +var p: TInitTaskProc := nil; + +procedure CreateGroup(GroupName, GroupDescription, GroupAuthor, GroupKey: string; + TaskCount: integer; InitTaskProc: TInitTaskProc); +begin + p := InitTaskProc; + creategroup_(ToBytes(GroupName), ToBytes(GroupDescription), ToBytes(GroupAuthor), + ToBytes(GroupKey), TaskCount, p); +end; + +procedure UseTask(GroupName: string; TaskNumber: integer); +begin + usetask_(ToBytes(GroupName), TaskNumber); +end; + +procedure UseTask(GroupName: string; TaskNumber: integer; TopicDescription: string); +begin + if usetaskex_ <> nil then + usetaskex_(ToBytes(GroupName), TaskNumber, ToBytes(TopicDescription)) + else + usetask_(ToBytes(GroupName), TaskNumber); +end; + +procedure CreateTask(SubgroupName: string); +begin + createtask_(ToBytes(SubgroupName)); +end; + +procedure CreateTask; +begin + CreateTask(''); +end; + + + + + + + + + + +function CurrentLanguage: integer; +begin + result := currentlanguage_; +end; + +function CurrentLocale: string; +begin + var S := new StringBuilder(100); + currentlocale_(S); + result := S.ToString; +end; + +procedure TaskText(S: string; X, Y: integer); +begin + tasktext_(ToBytes(S), X, Y); +end; + +procedure TaskText(S: string); +var + p1, p2: array[1..205] of integer; + n, i, k, l: integer; + m: set of char; +begin + n := 0; + m := [#13, #10]; + l := Length(S); + i := 1; + while i <= l do + begin + if not (S[i] in m) and ((i = 1) or (S[i-1] in m)) + and (n < 205) then + begin + while (i <= l) and (S[i] = ' ') do + Inc(i); + if (i <= l) and not (S[i] in m) then + begin + Inc(n); + p1[n] := i; + end; + end; + if i > l then break; + if not (S[i] in m) and ((i = l) or (S[i+1] in m)) then + begin + k := i; + if S[k] = ' ' then + begin + while S[k] = ' ' do + Dec(k); + if (S[k] = '\') and ((k = 1) or (S[k-1] <> '\')) then + Inc(k); + end; + p2[n] := k - p1[n] + 1; + if n = 205 then break; + end; + Inc(i); + end; + case n of + 0: ; + 1: tasktext(Copy(S, p1[1], p2[1]), 0, 3); + 2: for i := 1 to n do + tasktext(Copy(S, p1[i], p2[i]), 0, 2*i); + 3, 4: + for i := 1 to n do + tasktext(Copy(S, p1[i], p2[i]), 0, i+1); + else + begin + for i := 1 to 5 do + tasktext(Copy(S, p1[i], p2[i]), 0, i); + for i := 6 to n do + tasktext(Copy(S, p1[i], p2[i]), 0, 0); + end; + end; +end; + +function BtoN(B: boolean): integer; +begin + if B then + result := 1 + else + result := 0; +end; + +procedure DataB (Cmt: string; B: boolean; X, Y: integer); +begin + datab_(ToBytes(Cmt), BtoN(B), X, Y); +end; + +procedure DataB (B: boolean; X, Y: integer); +begin + datab_(ToBytes(''), BtoN(B), X, Y); +end; + +procedure DataN (Cmt: string; N: integer; X, Y, W: integer); +begin + datan_(ToBytes(Cmt), N, X, Y, W); +end; + +procedure DataN (N: integer; X, Y, W: integer); +begin + datan_(ToBytes(''), N, X, Y, W); +end; + +procedure DataN2(Cmt: string; N1, N2: integer; X, Y, W: integer); +begin + datan2_(ToBytes(Cmt), N1, N2, X, Y, W); +end; + +procedure DataN2(N1, N2: integer; X, Y, W: integer); +begin + datan2_(ToBytes(''), N1, N2, X, Y, W); +end; + +procedure DataN3(Cmt: string; N1, N2, N3: integer; X, Y, W: integer); +begin + datan3_(ToBytes(Cmt), N1, N2, N3, X, Y, W); +end; + +procedure DataN3(N1, N2, N3: integer; X, Y, W: integer); +begin + datan3_(ToBytes(''), N1, N2, N3, X, Y, W); +end; + +procedure DataR(Cmt: string; R: real; X, Y, W: integer); +begin + datar_(ToBytes(Cmt), R, X, Y, W); +end; + +procedure DataR(R: real; X, Y, W: integer); +begin + datar_(ToBytes(''), R, X, Y, W); +end; + +procedure DataR2(Cmt: string; R1, R2: real; X, Y, W: integer); +begin + datar2_(ToBytes(Cmt), R1, R2, X, Y, W); +end; + +procedure DataR2(R1, R2: real; X, Y, W: integer); +begin + datar2_(ToBytes(''), R1, R2, X, Y, W); +end; + +procedure DataR3(Cmt: string; R1, R2, R3: real; X, Y, W: integer); +begin + datar3_(ToBytes(Cmt), R1, R2, R3, X, Y, W); +end; + +procedure DataR3(R1, R2, R3: real; X, Y, W: integer); +begin + datar3_(ToBytes(''), R1, R2, R3, X, Y, W); +end; + +procedure DataC(Cmt: string; C: char; X, Y: integer); +begin + datac_(ToBytes(Cmt), C, X, Y); +end; + +procedure DataC(C: char; X, Y: integer); +begin + datac_(ToBytes(''), C, X, Y); +end; + +procedure DataS(Cmt: string; S: string; X, Y: integer); +begin + datas_(ToBytes(Cmt), ToBytes(S), X, Y); +end; + +procedure DataS(S: string; X, Y: integer); +begin + datas_(ToBytes(''), ToBytes(S), X, Y); +end; + +procedure DataP(Cmt: string; NP: integer; X, Y: integer); +begin + datap_ (ToBytes(Cmt), NP, X, Y); +end; + +procedure DataP(NP: integer; X, Y: integer); +begin + datap_ (ToBytes(''), NP, X, Y); +end; + +procedure DataComment(Cmt: string; X, Y: integer); +begin + datacomment_(ToBytes(Cmt), X, Y); +end; + +procedure ResultB(Cmt: string; B: boolean; X, Y: integer); +begin + resultb_(ToBytes(Cmt), BtoN(B), X, Y); +end; + +procedure ResultB(B: boolean; X, Y: integer); +begin + resultb_(ToBytes(''), BtoN(B), X, Y); +end; + +procedure ResultN(Cmt: string; N: integer; X, Y, W: integer); +begin + resultn_(ToBytes(Cmt), N, X, Y, W); +end; + +procedure ResultN(N: integer; X, Y, W: integer); +begin + resultn_(ToBytes(''), N, X, Y, W); +end; + +procedure ResultN2(Cmt: string; N1, N2: integer; X, Y, W: integer); +begin + resultn2_(ToBytes(Cmt), N1, N2, X, Y, W); +end; + +procedure ResultN2(N1, N2: integer; X, Y, W: integer); +begin + resultn2_(ToBytes(''), N1, N2, X, Y, W); +end; + +procedure ResultN3(Cmt: string; N1, N2, N3: integer; X, Y, W: integer); +begin + resultn3_(ToBytes(Cmt), N1, N2, N3, X, Y, W); +end; + +procedure ResultN3(N1, N2, N3: integer; X, Y, W: integer); +begin + resultn3_(ToBytes(''), N1, N2, N3, X, Y, W); +end; + +procedure ResultR(Cmt: string; R: real; X, Y, W: integer); +begin + resultr_(ToBytes(Cmt), R, X, Y, W); +end; + +procedure ResultR(R: real; X, Y, W: integer); +begin + resultr_(ToBytes(''), R, X, Y, W); +end; + +procedure ResultR2(Cmt: string; R1, R2: real; X, Y, W: integer); +begin + resultr2_(ToBytes(Cmt), R1, R2, X, Y, W); +end; + +procedure ResultR2(R1, R2: real; X, Y, W: integer); +begin + resultr2_(ToBytes(''), R1, R2, X, Y, W); +end; + +procedure ResultR3(Cmt: string; R1, R2, R3: real; X, Y, W: integer); +begin + resultr3_(ToBytes(Cmt), R1, R2, R3, X, Y, W); +end; + +procedure ResultR3(R1, R2, R3: real; X, Y, W: integer); +begin + resultr3_(ToBytes(''), R1, R2, R3, X, Y, W); +end; + +procedure ResultC(Cmt: string; C: char; X, Y: integer); +begin + resultc_(ToBytes(Cmt), C, X, Y); +end; + +procedure ResultC(C: char; X, Y: integer); +begin + resultc_(ToBytes(''), C, X, Y); +end; + +procedure ResultS(Cmt: string; S: string; X, Y: integer); +begin + results_(ToBytes(Cmt), ToBytes(S), X, Y); +end; + +procedure ResultS(S: string; X, Y: integer); +begin + results_(ToBytes(''), ToBytes(S), X, Y); +end; + +procedure ResultP(Cmt: string; NP: integer; X, Y: integer); +begin + resultp_(ToBytes(Cmt), NP, X, Y); +end; + +procedure ResultP(NP: integer; X, Y: integer); +begin + resultp_(ToBytes(''), NP, X, Y); +end; + +procedure ResultComment(Cmt: string; X, Y: integer); +begin + resultcomment_(ToBytes(Cmt), X, Y); +end; + +procedure SetPrecision(N: integer); +begin + setprecision_(N); +end; + +procedure SetTestCount(N: integer); +begin + settestcount_(N); +end; + +procedure SetRequiredDataCount(N: integer); +begin + setrequireddatacount_(N); +end; + +function Center(I, N, W, B: integer): integer; +begin + result := center_(I, N, W, B); +end; + +procedure DataFileN(FileName: string; Y, W: integer); +begin + datafilen_(ToBytes(FileName), Y, W); +end; + +procedure DataFileR(FileName: string; Y, W: integer); +begin + datafiler_(ToBytes(FileName), Y, W); +end; + +procedure DataFileC(FileName: string; Y, W: integer); +begin + datafilec_(ToBytes(FileName), Y, W); +end; + +procedure DataFileS(FileName: string; Y, W: integer); +begin + datafiles_(ToBytes(FileName), Y, W); +end; + +procedure DataFileT(FileName: string; Y1, Y2: integer); +begin + datafilet_(ToBytes(FileName), Y1, Y2); +end; + +procedure ResultFileN(FileName: string; Y, W: integer); +begin + resultfilen_(ToBytes(FileName), Y, W); +end; + +procedure ResultFileR(FileName: string; Y, W: integer); +begin + resultfiler_(ToBytes(FileName), Y, W); +end; + +procedure ResultFileC(FileName: string; Y, W: integer); +begin + resultfilec_(ToBytes(FileName), Y, W); +end; + +procedure ResultFileS(FileName: string; Y, W: integer); +begin + resultfiles_(ToBytes(FileName), Y, W); +end; + +procedure ResultFileT(FileName: string; Y1, Y2: integer); +begin + resultfilet_(ToBytes(FileName), Y1, Y2); +end; + +procedure SetPointer(NP: integer; P: PNode); +begin + setpointer_(NP, P); +end; + +procedure DataList(NP: integer; X, Y: integer); +begin + datalist_(NP, X, Y); +end; + +procedure ResultList(NP: integer; X, Y: integer); +begin + resultlist_(NP, X, Y); +end; + +procedure DataBinTree(NP: integer; X, Y1, Y2: integer); +begin + databintree_(NP, X, Y1, Y2); +end; + +procedure ResultBinTree(NP: integer; X, Y1, Y2: integer); +begin + resultbintree_(NP, X, Y1, Y2); +end; + +procedure DataTree(NP: integer; X, Y1, Y2: integer); +begin + datatree_(NP, X, Y1, Y2); +end; + +procedure ResultTree(NP: integer; X, Y1, Y2: integer); +begin + resulttree_(NP, X, Y1, Y2); +end; + +procedure ShowPointer(NP: integer); +begin + showpointer_(NP); +end; + +procedure SetNewNode(NNode: integer); +begin + setnewnode_(NNode); +end; + +procedure SetDisposedNode(NNode: integer); +begin + setdisposednode_(NNode); +end; + +function WordCount: integer; +begin + result := wordcount_; +end; + +function SentenceCount: integer; +begin + result := sentencecount_; +end; + +function TextCount: integer; +begin + result := textcount_; +end; + +function WordSample(n: integer): string; +begin + var S := new StringBuilder(20); //max=11 + wordsample_(n, S); + result := S.ToString; +end; + +function SentenceSample(n: integer): string; +begin + var S := new StringBuilder(100); //max=76 + sentencesample_(n, S); + result := S.ToString; +end; + +function TextSample(n: integer): string; +begin + var S := new StringBuilder(1100); //max=1076 + textsample_(n, S); + result := S.ToString; +end; + +function EnWordCount: integer; +begin + result := enwordcount_; +end; + +function EnSentenceCount: integer; +begin + result := ensentencecount_; +end; + +function EnTextCount: integer; +begin + result := entextcount_; +end; + +function EnWordSample(n: integer): string; +begin + var S := new StringBuilder(20); //max=14 + enwordsample_(n, S); + result := S.ToString; +end; + +function EnSentenceSample(n: integer): string; +begin + var S := new StringBuilder(100); //max=76 + ensentencesample_(n, S); + result := S.ToString; +end; + +function EnTextSample(n: integer): string; +begin + var S := new StringBuilder(1100); //max=1009 + entextsample_(n, S); + result := S.ToString; +end; + +procedure CommentText(S: string); +begin + commenttext_(ToBytes(S)); +end; + +procedure UseComment(GroupName, SubgroupName: string); +begin + usecomment_(ToBytes(GroupName), ToBytes(SubgroupName)); +end; + +procedure UseComment(GroupName: string); +begin + UseComment(GroupName, ''); +end; + +procedure Subgroup(SubgroupName: string); +begin + subgroup_(ToBytes(SubgroupName)); +end; + +procedure SetObjectStyle; +begin + setobjectstyle_; +end; + +{ // удалено в версии 4.11 +procedure RegisterGroup(UnitName: string); +begin + registergroup_(PChar(UnitName)); +end; +} + +procedure ShowError(S1, S2: string); +begin + MessageBox(0, S1+#13#10'is not found '+ + 'in the PT4 library.'#13#10'You should update '+ + 'the Programming Taskbook to '+S2+' version.', + 'PT4TaskMaker Error', 16); +end; + +procedure CreateTask(SubgroupName: string; var ProcessCount: integer); +begin + if createtask2_ <> nil then + createtask2_(ToBytes(SubgroupName), ProcessCount) + else + ShowError('The CreateTask procedure with ProcessCount parameter', '4.9'); +end; + +procedure CreateTask(var ProcessCount: integer); +begin + CreateTask('', ProcessCount); +end; + +procedure SetProcess(ProcessRank: integer); +begin + if setprocess_ <> nil then + setprocess_(ProcessRank); +end; + +function CurrentVersion: string; +begin + result := '4.00'; + if currentversion_ <> nil then + begin + var S := new StringBuilder(100); + currentversion_(S); + result := S.ToString; + end; +end; + +function CurrentTest: integer; +begin + result := 0; + if currenttest_ <> nil then + result := currenttest_; +end; + +function RandomN(M, N: integer): integer; +begin + result := M; + if M < N then + result := Random(N-M+1) + M; +end; + +function RandomR(A, B: real): real; +begin + result := A; + if A < B then + result := Random * (B-A) + A; +end; + +initialization + +finalization + + FreeLibrary(FHandle); + +end. + diff --git a/TestSuite/CompilationSamples/Мозаика.pas b/TestSuite/CompilationSamples/Мозаика.pas new file mode 100644 index 000000000..612948bd6 --- /dev/null +++ b/TestSuite/CompilationSamples/Мозаика.pas @@ -0,0 +1,477 @@ +unit Мозаика; + +interface + +uses GraphWPF; + +var Window := GraphWPF.Window; + +procedure п; + +procedure к; +procedure кк1; +procedure кк2; +procedure кк3; +procedure кк4; +procedure кт1; +procedure кт2; +procedure кт3; +procedure кт4; + +procedure ко; +procedure кок1; +procedure кок2; +procedure кок3; +procedure кок4; +procedure кот1; +procedure кот2; +procedure кот3; +procedure кот4; + +procedure ж; +procedure жк1; +procedure жк2; +procedure жк3; +procedure жк4; +procedure жт1; +procedure жт2; +procedure жт3; +procedure жт4; + +procedure г; +procedure гк1; +procedure гк2; +procedure гк3; +procedure гк4; +procedure гт1; +procedure гт2; +procedure гт3; +procedure гт4; + +procedure ч; +procedure чк1; +procedure чк2; +procedure чк3; +procedure чк4; +procedure чт1; +procedure чт2; +procedure чт3; +procedure чт4; + +procedure б; +procedure бт1; +procedure бт2; +procedure бт3; +procedure бт4; +procedure бк1; +procedure бк2; +procedure бк3; +procedure бк4; + +procedure з; +procedure зт1; +procedure зт2; +procedure зт3; +procedure зт4; +procedure зк1; +procedure зк2; +procedure зк3; +procedure зк4; + +procedure с; +procedure ст1; +procedure ст2; +procedure ст3; +procedure ст4; +procedure ск1; +procedure ск2; +procedure ск3; +procedure ск4; + +procedure се; +procedure сет1; +procedure сет2; +procedure сет3; +procedure сет4; +procedure сек1; +procedure сек2; +procedure сек3; +procedure сек4; + +procedure о; +procedure от1; +procedure от2; +procedure от3; +procedure от4; +procedure ок1; +procedure ок2; +procedure ок3; +procedure ок4; + +procedure р; +procedure рт1; +procedure рт2; +procedure рт3; +procedure рт4; +procedure рк1; +procedure рк2; +procedure рк3; +procedure рк4; + +procedure ф; +procedure фт1; +procedure фт2; +procedure фт3; +procedure фт4; +procedure фк1; +procedure фк2; +procedure фк3; +procedure фк4; + +procedure Ряд(p: procedure); +procedure НарисоватьРяд(p: procedure); + +implementation + +var + w := 50; + z := 2; + x := 1; + y := 1; + +procedure Draw(x, y: integer) := Rectangle(x * w, y * w, w - z, w - z); + +procedure D(c: Color); +begin + Brush.Color := c; + Draw(x, y); + x += 1; +end; + +procedure Ц1(c: Color); +begin + Brush.Color := c; + Pie(x * w + w - z,y * w + w - z,w-z,90,180); + x += 1; +end; +procedure Ц2(c: Color); +begin + Brush.Color := c; + Pie(x * w,y * w + w - z,w-z,0,90); + x += 1; +end; +procedure Ц3(c: Color); +begin + Brush.Color := c; + Pie(x * w,y * w,w-z,270,360); + x += 1; +end; +procedure Ц4(c: Color); +begin + Brush.Color := c; + Pie(x * w + w - z,y * w,w-z,180,270); + x += 1; +end; +procedure Тр1(c: Color); +begin + Brush.Color := c; + Polygon(Arr(Pnt(x * w + w - z,y * w + w - z),Pnt(x * w + w - z,y * w),Pnt(x * w,y * w + w - z))); + x += 1; +end; +procedure Тр2(c: Color); +begin + Brush.Color := c; + Polygon(Arr(Pnt(x * w,y * w + w - z),Pnt(x * w,y * w),Pnt(x * w + w - z,y * w + w - z))); + x += 1; +end; +procedure Тр3(c: Color); +begin + Brush.Color := c; + Polygon(Arr(Pnt(x * w,y * w),Pnt(x * w + w - z,y * w),Pnt(x * w,y * w + w - z))); + x += 1; +end; +procedure Тр4(c: Color); +begin + Brush.Color := c; + Polygon(Arr(Pnt(x * w + w - z,y * w),Pnt(x * w,y * w),Pnt(x * w + w - z,y * w + w - z))); + x += 1; +end; + +//------ Соответствие цветов +var КрасныйЦвет := Colors.Red; +var ОранжевыйЦвет := RGB(255,127,$00); +var ЖелтыйЦвет := Colors.Yellow; +var ЗеленыйЦвет := RGB($00,$99,$00); +var ГолубойЦвет := RGB($61,$c3,$ff); +var СинийЦвет := RGB(0,0,255); +var ФиолетовыйЦвет := RGB($94,$00,$d3); + +var РозовыйЦвет := Colors.Magenta; +var КоричневыйЦвет := RGB($96,$4B,$00); +var СерыйЦвет := Colors.Gray; +var БелыйЦвет := Colors.White; +var ЧерныйЦвет := Colors.Black; + +//---------------- + +procedure Пусто := x += 1; + +procedure НовыйРяд := (x, y) := (1, y + 1); + +procedure Серый := D(СерыйЦвет); +procedure СерыйЦКруг1 := Ц1(Colors.Gray); +procedure СерыйЦКруг2 := Ц2(СерыйЦвет); +procedure СерыйЦКруг3 := Ц3(СерыйЦвет); +procedure СерыйЦКруг4 := Ц4(СерыйЦвет); +procedure СерыйТр1 := Тр1(СерыйЦвет); +procedure СерыйТр2 := Тр2(СерыйЦвет); +procedure СерыйТр3 := Тр3(СерыйЦвет); +procedure СерыйТр4 := Тр4(СерыйЦвет); + +procedure Оранжевый := D(ОранжевыйЦвет); +procedure ОранжевыйЦКруг1 := Ц1(ОранжевыйЦвет); +procedure ОранжевыйЦКруг2 := Ц2(ОранжевыйЦвет); +procedure ОранжевыйЦКруг3 := Ц3(ОранжевыйЦвет); +procedure ОранжевыйЦКруг4 := Ц4(ОранжевыйЦвет); +procedure ОранжевыйТр1 := Тр1(ОранжевыйЦвет); +procedure ОранжевыйТр2 := Тр2(ОранжевыйЦвет); +procedure ОранжевыйТр3 := Тр3(ОранжевыйЦвет); +procedure ОранжевыйТр4 := Тр4(ОранжевыйЦвет); + +procedure Коричневый := D(КоричневыйЦвет); +procedure КоричневыйЦКруг1 := Ц1(КоричневыйЦвет); +procedure КоричневыйЦКруг2 := Ц2(КоричневыйЦвет); +procedure КоричневыйЦКруг3 := Ц3(КоричневыйЦвет); +procedure КоричневыйЦКруг4 := Ц4(КоричневыйЦвет); +procedure КоричневыйТр1 := Тр1(КоричневыйЦвет); +procedure КоричневыйТр2 := Тр2(КоричневыйЦвет); +procedure КоричневыйТр3 := Тр3(КоричневыйЦвет); +procedure КоричневыйТр4 := Тр4(КоричневыйЦвет); + +procedure Белый := D(БелыйЦвет); +procedure БелыйЦКруг1 := Ц1(БелыйЦвет); +procedure БелыйЦКруг2 := Ц2(БелыйЦвет); +procedure БелыйЦКруг3 := Ц3(БелыйЦвет); +procedure БелыйЦКруг4 := Ц4(БелыйЦвет); +procedure БелыйТр1 := Тр1(БелыйЦвет); +procedure БелыйТр2 := Тр2(БелыйЦвет); +procedure БелыйТр3 := Тр3(БелыйЦвет); +procedure БелыйТр4 := Тр4(БелыйЦвет); + +procedure Синий := D(СинийЦвет); +procedure СинийЦКруг1 := Ц1(СинийЦвет); +procedure СинийЦКруг2 := Ц2(СинийЦвет); +procedure СинийЦКруг3 := Ц3(СинийЦвет); +procedure СинийЦКруг4 := Ц4(СинийЦвет); +procedure СинийТр1 := Тр1(СинийЦвет); +procedure СинийТр2 := Тр2(СинийЦвет); +procedure СинийТр3 := Тр3(СинийЦвет); +procedure СинийТр4 := Тр4(СинийЦвет); + +procedure Фиолетовый := D(ФиолетовыйЦвет); +procedure ФиолетовыйЦКруг1 := Ц1(ФиолетовыйЦвет); +procedure ФиолетовыйЦКруг2 := Ц2(ФиолетовыйЦвет); +procedure ФиолетовыйЦКруг3 := Ц3(ФиолетовыйЦвет); +procedure ФиолетовыйЦКруг4 := Ц4(ФиолетовыйЦвет); +procedure ФиолетовыйТр1 := Тр1(ФиолетовыйЦвет); +procedure ФиолетовыйТр2 := Тр2(ФиолетовыйЦвет); +procedure ФиолетовыйТр3 := Тр3(ФиолетовыйЦвет); +procedure ФиолетовыйТр4 := Тр4(ФиолетовыйЦвет); + +procedure Красный := D(КрасныйЦвет); +procedure КрасныйЦКруг1 := Ц1(КрасныйЦвет); +procedure КрасныйЦКруг2 := Ц2(КрасныйЦвет); +procedure КрасныйЦКруг3 := Ц3(КрасныйЦвет); +procedure КрасныйЦКруг4 := Ц4(КрасныйЦвет); +procedure КрасныйТр1 := Тр1(КрасныйЦвет); +procedure КрасныйТр2 := Тр2(КрасныйЦвет); +procedure КрасныйТр3 := Тр3(КрасныйЦвет); +procedure КрасныйТр4 := Тр4(КрасныйЦвет); + +procedure Черный := D(ЧерныйЦвет); +procedure Чёрный := D(ЧерныйЦвет); +procedure ЧерныйТр1 := Тр1(ЧерныйЦвет); +procedure ЧерныйТр2 := Тр2(ЧерныйЦвет); +procedure ЧерныйТр3 := Тр3(ЧерныйЦвет); +procedure ЧерныйТр4 := Тр4(ЧерныйЦвет); +procedure ЧерныйЦКруг1 := Ц1(ЧерныйЦвет); +procedure ЧерныйЦКруг2 := Ц2(ЧерныйЦвет); +procedure ЧерныйЦКруг3 := Ц3(ЧерныйЦвет); +procedure ЧерныйЦКруг4 := Ц4(ЧерныйЦвет); +procedure ЧёрныйЦКруг1 := Ц1(ЧерныйЦвет); +procedure ЧёрныйЦКруг2 := Ц2(ЧерныйЦвет); +procedure ЧёрныйЦКруг3 := Ц3(ЧерныйЦвет); +procedure ЧёрныйЦКруг4 := Ц4(ЧерныйЦвет); + +procedure Зелёный := D(ЗеленыйЦвет); +procedure ЗелёныйЦКруг1 := Ц1(ЗеленыйЦвет); +procedure ЗелёныйЦКруг2 := Ц2(ЗеленыйЦвет); +procedure ЗелёныйЦКруг3 := Ц3(ЗеленыйЦвет); +procedure ЗелёныйЦКруг4 := Ц4(ЗеленыйЦвет); +procedure ЗелёныйТр1 := Тр1(ЗеленыйЦвет); +procedure ЗелёныйТр2 := Тр2(ЗеленыйЦвет); +procedure ЗелёныйТр3 := Тр3(ЗеленыйЦвет); +procedure ЗелёныйТр4 := Тр4(ЗеленыйЦвет); + +procedure Голубой := D(ГолубойЦвет); +procedure ГолубойЦКруг1 := Ц1(ГолубойЦвет); +procedure ГолубойЦКруг2 := Ц2(ГолубойЦвет); +procedure ГолубойЦКруг3 := Ц3(ГолубойЦвет); +procedure ГолубойЦКруг4 := Ц4(ГолубойЦвет); +procedure ГолубойТр1 := Тр1(ГолубойЦвет); +procedure ГолубойТр2 := Тр2(ГолубойЦвет); +procedure ГолубойТр3 := Тр3(ГолубойЦвет); +procedure ГолубойТр4 := Тр4(ГолубойЦвет); + +procedure Розовый := D(РозовыйЦвет); +procedure РозовыйЦКруг1 := Ц1(РозовыйЦвет); +procedure РозовыйЦКруг2 := Ц2(РозовыйЦвет); +procedure РозовыйЦКруг3 := Ц3(РозовыйЦвет); +procedure РозовыйЦКруг4 := Ц4(РозовыйЦвет); +procedure РозовыйТр1 := Тр1(РозовыйЦвет); +procedure РозовыйТр2 := Тр2(РозовыйЦвет); +procedure РозовыйТр3 := Тр3(РозовыйЦвет); +procedure РозовыйТр4 := Тр4(РозовыйЦвет); + +procedure Желтый := D(ЖелтыйЦвет); +procedure Жёлтый := D(ЖелтыйЦвет); +procedure ЖелтыйЦКруг1 := Ц1(ЖелтыйЦвет); +procedure ЖелтыйЦКруг2 := Ц2(ЖелтыйЦвет); +procedure ЖелтыйЦКруг3 := Ц3(ЖелтыйЦвет); +procedure ЖелтыйЦКруг4 := Ц4(ЖелтыйЦвет); +procedure ЖелтыйТр1 := Тр1(ЖелтыйЦвет); +procedure ЖелтыйТр2 := Тр2(ЖелтыйЦвет); +procedure ЖелтыйТр3 := Тр3(ЖелтыйЦвет); +procedure ЖелтыйТр4 := Тр4(ЖелтыйЦвет); + +procedure п := пусто; + +procedure к := красный; +procedure кк1 := красныйцкруг1; +procedure кк2 := красныйцкруг2; +procedure кк3 := красныйцкруг3; +procedure кк4 := красныйцкруг4; +procedure кт1 := красныйТр1; +procedure кт2 := красныйТр2; +procedure кт3 := красныйТр3; +procedure кт4 := красныйТр4; + +procedure ко := коричневый; +procedure кок1 := коричневыйцкруг1; +procedure кок2 := коричневыйцкруг2; +procedure кок3 := коричневыйцкруг3; +procedure кок4 := коричневыйцкруг4; +procedure кот1 := коричневыйТр1; +procedure кот2 := коричневыйТр2; +procedure кот3 := коричневыйТр3; +procedure кот4 := коричневыйТр4; + +procedure ж := желтый; +procedure жк1 := желтыйцкруг1; +procedure жк2 := желтыйцкруг2; +procedure жк3 := желтыйцкруг3; +procedure жк4 := желтыйцкруг4; +procedure жт1 := желтыйТр1; +procedure жт2 := желтыйТр2; +procedure жт3 := желтыйТр3; +procedure жт4 := желтыйТр4; + +procedure г := голубой; +procedure гк1 := Голубойцкруг1; +procedure гк2 := Голубойцкруг2; +procedure гк3 := Голубойцкруг3; +procedure гк4 := Голубойцкруг4; +procedure гт1 := ГолубойТр1; +procedure гт2 := ГолубойТр2; +procedure гт3 := ГолубойТр3; +procedure гт4 := ГолубойТр4; + +procedure ч := черный; +procedure Чк1 := ЧЕРНыйцкруг1; +procedure Чк2 := ЧЕРНыйцкруг2; +procedure Чк3 := ЧЕРНыйцкруг3; +procedure Чк4 := ЧЕРНыйцкруг4; +procedure Чт1 := ЧЕРНыйТр1; +procedure Чт2 := ЧЕРНыйТр2; +procedure Чт3 := ЧЕРНыйТр3; +procedure Чт4 := ЧЕРНыйТр4; + +procedure б := белый; +procedure бт1 := белыйТр1; +procedure бт2 := белыйТр2; +procedure бт3 := белыйТр3; +procedure бт4 := белыйТр4; +procedure Бк1 := белыйцкруг1; +procedure Бк2 := белыйцкруг2; +procedure Бк3 := белыйцкруг3; +procedure Бк4 := белыйцкруг4; + +procedure з := зелёный; +procedure зт1 := зелёныйТр1; +procedure зт2 := зелёныйТр2; +procedure зт3 := зелёныйТр3; +procedure зт4 := зелёныйТр4; +procedure зк1 := зелёныйцкруг1; +procedure зк2 := зелёныйцкруг2; +procedure зк3 := зелёныйцкруг3; +procedure зк4 := зелёныйцкруг4; + +procedure с := синий; +procedure ст1 := синийТр1; +procedure ст2 := синийТр2; +procedure ст3 := синийТр3; +procedure ст4 := синийТр4; +procedure ск1 := синийцкруг1; +procedure ск2 := синийцкруг2; +procedure ск3 := синийцкруг3; +procedure ск4 := синийцкруг4; + +procedure се := серый; +procedure сет1 := серыйТр1; +procedure сет2 := серыйТр2; +procedure сет3 := серыйТр3; +procedure сет4 := серыйТр4; +procedure сек1 := серыйцкруг1; +procedure сек2 := серыйцкруг2; +procedure сек3 := серыйцкруг3; +procedure сек4 := серыйцкруг4; + +procedure о := оранжевый; +procedure от1 := оранжевыйТр1; +procedure от2 := оранжевыйТр2; +procedure от3 := оранжевыйТр3; +procedure от4 := оранжевыйТр4; +procedure ок1 := оранжевыйцкруг1; +procedure ок2 := оранжевыйцкруг2; +procedure ок3 := оранжевыйцкруг3; +procedure ок4 := оранжевыйцкруг4; + +procedure Р := розовый; +procedure Рт1 := розовыйТр1; +procedure Рт2 := розовыйТр2; +procedure Рт3 := розовыйТр3; +procedure Рт4 := розовыйТр4; +procedure Рк1 := розовыйцкруг1; +procedure Рк2 := розовыйцкруг2; +procedure Рк3 := розовыйцкруг3; +procedure Рк4 := розовыйцкруг4; + +procedure ф := фиолетовый; +procedure фт1 := фиолетовыйТр1; +procedure фт2 := фиолетовыйТр2; +procedure фт3 := фиолетовыйТр3; +procedure фт4 := фиолетовыйТр4; +procedure фк1 := фиолетовыйцкруг1; +procedure фк2 := фиолетовыйцкруг2; +procedure фк3 := фиолетовыйцкруг3; +procedure фк4 := фиолетовыйцкруг4; + +procedure Run(p: procedure) := p; + +procedure НарисоватьРяд(p: procedure) := Run(p + НовыйРяд); +procedure Ряд(p: procedure) := (p + НовыйРяд); + +begin + SetStandardCoords(1 / 1.25, 0.5, 0.5); + pen.Width := 1 / 1.25; +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/МозаикаABC.pas b/TestSuite/CompilationSamples/МозаикаABC.pas new file mode 100644 index 000000000..b58b2e694 --- /dev/null +++ b/TestSuite/CompilationSamples/МозаикаABC.pas @@ -0,0 +1,478 @@ +unit МозаикаABC; + +interface + +uses GraphABC; + +var Window := GraphABC.Window; + +procedure п; + +procedure к; +procedure кк1; +procedure кк2; +procedure кк3; +procedure кк4; +procedure кт1; +procedure кт2; +procedure кт3; +procedure кт4; + +procedure ко; +procedure кок1; +procedure кок2; +procedure кок3; +procedure кок4; +procedure кот1; +procedure кот2; +procedure кот3; +procedure кот4; + +procedure ж; +procedure жк1; +procedure жк2; +procedure жк3; +procedure жк4; +procedure жт1; +procedure жт2; +procedure жт3; +procedure жт4; + +procedure г; +procedure гк1; +procedure гк2; +procedure гк3; +procedure гк4; +procedure гт1; +procedure гт2; +procedure гт3; +procedure гт4; + +procedure ч; +procedure чк1; +procedure чк2; +procedure чк3; +procedure чк4; +procedure чт1; +procedure чт2; +procedure чт3; +procedure чт4; + +procedure б; +procedure бт1; +procedure бт2; +procedure бт3; +procedure бт4; +procedure бк1; +procedure бк2; +procedure бк3; +procedure бк4; + +procedure з; +procedure зт1; +procedure зт2; +procedure зт3; +procedure зт4; +procedure зк1; +procedure зк2; +procedure зк3; +procedure зк4; + +procedure с; +procedure ст1; +procedure ст2; +procedure ст3; +procedure ст4; +procedure ск1; +procedure ск2; +procedure ск3; +procedure ск4; + +procedure се; +procedure сет1; +procedure сет2; +procedure сет3; +procedure сет4; +procedure сек1; +procedure сек2; +procedure сек3; +procedure сек4; + +procedure о; +procedure от1; +procedure от2; +procedure от3; +procedure от4; +procedure ок1; +procedure ок2; +procedure ок3; +procedure ок4; + +procedure р; +procedure рт1; +procedure рт2; +procedure рт3; +procedure рт4; +procedure рк1; +procedure рк2; +procedure рк3; +procedure рк4; + +procedure ф; +procedure фт1; +procedure фт2; +procedure фт3; +procedure фт4; +procedure фк1; +procedure фк2; +procedure фк3; +procedure фк4; + +procedure Ряд(p: procedure); +procedure НарисоватьРяд(p: procedure); + +implementation + +var + w := 50; + z := 2; + x := 1; + y := 1; + +procedure Draw(x, y: integer) := Rectangle(x * w, y * w, w - z, w - z); + +procedure D(c: Color); +begin + Brush.Color := c; + Draw(x, y); + x += 1; +end; + +procedure Ц1(c: Color); +begin + Brush.Color := c; + Pie(x * w + w - z,y * w + w - z,w-z,90,180); + x += 1; +end; +procedure Ц2(c: Color); +begin + Brush.Color := c; + Pie(x * w,y * w + w - z,w-z,0,90); + x += 1; +end; +procedure Ц3(c: Color); +begin + Brush.Color := c; + Pie(x * w,y * w,w-z,270,360); + x += 1; +end; +procedure Ц4(c: Color); +begin + Brush.Color := c; + Pie(x * w + w - z,y * w,w-z,180,270); + x += 1; +end; +procedure Тр1(c: Color); +begin + Brush.Color := c; + Polygon(Arr(Pnt(x * w + w - z,y * w + w - z),Pnt(x * w + w - z,y * w),Pnt(x * w,y * w + w - z))); + x += 1; +end; +procedure Тр2(c: Color); +begin + Brush.Color := c; + Polygon(Arr(Pnt(x * w,y * w + w - z),Pnt(x * w,y * w),Pnt(x * w + w - z,y * w + w - z))); + x += 1; +end; +procedure Тр3(c: Color); +begin + Brush.Color := c; + Polygon(Arr(Pnt(x * w,y * w),Pnt(x * w + w - z,y * w),Pnt(x * w,y * w + w - z))); + x += 1; +end; +procedure Тр4(c: Color); +begin + Brush.Color := c; + Polygon(Arr(Pnt(x * w + w - z,y * w),Pnt(x * w,y * w),Pnt(x * w + w - z,y * w + w - z))); + x += 1; +end; + +//------ Соответствие цветов +var КрасныйЦвет := Color.Red; +var ОранжевыйЦвет := RGB(255,127,$00); +var ЖелтыйЦвет := Color.Yellow; +var ЗеленыйЦвет := RGB($00,$99,$00); +var ГолубойЦвет := RGB($61,$c3,$ff); +var СинийЦвет := RGB(0,0,255); +var ФиолетовыйЦвет := RGB($94,$00,$d3); + +var РозовыйЦвет := Color.Magenta; +var КоричневыйЦвет := RGB($96,$4B,$00); +var СерыйЦвет := Color.Gray; +var БелыйЦвет := Color.White; +var ЧерныйЦвет := Color.Black; + +//---------------- + +procedure Пусто := x += 1; + +procedure НовыйРяд := (x, y) := (1, y + 1); + +procedure Серый := D(СерыйЦвет); +procedure СерыйЦКруг1 := Ц1(СерыйЦвет); +procedure СерыйЦКруг2 := Ц2(СерыйЦвет); +procedure СерыйЦКруг3 := Ц3(СерыйЦвет); +procedure СерыйЦКруг4 := Ц4(СерыйЦвет); +procedure СерыйТр1 := Тр1(СерыйЦвет); +procedure СерыйТр2 := Тр2(СерыйЦвет); +procedure СерыйТр3 := Тр3(СерыйЦвет); +procedure СерыйТр4 := Тр4(СерыйЦвет); + +procedure Оранжевый := D(ОранжевыйЦвет); +procedure ОранжевыйЦКруг1 := Ц1(ОранжевыйЦвет); +procedure ОранжевыйЦКруг2 := Ц2(ОранжевыйЦвет); +procedure ОранжевыйЦКруг3 := Ц3(ОранжевыйЦвет); +procedure ОранжевыйЦКруг4 := Ц4(ОранжевыйЦвет); +procedure ОранжевыйТр1 := Тр1(ОранжевыйЦвет); +procedure ОранжевыйТр2 := Тр2(ОранжевыйЦвет); +procedure ОранжевыйТр3 := Тр3(ОранжевыйЦвет); +procedure ОранжевыйТр4 := Тр4(ОранжевыйЦвет); + +procedure Коричневый := D(КоричневыйЦвет); +procedure КоричневыйЦКруг1 := Ц1(КоричневыйЦвет); +procedure КоричневыйЦКруг2 := Ц2(КоричневыйЦвет); +procedure КоричневыйЦКруг3 := Ц3(КоричневыйЦвет); +procedure КоричневыйЦКруг4 := Ц4(КоричневыйЦвет); +procedure КоричневыйТр1 := Тр1(КоричневыйЦвет); +procedure КоричневыйТр2 := Тр2(КоричневыйЦвет); +procedure КоричневыйТр3 := Тр3(КоричневыйЦвет); +procedure КоричневыйТр4 := Тр4(КоричневыйЦвет); + +procedure Белый := D(БелыйЦвет); +procedure БелыйЦКруг1 := Ц1(БелыйЦвет); +procedure БелыйЦКруг2 := Ц2(БелыйЦвет); +procedure БелыйЦКруг3 := Ц3(БелыйЦвет); +procedure БелыйЦКруг4 := Ц4(БелыйЦвет); +procedure БелыйТр1 := Тр1(БелыйЦвет); +procedure БелыйТр2 := Тр2(БелыйЦвет); +procedure БелыйТр3 := Тр3(БелыйЦвет); +procedure БелыйТр4 := Тр4(БелыйЦвет); + +procedure Синий := D(СинийЦвет); +procedure СинийЦКруг1 := Ц1(СинийЦвет); +procedure СинийЦКруг2 := Ц2(СинийЦвет); +procedure СинийЦКруг3 := Ц3(СинийЦвет); +procedure СинийЦКруг4 := Ц4(СинийЦвет); +procedure СинийТр1 := Тр1(СинийЦвет); +procedure СинийТр2 := Тр2(СинийЦвет); +procedure СинийТр3 := Тр3(СинийЦвет); +procedure СинийТр4 := Тр4(СинийЦвет); + +procedure Фиолетовый := D(ФиолетовыйЦвет); +procedure ФиолетовыйЦКруг1 := Ц1(ФиолетовыйЦвет); +procedure ФиолетовыйЦКруг2 := Ц2(ФиолетовыйЦвет); +procedure ФиолетовыйЦКруг3 := Ц3(ФиолетовыйЦвет); +procedure ФиолетовыйЦКруг4 := Ц4(ФиолетовыйЦвет); +procedure ФиолетовыйТр1 := Тр1(ФиолетовыйЦвет); +procedure ФиолетовыйТр2 := Тр2(ФиолетовыйЦвет); +procedure ФиолетовыйТр3 := Тр3(ФиолетовыйЦвет); +procedure ФиолетовыйТр4 := Тр4(ФиолетовыйЦвет); + +procedure Красный := D(КрасныйЦвет); +procedure КрасныйЦКруг1 := Ц1(КрасныйЦвет); +procedure КрасныйЦКруг2 := Ц2(КрасныйЦвет); +procedure КрасныйЦКруг3 := Ц3(КрасныйЦвет); +procedure КрасныйЦКруг4 := Ц4(КрасныйЦвет); +procedure КрасныйТр1 := Тр1(КрасныйЦвет); +procedure КрасныйТр2 := Тр2(КрасныйЦвет); +procedure КрасныйТр3 := Тр3(КрасныйЦвет); +procedure КрасныйТр4 := Тр4(КрасныйЦвет); + +procedure Черный := D(ЧерныйЦвет); +procedure Чёрный := D(ЧерныйЦвет); +procedure ЧерныйТр1 := Тр1(ЧерныйЦвет); +procedure ЧерныйТр2 := Тр2(ЧерныйЦвет); +procedure ЧерныйТр3 := Тр3(ЧерныйЦвет); +procedure ЧерныйТр4 := Тр4(ЧерныйЦвет); +procedure ЧерныйЦКруг1 := Ц1(ЧерныйЦвет); +procedure ЧерныйЦКруг2 := Ц2(ЧерныйЦвет); +procedure ЧерныйЦКруг3 := Ц3(ЧерныйЦвет); +procedure ЧерныйЦКруг4 := Ц4(ЧерныйЦвет); +procedure ЧёрныйЦКруг1 := Ц1(ЧерныйЦвет); +procedure ЧёрныйЦКруг2 := Ц2(ЧерныйЦвет); +procedure ЧёрныйЦКруг3 := Ц3(ЧерныйЦвет); +procedure ЧёрныйЦКруг4 := Ц4(ЧерныйЦвет); + +procedure Зелёный := D(ЗеленыйЦвет); +procedure ЗелёныйЦКруг1 := Ц1(ЗеленыйЦвет); +procedure ЗелёныйЦКруг2 := Ц2(ЗеленыйЦвет); +procedure ЗелёныйЦКруг3 := Ц3(ЗеленыйЦвет); +procedure ЗелёныйЦКруг4 := Ц4(ЗеленыйЦвет); +procedure ЗелёныйТр1 := Тр1(ЗеленыйЦвет); +procedure ЗелёныйТр2 := Тр2(ЗеленыйЦвет); +procedure ЗелёныйТр3 := Тр3(ЗеленыйЦвет); +procedure ЗелёныйТр4 := Тр4(ЗеленыйЦвет); + +procedure Голубой := D(ГолубойЦвет); +procedure ГолубойЦКруг1 := Ц1(ГолубойЦвет); +procedure ГолубойЦКруг2 := Ц2(ГолубойЦвет); +procedure ГолубойЦКруг3 := Ц3(ГолубойЦвет); +procedure ГолубойЦКруг4 := Ц4(ГолубойЦвет); +procedure ГолубойТр1 := Тр1(ГолубойЦвет); +procedure ГолубойТр2 := Тр2(ГолубойЦвет); +procedure ГолубойТр3 := Тр3(ГолубойЦвет); +procedure ГолубойТр4 := Тр4(ГолубойЦвет); + +procedure Розовый := D(РозовыйЦвет); +procedure РозовыйЦКруг1 := Ц1(РозовыйЦвет); +procedure РозовыйЦКруг2 := Ц2(РозовыйЦвет); +procedure РозовыйЦКруг3 := Ц3(РозовыйЦвет); +procedure РозовыйЦКруг4 := Ц4(РозовыйЦвет); +procedure РозовыйТр1 := Тр1(РозовыйЦвет); +procedure РозовыйТр2 := Тр2(РозовыйЦвет); +procedure РозовыйТр3 := Тр3(РозовыйЦвет); +procedure РозовыйТр4 := Тр4(РозовыйЦвет); + +procedure Желтый := D(ЖелтыйЦвет); +procedure Жёлтый := D(ЖелтыйЦвет); +procedure ЖелтыйЦКруг1 := Ц1(ЖелтыйЦвет); +procedure ЖелтыйЦКруг2 := Ц2(ЖелтыйЦвет); +procedure ЖелтыйЦКруг3 := Ц3(ЖелтыйЦвет); +procedure ЖелтыйЦКруг4 := Ц4(ЖелтыйЦвет); +procedure ЖелтыйТр1 := Тр1(ЖелтыйЦвет); +procedure ЖелтыйТр2 := Тр2(ЖелтыйЦвет); +procedure ЖелтыйТр3 := Тр3(ЖелтыйЦвет); +procedure ЖелтыйТр4 := Тр4(ЖелтыйЦвет); + +procedure п := пусто; + +procedure к := красный; +procedure кк1 := красныйцкруг1; +procedure кк2 := красныйцкруг2; +procedure кк3 := красныйцкруг3; +procedure кк4 := красныйцкруг4; +procedure кт1 := красныйТр1; +procedure кт2 := красныйТр2; +procedure кт3 := красныйТр3; +procedure кт4 := красныйТр4; + +procedure ко := коричневый; +procedure кок1 := коричневыйцкруг1; +procedure кок2 := коричневыйцкруг2; +procedure кок3 := коричневыйцкруг3; +procedure кок4 := коричневыйцкруг4; +procedure кот1 := коричневыйТр1; +procedure кот2 := коричневыйТр2; +procedure кот3 := коричневыйТр3; +procedure кот4 := коричневыйТр4; + +procedure ж := желтый; +procedure жк1 := желтыйцкруг1; +procedure жк2 := желтыйцкруг2; +procedure жк3 := желтыйцкруг3; +procedure жк4 := желтыйцкруг4; +procedure жт1 := желтыйТр1; +procedure жт2 := желтыйТр2; +procedure жт3 := желтыйТр3; +procedure жт4 := желтыйТр4; + +procedure г := голубой; +procedure гк1 := Голубойцкруг1; +procedure гк2 := Голубойцкруг2; +procedure гк3 := Голубойцкруг3; +procedure гк4 := Голубойцкруг4; +procedure гт1 := ГолубойТр1; +procedure гт2 := ГолубойТр2; +procedure гт3 := ГолубойТр3; +procedure гт4 := ГолубойТр4; + +procedure ч := черный; +procedure Чк1 := ЧЕРНыйцкруг1; +procedure Чк2 := ЧЕРНыйцкруг2; +procedure Чк3 := ЧЕРНыйцкруг3; +procedure Чк4 := ЧЕРНыйцкруг4; +procedure Чт1 := ЧЕРНыйТр1; +procedure Чт2 := ЧЕРНыйТр2; +procedure Чт3 := ЧЕРНыйТр3; +procedure Чт4 := ЧЕРНыйТр4; + +procedure б := белый; +procedure бт1 := белыйТр1; +procedure бт2 := белыйТр2; +procedure бт3 := белыйТр3; +procedure бт4 := белыйТр4; +procedure Бк1 := белыйцкруг1; +procedure Бк2 := белыйцкруг2; +procedure Бк3 := белыйцкруг3; +procedure Бк4 := белыйцкруг4; + +procedure з := зелёный; +procedure зт1 := зелёныйТр1; +procedure зт2 := зелёныйТр2; +procedure зт3 := зелёныйТр3; +procedure зт4 := зелёныйТр4; +procedure зк1 := зелёныйцкруг1; +procedure зк2 := зелёныйцкруг2; +procedure зк3 := зелёныйцкруг3; +procedure зк4 := зелёныйцкруг4; + +procedure с := синий; +procedure ст1 := синийТр1; +procedure ст2 := синийТр2; +procedure ст3 := синийТр3; +procedure ст4 := синийТр4; +procedure ск1 := синийцкруг1; +procedure ск2 := синийцкруг2; +procedure ск3 := синийцкруг3; +procedure ск4 := синийцкруг4; + +procedure се := серый; +procedure сет1 := серыйТр1; +procedure сет2 := серыйТр2; +procedure сет3 := серыйТр3; +procedure сет4 := серыйТр4; +procedure сек1 := серыйцкруг1; +procedure сек2 := серыйцкруг2; +procedure сек3 := серыйцкруг3; +procedure сек4 := серыйцкруг4; + +procedure о := оранжевый; +procedure от1 := оранжевыйТр1; +procedure от2 := оранжевыйТр2; +procedure от3 := оранжевыйТр3; +procedure от4 := оранжевыйТр4; +procedure ок1 := оранжевыйцкруг1; +procedure ок2 := оранжевыйцкруг2; +procedure ок3 := оранжевыйцкруг3; +procedure ок4 := оранжевыйцкруг4; + +procedure Р := розовый; +procedure Рт1 := розовыйТр1; +procedure Рт2 := розовыйТр2; +procedure Рт3 := розовыйТр3; +procedure Рт4 := розовыйТр4; +procedure Рк1 := розовыйцкруг1; +procedure Рк2 := розовыйцкруг2; +procedure Рк3 := розовыйцкруг3; +procedure Рк4 := розовыйцкруг4; + +procedure ф := фиолетовый; +procedure фт1 := фиолетовыйТр1; +procedure фт2 := фиолетовыйТр2; +procedure фт3 := фиолетовыйТр3; +procedure фт4 := фиолетовыйТр4; +procedure фк1 := фиолетовыйцкруг1; +procedure фк2 := фиолетовыйцкруг2; +procedure фк3 := фиолетовыйцкруг3; +procedure фк4 := фиолетовыйцкруг4; + +procedure Run(p: procedure) := p; + +procedure НарисоватьРяд(p: procedure) := Run(p + НовыйРяд); +procedure Ряд(p: procedure) := (p + НовыйРяд); + +begin + Window.SetSize(1024,768); + //SetStandardCoords(1 / 1.25, 0.5, 0.5); + //pen.Width := 1 / 1.25; +end. \ No newline at end of file diff --git a/Utils/NodesGeneratorNew/NodesGenerator_old/bin/Debug/NodesGenerator.pdb b/Utils/NodesGeneratorNew/NodesGenerator_old/bin/Debug/NodesGenerator.pdb deleted file mode 100644 index 3987b1ca5..000000000 Binary files a/Utils/NodesGeneratorNew/NodesGenerator_old/bin/Debug/NodesGenerator.pdb and /dev/null differ diff --git a/Utils/NodesGeneratorNew/Scintilla/ScintillaNET.pdb b/Utils/NodesGeneratorNew/Scintilla/ScintillaNET.pdb deleted file mode 100644 index 8dd2a279f..000000000 Binary files a/Utils/NodesGeneratorNew/Scintilla/ScintillaNET.pdb and /dev/null differ diff --git a/Utils/NodesGeneratorNew/Scintilla/Sources/bin/Debug/SCide.pdb b/Utils/NodesGeneratorNew/Scintilla/Sources/bin/Debug/SCide.pdb deleted file mode 100644 index e3adcbe08..000000000 Binary files a/Utils/NodesGeneratorNew/Scintilla/Sources/bin/Debug/SCide.pdb and /dev/null differ diff --git a/Utils/NodesGeneratorNew/Scintilla/Sources/bin/Debug/ScintillaNET.pdb b/Utils/NodesGeneratorNew/Scintilla/Sources/bin/Debug/ScintillaNET.pdb deleted file mode 100644 index 21e568122..000000000 Binary files a/Utils/NodesGeneratorNew/Scintilla/Sources/bin/Debug/ScintillaNET.pdb and /dev/null differ diff --git a/W/Debug_Folder/ConsoleApp1.exe b/W/Debug_Folder/ConsoleApp1.exe deleted file mode 100644 index f22b016f5..000000000 Binary files a/W/Debug_Folder/ConsoleApp1.exe and /dev/null differ diff --git a/W/Debug_Folder/ConsoleApp1.exe.config b/W/Debug_Folder/ConsoleApp1.exe.config deleted file mode 100644 index ef122f527..000000000 --- a/W/Debug_Folder/ConsoleApp1.exe.config +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/W/Debug_Folder/ConsoleApp1.pdb b/W/Debug_Folder/ConsoleApp1.pdb deleted file mode 100644 index e0d3f8345..000000000 Binary files a/W/Debug_Folder/ConsoleApp1.pdb and /dev/null differ diff --git a/W/Debug_Folder/CpuMathNative.dll b/W/Debug_Folder/CpuMathNative.dll deleted file mode 100644 index cf054b55f..000000000 Binary files a/W/Debug_Folder/CpuMathNative.dll and /dev/null differ diff --git a/W/Debug_Folder/LdaNative.dll b/W/Debug_Folder/LdaNative.dll deleted file mode 100644 index 6d78150e5..000000000 Binary files a/W/Debug_Folder/LdaNative.dll and /dev/null differ diff --git a/W/Debug_Folder/Microsoft.ML.Core.dll b/W/Debug_Folder/Microsoft.ML.Core.dll deleted file mode 100644 index 23aad80b6..000000000 Binary files a/W/Debug_Folder/Microsoft.ML.Core.dll and /dev/null differ diff --git a/W/Debug_Folder/Microsoft.ML.Core.xml b/W/Debug_Folder/Microsoft.ML.Core.xml deleted file mode 100644 index a7eec799b..000000000 --- a/W/Debug_Folder/Microsoft.ML.Core.xml +++ /dev/null @@ -1,6902 +0,0 @@ - - - - Microsoft.ML.Core - - - - - Intended to be applied to types and members with internal scope to indicate that friend access of this - internal item is OK from another assembly. This restriction applies only to assemblies that declare the - assembly level attribute. Note that this attribute is not - transferable: an internal member with this attribute does not somehow make a containing internal type - accessible. Conversely, neither does marking an internal type make any unmarked internal members accessible. - - - - - This is an assembly level attribute to signal that friend accesses on this assembly should be checked - for usage of . If this attribute is missing, normal access rules for - friends should apply. - - - - - Allows control of command line parsing. - Attach this attribute to instance fields of types used - as the destination of command line argument parsing. - - - - - Allows control of command line parsing. - - Specifies the error checking to be done on the argument. - - - - The error checking to be done on the argument. - - - - - The short name(s) of the argument. - Set to null means use the default short name if it does not - conflict with any other parameter name. - Set to String.Empty for no short name. - More than one short name can be separated by commas or spaces. - This property should not be set for DefaultArgumentAttributes. - - - - - The help text for the argument. - - - - - Allows the GUI or other tools to inspect the intended purpose of the argument and pick a correct custom control. - - - - - Used to control parsing of command line arguments. - - - - - Indicates that this field is required. An error will be displayed - if it is not present when parsing arguments. - - - - - Only valid in conjunction with Multiple. - Duplicate values will result in an error. - - - - - Indicates that the argument may be specified more than once. - Only valid if the argument is a collection - - - - - The default type for non-collection arguments. - The argument is not required, but an error will be reported if it is specified more than once. - - - - - For non-collection arguments, when the argument is specified more than - once no error is reported and the value of the argument is the last - value which occurs in the argument list. - - - - - The default type for collection arguments. - The argument is permitted to occur multiple times, but duplicate - values will cause an error to be reported. - - - - - Consume the characters of the next token and append them to the string builder. - - - - - Returns true if it quoted. - - - - - A delegate used in error reporting. - - - - - An IComponentFactory that is used in the command line. - - This allows components to be created by name, signature type, and a settings string. - - - - - Parser for command line arguments. - - The parser specification is inferred from the instance fields of the object - specified as the destination of the parse. - Valid argument types are: int, uint, string, bool, enums - Also argument types of Array of the above types are also valid. - - Error checking options can be controlled by adding a ArgumentAttribute - to the instance fields of the destination object. - - At most one field may be marked with the DefaultArgumentAttribute - indicating that arguments without a '-' or '/' prefix will be parsed as that argument. - - If not specified then the parser will infer default options for parsing each - instance field. The default long name of the argument is the field name. The - default short name is the first character of the long name. Long names and explicitly - specified short names must be unique. Default short names will be used provided that - the default short name does not conflict with a long name or an explicitly - specified short name. - - Arguments which are array types are collection arguments. Collection - arguments can be specified multiple times. - - - - - Parses a command line. This assumes that the .exe name has been stripped off. - Errors are output on Console.Error. - Use ArgumentAttributes to control parsing behavior. - - The host environment - The command line - The object to receive the options - true if no errors were detected - - - - Parses a command line. This assumes that the .exe name has been stripped off. - Use ArgumentAttributes to control parsing behavior. - - The host environment - The command line - The object to receive the options - The type of 'destination' - The destination for parse errors. - true if no errors were detected - - - - Parses a command line. This assumes that the exe name has been stripped off. - Use ArgumentAttributes to control parsing behavior. - - The host environment - The command line - The object to receive the options - The destination for parse errors. - true if no errors were detected - - - - Check whether a certain type is numeric. - - - - - Returns a Usage string for command line argument parsing. - Use ArgumentAttributes to control parsing behavior. - - The host environment. - The type of the arguments to display usage for. - The default values. - Whether to show the @file item. - The number of columns to format the output to. - Printable string containing a user friendly description of command line arguments. - - - - Parses an argument list into an object - - - - - - true if successful - - - - Parses an argument list. - - - The arguments to parse. - The destination of the parsed arguments. - true if no parse errors were encountered. - - - - GetSettingsCore handles the top-level case. This handles the nested custom record case. - It deals with custom "unparse" functionality, as well as quoting. It also appends to a StringBuilder - instead of returning a string. - - - - - A user friendly usage string describing the command line argument syntax. - - - - - Creates an ICommandLineComponentFactory given the factory type, signature type, - and a command line string. - - - - - This class exposes those parts of this wrapped appropriate - for public consumption. - - - - - A factory class for creating IComponentFactory instances. - - - - - Indicates that this argument is the default argument. - '/' or '-' prefix only the argument value is specified. - The ShortName property should not be set for DefaultArgumentAttribute - instances. The LongName property is used for usage text only and - does not affect the usage of the argument. - - - - - Indicates that this argument is the default argument. - - Specifies the error checking to be done on the argument. - - - - On an enum value - specifies the display name. - - - - - On an enum value - indicates that the value should not be shown in help or UI. - - - - - This is used to specify a column mapping of a data transform. - - - - - This is meant to be a large text (like a c# code block, for example). - - - - - This is used to specify a column mapping of a data transform. - - - - - Make sure the given assemblies are loaded and that their loadable classes have been catalogued. - - - - - Given an assembly path, load the assembly and register it with the ComponentCatalog. - - - - - Checks whether references the assembly containing LoadableClassAttributeBase, - and therefore can contain components. - - - - - This catalogs instantiable components (aka, loadable classes). Components are registered via - a descendant of , identifying the names and signature types under which the component - type should be registered. Signatures are delegate types that return void and specify that parameter - types for component instantiation. Each component may also specify an "arguments object" that should - be provided at instantiation time. - - - - - Provides information on an instantiable component, aka, loadable class. - - - - - Used for dictionary lookup based on signature and name. - - - - - Count of component construction arguments, NOT including the arguments object (if there is one). - This matches the number of arguments for the signature type delegate(s). - - - - - The type that contains the construction method, whether static Instance property, - static Create method, or constructor. - - - - - Summary of the component. - - - - - UserName may be null or empty, indicating that it should be hidden in UI. - - - - - Whether this is a "hidden" component, that generally shouldn't be displayed - to users. - - - - - All load names. The first is the default. - - - - - The static property that returns an instance of this loadable class. - This creation method does not support an arguments class. - Only one of Ctor, Create and InstanceGetter can be non-null. - - - - - The constructor to create an instance of this loadable class. - This creation method supports an arguments class. - Only one of Ctor, Create and InstanceGetter can be non-null. - - - - - The static method that creates an instance of this loadable class. - This creation method supports an arguments class. - Only one of Ctor, Create and InstanceGetter can be non-null. - - - - - A name of an embedded resource containing documentation for this - loadable class. This is non-null only in the event that we have - verified the assembly of actually contains - this resource. - - - - - The type that contains the arguments to the component. - - - - - Create an instance, given the arguments object and arguments to the signature delegate. - The args should be non-null iff ArgType is non-null. The length of the extra array should - match the number of parameters for the signature delegate. When that number is zero, extra - may be null. - - - - - Create an instance, given the arguments object and arguments to the signature delegate. - The args should be non-null iff ArgType is non-null. The length of the extra array should - match the number of parameters for the signature delegate. When that number is zero, extra - may be null. - - - - - Create an instance with default arguments. - - - - - If is not null, returns a new default instance of . - Otherwise, returns null. - - - - - A description of a single entry point. - - - - - A description of a single component. - The 'component' is a non-standalone building block that is used to parametrize entry points or other ML.NET components. - For example, 'Loss function', or 'similarity calculator' could be components. - - - - - Registers all the components in the specified assembly by looking for loadable classes - and adding them to the catalog. - - - The assembly to register. - - - true to throw an exception if there are errors with registering the components; - false to skip any errors. - - - - - Return an array containing information for all instantiable components. - If provided, the given set of assemblies is loaded first. - - - - - Return an array containing information for instantiable components with the given - signature and base type. If provided, the given set of assemblies is loaded first. - - - - - Return an array containing all the known signature types. If provided, the given set of assemblies - is loaded first. - - - - - Returns a string name for a given signature type. - - - - - Get all registered entry points. - - - - - Akin to , except if the regular (case sensitive) comparison fails, it will - attempt to back off to a case-insensitive comparison. - - - - - Returns all valid component kinds. - - - - - Returns all components of the specified kind. - - - - - Returns all components that implement the specified interface. - - - - - The valid names for the components and entry points must consist of letters, digits, underscores and dots, - and begin with a letter or digit. - - - - - Create an instance of the indicated component with the given extra parameters. - - - - - Try to create an instance of the indicated component and settings with the given extra parameters. - If there is no such component in the catalog, returns false. Any other error results in an exception. - - - - - Parses arguments using CmdParser. If there's a problem, it throws an InvalidOperationException, - with a message giving usage. - - The host environment - The argument object - The settings string - The name is used for error reporting only - - - - Gets a value indicating whether can contain extensions. - - - All ML.NET product assemblies won't contain extensions. - - - - - This is a token interface that all component factories must implement. - - - - - An interface for creating a component with no extra parameters (other than an ). - - - - - An interface for creating a component when we take one extra parameter (and an ). - - - - - An interface for creating a component when we take two extra parameters (and an ). - - - - - An interface for creating a component when we take three extra parameters (and an ). - - - - - A utility class for creating instances. - - - - - Creates a component factory with no extra parameters (other than an ) - that simply wraps a delegate which creates the component. - - - - - Creates a component factory when we take one extra parameter (and an - ) that simply wraps a delegate which creates the component. - - - - - Creates a component factory when we take two extra parameters (and an - ) that simply wraps a delegate which creates the component. - - - - - Creates a component factory when we take three extra parameters (and an - ) that simply wraps a delegate which creates the component. - - - - - A class for creating a component with no extra parameters (other than an ) - that simply wraps a delegate which creates the component. - - - - - A class for creating a component when we take one extra parameter - (and an ) that simply wraps a delegate which - creates the component. - - - - - A class for creating a component when we take one extra parameter - (and an ) that simply wraps a delegate which - creates the component. - - - - - A class for creating a component when we take three extra parameters - (and an ) that simply wraps a delegate which - creates the component. - - - - - A channel provider can create new channels and generic information pipes. - - - - - Start a standard message channel. - - - - - Start a generic information pipe. - - - - - Utility class for IHostEnvironment - - - - - Return a file handle for an input "file". - - - - - Create an output "file" and return a handle to it. - - - - - The host environment interface creates hosts for components. Note that the methods of - this interface should be called from the main thread for the environment. To get an environment - to service another thread, call Fork and pass the return result to that thread. - - - - - Create a host with the given registration name. - - - - - The catalog of loadable components () that are available in this host. - - - - - Signal to stop execution in all the hosts. - - - - - Flag which indicates host execution has been stopped. - - - - - The seed property that, if assigned, makes components requiring randomness behave deterministically. - - - - - The location for the temp files created by ML.NET - - - - - Allow falling back to run on CPU if couldn't run on GPU. - - - - - GPU device ID to run execution on, to run on CPU. - - - - - A host is coupled to a component and provides random number generation and concurrency guidance. - Note that the random number generation, like the host environment methods, should be accessed only - from the main thread for the component. - - - - - The random number generator issued to this component. Note that random number - generators are NOT thread safe. - - - - - A generic information pipe. Note that pipes are disposable. Generally, Done should - be called before disposing to signal a normal shut-down of the pipe, as opposed - to an aborted completion. - - - - - The caller relinquishes ownership of the object. - - - - - The kinds of standard channel messages. - Note: These values should never be changed. We can add new kinds, but don't change these values. - Other code bases, including native code for other projects depends on these values. - - - - - A flag that can be attached to a message or exception to indicate that - it has a certain class of sensitive data. By default, messages should be - specified as being of unknown sensitivity, which is to say, every - sensitivity flag is turned on, corresponding to . - Messages that are totally safe should be marked as . - However, if, say, one prints out data from a file (for example, this might - be done when expressing parse errors), it should be flagged in that case - with . - - - - - For non-sensitive data. - - - - - For messages that may contain user-data from data files. - - - - - For messages that contain information like column names from datasets. - Note that, despite being part of the schema, annotations should be treated - as user data, since it is often derived from user data. Note also that - types, despite being part of the schema, are not considered "sensitive" - as such, in the same way that column names might be. - - - - - The default value, unknown, is treated as if everything is sensitive. - - - - - An alias for , so it is functionally the same, except - semantically it communicates the idea that we want all bits set. - - - - - A channel message. - - - - - Line endings may not be normalized. - - - - - A standard communication channel. - - - - - General utility extension methods for objects in the "host" universe, i.e., - , , and - that do not belong in more specific areas, for example, or - component creation. - - - - - Convenience variant of - setting . - - - - - Convenience variant of - setting . - - - - - Convenience variant of - setting . - - - - - Convenience variant of - setting . - - - - - Convenience variant of - setting . - - - - - Convenience variant of - setting . - - - - - Convenience variant of - setting . - - - - - Convenience variant of - setting . - - - - - This is a factory interface for . - Both and implement this interface, - to allow for nested progress reporters. - - REVIEW: make implement this, instead of the environment? - - - - - Create a progress channel for a computation named . - - - - - A common interface for progress reporting. - It is expected that the progress channel interface is used from only one thread. - - Supported workflow: - 1) Create the channel via . - 2) Call as many times as desired (including 0). - Each call to supersedes the previous one. - 3) Report checkpoints (0 or more) by calling . - 4) Repeat steps 2-3 as often as necessary. - 5) Dispose the channel. - - - - - Set up the reporting structure: - - Set the 'header' of the progress reports, defining which progress units and metrics are going to be reported. - - Provide a thread-safe delegate to be invoked whenever anyone needs to know the progress. - - It is acceptable to call multiple times (or none), regardless of whether the calculation is running - or not. Because of synchronization, the computation should not deny calls to the 'old' - delegates even after a new one is provided. - - The header object. - The delegate to provide actual progress. The parameter of - the delegate will correspond to the provided . - - - - Submit a 'checkpoint' entry. These entries are guaranteed to be delivered to the progress listener, - if it is interested. Typically, this would contain some intermediate metrics, that are only calculated - at certain moments ('checkpoints') of the computation. - - For example, SDCA may report a checkpoint every time it computes the loss, or LBFGS may report a checkpoint - every iteration. - - The only parameter, , is interpreted in the following fashion: - * First MetricNames.Length items, if present, are metrics. - * Subsequent ProgressNames.Length items, if present, are progress units. - * Subsequent ProgressNames.Length items, if present, are progress limits. - * If any more values remain, an exception is thrown. - - The metrics, progress units and progress limits. - - - - This is the 'header' of the progress report. - - - - - These are the names of the progress 'units', from the least granular to the most granular. - For example, neural network might have {'epoch', 'example'} and FastTree might have {'tree', 'split', 'feature'}. - Will never be null, but can be empty. - - - - - These are the names of the reported metrics. For example, this could be the 'loss', 'weight updates/sec' etc. - Will never be null, but can be empty. - - - - - Initialize the header. This will take ownership of the arrays. - Both arrays can be null, even simultaneously. This 'empty' header indicated that the calculation doesn't report - any units of progress, but the tracker can still track start, stop and elapsed time. Of course, if there's any - progress or metrics to report, it is always better to report them. - - The metrics that the calculation reports. These are completely independent, and there - is no contract on whether the metric values should increase or not. As naming convention, - can have multiple words with spaces, and should be title-cased. - The names of the progress units, listed from least granular to most granular. - The idea is that the progress should be lexicographically increasing (like [0,0], [0,10], [1,0], [1,15], [2,5] etc.). - As naming convention, should be lower-cased and typically plural - (for example, iterations, clusters, examples). - - - - A constructor for no metrics, just progress units. As naming convention, should be lower-cased - and typically plural (for example, iterations, clusters, examples). - - - - - A metric/progress holder item. - - - - - Set the progress value for the index to , - and the limit value for the progress becomes 'unknown'. - - - - - Set the progress value for the index to , - and the limit value to . If is a NAN, it is set to null instead. - - - - - Sets the metric with index to . - - - - - The progress reporting classes used by descendants. - - - - - The progress channel for . - This is coupled with a that aggregates all events and returns them on demand. - - - - - The pair of (header, fill action) is updated atomically. - - - - - Normally this should be readonly field, but we want to null it in Dispose to prevent memory leaking. - - - - - Initialize a for the process identified by . - - The exception context. - The tracker to couple with. - The computation name. - - - - Pull the current progress by invoking the fill delegate, if any. - - - - - This is a 'derived' or 'subordinate' progress channel. - - The subordinates' Start/Stop events and checkpoints will not be propagated. - When the status is requested, all of the subordinate channels are also invoked, - and the resulting metrics are then returned in the order of their 'subordinate level'. - If there's more than one channel with the same level, the order is not defined. - - - - - The pair of (header, fill action) is updated atomically. - - - - - Pull the current progress by invoking the fill delegate, if any. - - - - - This class listens to the progress reporting channels, caches all checkpoints and - start/stop events and, on demand, requests current progress on all active calculations. - - The public methods of this class should only be called from one thread. - - - - - Log of pending events. - - - - - For each calculation, its properties. - This list is protected by , and it's updated every time a new calculation starts. - The entries are cleaned up when the start and stop events are reported (that is, after the first - pull request after the calculation's 'Stop' event). - - - - - This is a 'process index' that gets incremented whenever a new calculation is started. - - - - - The set of used process names. - - - - - This class is an 'event log' for one calculation. - - Every time a calculation is 'started', it gets its own log, so if there are multiple 'start' calls, - there will be multiple logs. - - - - - Auto-assigned index to serve as a unique ID. - - - - - Name is auto-modified from the calculation name provided by the pipe. - - - - - A log of pending checkpoint entries. - - - - - Whether the calculation has finished. - - - - - Get progress reports from all current calculations. - For every calculation the following events will be returned: - * A start event. - * Each checkpoint. - * If the calculation is finished, the stop event. - - Each of the above events will be returned exactly once. - If, for one calculation, there's no events in the above categories, the tracker will - request ('pull') the current progress and return this as an event. - - - - - An array-backed implementation of . - - - - - The header (names of metrics and units). - The contents of the header should be treated as read-only. The calculation itself doesn't even - need to access the header, since it will know it anyway. - - - - - Whether the progress entry is a 'checkpoint' (that is, it's being pushed by the component). - - - - - The actual progress (amount of completed units), in the units that are contained in the header. - Parallel to the header's . Null value indicates 'not applicable now'. - - The computation should not modify these arrays directly, and instead rely on , - and . - - - - - The lim values of each progress unit. - Parallel to the header's . Null value indicates unbounded or unknown. - - - - - The reported metrics. Parallel to the header's . - Null value indicates unknown. - - - - - Set the progress value for the index to , - and the limit value for the progress becomes 'unknown'. - - - - - Set the progress value for the index to , - and the limit value to . - - - - - Sets the metric with index to . - - - - - Creates the progress entry corresponding to a given header. - - - - - An event about calculation progress. It could be either start/stop of the calculation, or a progress entry. - - - - - Instances of this class are used to set up a bundle of named delegates. These - delegates are registered through and its overloads. - Once all registrations are done, is called and a message - of type is sent through the input channel - provider. The intended use case is that any information surfaced through these - delegates will be published in some fashion, with the target scenario being - that the library will publish some sort of restful API. - - - - - Returns either this object, or null if there are no listeners on this server - channel. This can be used in conjunction with the ?. operator to have more - performant though more robust calls to and - . - - - - - Starts a new server channel. - - The channel provider, on which to send - the notification that a server is being constructed - A semi-unique identifier for this - "bundle" that is being constructed - The constructed server channel, or null if there - was no listeners for server channels registered on - - - - Finalizes all registrations of delegates, and pipes the bundle of objects - in a up through the pipe to be consumed by any - listeners. - - - - - Entry point factory for creating instances. - - - - - Classes that want to publish the bundles from server channels in some fashion should implement - this interface. The intended simple use case is that this will be some form of in-process web - server, and then when disposed, they should stop themselves. - - Note that the primary communication with the server from the client code's perspective is not - through method calls on this interface, but rather communication through an - that the server will listen to throughout its - lifetime. - - - - - This should return the base address where the server is. If this server is not actually - serving content at any URL, this property should be null. - - - - - Creates what might be considered a good "default" server factory, if possible, - or null if no good default was possible. A null value could be returned, - for example, if a user opted to remove all implementations of and - the associated for security reasons. - - - - - When a is created, the creation method will send an implementation - is a notification sent through an , to indicate that - a may be pending soon. Listeners that want to receive the bundle to - expose it, for example, a web service, should register this interest by passing in an action to be called. - If no listener registers interest, the server channel that sent the notification will act - differently by, say, acting as a no-op w.r.t. client calls to it. - - - - - Any publisher of the named delegates will call this method, upon receiving an instance - of this object through the pipe. This method serves two purposes: firstly it detects - whether anyone is even interested in publishing anything at all, so that we can just - ignore any input delegates in the case where no one is listening (which, we must expect, - is the majority of scenarios). The second is that it provides an action to call, once - all publishing is complete, and has been called by the client code. - - The callback to perform when all named delegates have been registered, - and is called. - - - - The final bundle of published named delegates that a listener can serve. - - - - - This contains a name to delegate mappings. The delegates contained herein are gauranteed to be - some variety of , , - , etc. - - - - - This should be a more-or-less unique identifier for the type of API this bundle is producing. - Its intended use is that it will form part of the URL for the RESTful API, so to the extent that - it contains multiple tokens they must be slash delimited. - - - - - Convenience method for that looks more idiomatic to typical - channel creation methods on . - - The channel provider. - This is an identifier of the "type" of bundle that is being published, - and should form a path with forward-slash '/' delimiters. - The newly created server channel, or null if there was no listener for - server channels on . - - - - The console environment. As its name suggests, should be limited to those applications that deliberately want - console functionality. - - - - - Query all progress and: - * If there's any checkpoint/start/stop event, print all of them. - * If there's none, print a dot. - * If there's dots, print the current status for all running calculations. - - - - - If we printed any dots so far, finish the line. This call is expected to be protected by _lock. - - - - - Print a progress dot. Returns whether it is 'time' to print more info. This call is expected - to be protected by _lock. - - - - - Create an ML.NET for local execution, with console feedback. - - Random seed. Set to null for a non-deterministic environment. - Set to true for fully verbose logging. - Allowed message sensitivity. - Text writer to print normal messages to. - Text writer to print error messages to. - Optional TextWriter to write messages if the host is a test environment. - - - - Pull running calculations for their progress and output all messages to the console. - If no messages are available, print a dot. - If a specified number of dots are printed, print an ad-hoc status of all running calculations. - - - - - Redirects the channel output through the specified writers. - - This method is not thread-safe. - - - - Base class for channel providers. This is a common base class for. - The ParentFullName, ShortName, and FullName may be null or empty. - - - - - Data keys that are attached to the exception thrown via the exception context. - - - - - The channel depth, NOT host env depth. - - - - - ExceptionContext description. - - - - - Override this method to change the way full names are constructed. - - - - - Message source (a channel) that generated the message being dispatched. - - - - - A basic host environment suited for many environments. - This also supports modifying the concurrency factor, provides the ability to subscribe to pipes via the - AddListener/RemoveListener methods, and exposes the to - query progress. - - - - - Base class for hosts. Classes derived from may choose - to provide their own host class that derives from this class. - This encapsulates the random number generator and name information. - - - - - This method registers and returns the host for the calling component. The generated host is also - added to and encapsulated by . It becomes - necessary to remove these hosts when they are reclaimed by the Garbage Collector. - - - - - Base class for implementing . Deriving classes can optionally override - the Done() and the DisposeCore() methods. If no overrides are needed, the sealed class - may be used. - - - - - A base class for implementations. A message is dispatched as a - . Deriving classes can optionally override the Done() and the - DisposeCore() methods. - - - - - An optional implementation of . - - - - - Base class for . The master host environment has a - map from to . - - - - - Strongly typed dispatcher class. - - - - - This field is actually used as a , which holds the listener actions - for all listeners that are currently subscribed. The action itself is an immutable object, so every time - any listener subscribes or unsubscribes, the field is replaced with a modified version of the delegate. - - The field can be null, if no listener is currently subscribed. - - - - - The dispatch delegate invokes the current dispatching action (wchch calls all current listeners). - - - - - The main constructor. - - - - - This constructor is for forking. - - - - - This method registers and returns the host for the calling component. The generated host is also - added to and encapsulated by . It becomes - necessary to remove these hosts when they are reclaimed by the Garbage Collector. - - - - - This method is called when a channel is created and when a listener is registered. - This method is not invoked on every message. - - - - - Line endings in message may not be normalized, this method provides normalized printing. - - The text writer to write to. - The message, which if it contains newlines will be normalized. - If false, then two newlines will be printed at the end, - making messages be bracketed by blank lines. If true then only the single newline at the - end of a message is printed. - A prefix that will be written to every line, except the first line. - If contains no newlines then this prefix will not be - written at all. This prefix is not written to the newline written if - is false. - - - - Interface for "processing" exceptions before they are thrown. This can - be used to add context to the exception, wrap the exception in another one, - totally replace the exception, etc. It is not legal to return null from - Process (unless null was passed in, which really shouldn't happen). - - - - - A string describing the context itself. - - - - - Does standard processing of an exception (typically called after construction - but before it is thrown). - - - - - Mark the exception by setting in the exception - to 1. - - - - - Indicates whether the exception was "marked" the Contracts code. - - - - - Exceptions whose message communicates potentially sensitive information should be - marked using this method, before they are thrown. Note that if the exception already - had this flag set, the message will be flagged with the bitwise or of the existing - flag, alongside the passed in sensitivity. - - - - - This is a convenience method to get the sensitivity of an exception, - as encoded with . If there is no key, then - the message is assumed to be of unknown sensitivity, i.e., it is assumed - that it might contain literally anything. - - The exception to query - The value encoded at the , if it is - a value. If neither of these conditions - hold then is returned. - - - - This is an internal convenience implementation of an exception context to make marking - exceptions with a specific sensitivity flag a bit less onerous. The alternative to a scheme - like this, where messages are marked through use of , - would be that every check and exception method in this file would need some "peer" where - sensitivity was set. Since there are so many, we have this method instead. I'm not sure if - there will be performance implications. There shouldn't be, since checks rarely happen in - tight loops. - - - - - We will run this instances first. - This can be null. - - - - - Exceptions will be marked with this. If happens to mark it with a sensitivity - flag, then the result will not only be this value, but the bitwise or of this with the existing - value. - - - - - A convenience context for marking exceptions from checks and excepts with . - - - - - A convenience context for marking exceptions from checks and excepts with . - - - - - A convenience context for marking exceptions from checks and excepts with . - - - - - A convenience context for marking exceptions from checks and excepts with . - - - - - A convenience context for marking exceptions from checks and excepts with . - - - - - A convenience context for marking exceptions from checks and excepts with . - - - - - Sets the assert handler to the given function, returning the previous handler. - - - - - Default exception type (currently InvalidOperationException) - - - - - For signaling bad user input. - - - - - For signaling bad function parameters. - - - - - For signaling null function parameters. - - - - - For signaling null or empty function parameters (strings, arrays, collections, etc). - - - - - For signaling null, empty or white-space function parameters (strings, arrays, collections, etc). - - - - - For signaling errors in decoding information, whether while reading from a file, - parsing user input, etc. - - - - - - For signaling IO failures. - - - - - For signaling functionality that is not YET implemented. - - - - - For signaling functionality that is not implemented by design. - - - - - For signaling schema validation issues. - - - - - CheckUserArg / ExceptUserArg should be used when the validation of user-provided arguments failed. - Typically, this is shortly after the arguments are parsed using CmdParser. - - - - - Check state of the host and throw exception if host marked to stop all execution. - - - - - This documents that the parameter can legally be null. - - - - - This documents that the parameter can legally be null. - - - - - This documents that the parameter can legally be null. - - - - - The base attribute type for all attributes used for extensibility purposes. - - - - - Common signature type with no extra parameters. - - - - - Assembly attribute used to specify that a class is loadable by a machine learning - host environment, such as TLC - - The class type that is loadable - The argument type that the constructor takes (may be null) - The signature of the constructor of this class (in addition to the arguments parameter) - The name to use when presenting a list to users - The names that can be used to load the class, for example, from a command line - - - - Assembly attribute used to specify that a class is loadable by a machine learning - host environment, such as TLC - - The class type that is loadable - The class type that contains the construction method - The argument type that the constructor takes (may be null) - The signature of the constructor of this class (in addition to the arguments parameter) - The name to use when presenting a list to users - The names that can be used to load the class, for example, from a command line - - - - Assembly attribute used to specify that a class is loadable by a machine learning - host environment, such as TLC - - The description summary of the class type - The class type that is loadable - The argument type that the constructor takes (may be null) - The signature of the constructor of this class (in addition to the arguments parameter) - The name to use when presenting a list to users - The names that can be used to load the class, for example, from a command line - - - - Assembly attribute used to specify that a class is loadable by a machine learning - host environment, such as TLC - - The description summary of the class type - The class type that is loadable - The class type that contains the construction method - The argument type that the constructor takes (may be null) - The signature of the constructor of this class (in addition to the arguments parameter) - The name to use when presenting a list to users - The names that can be used to load the class, for example, from a command line - - - - The type that is created/loaded. - - - - - The type that contains the construction method, whether static Instance property, - static Create method, or constructor. Of course, a constructor is only permissible if - this type derives from InstanceType. This defaults to the same as InstanceType. - - - - - The command line arguments object type. This should be null if there isn't one. - - - - - This indicates the extra parameter types. It must be a delegate type. The return type should be void. - The parameter types of the SigType delegate should NOT include the ArgType. - - - - - Note that CtorTypes includes the ArgType (if there is one), and the parameter types of the SigType. - - - - - The description summary of the class type. - - - - - UserName may be null or empty indicating that it should be hidden in UI. - - - - - This should indicate a path within the doc/public directory next to the TLC - solution, where the documentation lies. This value will be used as part of a URL, so, - the path separator should be phrased as '/' forward slashes rather than backslashes. - - - - Add slot names annotation. - - The to which to add the slot names. - The size of the slot names vector. - The getter delegate for the slot names. - - - - Add key values annotation. - - The value type of key values. - The to which to add the key values. - The size of key values vector. - The value type of key values. Its raw type must match . - The getter delegate for the key values. - - - - Utilities for implementing and using the annotation API of . - - - - - This class lists the canonical annotation kinds - - - - - Annotation kind for names associated with slots/positions in a vector-valued column. - The associated annotation type is typically fixed-sized vector of Text. - - - - - Annotation kind for values associated with the key indices when the column type's item type - is a key type. The associated annotation type is typically fixed-sized vector of a primitive - type. The primitive type is frequently Text, but can be anything. - - - - - Annotation kind for sets of score columns. The value is typically a with raw type U4. - - - - - Annotation kind that indicates the prediction kind as a string. For example, "BinaryClassification". - The value is typically a ReadOnlyMemory<char>. - - - - - Annotation kind that indicates the value kind of the score column as a string. For example, "Score", "PredictedLabel", "Probability". The value is typically a ReadOnlyMemory. - - - - - Annotation kind that indicates if a column is normalized. The value is typically a Bool. - - - - - Annotation kind that indicates if a column is visible to the users. The value is typically a Bool. - Not to be confused with IsHidden() that determines if a column is masked. - - - - - Annotation kind for the label values used in training to be used for the predicted label. - The value is typically a fixed-sized vector of Text. - - - - - Annotation kind that indicates the ranges within a column that are categorical features. - The value is a vector type of ints with dimension of two. The first dimension - represents the number of categorical features and second dimension represents the range - and is of size two. The range has start and end index(both inclusive) of categorical - slots within that column. - - - - - This class holds all pre-defined string values that can be found in canonical annotations - - - - - Helper delegate for marshaling from generic land to specific types. Used by the Marshal method below. - - - - - Returns a standard exception for responding to an invalid call to GetAnnotation. - - - - - Returns a standard exception for responding to an invalid call to GetAnnotation. - - - - - Helper to marshal a call to GetAnnotation{TValue} to a specific type. - - - - - Returns a vector type with item type text and the given size. The size must be positive. - This is a standard type for annotation consisting of multiple text values, eg SlotNames. - - - - - Returns a vector type with item type int and the given size. - The range count must be a positive integer. - This is a standard type for annotation consisting of multiple int values that represent - categorical slot ranges with in a column. - - - - - The type of the ScoreColumnSetId annotation. - - - - - Returns a key-value pair useful when implementing GetAnnotationTypes(col). - - - - - Returns a key-value pair useful when implementing GetAnnotationTypes(col). This assumes - that the values of the key type are Text. - - - - - Given a type and annotation kind string, returns a key-value pair. This is useful when - implementing GetAnnotationTypes(col). - - - - - Prepends a params array to an enumerable. Useful when implementing GetAnnotationTypes. - - - - - Returns the max value for the specified annotation kind. - The annotation type should be a with raw type U4. - colMax will be set to the first column that has the max value for the specified annotation. - If no column has the specified annotation, colMax is set to -1 and the method returns zero. - The filter function is called for each column, passing in the schema and the column index, and returns - true if the column should be considered, false if the column should be skipped. - - - - - Returns the set of column ids which match the value of specified annotation kind. - The annotation type should be a with raw type U4. - - - - - Returns the set of column ids which match the value of specified annotation kind. - The annotation type should be of type text. - - - - - Returns true if the specified column: - * has a SlotNames annotation - * annotation type is VBuffer<ReadOnlyMemory<char>> of length . - - - - - Returns whether a column has the annotation indicated by - the schema shape. - - The schema shape column to query - True if and only if the column has the annotation - of a scalar type, which we assume, if set, should be true. - - - - Returns whether a column has the annotation indicated by - the schema shape. - - The schema shape column to query - True if and only if the column is a definite sized vector type, has the - annotation of definite sized vectors of text. - - - - Tries to get the annotation kind of the specified type for a column. - - The raw type of the annotation, should match the PrimitiveType type - The schema - The type of the annotation - The annotation kind - The column - The value to return, if successful - True if the annotation of the right type exists, false otherwise - - - - The categoricalFeatures is a vector of the indices of categorical features slots. - This vector should always have an even number of elements, and the elements should be parsed in groups of two consecutive numbers. - So if its value is the range of numbers: 0,2,3,4,8,9 - look at it as [0,2],[3,4],[8,9]. - The way to interpret that is: feature with indices 0, 1, and 2 are one categorical - Features with indices 3 and 4 are another categorical. Features 5 and 6 don't appear there, so they are not categoricals. - - - - - Produces sequence of columns that are generated by trainer estimators. - - whether we should also append 'IsNormalized' (typically for probability column) - - - - Produces annotations for the score column generated by trainer estimators for multiclass classification. - If input LabelColumn is not available it produces slotnames annotation by default. - - Label column. - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Returns whether the given column is active in this row. - - - - - Presents a as a an . - - The annotations to wrap. - A row that wraps an input annotations. - - - - Extension methods related to the ColumnType class. - - - - - Whether this type is a standard scalar type completely determined by its - (not a or , etc). - - - - - Zero return means it's not a key type. - - - - - Sometimes it is necessary to cast the Count to an int. This performs overflow check. - Zero return means it's not a key type. - - - - - For non-vector types, this returns the column type itself (i.e., return ). - For vector types, this returns the type of the items stored as values in vector. - - - - - Zero return means either it's not a vector or the size is unknown. - - - - - For non-vectors, this returns one. For unknown size vectors, it returns zero. - For known sized vectors, it returns size. - - - - - Whether this is a vector type with known size. Returns false for non-vector types. - Equivalent to > 0. - - - - - Gets the equivalent for the 's RawType. - This can return default() if the RawType doesn't have a corresponding - . - - - - - Equivalent to calling Equals(ColumnType) for non-vector types. For vector type, - returns true if current and other vector types have the same size and item type. - - - - - Specifies a simple data type. - - - or [text](xref:Microsoft.ML.Data.TextDataViewType) | Empty or `null` string (both result in empty `System.ReadOnlyMemory` | | - | [Key](xref:Microsoft.ML.Data.KeyDataViewType) type (supported by the unsigned integer types in `DataKind`) | Not defined | Always `false` | - | All other types | Default value of the corresponding system type as defined by .NET standard. In C#, default value expression `default(T)` provides that value. | Equality test with the default value | - - The table below shows the missing value definition for each of the data types. - - | Type | Missing Value | IsMissing Indicator | - | -- | -- | -- | - | or [text](xref:Microsoft.ML.Data.TextDataViewType) | Not defined | Always `false` | - | [Key](xref:Microsoft.ML.Data.KeyDataViewType) type (supported by the unsigned integer types in `DataKind`) | `0` | Equality test with `0` | - | | | | - | | | | - | All other types | Not defined | Always `false` | - - ]]> - - - - - 1-byte integer, type of . - - - 1-byte unsigned integer, type of . - - - 2-byte integer, type of . - - - 2-byte unsigned integer, type of . - - - 4-byte integer, type of . - - - 4-byte unsigned integer, type of . - - - 8-byte integer, type of . - - - 8-byte unsigned integer, type of . - - - 4-byte floating-point number, type of . - - - 8-byte floating-point number, type of . - - - - string, type of , where T is . - Also compatible with . - - - - boolean variable type, type of . - - - type of . - - - type of . - - - type of . - - - - Data type specifier used in command line. is the underlying version of - used for command line and entry point BC. - - - - - Extension methods related to the DataKind enum. - - - - - Maps a DataKind to a value suitable for indexing into an array of size KindCount. - - - - - Maps from an index into an array of size KindCount to the corresponding DataKind - - - - - This function converts to . - Because is a subset of , the conversion is straightforward. - - - - - This function converts to . - Because is a subset of , we should check if - can be found in . - - - - - For integer DataKinds, this returns the maximum legal value. For un-supported kinds, - it returns zero. - - - - - For integer Types, this returns the maximum legal value. For un-supported Types, - it returns zero. - - - - - For integer DataKinds, this returns the minimum legal value. For un-supported kinds, - it returns one. - - - - - Maps a DataKind to the associated .Net representation type. - - - - - Try to map a System.Type to a corresponding DataKind value. - - - - - Get the canonical string for a DataKind. Note that using DataKind.ToString() is not stable - and is also slow, so use this instead. - - - - - A file handle. - - - - - Returns whether CreateWriteStream is expected to succeed. Typically, once - CreateWriteStream has been called once, this will forever more return false. - - - - - Returns whether OpenReadStream is expected to succeed. - - - - - Create a writable stream for this file handle. - - - - - Open a readable stream for this file handle. - - - - - A simple disk-based file handle. - - - - - This interface maps an input to an output . Typically, the output contains - both the input columns and new columns added by the implementing class, although some implementations may - return a subset of the input columns. - This interface is similar to , except it does not have any input role mappings, - so to rebind, the same input column names must be used. - Implementations of this interface are typically created over defined input . - - - - - Mappers are defined as accepting inputs with this very specific schema. - - - - - Gets an instance of which describes the columns' names and types in the output generated by this mapper. - - - - - Given a set of columns, return the input columns that are needed to generate those output columns. - - - - - Get an with the indicated active columns, based on the input . - Getting values on inactive columns of the returned row will throw. - - The of should be the same object as - . Implementors of this method should throw if that is not the case. Conversely, - the returned value must have the same schema as . - - This method creates a live connection between the input and the output . In particular, when the getters of the output are invoked, they invoke the - getters of the input row and base the output values on the current values of the input . - The output values are re-computed when requested through the getters. Also, the returned - will dispose when it is disposed. - - - - - A mapper that can be bound to a (which encapsulates a and has mappings from column kinds - to columns of that schema). Binding an to a produces an - , which is an interface that has methods to return the names and indices of the input columns - needed by the mapper to compute its output. The is an extention to this interface, that - can also produce an output given an input . The produced generally contains only the output columns of the mapper, and not - the input columns (but there is nothing preventing an from mapping input columns directly to outputs). - This interface is implemented by wrappers of IValueMapper based predictors, which are predictors that take a single - features column. New predictors can implement directly. Implementing - includes implementing a corresponding (or ) and a corresponding ISchema - for the output schema of the . In case the interface is implemented, - the SimpleRow class can be used in the method. - - - - - This interface is used to map a schema from input columns to output columns. The should keep track - of the input columns that are needed for the mapping. - - - - - The that was passed to the in the binding process. - - - - - Gets schema of this mapper's output. - - - - - A property to get back the that produced this . - - - - - This method returns the binding information: which input columns are used and in what roles. - - - - - This interface extends . - - - - - Input schema accepted. - - - - - Given a set of columns, from the newly generated ones, return the input columns that are needed to generate those output columns. - - - - - Get an with the indicated active columns, based on the input . - Getting values on inactive columns of the returned row will throw. - - The of should be the same object as - . Implementors of this method should throw if that is not the case. Conversely, - the returned value must have the same schema as . - - This method creates a live connection between the input and the output . In particular, when the getters of the output are invoked, they invoke the - getters of the input row and base the output values on the current values of the input . - The output values are re-computed when requested through the getters. Also, the returned - will dispose when it is disposed. - - - - - Delegate type to map/convert a value. - - - - - Delegate type to map/convert among three values, for example, one input with two - outputs, or two inputs with one output. - - - - - Interface for mapping a single input value (of an indicated ColumnType) to - an output value (of an indicated ColumnType). This interface is commonly implemented - by predictors. Note that the input and output ColumnTypes determine the proper - type arguments for GetMapper, but typically contain additional information like - vector lengths. - - - - - Get a delegate used for mapping from input to output values. Note that the delegate - should only be used on a single thread - it should NOT be assumed to be safe for concurrency. - - - - - Interface for mapping a single input value (of an indicated ColumnType) to an output value - plus distribution value (of indicated ColumnTypes). This interface is commonly implemented - by predictors. Note that the input, output, and distribution ColumnTypes determine the proper - type arguments for GetMapper, but typically contain additional information like - vector lengths. - - - - - Get a delegate used for mapping from input to output values. Note that the delegate - should only be used on a single thread - it should NOT be assumed to be safe for concurrency. - - - - - Extension methods related to the class. - - - - - Sometimes it is necessary to cast the Count to an int. This performs overflow check. - - - - - Base class for a cursor has an input cursor, but still needs to do work on . - - - - Gets the input cursor. - - - - Returns the root cursor of the input. It should be used to perform - operations, but with the distinction, as compared to , that this is not - a simple passthrough, but rather very implementation specific. For example, a common usage of this class is - on filter cursor implementations, where how that input cursor is consumed is very implementation specific. - That is why this is , not . - - - - - Base class for creating a cursor of rows that filters out some input rows. - - - - - Return whether the current input row should be returned by this cursor. - - - - - A base class for a that has an input cursor, but still needs to do work on - . Note that the default - assumes that each input column is exposed as an - output column with the same column index. - - - - Gets row's schema. - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Compare equality with the given system string value. - - - - - Splits on the left-most occurrence of separator and produces the left - and right of values. If does not contain the separator character, - this returns false and sets to this instance and - to the default of value. - - - - - Splits on the left-most occurrence of an element of separators character array and - produces the left and right of values. If does not contain any of the - characters in separators, this return false and initializes to this instance - and to the default of value. - - - - - Returns a of with leading and trailing spaces trimmed. Note that this - will remove only spaces, not any form of whitespace. - - - - - Returns a of with leading and trailing whitespace trimmed. - - - - - Returns a of with trailing whitespace trimmed. - - - - - Encapsulates a plus column role mapping information. The purpose of role mappings is to - provide information on what the intended usage is for. That is: while a given data view may have a column named - "Features", by itself that is insufficient: the trainer must be fed a role mapping that says that the role - mapping for features is filled by that "Features" column. This allows things like columns not named "Features" - to actually fill that role (as opposed to insisting on a hard coding, or having every trainer have to be - individually configured). Also, by being a one-to-many mapping, it is a way for learners that can consume - multiple features columns to consume that information. - - This class has convenience fields for several common column roles (for example, , ), but can hold an arbitrary set of column infos. The convenience fields are non-null if and only - if there is a unique column with the corresponding role. When there are no such columns or more than one such - column, the field is null. The , , and - methods provide some cardinality information. Note that all columns assigned roles are guaranteed to be non-hidden - in this schema. - - - Note that instances of this class are, like instances of , immutable. - - It is often the case that one wishes to bundle the actual data with the role mappings, not just the schema. For - that case, please use the class. - - Note that there is no need for components consuming a or - to make use of every defined mapping. Consuming components are also expected to ignore any - they do not handle. They may very well however complain if a mapping they wanted to see is not present, or the column(s) - mapped from the role are not of the form they require. - - - - - - - Instances of this are the keys of a . This class also holds some important - commonly used pre-defined instances available (for example, , ) that should - be used when possible for consistency reasons. However, practitioners should not be afraid to declare custom - roles if approppriate for their task. - - - - - Role for features. Commonly used as the independent variables given to trainers, and scorers. - - - - - Role for labels. Commonly used as the dependent variables given to trainers, and evaluators. - - - - - Role for group ID. Commonly used in ranking applications, for defining query boundaries, or - sequence classification, for defining the boundaries of an utterance. - - - - - Role for sample weights. Commonly used to point to a number to make trainers give more weight - to a particular example. - - - - - Role for sample names. Useful for informational and tracking purposes when scoring, but typically - without affecting results. - - - - - Role for feature contributions. Useful for specific diagnostic functionality. - - - - - The string value for the role. Guaranteed to be non-empty. - - - - - Constructor for the column role. - - The value for the role. Must be non-empty. - - - - Convenience method for creating a mapping pair from a role to a column name - for giving to constructors of and . - - The column name to map to. Can be null, in which case when used - to construct a role mapping structure this pair will be ignored - A key-value pair with this instance as the key and as the value - - - - The source . - - - - - The column, when there is exactly one (null otherwise). - - - - - The column, when there is exactly one (null otherwise). - - - - - The column, when there is exactly one (null otherwise). - - - - - The column, when there is exactly one (null otherwise). - - - - - The column, when there is exactly one (null otherwise). - - - - - Returns whether there are any columns with the given column role. - - - - - Returns whether there is exactly one column of the given role. - - - - - Returns whether there are two or more columns of the given role. - - - - - If there are columns of the given role, this returns the infos as a readonly list. Otherwise, - it returns null. - - - - - An enumerable over all role-column associations within this object. - - - - - An enumerable over all role-column associations within this object. - - - - - An enumerable over all role-column associations for the given role. This is a helper function - for implementing the method. - - - - - Returns the corresponding to if there is - exactly one such mapping, and otherwise throws an exception. - - The role to look up - The column corresponding to that role, assuming there was only one column - mapped to that - - - - Constructor given a schema, and mapping pairs of roles to columns in the schema. - This skips null or empty column-names. It will also skip column-names that are not - found in the schema if is true. - - The schema over which roles are defined - Whether to consider the column names specified "optional" or not. If false then any non-empty - values for the column names that does not appear in will result in an exception being thrown, - but if true such values will be ignored - The column role to column name mappings - - - - Constructor given a schema, and mapping pairs of roles to columns in the schema. - This skips null or empty column names. It will also skip column-names that are not - found in the schema if is true. - - The schema over which roles are defined - The column role to column name mappings - Whether to consider the column names specified "optional" or not. If false then any non-empty - values for the column names that does not appear in will result in an exception being thrown, - but if true such values will be ignored - - - - Convenience constructor for role-mappings over the commonly used roles. Note that if any column name specified - is null or whitespace, it is ignored. - - The schema over which roles are defined - The column name that will be mapped to the role - The column name that will be mapped to the role - The column name that will be mapped to the role - The column name that will be mapped to the role - The column name that will be mapped to the role - Any additional desired custom column role mappings - Whether to consider the column names specified "optional" or not. If false then any non-empty - values for the column names that does not appear in will result in an exception being thrown, - but if true such values will be ignored - - - - Encapsulates an plus a corresponding . - Note that the schema of of is - guaranteed to equal the the of . - - - - - The data. - - - - - The role mapped schema. Note that 's is - guaranteed to be the same as 's . - - - - - Constructor given a data view, and mapping pairs of roles to columns in the data view's schema. - This skips null or empty column-names. It will also skip column-names that are not - found in the schema if is true. - - The data over which roles are defined - Whether to consider the column names specified "optional" or not. If false then any non-empty - values for the column names that does not appear in 's schema will result in an exception being thrown, - but if true such values will be ignored - The column role to column name mappings - - - - Constructor given a data view, and mapping pairs of roles to columns in the data view's schema. - This skips null or empty column-names. It will also skip column-names that are not - found in the schema if is true. - - The schema over which roles are defined - The column role to column name mappings - Whether to consider the column names specified "optional" or not. If false then any non-empty - values for the column names that does not appear in 's schema will result in an exception being thrown, - but if true such values will be ignored - - - - Convenience constructor for role-mappings over the commonly used roles. Note that if any column name specified - is null or whitespace, it is ignored. - - The data over which roles are defined - The column name that will be mapped to the role - The column name that will be mapped to the role - The column name that will be mapped to the role - The column name that will be mapped to the role - The column name that will be mapped to the role - Any additional desired custom column role mappings - Whether to consider the column names specified "optional" or not. If false then any non-empty - values for the column names that does not appear in 's schema will result in an exception being thrown, - but if true such values will be ignored - - - - Base class for creating a cursor with default tracking of . All calls to - will be seen by subclasses of this cursor. For a cursor that has an input cursor and does not need notification on - , use instead. - - - - - Zero-based position of the cursor. - - - - - Convenience property for checking whether the current state of the cursor is one where data can be fetched. - - - - - Creates an instance of the class - - Channel provider - - - - Core implementation of , called if no prior call to this method - has returned . - - - - - Legacy method to get the column index. - DO NOT USE: use instead. - - - - - Base class for creating a cursor on top of another cursor that does not add or remove rows. - It forces one-to-one correspondence between items in the input cursor and this cursor. - It delegates all functionality except Dispose() to the root cursor. - Dispose is virtual with the default implementation delegating to the input cursor. - - - - - The synchronized cursor base, as it merely passes through requests for all "positional" calls (including - , , , and so forth), offers an opportunity - for optimization for "wrapping" cursors (which are themselves often - implementors) to get this root cursor. But, this can only be done by exposing this root cursor, as we do here. - Internal code should be quite careful in using this as the potential for misuse is quite high. - - - - - Convenience property for checking whether the cursor is in a good state where values - can be retrieved, that is, whenever is non-negative. - - - - - Convenient base class for implementors that wrap a single - as their input. The , , and - are taken from this . - - - - - The wrapped input row. - - - - - This override of the dispose method by default only calls 's - method, but subclasses can enable additional functionality - via the functionality. - - - - - - Called from with in the case where - that method has never been called before, and right after has been - disposed. The default implementation does nothing. - - Whether this was called through the dispose path, as opposed - to the finalizer path. - - - - The signature for commands. - - - - - A set of 'requirements' to the incoming schema, as well as a set of 'promises' of the outgoing schema. - This is more relaxed than the proper , since it's only a subset of the columns, - and also since it doesn't specify exact 's for vectors and keys. - - - - - The column name. - - - - - The type of the column: scalar, fixed vector or variable vector. - - - - - The 'raw' type of column item: must be a primitive type or a structured type. - - - - - The flag whether the column is actually a key. If yes, is representing - the underlying primitive type. - - - - - The annotations that are present for this column. - - - - - Returns whether is a valid input, if this object represents a - requirement. - - Namely, it returns true iff: - - The , , , fields match. - - The columns of of is a superset of our columns. - - Each such annotation column is itself compatible with the input annotation column. - - - - - Return if this structure is not identical to the default value of . If true, - it means this structure is initialized properly and therefore considered as valid. - - - - - Given a , extract the type parameters that describe this type - as a 's column type. - - The actual column type to process. - The vector kind of . - The item type of . - Whether (or its item type) is a key. - - - - Create a schema shape out of the fully defined schema. - - - - - Returns if there is a column with a specified and if so stores it in . - - - - - The 'data loader' takes a certain kind of input and turns it into an . - - The type of input the loader takes. - - - - Produce the data view from the specified input. - Note that 's are lazy, so no actual loading happens here, just schema validation. - - - - - The output schema of the loader. - - - - - Sometimes we need to 'fit' an . - A DataLoader estimator is the object that does it. - - - - - Train and return a data loader. - - - - - The 'promise' of the output schema. - It will be used for schema propagation. - - - - - The transformer is a component that transforms data. - It also supports 'schema propagation' to answer the question of 'how will the data with this schema look, after you transform it?'. - - - - - Schema propagation for transformers. - Returns the output schema of the data, if the input schema is like the one provided. - - - - - Take the data in, make transformations, output the data. - Note that 's are lazy, so no actual transformations happen here, just schema validation. - - - - - Whether a call to should succeed, on an - appropriate schema. - - - - - Constructs a row-to-row mapper based on an input schema. If - is false, then an exception should be thrown. If the input schema is in any way - unsuitable for constructing the mapper, an exception should likewise be thrown. - - The input schema for which we should get the mapper. - The row to row mapper. - - - - The estimator (in Spark terminology) is an 'untrained transformer'. It needs to 'fit' on the data to manufacture - a transformer. - It also provides the 'schema propagation' like transformers do, but over instead of . - - - - - Train and return a transformer. - - - - - Schema propagation for estimators. - Returns the output schema shape of the estimator, if the input schema shape is like the one provided. - - - - - This spells 'ML MODEL' with zero replacing space (assuming little endian). - - - - - Initialize the header and writer for writing. The value of fpMin and header - should be passed to the other utility methods here. - - - - - The current writer position should be the end of the model blob. Records the model size, writes the string table, - completes and writes the header, and writes the tail. - - - - - The current writer position should be where the tail belongs. Writes the header and tail. - Typically this isn't called directly unless you are doing custom string table serialization. - In that case you should have called EndModelCore before writing the string table information. - - - - - The current writer position should be the end of the model blob. Records the size of the model blob. - Typically this isn't called directly unless you are doing custom string table serialization. - - - - - Sets the version information the header. - - - - - Record the given loader sig in the header. If sig is null, clears the loader sig. - - - - - Record the given alternate loader sig in the header. If sig is null, clears the alternate loader sig. - - - - - Low level method for copying bytes from a header structure into a byte array. - - - - - Read the model header, strings, etc from reader. Also validates the header (throws if bad). - Leaves the reader position at the beginning of the model blob. - - - - - Finish reading. Checks that the current reader position is the end of the model blob. - Seeks to the end of the entire model file (after the tail). - - - - - Performs standard version validation. - - - - - Low level method for copying bytes from a byte array to a header structure. - - - - - Checks the basic validity of the header, assuming the stream is at least the given size. - Returns false (and the out exception) on failure. - - - - - Checks the validity of the header, reads the string table, etc. - - - - - Extract and return the loader sig from the header, trimming trailing zeros. - - - - - Extract and return the alternate loader sig from the header, trimming trailing zeros. - - - - - This is used to simplify version checking boiler-plate code. It is an optional - utility type. - - - - - Construct version info with a string value for modelSignature. The string must be 8 characters - all less than 0x100. Spaces are mapped to zero. This assumes little-endian. - - - - - This is a convenience context object for loading models from a repository, for - implementors of ICanSaveModel. It is not mandated but designed to reduce the - amount of boiler plate code. It can also be used when loading from a single stream, - for implementors of ICanSaveInBinaryFormat. - - - - - When in repository mode, this is the repository we're reading from. It is null when - in single-stream mode. - - - - - When in repository mode, this is the directory we're reading from. Null means the root - of the repository. It is always null in single-stream mode. - - - - - The main stream reader. - - - - - The strings loaded from the main stream's string table. - - - - - The name of the assembly that the loader lives in. - - - This may be null or empty if one was never written to the model, or is an older model version. - - - - - The main stream's model header. - - - - - The min file position of the main stream. - - - - - Exception context provided by Repository (can be null). - - - - - Returns whether this context is in repository mode (true) or single-stream mode (false). - - - - - Create a ModelLoadContext supporting loading from a repository, for implementors of ICanSaveModel. - - - - - Create a ModelLoadContext supporting loading from a single-stream, for implementors of ICanSaveInBinaryFormat. - - - - - Performs version checks. - - - - - Reads an integer from the load context's reader, and returns the associated string, - or null (encoded as -1). - - - - - Reads an integer from the load context's reader, and returns the associated string. - - - - - Reads an integer from the load context's reader, and returns the associated string. - Throws if the string is empty or null. - - - - - Commit the load operation. This completes reading of the main stream. When in repository - mode, it disposes the Reader (but not the repository). - - - - - When in repository mode, this disposes the Reader (but no the repository). - - - - - Returns the new assembly name to maintain backward compatibility. - - - - - Return whether this context contains a directory and stream for a sub-model with - the indicated name. This does not attempt to load the sub-model. - - - - - Load an optional object from the repository directory. - Returns false iff no stream was found for the object, iff result is set to null. - Throws if loading fails for any other reason. - - - - - Load an object from the repository directory. - - - - - Load a sub model from the given sub directory if it exists. This requires InRepository to be true. - Returns false iff no stream was found for the object, iff result is set to null. - Throws if loading fails for any other reason. - - - - - Load a sub model from the given sub directory. This requires InRepository to be true. - - - - - Try to load from the given repository entry using the default loader(s) specified in the header. - Returns false iff the default loader(s) could not be bound to a compatible loadable class. - - - - - Load from the given repository entry using the default loader(s) specified in the header. - - - - - Try to load from the given stream (non-Repository). - Returns false iff the default loader(s) could not be bound to a compatible loadable class. - - - - - Load from the given stream (non-Repository) using the default loader(s) specified in the header. - - - - - Try to load from the given reader (non-Repository). - Returns false iff the default loader(s) could not be bound to a compatible loadable class. - - - - - Load from the given reader (non-Repository) using the default loader(s) specified in the header. - - - - - Tries to load. - Returns false iff the default loader(s) could not be bound to a compatible loadable class. - - - - - Try to load a sub model from the given sub directory. This requires InRepository to be true. - - - - - Try to load a binary stream from the current directory. This requires InRepository to be true. - - - - - Try to load a text stream from the current directory. This requires InRepository to be true. - - - - - Signature for a repository based model loader. This is the dual of . - - - - - Convenience context object for saving models to a repository, for - implementors of . - - - This class reduces the amount of boiler plate code needed to implement . - It can also be used when saving to a single stream, for implementors of . - - - - - When in repository mode, this is the repository we're writing to. It is null when - in single-stream mode. - - - - - When in repository mode, this is the directory we're reading from. Null means the root - of the repository. It is always null in single-stream mode. - - - - - The main stream writer. - - - - - The strings that will be saved in the main stream's string table. - - - - - The main stream's model header. - - - - - The min file position of the main stream. - - - - - The wrapped entry. - - - - - Exception context provided by Repository (can be null). - - - - - The assembly name where the loader resides. - - - - - Returns whether this context is in repository mode (true) or single-stream mode (false). - - - - - Create a supporting saving to a repository, for implementors of . - - - - - Create a supporting saving to a single-stream, for implementors of . - - - - - Set the version information in the main stream's header. This should be called before - is called. - - - - - - Puts a string into the context pool, and writes the integer code of the string ID - to the write stream. If str is null, this writes -1 and doesn't add it to the pool. - - - - - Puts a string into the context pool, and writes the integer code of the string ID - to the write stream. Checks that str is not null. - - - - - Puts a string into the context pool, and writes the integer code of the string ID - to the write stream. - - - - - Commit the save operation. This completes writing of the main stream. When in repository - mode, it disposes (but not ). - - - - - When in repository mode, this disposes the Writer (but not the repository). - - - - - Save a sub model to the given sub directory. This requires to be . - - - - - Save the object by calling TrySaveModel then falling back to .net serialization. - - - - - Save to a single-stream by invoking the given action. - - - - - Save to the given sub directory by invoking the given action. This requires - to be . - - - - - For saving a model into a repository. - Classes implementing should do an explicit implementation of . - Classes inheriting from a base class should overwrite the function invoked by - in that base class, if there is one. - - - - - For saving to a single stream. Note that this interface is mostly deprecated in favor of - saving more comprehensive and composable "model" objects, via . - - - - - Abstraction around a or other hierarchical storage. - - - - - The relative path of this entry. - /// - - - - The stream for this entry. This is either a memory stream or a file stream in - the temporary directory. In either case, it is seekable and NOT the actual - archive stream. - - - - - Exception context. - - - - - Force all open entries to be disposed. - - - - - Remove the entry from _open. Note that under normal access patterns, entries are LIFO, - so we search from the end of _open. - - - - - The entry is being disposed. Note that overrides should always call RemoveEntry, in addition to whatever - they need to do with the corresponding stream. - - - - - When considering entries inside one of our model archives, we want to ensure that we - use a consistent directory separator. Zip archives are stored as flat lists of entries. - When we load those entries into our look-up dictionary, we normalize them to always use - backward slashes. - - - - - When building paths to our local file system, we want to force both forward and backward slashes - to the system directory separator character. We do this for cases where we either used Windows-specific - path building logic, or concatenated filesystem paths with zip archive entries on Linux. - - - - - Constructs both the relative path to the entry and the absolute path of a corresponding - temporary file. If createDir is true, makes sure the directory exists within the temp directory. - - - - - Commit the writing of the repository. This signals successful completion of the write. - - - - - This is a signature for classes that are 'holders' of entry points and components. - - - - - A simplified assembly attribute for marking EntryPoint modules. - - - - - Performs checks on an EntryPoint input class equivalent to the checks that are done - when parsing a JSON EntryPoint graph. - - Call this method from EntryPoint methods to ensure that range and required checks are performed - in a consistent manner when EntryPoints are created directly from code. - - - - - Searches for the given column name in the schema. This method applies a - common policy that throws an exception if the column is not found - and the column name was explicitly specified. If the column is not found - and the column name was not explicitly specified, it returns null. - - - - - Converts EntryPoint Optional{T} types into nullable types, with the - implicit value being converted to the null value. - - - - - This class defines attributes to annotate module inputs, outputs, entry points etc. when defining - the module interface. - - - - - An attribute used to annotate the component. - - - - - The load name of the component. Must be unique within its kind. - - - - - UI friendly name. Can contain spaces and other forbidden for Name symbols. - - - - - Alternative names of the component. Each alias must also be unique in the component's kind. - - - - - Comma-separated . - - - - - Description of the component. - - - - - This should indicate a name of an embedded resource that contains detailed documents - for the component, for example, markdown document with the .md extension. The embedded resource - is assumed to be in the same assembly as the class on which this attribute is ascribed. - - - - - An attribute used to annotate the signature interface. - Effectively, this is a way to associate the signature interface with a user-friendly name. - - - - - An attribute used to annotate the kind of entry points. - Typically it is used on the input classes. - - - - - An attribute used to annotate the outputs of the module. - - - - - Official name of the output. If it is not specified, the field name is used. - - - - - The description of the output. - - - - - The rank order of the output. Because .NET reflection returns members in an unspecified order, this - is the only way to ensure consistency. - - - - - An attribute to indicate that a field is optional in an EntryPoint module. - A node can be run without optional input fields. - - - - - An attribute used to annotate the valid range of a numeric input. - - - - - The target type of this range attribute, as determined by the type of - the set range bound values. - - - - - An inclusive lower bound of the value. - - - - - An inclusive upper bound of the value. - - - - - An exclusive lower bound of the value. - - - - - An exclusive upper bound of the value. - - - - - An attribute used to indicate suggested sweep ranges for parameter sweeping. - - - - - An attribute used to indicate suggested sweep ranges for discrete parameter sweeping. - The value is the index of the option chosen. Use Options[Value] to get the corresponding - option using the index. - - - - - An attribute used to indicate suggested sweep ranges for float parameter sweeping. - - - - - An attribute used to indicate suggested sweep ranges for long parameter sweeping. - - - - - An attribute to mark an entry point of a module. - - - - - The entry point name. - - - - - The entry point description. - - - - - UI friendly name. Can contain spaces and other forbidden for Name symbols. - - - - - Short name of the Entry Point - - - - - The list of data types that are supported as inputs or outputs. - - - - - Not used. - - - - - Integer, including long. - - - - - Unsigned integer, including ulong. - - - - - Floating point, including double. - - - - - A char. - - - - - A string. - - - - - A boolean value. - - - - - A dataset, represented by an . - - - - - A file handle, represented by an . - - - - - A transform model, represented by an . - - - - - A predictor model, represented by an . - - - - - An enum: one value of a specified list. - - - - - An array (0 or more values of the same type, accessible by index). - - - - - A dictionary (0 or more values of the same type, identified by a unique string key). - The underlying C# representation is - - - - - A component of a specified kind. The component is identified by the "load name" (unique per kind) and, - optionally, a set of parameters, unique to each component. Example: "BinaryClassifierEvaluator{threshold=0.5}". - The C# representation is . - - - - - The untyped base class for 'maybe'. - - - - - Whether the value was set 'explicitly', or 'implicitly'. - - - - - This is a 'maybe' class that is able to differentiate the cases when the value is set 'explicitly', or 'implicitly'. - The idea is that if the default value is specified by the user, in some cases it needs to be treated differently - than if it's auto-filled. - - An example is the weight column: the default behavior is to use 'Weight' column if it's present. But if the user explicitly sets - the weight column to be 'Weight', we need to actually enforce the presence of the column. - - The type of the value - - - - Create the 'implicit' value. - - - - - The implicit conversion into . - - - - - The implicit conversion from . - This will assume that the parameter is set 'explicitly'. - - - - - Base type for standard predictor model port type. - - - - - Save the model to the given stream. - - - - - Extract only the transform portion of the predictor model. - - - - - Extract the predictor object out of the predictor model. - - - - - Apply the predictor model to the transform model and return the resulting predictor model. - - - - - For a given input data, return role mapped data and the predictor object. - The scoring entry point will hopefully know how to construct a scorer out of them. - - - - - Returns a string array containing the label names of the label column type predictor was trained on. - If the training label is a key with text key value annotation, it should return this annotation. The order of the labels should be consistent - with the key values. Otherwise, it returns null. - - - The column type of the label the predictor was trained on. - - - - Returns the that was used in training. - - - - - Interface for standard transform model port type. - - - - - The input schema that this transform model was originally instantiated on. - Note that the schema may have columns that aren't needed by this transform model. - If an exists with this schema, then applying this transform model to it - shouldn't fail because of column type issues. - - - - - The output schema that this transform model was originally instantiated on. The schema resulting - from may differ from this, similarly to how - may differ from the schema of dataviews we apply this transform model to. - - - - - Apply the transform(s) in the model to the given input data. - - - - - Apply the transform(s) in the model to the given transform model. - - - - - Save the model to the given stream. - - - - - Returns the transform model as an that can output a row - given a row with the same schema as . - - The transform model as an . If not all transforms - in the pipeline are then it returns . - - - - A telemetry message. - - - - - Message with one long text and bunch of small properties (limit on value is ~1020 chars) - - - - - Message with exception - - - - - Message with metric value and it properites - - - - - Type of prediction task. Note that this is a legacy structure and usage of this should generally be - discouraged in future projects. Its presence suggests that there are privileged and supported - tasks, and anything outside of this is unsupported. This runs rather contrary to the idea of this - being an expandable framework, and it is inappropriately limiting. For legacy pipelines based on - and it is still useful, but for things based on - the idiom, it is inappropriate. - - - - - Weakly typed version of IPredictor. - - - - - Return the type of prediction task. - - - - - A predictor the produces values of the indicated type. - REVIEW: Determine whether this is just a temporary shim or long term solution. - - - - - A predictor that produces values and distributions of the indicated types. - Note that from a public API perspective this is bad. - - - - - Loadable class signatures for trainers. Typically each trainer should register with - both SignatureTrainer and SignatureXxxTrainer where Xxx is the prediction kind. - - - - - The base interface for a trainers. Implementors should not implement this interface directly, - but rather implement the more specific . - - - - - Auxiliary information about the trainer in terms of its capabilities - and requirements. - - - - - Return the type of prediction task for the produced predictor. - - - - - Trains a predictor. - - A context containing at least the training data - The trained predictor - - - - - Strongly typed generic interface for a trainer. A trainer object takes training data - and produces a predictor. - - Type of predictor produced - - - - Trains a predictor. - - A context containing at least the training data - The trained predictor - - - - Convenience train extension for the case where one has only a training set with no auxiliary information. - Equivalent to calling - on a constructed with . - - The trainer - The training data. - The trained predictor - - - - Convenience train extension for the case where one has only a training set with no auxiliary information. - Equivalent to calling - on a constructed with . - - The trainer - The training data. - The trained predictor - - - - Predictor that has ensemble tree structures and returns collection of trees. - - - - - Returns the number of trees in the ensemble. - - - - - Returns the collection of trees. - - Collection of trees - - - - Type of tree used in ensemble of tree based predictors - - - - - Returns the array of right(Greater than) child nodes of every interior nodes - - - - - Returns the array of left(Leser than or equal to) nodes of every interior nodes - - - - - returns the number of interior nodes. - - - - - Returns the number of leaf nodes. - - - - - Returns node structure for the given node - - Node id - Flag to denote whether the node is leaf or not - Feature names collection - Node structure - - - - Type of tree used in ensemble of tree based predictors - - Type of features container (instance) on which to make predictions - - - - Returns the leaf node for the given instance. - - Type of features container (instance) on which to make predictions - node id - Type of features container (instance) on which to make predictions - - - - Type to represent the structure of node - - - - - Returns Key value pairs representing the properties of the node. - - - - - Keys to represent the properties of node. - - - - - Name of the the interior node. It is Feature name if it is fasttree. Type is string for default trees. - - - - - Split gain of the interior node. Type is double for default trees. - - - - - Threshold value of the interior node. Type is string for default trees. - It is expected that the string has exactly two space separated components. - i. The first one should be the operator - ii. The second one should be the actual threshold - For ex., for a split like f1 <= 10, expected Threshold is "<= 10" - For a split like color not-in { blue, green }, expected Threshold is "not-in { blue, green }" - - - - - Gain value (specific to fasttree) of the interior node. Type is double for default trees. - - - - - Previous leaf value(specific to fasttree) of the interior node. Type is double for default trees. - - - - - Leaf value of the leaf node. Type is double for default trees. - - - - - Extra items that will be displayed in the tool-tip. Type is string for default trees. - - - - - Holds information relevant to trainers. Instances of this class are meant to be constructed and passed - into or . - This holds at least a training set, as well as optionally a predictor. - - - - - The training set. Cannot be null. - - - - - The validation set. Can be null. Note that passing a non-null validation set into - a trainer that does not support validation sets should not be considered an error condition. It - should simply be ignored in that case. - - - - - The test set, whose uses are very similar to validation set but it should not directly and indirectly - affect the training process. One major difference between validation set and test test is that validation - can affect the training process by, for example, early stopping. Note that early stopping is a technique - which terminates the training process once the scores computed on validation set starts getting worse. - - - - - The initial predictor, for incremental training. Note that if a implementor - does not support incremental training, then it can ignore it similarly to how one would ignore - . However, if the trainer does support incremental training and there - is something wrong with a non-null value of this, then the trainer ought to throw an exception. - - - - - Constructor, given a training set and optional other arguments. - - Will set to this value. This must be specified - Will set to this value if specified - Will set to this value if specified - Will set to this value if specified - - - - Characteristics of a trainer. Exposed via the Info property of each trainer. - - - - - Whether the trainer needs to see data in normalized form. Only non-parametric trainers will tend to return - here. - - - - - Whether the trainer needs calibration to produce probabilities. As a general rule only trainers that produce - binary classifier predictors that also do not have a natural probabilistic interpretation should have a - value here. - - - - - Whether this trainer could benefit from a cached view of the data. Trainers that have few passes over the - data, or that need to build their own custom data structure over the data, will have a false here. - - - - - Whether the trainer supports validation set via . Not implementing - this interface and returning false from this property is an indication the trainer does not support - that. - - - - - Whether the trainer can use test set via . Not implementing - this interface and returning false from this property is an indication the trainer does not support - that. - - - - - Whether the trainer can support incremental trainers via . Not - implementing this interface and returning true from this property is an indication the trainer does - not support that. - - - - - Initializes with the given parameters. The parameters have default values for the most typical values - for most classical trainers. - - The value for the property - The value for the property - The value for the property - The value for the property - The value for the property - The value for the property - - - - Akin to FindIndexSorted, except stores the found index in the output - index parameter, and returns whether that index is a valid index - pointing to a value equal to the input parameter value. - - - - - Assumes input is sorted and finds value using BinarySearch. - If value is not found, returns the logical index of 'value' in the sorted list i.e index of the first element greater than value. - In case of duplicates it returns the index of the first one. - It guarantees that items before the returned index are < value, while those at and after the returned index are >= value. - - - - - Assumes input is sorted and finds value using BinarySearch. - If value is not found, returns the logical index of 'value' in the sorted list i.e index of the first element greater than value. - In case of duplicates it returns the index of the first one. - It guarantees that items before the returned index are < value, while those at and after the returned index are >= value. - - - - - An array-like data structure that supports storing more than - many entries, up to 0x7FEFFFFF00000L. - The entries are indexed by 64-bit integers, and a single entry can be accessed by - the indexer if no modifications to the entries is desired, or the - method. Efficient looping can be accomplished by calling the method. - This data structure employs the "length and capacity" pattern. The logical length - can be retrieved from the property, which can possibly be strictly less - than the total capacity. - - The type of entries. - - - - Gets the logical length of the big array. - - - - - Gets or sets the entry at . - - - This indexer is not efficient for looping. If looping access to entries is desired, - use the method instead. - Note that unlike a normal array, the value returned from this indexer getter cannot be modified - (for example, by ++ operator or passing into a method as a ref parameter). To modify an entry, use - the method instead. - - - - - Initializes a new instance of the class with a specified size. - - - - - Applies a method at a given . - - - - - Implements a more efficient way to loop over index range in [min, lim) and apply - the specified method delegate. - - - - - Fills the entries with index in [min, lim) with the given value. - - - - - Resizes the array so that its logical length equals . This method - is more efficient than initialize another array and copy the entries because it preserves - existing blocks. The actual capacity of the array may become larger than . - If equals , then no operation is done. - If is less than , the array shrinks in size - so that both its length and its capacity equal . - If is larger than , the array capacity grows - to the smallest integral multiple of that is larger than , - unless is less than , in which case the capacity - grows to double its current capacity or , which ever is larger, - but up to . - - - - - Trims the capacity to logical length. - - - - - Appends the elements of to the end. - This method is thread safe related to calls to (assuming those copy operations - are happening over ranges already added), but concurrent calls to - should not be attempted. Intended usage is that - one thread will call this method, while multiple threads may access - previously added ranges from , concurrently with - this method or themselves. - - - - - Copies the subarray starting from index of length - to the destination array . - Concurrent calls to this method is valid even with one single concurrent call - to . - - - - - This should normally be just (a + b) / 2, except in one interesting case: - If a and b are 'consecutive' floats (they differ only in the least significant bit), - the above expression is possible to be rounded to a. - This can lead to bin bounds that are not strictly increasing! - Also note that the simple (a + b) / 2 can overflow, that's the reason for a / 2 + b / 2. - - - - - This should normally be just (a + b) / 2, except in one interesting case: - If a and b are 'consecutive' floats (they differ only in the least significant bit), - the above expression is possible to be rounded to a. - This can lead to bin bounds that are not strictly increasing! - Also note that the simple (a + b) / 2 can overflow, that's the reason for a / 2 + b / 2. - - - - - Initial placement of the pegs. - Places pegs one by one and always picks the largest existing segment to split. - - - - - Gets the best split for a peg between min and max. - In case of a tie, use 'pos' to pick the location closer to the more natural split. - - - - - Computes the energy reduction for splitting segment [min, max] at 'split' point - - - - - Returns true if 'i' is a better peg placement than 'j', which means it is closer to the ideal position for peg 'pos' - - - - - After the initial peg placement, - - - - - For the remaining bins, compute the best energy distribution and the worst energy distribution - The best energy distribution: - - make the distances as equal as possible; - - some of them will be 'ave' and the rest will be 'ave+1' - The worst energy distribution: - - all except one distance will be 1 - - - - - Environment variable containing optional resources path. - - - - - Attempts to find a file that is expected to be distributed with a TLC component. Searches - in the following order: - 1. In the customSearchDir directory, if it is provided. - 2. In the custom search directory specified by the - environment variable. - 3. In the root folder of the provided assembly. - 4. In the folder of this assembly. - In each case it searches the file in the directory provided and combined with folderPrefix. - - If any of these locations contain the file, a full local path will be returned, otherwise this - method will return null. - - File name to find - folder prefix, relative to the current or customSearchDir - - Custom directory to search for resources. - If null, the path specified in the environment variable - will be used. - - - Assembly type to search the path of. - - - Path to the existing file. Null if not found. - - - - - Given a folder path, create it if it doesn't exist. - Fails if the folder name is empty, or can't create the folder. - - - - - Similar to Stream.CopyTo but takes a length rather than assuming copy to end. Returns amount copied. - - Source stream to copy from - Destination stream to copy to - Number of bytes to copy - Size of buffer to use when copying, default is 81920 to match that of Stream - number of bytes copied - - - - Writes a length prefixed span of ints. - - - - - Writes a span of ints without the length prefix. - - - - - Writes a length prefixed span of uints. - - - - - Writes a span of uints without the length prefix. - - - - - Writes a length prefixed array of bytes. - - - - - Writes a length prefixed span of bytes. - - - - - Writes a length prefixed array of bytes. - - - - - Writes an array of bytes without the length prefix. - - - - - Writes a length prefixed span of Floats. - - - - - Writes a length prefixed array of Floats. - - - - - Writes a span of Floats without the length prefix. - - - - - Writes a length prefixed span of doubles. - - - - - Writes a span of doubles without the length prefix. - - - - - Writes a length prefixed span of bools as bytes with 0/1 values. - - - - - Writes a span of bools as bytes with 0/1 values, without the length prefix. - - - - - Writes a length prefixed span of chars. - - - - - Writes a length prefixed array of packed bits. - - - - - Writes what Microsoft calls a UTF-7 encoded number in the binary reader and - writer string methods. For non-negative integers this is equivalent to LEB128 - (see https://en.wikipedia.org/wiki/LEB128). - - - - - The number of bytes that would be written if one were to attempt to write - the value in LEB128. - - - - - If this return it will read exactly length bytes, and unlike the - regular read method fails if it cannot. - - The stream - The buffer into which to write the data. - The offset of the output array into which to write. - The number of bytes to read. - - - - If this return it will try to read exactly length bytes. - - The stream - The buffer into which to write the data. - The offset of the output array into which to write. - The number of bytes to read. - - - - Reads a LEB128 encoded unsigned integer. - - - - - A convenience method to open a stream writer, by default with no-BOM UTF-8 encoding, - buffer size of 1K, and the stream left open. - - - - - Checks that the directory of the file name passed in already exists. - This is meant to be called before calling an API that creates the file, - so the file need not exist. - - An absolute or relative file path, or null to skip the check - (useful for optional user parameters) - The user level parameter name, as exposed by the command line help - - - - Naive thread pool focused on reducing the latency to execution of chunky work items as much as possible. - If a thread is ready to process a work item the moment a work item is queued, it's used, otherwise - a new thread is created. This is meant as a stop-gap measure for workloads that would otherwise be - creating a new thread for every work item. - - - - How long should threads wait around for additional work items before retiring themselves. - - - The queue of work items. Also used as a lock to protect all relevant state. - - - The number of threads currently waiting for work to arrive. - - - - Queues an delegate to be executed immediately on another thread, - and returns a that represents its eventual completion. The task will - always end in the state; if the delegate throws - an exception, it'll be allowed to propagate on the thread, crashing the process. - - - - - Queues an delegate and associated state to be executed immediately on another thread, - and returns a that represents its eventual completion. The task will - always end in the state; if the delegate throws - an exception, it'll be allowed to propagate on the thread, crashing the process. - - - - - Copies the values from src to dst. - - - This can be removed once we have the APIs from https://github.com/dotnet/corefx/issues/33006. - - - - - Assumes input is sorted and finds value using BinarySearch. - If value is not found, returns the logical index of 'value' in the sorted list i.e index of the first element greater than value. - In case of duplicates it returns the index of the first one. - It guarantees that items before the returned index are < value, while those at and after the returned index are >= value. - - - - - Assumes input is sorted and finds value using BinarySearch. - If value is not found, returns the logical index of 'value' in the sorted list i.e index of the first element greater than value. - In case of duplicates it returns the index of the first one. - It guarantees that items before the returned index are < value, while those at and after the returned index are >= value. - - - - - Assumes input is sorted and finds value using BinarySearch. - If value is not found, returns the logical index of 'value' in the sorted list i.e index of the first element greater than value. - In case of duplicates it returns the index of the first one. - It guarantees that items before the returned index are < value, while those at and after the returned index are >= value. - - - - - Akin to FindIndexSorted, except stores the found index in the output - index parameter, and returns whether that index is a valid index - pointing to a value equal to the input parameter value. - - - - - Akin to FindIndexSorted, except stores the found index in the output - index parameter, and returns whether that index is a valid index - pointing to a value equal to the input parameter value. - - - - - Assumes input is sorted and finds value using BinarySearch. - If value is not found, returns the logical index of 'value' in the sorted list i.e index of the first element greater than value. - In case of duplicates it returns the index of the first one. - It guarantees that items before the returned index are < value, while those at and after the returned index are >= value. - - - - - Assumes input is sorted and finds value using BinarySearch. - If value is not found, returns the logical index of 'value' in the sorted list i.e index of the first element greater than value. - In case of duplicates it returns the index of the first one. - It guarantees that items before the returned index are < value, while those at and after the returned index are >= value. - - - - - Assumes input is sorted and finds value using BinarySearch. - If value is not found, returns the logical index of 'value' in the sorted list i.e index of the first element greater than value. - In case of duplicates it returns the index of the first one. - It guarantees that items before the returned index are < value, while those at and after the returned index are >= value. - - - - - Assumes input is sorted and finds value using BinarySearch. - If value is not found, returns the logical index of 'value' in the sorted list i.e index of the first element greater than value. - In case of duplicates it returns the index of the first one. - It guarantees that items before the returned index are < value, while those at and after the returned index are >= value. - - - - - Assumes input is sorted and finds value using BinarySearch. - If value is not found, returns the logical index of 'value' in the sorted list i.e index of the first element greater than value. - In case of duplicates it returns the index of the first one. - It guarantees that items before the returned index are < value, while those at and after the returned index are >= value. - - - - - Finds the unique index for which func(input[i]) == false whenever i < index and - func(input[i]) == true whenever i >= index. - Callers should guarantee that there is such an index. Uses binary search. - - - - - Finds the unique index for which func(input[i], value) == false whenever i < index and - func(input[i], value) == true whenever i >= index. - Callers should guarantee that there is such an index. Uses binary search. - - - - - Checks that an input IList is monotonically increasing. - - An array of values - True if the array is monotonically increasing (if each element is greater - than or equal to previous elements); false otherwise. ILists containing NaN values - are considered to be not monotonically increasing. - - - - Checks that an input array is monotonically increasing. - - An array of values - True if the array is monotonically increasing (if each element is greater - than or equal to previous elements); false otherwise. - - - - Checks that an input array is monotonically increasing. - - An array of values - True if the array is monotonically increasing (if each element is greater - than or equal to previous elements); false otherwise. Arrays containing NaN values - are considered to be not monotonically increasing. - - - - Returns whether an input integer vector is sorted and unique, - and between an inclusive lower and exclusive upper bound for - the first and last items, respectively. - - - - - Returns whether an input integer vector up to - is sorted and unique, and between an inclusive lower and exclusive - upper bound for the first and last items, respectively. - - - - - Create an array of specified length, filled with a specified value - - - - - Given a predicate, over a range of values defined by a limit calculate - first the values for which that predicate was true, and second an inverse - map. - - The input schema where the predicate can check if columns are active. - The predicate to test for various value - An ascending array of values from 0 inclusive - to exclusive, holding all values for which - is true - Forms an inverse mapping of , - so that [[i]] == i, - and for other entries not appearing in , - [i] == -1 - - - - Given a predicate, over a range of values defined by a limit calculate - first the values for which that predicate was true, and second an inverse - map. - - Indicates the exclusive upper bound on the tested values - The predicate to test for various value - An ascending array of values from 0 inclusive - to exclusive, holding all values for which - is true - Forms an inverse mapping of , - so that [[i]] == i, - and for other entries not appearing in , - [i] == -1 - - - - Given the columns needed, over a range of values defined by a limit calculate - first the values for which the column is present was true, and second an inverse - map. - - Indicates the exclusive upper bound on the tested values - The set of columns the calling component operates on. - An ascending array of values from 0 inclusive - to exclusive, holding all values for which - are present. - (The respective index appears in the collection). - Forms an inverse mapping of , - so that [[i]] == i, - and for other entries not appearing in , - [i] == -1 - - - - Resizes the array if necessary, to ensure that it has at least elements. - - The array to resize. Can be null. - The minimum number of items the new array must have. - True means that the old array is preserved, if possible (Array.Resize is called). False - means that a new array will be allocated. - - The new size, that is no less than . - - - - Resizes the array if necessary, to ensure that it has at least and at most elements. - - The array to resize. Can be null. - The minimum number of items the new array must have. - The maximum number of items the new array can have. - True means that the old array is preserved, if possible (Array.Resize is called). False - means that a new array will be allocated. - - The new size, that is no less than and no more that . - - - - Returns the number of set bits in a bit array. - - - - - Given a generic method with a single type parameter, re-create the generic method on a new type, - then reinvoke the method and return the result. A common pattern throughout the code base is to - have some sort of generic method, whose parameters and return value are, as defined, non-generic, - but whose code depends on some sort of generic type parameter. This utility method exists to make - this common pattern more convenient, and also safer so that the arguments, if any, can be type - checked at compile time instead of at runtime. - - Because it is strongly typed, this can only be applied to methods whose return type - is known at compile time, that is, that do not depend on the type parameter of the method itself. - - The type of the receiver of the instance method. - The type of the return value of the method. - A delegate that should be a generic method with a single type parameter. - The generic method definition will be extracted, then a new method will be created with the - given type parameter, then the method will be invoked. - The target of the invocation. - The new type parameter for the generic method - The return value of the invoked function - - - - A static version of . - - - - - A one-argument version of . - - - - - A one-argument version of . - - - - - A one-argument, three-type-parameter version of . - - - - - A one-argument, three-type-parameter version of . - - - - - A two-argument version of . - - - - - A two-argument version of . - - - - - A two-argument, two-type-parameter version of . - - - - - A two-argument, two-type-parameter version of . - - - - - A two-argument, three-type-parameter version of . - - - - - A two-argument, three-type-parameter version of . - - - - - A three-argument version of . - - - - - A four-argument version of . - - - - - A five-argument version of . - - - - - A six-argument version of . - - - - - A seven-argument version of . - - - - - An eight-argument version of . - - - - - A nine-argument version of . - - - - - A ten-argument version of . - - - - - This is akin to , except applied to - instead of . - - A delegate that should be a generic method with a single type parameter. - The generic method definition will be extracted, then a new method will be created with the - given type parameter, then the method will be invoked. - The new type parameter for the generic method - - - - A one-argument version of . - - - - - A two-argument version of . - - - - - A three-argument version of . - - - - - A four-argument version of . - - - - - Get indented version of command line or same string if we unable to produce it. - - command line - indented version of command line(if possible) - - - - Try produce indented string for command line. - - command line - indenting text writer - true if we was able to produce indented string without any problem - - - - Result codes from Parse methods. Note that the order matters. - - - - - No issues. - - - - - Empty or only whitespace - - - - - Extra non-whitespace characters after successful parse - - - - - Parsing error - - - - - This produces zero for an empty string, or NaN depending on the used. - - - - - This produces zero for an empty string, or NaN depending on the used. - - - - - A fixed-length circular array. Items are added at the end. If the array is full, adding - an item will result in discarding the least recently added item. - - - - - Represents the for a generic function corresponding to , - with the following characteristics: - - - The method is an instance method on an object of type . - One generic type argument. - A return value of . - - - The type of the receiver of the instance method. - The type of the return value of the method. - - - - Creates a representing the for - a generic instance method. This helper method allows the instance to be created prior to the creation of any - instances of the target type. The following example shows the creation of an instance representing the - method: - - - FuncInstanceMethodInfo1<object, int>.Create(obj => obj.GetHashCode) - - - The expression which creates the delegate for an instance of the target type. - A representing the - for the generic instance method. - - - - Represents the for a generic function corresponding to , - with the following characteristics: - - - The method is an instance method on an object of type . - One generic type argument. - A return value of . - - - The type of the receiver of the instance method. - The type of the parameter of the method. - The type of the return value of the method. - - - - Creates a representing the - for a generic instance method. This helper method allows the instance to be created prior to the creation of - any instances of the target type. The following example shows the creation of an instance representing the - method: - - - FuncInstanceMethodInfo1<object, object, int>.Create(obj => obj.Equals) - - - The expression which creates the delegate for an instance of the target type. - A representing the - for the generic instance method. - - - - Represents the for a generic function corresponding to , - with the following characteristics: - - - The method is an instance method on an object of type . - One generic type argument. - A return value of . - - - The type of the receiver of the instance method. - The type of the first parameter of the method. - The type of the second parameter of the method. - The type of the return value of the method. - - - - Creates a representing the - for a generic instance method. This helper method allows the instance to be created prior to the creation of - any instances of the target type. The following example shows the creation of an instance representing the - method: - - - FuncInstanceMethodInfo1<object, object, int>.Create(obj => obj.Equals) - - - The expression which creates the delegate for an instance of the target type. - A representing the - for the generic instance method. - - - - Represents the for a generic function corresponding to , - with the following characteristics: - - - The method is an instance method on an object of type . - Two generic type arguments. - A return value of . - - - The type of the receiver of the instance method. - The type of the first parameter of the method. - The type of the second parameter of the method. - The type of the return value of the method. - - - - Creates a representing the - for a generic instance method. This helper method allows the instance to be created prior to the creation of - any instances of the target type. The following example shows the creation of an instance representing the - method: - - - FuncInstanceMethodInfo1<object, object, int>.Create(obj => obj.Equals) - - - The expression which creates the delegate for an instance of the target type. - A representing the - for the generic instance method. - - - - Represents the for a generic function corresponding to , - with the following characteristics: - - - The method is an instance method on an object of type . - Three generic type arguments. - A return value of . - - - The type of the receiver of the instance method. - The type of the parameter of the method. - The type of the return value of the method. - - - - Creates a representing the - for a generic instance method. This helper method allows the instance to be created prior to the creation of - any instances of the target type. The following example shows the creation of an instance representing the - method: - - - FuncInstanceMethodInfo1<object, object, int>.Create(obj => obj.Equals) - - - The expression which creates the delegate for an instance of the target type. - A representing the - for the generic instance method. - - - - Represents the for a generic function corresponding to , - with the following characteristics: - - - The method is an instance method on an object of type . - Three generic type arguments. - A return value of . - - - The type of the receiver of the instance method. - The type of the first parameter of the method. - The type of the second parameter of the method. - The type of the return value of the method. - - - - Creates a representing the - for a generic instance method. This helper method allows the instance to be created prior to the creation of - any instances of the target type. The following example shows the creation of an instance representing the - method: - - - FuncInstanceMethodInfo1<object, object, int>.Create(obj => obj.Equals) - - - The expression which creates the delegate for an instance of the target type. - A representing the - for the generic instance method. - - - - Represents the for a generic function corresponding to , - with the following characteristics: - - - One generic type argument. - A return value of . - - - The type of the return value of the method. - - - - Represents the for a generic function corresponding to , - with the following characteristics: - - - One generic type argument. - A return value of . - - - The type of the parameter of the method. - The type of the return value of the method. - - - - Represents the for a generic function corresponding to , - with the following characteristics: - - - One generic type argument. - A return value of . - - - The type of the first parameter of the method. - The type of the second parameter of the method. - The type of the return value of the method. - - - - Represents the for a generic function corresponding to , - with the following characteristics: - - - Two generic type arguments. - A return value of . - - - The type of the first parameter of the method. - The type of the second parameter of the method. - The type of the return value of the method. - - - - Represents the for a generic function corresponding to , - with the following characteristics: - - - Three generic type arguments. - A return value of . - - - The type of the parameter of the method. - The type of the return value of the method. - - - - Represents the for a generic function corresponding to , - with the following characteristics: - - - Three generic type arguments. - A return value of . - - - The type of the first parameter of the method. - The type of the second parameter of the method. - The type of the return value of the method. - - - - Represents the for a generic function corresponding to , - with the following characteristics: - - - The method is static. - One generic type argument. - A return value of . - - - The type of the return value of the method. - - - - Represents the for a generic function corresponding to , - with the following characteristics: - - - The method is static. - One generic type argument. - A return value of . - - - The type of the parameter of the method. - The type of the return value of the method. - - - - Represents the for a generic function corresponding to , - with the following characteristics: - - - The method is static. - One generic type argument. - A return value of . - - - The type of the first parameter of the method. - The type of the second parameter of the method. - The type of the return value of the method. - - - - Represents the for a generic function corresponding to , - with the following characteristics: - - - The method is static. - Two generic type arguments. - A return value of . - - - The type of the first parameter of the method. - The type of the second parameter of the method. - The type of the return value of the method. - - - - Represents the for a generic function corresponding to , - with the following characteristics: - - - The method is static. - Three generic type arguments. - A return value of . - - - The type of the parameter of the method. - The type of the return value of the method. - - - - Represents the for a generic function corresponding to , - with the following characteristics: - - - The method is static. - Three generic type arguments. - A return value of . - - - The type of the first parameter of the method. - The type of the second parameter of the method. - The type of the return value of the method. - - - - A Hash Array that implements both val -> index lookup and index -> val lookup. - Also implements memory efficient sorting. - Note: Supports adding and looking up of items but does not support removal of items. - - - - - Find the index of the given val in the hash array. - Returns a bool representing if val is present. - Index outputs the index that the val is at in the array, -1 otherwise. - - - - - Make sure the given value has an equivalent TItem in the hashArray - and return the index of the value. - - - - - Make sure the given value has an equivalent TItem in the hashArray - and return the index of the value. - - - - - Adds the value as a TItem. Does not check whether the TItem is already present. - Returns the index of the added value. - - - - - Appropriately fills _rgnext and _rgit based on _rgt and _rghash. - - - - - Copies all items to the passed in span. Requires the passed in span to be at least the - same length as Count. - - - - - Creates a combined hash of possibly heterogeneously typed values. - - The leading hash, incorporated into the final hash - A variable list of objects, where null is a valid value - The combined hash incorporating a starting hash, and the hash codes - of all input values - - - - Creates a combined hash of multiple homogeneous typed non-null values. - - The type of items to hash - The leading hash, incorporated into the final hash - A variable list of non-null values - The combined hash incorporating a starting hash, and the hash codes - of all input values - - - - Hash the characters in a of . - This MUST produce the same result as the other overloads (with equivalent characters). - - - - - Hash the characters in a string builder. This MUST produce the same result - as HashString(sb.ToString()). - - - - - Combines the given hash value with a uint value, using the murmur hash 3 algorithm. - Make certain to also use or on the final hashed value, - if you depend upon having distinct bits. - - - - - Implements the murmur hash 3 algorithm, using a mock UTF-8 encoding. - The UTF-8 conversion ignores the possibilities of unicode planes other than the 0th. - That is, it simply converts char values to one, two, or three bytes according to - the following rules: - * 0x0000 to 0x007F : 0xxxxxxx - * 0x0080 to 0x07FF : 110xxxxx 10xxxxxx - * 0x0800 to 0xFFFF : 1110xxxx 10xxxxxx 10xxxxxx - NOTE: This MUST match the StringBuilder version below. - - - - - Implements the murmur hash 3 algorithm, using a mock UTF-8 encoding. - The UTF-8 conversion ignores the possibilities of unicode planes other than the 0th. - That is, it simply converts char values to one, two, or three bytes according to - the following rules: - * 0x0000 to 0x007F : 0xxxxxxx - * 0x0080 to 0x07FF : 110xxxxx 10xxxxxx - * 0x0800 to 0xFFFF : 1110xxxx 10xxxxxx 10xxxxxx - NOTE: This MUST match the string version above. - - - - - Performs a MurmurRound on each int in the sequence - - - - - The final mixing ritual for the Murmur3 hashing algorithm. Most users of - will want to close their progressive building of - a hash with a call to this method. - - - - - Implements a heap. - - - - - A Heap structure gives efficient access to the ordered next element. - - A delegate that takes two T objects, and if - it returns true then the second object should be popped before the first - - - - A Heap structure gives efficient access to the ordered next element. - - A delegate that takes two T objects, and if - it returns true then the second object should be popped before the first - The initial capacity of the heap - - - Func tests true if first element should be after the second - - - - - Current count of elements remaining in the heap - - - - - Discard all elements currently in the heap - - - - - Peek at the first element in the heap - - - - - Remove and return the first element in the heap - - The first element in the heap - - - - Add a new element to the heap - - The item to add - - - - For the heap to allow deletion, the heap node has to derive from this class. - - - - - Implements a heap. - - - - - A Heap structure gives efficient access to the ordered next element. - - A delegate that takes two T objects, and if - it returns true then the second object should be popped before the first - - - - A Heap structure gives efficient access to the ordered next element. - - A delegate that takes two T objects, and if - it returns true then the second object should be popped before the first - The initial capacity of the heap - - - Func tests true if first element should be after the second - - - - - Current count of elements remaining in the heap - - - - - Remove all elements currently in the heap - - - - - Peek at the first element in the heap - - - - - Remove and return the first element in the heap - - - - - Add a new element to the heap - - - - - Remove an element from the heap - - - - - This is a read-write stream that, at or below a length threshold given in the constructor, - works purely in memory, but if it ever grows larger than that point backs off to use the - file system. This can be useful if we have intermediate operations that require streams. - The temporary file will be destroyed if the object is properly disposed. - - - - - Constructs an initially empty read-write stream. Once the number of - bytes in the stream exceeds , - then we back off to disk. - - The maximum length we will accommodate in memory - - - - A common usecase of the hybrid memory stream is to create a persistent - readable (not necessarily writable) copy of a stream whose source is very - transient and temporary. This utility method makes that creation of a copy - somewhat easier. - - A stream that can be opened - The maximum length we will accommodate in memory - A readable copy of the data stream - - - - Creates the overflow stream if it does not exist, switching all content over to - the file-based stream and disposing of the memory stream. If the overflow stream - already exists, this method has no effect. - - - - - we count the number of values first to allocate a single array with of proper size - - - - - Implements a least recently used cache. - - - - - Returns the keys of the items stored in the cache, sorted from the most recently used - to the least recently used. - - - - - Initializes a new LRU cache with a given size. - The class is not thread safe. - - - - - Looks up and returns an item. If the item is found, mark it as recently used. - - - - - Adds a new item in the cache. It will be marked as recently used. If the cache - would grow over the max size, the least recently used item is removed. - - - - - Some useful math methods. - - - - - Finds the best least-squares fit of y = ax + b - - The x values. - The y values. - The coefficent a. - The intercept b. - - - - The product of elements in a - - an array - the product of a's elements - - - - Find the max element of a - - an array - the max element - - - - Find the minimum element of a - - an array - the minimum element - - - - Finds the first index of the max element of the span. - NaNs are ignored. If all the elements to consider are NaNs, -1 is - returned. The caller should distinguish in this case between two - possibilities: - 1) The number of the element to consider is zero. - 2) All the elements to consider are NaNs. - - The span of floats. - the first index of the max element - - - - Finds the first index of the minimum element of the span. - NaNs are ignored. If all the elements to consider are NaNs, -1 is - returned. The caller should distinguish in this case between two - possibilities: - 1) The number of the element to consider is zero. - 2) All the elements to consider are NaNs. - - The span of floats. - the first index of the minimum element - - - - computes the "softmax" function: log sum_i exp x_i - - Span of numbers to softmax - the softmax of the numbers - may have slightly lower roundoff error if inputs are sorted, smallest first - - - - computes "softmax" function of two arguments: log (exp x + exp y) - - - - - true if two float values are close (using relative comparison) - - - - - - - - Returns the log of the gamma function, using the Stirling approximation - - Argument of function - Log Gamma(x) - Accurate to eight digits for all x. - - - - Computes the log factorial of n, using fast methods - - The number to compute the factorial of - The log factorial of n - - - - Returns the two-tailed p-value given a t statistic from a distribution - parameterized by the provided number of degrees of freedom. - - The t-statistic - The degrees of freedom - The corresponding two-tailed p-value - - - - Lentz's algorithm for evaluating the continued fraction - b0 + a1 / (b1 + a2 / (b2 + a3 / (b3 + a4 / ...) ) ) - - The a function mapping positive integers to a sequence term - The b function mapping non-negative integers to a sequence term - Calculate the continued fraction to this tolerance - The evaluation of the continued fraction - - - - The logistic sigmoid function: 1 / (1 + e^(-x)). - - - - - Hyperbolic tangent. - - - - - The logistic sigmoid function: 1 / (1 + e^(-x)). - - - - - Hyperbolic tangent. - - - - - The exponential function: e^(x). - - - - - The logistic sigmoid function: 1 / (1 + e^(-x)). - - - - - The hyperbolic tangent function. - - - - - The exponential function: e^(x). - - - - - Apply a soft max on an array of floats. Note that src and dst may be the same array. - - - - - Apply a soft max on a range within an array of floats. Note that src and dst may be the same array. - - - - - Entropy of a given probability - - - - - Cross-entropy of two distributions - - - - - Given a set of values Ln(a1), Ln(a2), ... Ln(an), - return Ln(a1+a2+...+an). This is especially useful - when working with log probabilities and likelihoods. - - - - - - Math.Sin returns the input value for inputs with large magnitude. We return NaN instead, for consistency - with Math.Sin(infinity). - - - - - Math.Cos returns the input value for inputs with large magnitude. We return NaN instead, for consistency - with Math.Cos(infinity). - - - - - Returns the smallest integral value that is greater than or equal to the result of the division. - - Number to be divided. - Number with which to divide the numerator. - - - - - Swap the first m*n elements within a given array so that, for any - non-negative i and j less than m and n respectively, dst[i*n+j] == src[j*m+i]. - This variant of the function is single threaded, and useful in that - case where the workflow is otherwise single threaded. - - Elements of the array are this type - - Where to write the transpose. Note that dst cannot be the same as src. - - - - - - Swap the first m*n elements within a given array so that, for any - non-negative i and j less than m and n respectively, dst[i*n+j] == src[j*m+i] - - Elements of the array are this type - The source elements of the transpose. Must contain at least m*n elements. - Where to write the transpose. Note that dst cannot be the same as src. Must contain at least m*n elements. - The major index. - The minor index. Elements are currently stored in "m" blocks of "n" items. - - - - Swap the first m*n elements within a given array so that, for any - non-negative i and j less than m and n respectively, b[i*n+j] == a[j*m+i] - - - Where to write the transpose. Note that dst cannot be the same as src. - - - - - - Swap the first m*n elements within a given array so that, for any - non-negative i and j less than m and n respectively, b[i*n+j] == a[j*m+i] - - - Where to write the transpose. Note that dst cannot be the same as src. - - - - - - A synchronization primitive meant to address situations where you have a set of - entities of known count, where you want to iteratively provide critical sections - for each depending on which comes first, but you do not necessarily know what - constitutes "first" until all such entities tell you where they stand in line. - - The anticipated usage is that whatever entity is using the - to synchronize itself, will register itself using - so as to unblock any "lower" waiters as soon as it knows what value it needs to - wait on, perform whatever local work it can, and when it needs to, wait on the - event it got when it registered itself. It may then repeat the cycle by - registering itself for a new event (or, finally, retiring itself through - ). - - - - - This is an event-line pair. The intended usage is, when the line - is the minimum at a point when all waiters have registered, the event - will be signaled. - - - - - Creates a minimum waiter. - - The initial number of waiters - - - - Indicates to the waiter that we want to, at some future point, wait at a given - position. This object will return a reset event that can be waited on, at the - point when we actually want to wait. This method itself has the potential to - signal other events, if by registering ourselves the waiter becomes aware of - the maximum number of waiters, allowing that waiter to enter its critical state. - - If multiple events are associated with the minimum value, then only one will - be signaled, and the rest will remain unsignaled. Which is chosen is undefined. - - - - - Retires one of the waiters, and return the current maximum number of waiters. - If it so happens that by retiring this waiter the number of waiters reaches the - maximum, the appropriate waiter will be signaled as described in . - - - - - Normalized string type. For string pooling. - - - - - NormStr's can only be created by the Pool. - - - - - Find the given string in the pool. If not found, returns null. - - - - - Make sure the given string has an equivalent NormStr in the pool and return it. - - - - - Make sure the given string has an equivalent NormStr in the pool and return it. - - - - - Make sure the given string builder has an equivalent NormStr in the pool and return it. - - - - - Adds the item. Does NOT check for whether the item is already present. - - - - - The primary use case for this structure is to impose ordering among - multiple producer threads, in case one is producing output that one - wishes to have ordered. - - More specifically, the ordered waiter allows a thread to wait on a - particular position. So if three threads wait on 0, 1, then 2 (in - any order), the first thread to clear the wait will be 0, then 1 will - be cleared once incremented, then 2 will be cleared once incremented. - - - - - This is an event-line pair. The intended usage is, when the line - is hit by the containing ordered waiter, the thread will be hit. - - - - - Creates an ordered waiter. - - If true, then the first position (that is, - position 0) will be considered already free to proceed. If not something - will need to hit increment. - - - - Creates an ordered waiter. - - If startPos is >= 0 then waiter starts from that position. - If not something will need to hit increment |startPos| times. - - - - Wait on a given position. This will block, until this object has - called up to the position indicated. This - accepts cancellation tokens, but the default cancellation token also - works. - - - - - Moves the waiter to the next position, and signals any waiters waiting at - or before that position. - - - - - Signals all waiters. No more calls to should be - attempted. - - - - - This will signal all the waiters, but cause them to throw an exception. - - The exception that will be the inner exception, of an - exception that will throw for all current and subsequent waiters. - - - - Contains extension methods that aid in building cross platform. - - - - - This is an interface for creating samples of a requested size from a stream of data of type . - The sample is created in one pass by calling for every data point in the stream. Implementations should have - a delegate for getting the next data point, which is invoked if the current data point should go into the reservoir. - - - - - If the number of elements sampled is less than the reservoir size, this should return the number of elements sampled. - Otherwise it should return the reservoir size. - - - - - Returns the number of elements sampled so far. - - - - - Sample the next data point from the stream. - - - - - This must be called before any calls to , and no subsequent calls to can - be made after that. - - - - - Return the elements in the sample. - - - - - This class produces a sample without replacement from a stream of data of type . - It is instantiated with a delegate that gets the next data point, and builds a reservoir in one pass by calling - for every data point in the stream. In case the next data point does not get 'picked' into the reservoir, the delegate is not invoked. - Sampling is done according to the algorithm in this paper: https://epubs.siam.org/doi/pdf/10.1137/1.9781611972740.53. - - - - - Gets the reservoir sample. - - - - - This class produces a sample with replacement from a stream of data of type . - It is instantiated with a delegate that gets the next data point, and builds a reservoir in one pass by calling - for every data point in the stream. In case the next data point does not get 'picked' into the reservoir, the delegate is not invoked. - Sampling is done according to the algorithm in this paper: https://epubs.siam.org/doi/pdf/10.1137/1.9781611972740.53. - - - - - Returns the cache. Users should not change the elements of the returned array. - Access only elements up to the logical length of the array, which is . - - - - - Gets a reservoir sample with replacement of the elements sampled so far. Users should not change the - elements returned since multiple elements in the reservoir might be pointing to the same memory. - - - - - This class takes care of downloading resources needed by ML.NET components. Resources are located in - a pre-defined location, that can be overridden by defining Environment variable . - - - - - The location of the resources to download from. Uses either the default location or a location defined - in an Environment variable. - - - - - An environment variable containing a timeout period (in milliseconds) for downloading resources. If defined, - overrides the timeout defined in the code. - - - - - Environment variable containing optional url to download resources from. - - - - - Generates a url from a suffix. - - - - - Returns a that tries to download a resource from a specified url, and returns the path to which it was - downloaded, and an exception if one was thrown. - - - The function checks whether or not the absolute URL with the - default host "aka.ms" formed from redirects to the default Microsoft homepage. - As such, only absolute URLs with the host "aka.ms" is supported with . - - The host environment. - A channel to provide information about the download. - The relative url from which to download. - This is appended to the url defined in . - The name of the file to save. - The directory where the file should be saved to. The file will be saved in a directory with the specified name inside - a folder called "mlnet-resources" in the directory. - An integer indicating the number of milliseconds to wait before timing out while downloading a resource. - The download results, containing the file path where the resources was (or should have been) downloaded to, and an error message - (or null if there was no error). - - - Returns the error message if an error occurred, null if download was successful. - - - - Get the path where the resource should be downloaded to. If the environment variable - is defined, download to the location defined there. Otherwise, download to the "dir" directory - inside \mlnet-resources\. - - - - This method checks whether or not the provided aka.ms url redirects to - Microsoft's homepage, as the default faulty aka.ms URLs redirect to https://www.microsoft.com/?ref=aka . - The provided url to check - - - - A class containing common statistical functions - - - - - Returns a number uniformly sampled from 0...(rangeSize-1) - - Size of range to sample from, between 0 and int.MaxValue^2 - Random number generator - Sampled value - - - - Returns a number sampled from a zero-mean, unit variance Gaussian - - A Random to use for the sampling - a sample - uses Joseph L. Leva's algorithm from "A fast normal random number generator", 1992 - - - - Returns a sample from the gamma distribution with scale parameter 1, shape parameter alpha - - Shape parameter - The random number generator to use - Sample from gamma distribution - Uses Marsaglia and Tsang's fast algorithm - - - - Generates a beta-distributed random variable - - Random generator to use - first parameter - second parameter - Sample from distribution - - - - Generates a dirichlet-distributed random variable - - Random generator to use - array of parameters - array in which to store resulting sample - - - - Sample from a standard Cauchy distribution: - https://en.wikipedia.org/wiki/Lorentzian_function - - - - - - - Returns a number sampled from the binomial distribution with parameters n and p - - Random generator to use - Parameter N of binomial - Parameter p of binomial - - Should be robust for all values of n, p - - - - Returns a "view" stream, which appears to be a possibly truncated - version of the stream. Reads on this containing stream will also - advance the wrapped stream. If truncated, reads will not progress - beyond the indicated length, and writes will fail beyond the - indicated length. This stream supports seeking (and associated - operations) if the underlying stream supports seeking, where it is - supposed that the returned SubsetStream instance has position - 0 during creation, corresponding to whatever the position of the - enclosed stream was during creation, so this stream will act as an - "offset" version of the enclosed stream. As this is intended to - operate over a subset of a stream, during closing or disposal of the - subset stream, the underlying stream will always remain open and - undisposed. - - - - - Construct the view stream. - - The underlying stream - The maximum length this containing - stream should appear to have, or null if unbounded - - - - The running (unweighted) count of elements added to this object. - - - - - The running (weighted) count of elements. - - - - - The running count of non-zero elements. - - - - - The running weight of non-zero elements. - - - - - The running arithmetic mean. - - - - - Thes sample variance. - - - - - The sample standard deviation. - - - - - Returns the standard error of the mean. - - - - - The maximum. - - - - - The minimum. - - - - - Accumulates one more value, optionally weighted. - This accumulation procedure is based on the following, - with adjustments as appropriate for weighted instances: - https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance - - The value - The weight given to this value - Amount of appearance of this value - - - - Adds a stats object with another type of stats object. The result - should be equivalent, up to the effects of numerical imprecision, - as if in addition to all the values this object has seen, it has - also seen the values added to the other object. - - - - - - A convenient way to combine the observations of two Stats objects - into a new Stats object. - - The first operand - The second operand - - - - - A class for one-pass accumulation of weighted summary statistics, up - to the fourth moment. The accumulative algorithms used here may be - reviewed at - https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance - All quantities are weighted, except for RawCount. - - - - - The running count of non-zero elements. - - - - - The sample skewness. - - - - - The sample kurtosis. - - - - - Z-test value for a normality test based on the skew. - Under the null hypothesis of normality this quantity will - itself be approximately normally distributed. - - - - - Z-test value for a normality test based on the kurtosis. - Under the null hypothesis of normality this quantity will - itself be approximately normally distributed. - - - - - Omnibus K2 unifying the skew and kurtosis Z-tests. Under the - null hypothesis of normality this quantity will be approximately - chi-squared distributed. - - D'Agostino, Ralph B.; Albert Belanger; Ralph B. D'Agostino, Jr (1990). "A suggestion - for using powerful and informative tests of normality". The American Statistician 44 - (4): 316–321. JSTOR 2684359. - - - - - Accumulates one more value, optionally weighted. - This accumulation procedure is based on the following, - with adjustments as appropriate for weighted instances: - https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance - - The value - The weight given to this value - Amount of appearance of this value - - - - Adds a stats object with another type of stats object. The result - should be equivalent, up to the effects of numerical imprecision, - as if in addition to all the values this object has seen, it has - also seen the values added to the other object. - - - - - - A convenient way to combine the observations of two Stats objects - into a new Stats object. - - The first operand - The second operand - - - - - This class performs discretization of (value, label) pairs into bins in a way that minimizes - the target function "minimum description length". - The algorithm is outlined in an article - "Multi-Interval Discretization of Continuous-Valued Attributes for Classification Learning" - [Fayyad, Usama M.; Irani, Keki B. (1993)] https://ijcai.org/Past%20Proceedings/IJCAI-93-VOL2/PDF/022.pdf - - The class can be used several times sequentially, it is stateful and not thread-safe. - Both Single and Double precision processing is implemented, and is identical. - - - - - Finds the bins for Single values (and integer labels) - - Maximum number of bins - Minimum number of values per bin (stopping condition for greedy bin splitting) - Cardinality of the labels - The feature values - The corresponding label values - An array of split points, no more than total (but maybe less), ending with PositiveInfinity - - - - Finds the bins for Double values (and integer labels) - - Maximum number of bins - Minimum number of values per bin (stopping condition for greedy bin splitting) - Cardinality of the labels - The feature values - The corresponding label values - An array of split points, no more than total (but maybe less), ending with PositiveInfinity - - - - Calculate the entropy and label cardinality for a given interval within the data - - - - - Finds the optimum bins with respect to - - The sorted array of indices that are exclusive upper bounds of the respective bins - - - - A readable that is backed by a . - Because text readers strip line breaks from the end of their lines, this - compensates by inserting \n line feed characters at the end of every - input line, including the last one. - - - - - Create a stream wrapping the given text reader, using the - encoding. - - the reader to wrap - - - - Create a stream wrapping the given text reader, using the given encoding. The class - assumes that the encoding is distributive, that is, the concatenation of the byte - encodings of different strings, is a valid byte encoding of the single encoding of - the concatenation of those strings. (I believe all standard encodings obey this - property.) - - The reader to wrap. - The encoding to use. - - - - A helper method that will either ensure that is less - than (so there are at least some characters), or that - is set. - - - - - An object that serves as a source of a cancellation token, as well as having the ability - for anything to push an exception into the message, to trigger the cancellation. The general - intended usage is that, prior to creating a bunch of collaborating thread workers, this - object is created and made accessible to them, somehow. Each thread worker will work as they - would be engineered without this class, except they will wrap their contents in a try-catch - block to push any exceptions (hopefully none) into this marshaller, using . - Further, any potentially blocking operation of the thread workers must be changed to use - as the cancellation token (this token is canceled iff - is ever called). The controlling thread, whatever that may be, once it is either sure - has been called (possibly by receiving the cancellation) or is sure somehow - that the workers have finished by its own means, will call to throw - the set exception as an inner exception, in the wrapping thread. - - - - - A cancellation token, whose source will be canceled if is ever called. - Any thread blocking operation of a family of thread workers using this structure - must use this cancellation token, or else there is a strong possibility for threads - to stop responding if an exception is thrown at any point. - - - - - Store an exception and set the cancellation token. If this was already - called, this newly passed in exception is ignored. (Important, since a - common source of exceptions would be the exceptions relating to the cancellation.) - - The type of worker that threw the exception, used - in the description of the wrapping exception - The exception that will become the inner exception - - - - If an exception was ever set through , raise it as an appropriate - inner exception. This should only be called just prior to dispose, when the workers - have already finished. If there is no stored exception, this will do nothing. Note - that this does not "expire" the exception, that is, if you were to call this again, - it would throw the same exception. - - - - - The tree structure is simultaneously a tree, and a node in a tree. The interface to - get children occurs through the tree itself implementing itself as a dictionary. This - tree is not terribly efficient, and is meant to be accommodate additions, deletions, - and change of values. Because it is implemented as a dictionary, there is an unfortunate - collision in naming between the dictionary type of "values" (which in this case are - child trees) and the tree type of values, called "node values." - - Children are keyed with values of this type - The type of the node value - - - - Either the node value, or the default of the value type, - if is false. - - - - - This is the key for this child node in its parent, if any. If this is not - a child of any parent, that is, it is the root of its own tree, then - - - - - The parent for this tree, or null if it has no parent. - - - - - All child keys for this node. - - - - - All children for this node. - - - - - The number of children with this node as a parent. - - - - - Initializes a tree with no node value, and no children. - - - - - Tries to get the subtree for a child key. - - The key of the child to find - The child, if any, or null if no child - with this key is present - Whether a child with this key was present - - - - Sees whether a child with a given key is present. - - The key of the child to find - - - - - Adds a new child to this dictionary. - - The key / child node pair to add - - - - Adds a node as a child of this node. This will disconnect the - - - - - - - Removes this node and all its descendants from a tree, leading it to - be the root of its own tree. Following this, will - be null, and the previous parent (if any) will no longer have - this node present as a child. - - - - - Remove a child with a specified key. - - The key of the child to remove - - - - - Convenience utilities for vector operations on . - - - - - Applies to every explicitly defined element of the vector, - in order of index. - - - - - Applies the to each corresponding pair of elements - where the item is implicitly defined in the vector. By explicitly defined, - we mean that for a given index i, both vectors have an entry in - corresponding to that index. - - The first vector - The second vector - Delegate to apply to each pair of non-zero values. - This is passed the index, and two values - - - - Applies the ParallelVisitor to each corresponding pair of elements where at least one is non-zero, in order of index. - - a vector - another vector - Function to apply to each pair of non-zero values - passed the index, and two values - - - - Sets all values in the vector to the default value for the type, without changing the - density or index structure of the input array. That is to say, the count of the input - vector will be the same afterwards as it was before. - - - - - A delegate for functions that can change a value. - - Index of entry - Value to change - - - - A predicate on some sort of value. - - The value to test - The result of some sort of test from that value - - - - Applies the to every explicitly defined - element of the vector. - - - - - Applies some function on a value at a particular slot value, changing that slot value. - This function will, wherever possible, not change the structure of . - If the vector is sparse, and the corresponding slot is not explicitly represented, - then this can involve memory copying and possibly memory reallocation on . - However, if the item is explicitly represented, even if the item is set to the default - value of it will not change the structure of , - in terms of sparsifying a dense array, or dropping indices. - - The vector to modify - The slot of the vector to modify - The manipulation function - A predicate that returns true if we should skip insertion of a value into - sparse vector if it was default. If the predicate is null, we insert any non-default. - - - - Given a vector, turns it into an equivalent dense representation. - - - - - Given a vector, ensure that the first slots are explicitly - represented. - - - - - Creates a maybe sparse copy of a VBuffer. - Whether the created copy is sparse or not is determined by the proportion of non-default entries compared to the sparsity parameter. - - - - - A delegate for functions that access an index and two corresponding - values, possibly changing one of them. - - Slot index of the entry. - Value from first vector. - Value from second vector, which may be manipulated. - - - - A delegate for functions that access an index and two corresponding - values, stores the result in another vector. - - Slot index of the entry. - Value from first vector. - Value from second vector. - The value to store the result. - - - - Applies the to each pair of elements - where is defined, in order of index. If there is - some value at an index in that is not defined in - , that item remains without any further modification. - If either of the vectors are dense, the resulting - will be dense. Otherwise, if both are sparse, the output will be sparse iff - there is any slot that is not explicitly represented in either vector. - - Argument vector, whose elements are only read - Argument vector, that could change - Function to apply to each pair of elements - - - - Applies the to each pair of elements - where is defined, in order of index. It stores the result - in another vector. If there is some value at an index in - that is not defined in , that slot value is copied to the - corresponding slot in the result vector without any further modification. - If either of the vectors are dense, the resulting - will be dense. Otherwise, if both are sparse, the output will be sparse iff - there is any slot that is not explicitly represented in either vector. - - Argument vector, whose elements are only read - Argument vector, whose elements are read in most cases. But in some - cases may be densified. - Result vector - Function to apply to each pair of elements - - - - Applies the to each pair of elements - where either or , has an element - defined at that index. If either of the vectors are dense, the resulting - will be dense. Otherwise, if both are sparse, the output - will be sparse iff there is any slot that is not explicitly represented in - either vector. - - Argument vector, whose elements are only read - Argument vector, that could change - Function to apply to each pair of elements - - - - Applies the to each pair of elements - where either or , has an element - defined at that index. It stores the result in another vector . - If either of the vectors are dense, the resulting - will be dense. Otherwise, if both are sparse, the output will be sparse iff - there is any slot that is not explicitly represented in either vector. - - Argument vector, whose elements are only read - Argument vector, whose elements are read in most cases. But in some - cases may be densified. - Result vector - Function to apply to each pair of elements - - - - The actual implementation of and - , that has internal branches on the implementation - where necessary depending on whether this is an inner or outer join of the - indices of on . - - - - - The actual implementation of and - , that has internal branches on the implementation - where necessary depending on whether this is an inner or outer join of the - indices of on . - - - - - Applies a function to explicitly defined elements in a vector , - storing the result in , overwriting any of its existing contents. - The contents of do not affect calculation. If you instead wish - to calculate a function that reads and writes , see - and . Post-operation, - will be dense iff is dense. - - - - - - - Applies a function to two vectors, storing the result in - , whose existing contents are discarded and overwritten. The - function is called for every index value that appears in either - or . If either of the two inputs is dense, the output will - necessarily be dense. Otherwise, if both are sparse, the output will be sparse iff - there is any slot that is not explicitly represented in either vector. - - - - - Copy from a source list to the given VBuffer destination. - - - - - Updates the logical length and number of physical values to be represented in - , while preserving the underlying buffers. - - - - - Tausworthe hybrid random number generator. - - - - diff --git a/W/Debug_Folder/Microsoft.ML.CpuMath.dll b/W/Debug_Folder/Microsoft.ML.CpuMath.dll deleted file mode 100644 index 7691103d7..000000000 Binary files a/W/Debug_Folder/Microsoft.ML.CpuMath.dll and /dev/null differ diff --git a/W/Debug_Folder/Microsoft.ML.CpuMath.xml b/W/Debug_Folder/Microsoft.ML.CpuMath.xml deleted file mode 100644 index 4602e0a62..000000000 --- a/W/Debug_Folder/Microsoft.ML.CpuMath.xml +++ /dev/null @@ -1,686 +0,0 @@ - - - - Microsoft.ML.CpuMath - - - - - This implements a logical array of floats that is automatically aligned for SSE/AVX operations. - To pin and force alignment, call the GetPin method, typically wrapped in a using (since it - returns a Pin struct that is IDisposable). From the pin, you can get the IntPtr to pass to - native code. - - The ctor takes an alignment value, which must be a power of two at least sizeof(float). - - - - - Allocate an aligned vector with the given alignment (in bytes). - The alignment must be a power of two and at least sizeof(Float). - - - - - This implements a logical array of Floats that is automatically aligned for SSE/AVX operations. - This is a thin wrapper around the AlignedArray type implemented in C++. This simply couples - the AlignedArray with a logical size, which does not include padding, while the AlignedArray - size does include padding. - - - - - The value count. - - - - - The logical size of the vector. - - - - - Allocate an aligned vector with the given alignment (in bytes). - The alignment must be a power of two and at least sizeof(Float). - - - - - The physical AligenedArray items. - - - - - The alignment. - - - - - Set and get the value of the vector at the given index. - - The index - The value at the given index - - - - Get the value of the vector at the given index. - - The index - The value at the given index - - - - Assign randomized values to the vector elements via the input function. - - The input rand om function that takes no arguments and returns a float value - - - - Assign zeros to the vector elements. - - - - - Copy the values into dst, starting at slot ivDst and advancing ivDst. - - The destination array - The starting index in the destination array - - - - Copy the values from this vector starting at slot ivSrc into dst, starting at slot ivDst. - The number of values that are copied is determined by count. - - The staring index in this vector - The destination array - The starting index in the destination array - The number of elements to be copied - - - - Copy the values from src, starting at slot index and advancing index, into this vector. - - The source array - The starting index in the source array - - - - Copy the values from src, starting at slot index and advancing index, into this vector, starting at slot ivDst. - The number of values that are copied is determined by count. - - The staring index in this vector - The source array - The starting index in the source array - The number of elements to be copied - - - - Copy the values of src vector into this vector. The src vector must have the same size as this vector. - - The source vector - - - - Get the underlying AlignedArray as IEnumerator<Float>. - - - - - This implements a logical matrix of Floats that is automatically aligned for SSE/AVX operations. - The ctor takes an alignment value, which must be a power of two at least sizeof(Float). - - - - - The logical number values in the matrix - - - - - The logical number of rows - - - - - The logical number of columns - - - - - The physical number of rows - - - - - The physical number of columns - - - - - Allocate an aligned matrix with the given alignment (in bytes). - - - - - Assign randomized values to the matrix elements via the input function. - - The input rand om function that takes no arguments and returns a float value - - - - Assign zeros to the matrix elements. - - - - - Copy the values of src matrix into this matrix. The src matrix must have the same physical and logical size as this matrix. - - The source matrix - - - - This implements a logical row-major matrix of Floats that is automatically aligned for SSE/AVX operations. - The ctor takes an alignment value, which must be a power of two at least sizeof(Float). - - - - - The logical number of rows - - - - - The logical number of columns - - - - - The physical number of rows - - - - - The physical number of columns - - - - - Copy the values into dst, starting at slot ivDst and advancing ivDst. - - The destination array - The starting index in the destination array - - - - Copy the values from src, starting at slot ivSrc and advancing ivSrc. - - The source array - The starting index in the source array - - - - Get the underlying AlignedArray as IEnumerator<Float>. - - - - - This implements a row-major matrix of Floats that is automatically aligned for SSE/AVX operations. - The ctor takes an alignment value, which must be a power of two at least sizeof(Float). - - - - - The logical number of rows - - - - - The logical number of columns - - - - - The physical number of rows - - - - - The physical number of columns - - - - - Copy the values from this matrix, starting from the row into dst, starting at slot ivDst and advancing ivDst. - - The starting row in this matrix - The destination array - The starting index in the destination array - - - - Assign zeros to the values at the indices - - The indices - - - - This implements a logical matrix of Floats that is automatically aligned for SSE/AVX operations. - The ctor takes an alignment value, which must be a power of two at least sizeof(Float). - - - - - Allocate an aligned matrix with the given alignment (in bytes). - - - - - The logical number of rows - - - - - The logical number of columns - - - - - The physical number of rows - - - - - The physical number of columns - - - - - Copy the values into dst, starting at slot ivDst and advancing ivDst. - - The destination array - The starting index in the destination array - - - - Copy the values from this matrix, starting from the row into dst, starting at slot ivDst and advancing ivDst. - - The starting row in this matrix - The destination array - The starting index in the destination array - - - - Copy the values from src, starting at slot ivSrc and advancing ivSrc. - - The source array - The starting index in the source array - - - - Assign zeros to the values at the indices - - The indices - - - - Get the underlying AlignedArray as IEnumerator<Float>. - - - - - Assert the compatibility of the underlying AlignedArray for the input matrix in terms of alignment amount. - - The input matrix - - - - Assert the compatibility of the underlying AlignedArray for the input vector in terms of alignment amount. - - The input vector - - - - Asserts the following: - 1. The compatibility of the underlying AlignedArray for mat in terms of alignment amount. - 2. The compatibility of the underlying AlignedArray for src in terms of alignment amount. - 3. The compatibility of the underlying AlignedArray for dst in terms of alignment amount. - 4. The compatibility of the matrix-vector multiplication mat * src = dst. - - - - - - - - Matrix multiplication: - dst = mat * src - - The multiplier matrix - The source vector - The destination vector - - - - Matrix transpose multiplication: - dst = mat' * src - - The multiplier matrix - The source vector - The destination vector - - - - Count the number of zero bits in the lonest string of zero's from the lowest significant bit of the input integer. - - The input integer - - - - - - - if 's alignment is suitable to SSE instructions. Returns - if 's alignment is ok and otherwise. - - The vector being checked. - Whether is aligned well. - - - - Compute the product of matrix (the matrix is flattened because its type is instead of a matrix) - and a vector . - - Whether to transpose before doing any computation. - If is , is a m-by-n matrix, and the value at the i-th row and the j-th column is indexed by i * n + j in . - If is , would be viewed a n-by-m matrix, and the value at the i-th row and the j-th column in the transposed matrix is indexed by j * m + i in the - original . - A n-by-1 matrix, which is also a vector. - A m-by-1 matrix, which is also a vector. - The truncation level of . For example, if is 2, - will be considered as a 2-by-1 matrix and therefore elements after its 2nd element will be ignored. If no truncation should happen, - set to the length of . - - - - Assign random values using the given random function. - - - - - Set all values to zero. - - - - - Copy the values into dst, starting at slot ivDst and advancing ivDst. - - - - - Copy values from the given src array into this buffer, starting at the given index in src, - - - - - A logical math vector. - - - - - The vector size - - - - - Get the i'th component of the vector. - - - - - The row count - - - - - the column count - - - - - A 2-dimensional matrix. - - - - - Copy the values for the given row into dst, starting at slot ivDst. - - - - - Zero out the items with the given indices. - The indices contain the logical indices to the vectorized representation of the matrix, - which can be different depending on whether the matrix is row-major or column-major. - - - - - Add src to the 128 bits contained in dst. Ignores overflow, that is, the addition is done modulo 2^128. - - - - - Add src to dst. Ignores overflow, that is, the addition is done modulo 2^128. - - - - - Subtract src from the 128 bits contained in dst. Ignores overflow, that is, the subtraction is - done modulo 2^128. - - - - - Subtract src from dst. Ignores overflow, that is, the subtraction is done modulo 2^128. - - - - - Return true if a is less than b. - - - - - Multiple the two 64-bit values to produce 128 bit result. - - - - - Return the number of zero bits on the high end. - - - - - Probability Functions. - - - - - The approximate complimentary error function (i.e., 1-erf). - - The input parameter, of infinite range. - Evaluation of the function - - - - The approximate error function. - - The input parameter, of infinite range. - Evaluation of the function - - - - The inverse error function. - - Parameter in the range 1 to -1. - Evaluation of the function. - - - - The probit function. This has many applications, the most familiar being perhaps - that this is the point "x" at which the standard normal CDF evaluates to the indicated - p value. It is used in establishing confidence intervals. - - The input p value, so in the range 0 to 1. - One interpretation is, the value at which the standard normal CDF evaluates to p. - - - - Interface for "processing" exceptions before they are thrown. This can - be used to add context to the exception, wrap the exception in another one, - totally replace the exception, etc. It is not legal to return null from - Process (unless null was passed in, which really shouldn't happen). - - - - - A string describing the context itself. - - - - - Does standard processing of an exception (typically called after construction - but before it is thrown). - - - - - Mark the exception by setting in the exception - to 1. - - - - - Indicates whether the exception was "marked" the Contracts code. - - - - - Exceptions whose message communicates potentially sensitive information should be - marked using this method, before they are thrown. Note that if the exception already - had this flag set, the message will be flagged with the bitwise or of the existing - flag, alongside the passed in sensitivity. - - - - - This is a convenience method to get the sensitivity of an exception, - as encoded with . If there is no key, then - the message is assumed to be of unknown sensitivity, i.e., it is assumed - that it might contain literally anything. - - The exception to query - The value encoded at the , if it is - a value. If neither of these conditions - hold then is returned. - - - - Sets the assert handler to the given function, returning the previous handler. - - - - - Default exception type (currently InvalidOperationException) - - - - - For signaling bad user input. - - - - - For signaling bad function parameters. - - - - - For signaling null function parameters. - - - - - For signaling null or empty function parameters (strings, arrays, collections, etc). - - - - - For signaling null, empty or white-space function parameters (strings, arrays, collections, etc). - - - - - For signaling errors in decoding information, whether while reading from a file, - parsing user input, etc. - - - - - - For signaling IO failures. - - - - - For signaling functionality that is not YET implemented. - - - - - For signaling functionality that is not implemented by design. - - - - - For signaling schema validation issues. - - - - - CheckUserArg / ExceptUserArg should be used when the validation of user-provided arguments failed. - Typically, this is shortly after the arguments are parsed using CmdParser. - - - - - This documents that the parameter can legally be null. - - - - - This documents that the parameter can legally be null. - - - - - This documents that the parameter can legally be null. - - - - - Intended to be applied to types and members with internal scope to indicate that friend access of this - internal item is OK from another assembly. This restriction applies only to assemblies that declare the - assembly level attribute. Note that this attribute is not - transferable: an internal member with this attribute does not somehow make a containing internal type - accessible. Conversely, neither does marking an internal type make any unmarked internal members accessible. - - - - - This is an assembly level attribute to signal that friend accesses on this assembly should be checked - for usage of . If this attribute is missing, normal access rules for - friends should apply. - - - - diff --git a/W/Debug_Folder/Microsoft.ML.Data.dll b/W/Debug_Folder/Microsoft.ML.Data.dll deleted file mode 100644 index b574f1cb1..000000000 Binary files a/W/Debug_Folder/Microsoft.ML.Data.dll and /dev/null differ diff --git a/W/Debug_Folder/Microsoft.ML.Data.xml b/W/Debug_Folder/Microsoft.ML.Data.xml deleted file mode 100644 index 9ae8dfeac..000000000 --- a/W/Debug_Folder/Microsoft.ML.Data.xml +++ /dev/null @@ -1,14072 +0,0 @@ - - - - Microsoft.ML.Data - - - - - Callback from the CV method to apply the transforms from the train data to the test and/or validation data. - - - - - Callback from the CV method to apply the transforms to the train data. - - - - The environment. - The registration name. - The input data view. - The column to use for splitting data into folds. - Cross validation arguments. - The delegate to create RoleMappedData - The delegate to apply the transforms from the train pipeline to the test data - The scorer - The evaluator - The delegate to create validation data view - The delegate to apply the transforms from the train pipeline to the validation data - The input predictor, for the continue training option - The command string. - Original loader so we can construct correct pipeline for model saving. - Whether to produce the per-instance data view. - - - - - Creates and runs tasks for each fold of cross validation. The split column is used to split the input data into folds. - There are two cases: - 1. The split column is R4: in this case it assumes that the values are in the interval [0,1] and will split - this interval into equal width folds. If the values are uniformly distributed it should result in balanced folds. - 2. The split column is key of known cardinality: will split the whole range into equal parts to form folds. If the - keys are generated by hashing for example, it should result in balanced folds. - - - - - - Take path to expected output model file and return path to output model file for specific fold. - Example: \\share\model.zip -> \\share\model.fold001.zip - - Path to output model file - Current fold - Path to output model file for specific fold - - - - This holds useful base classes for commands that ingest a primary dataset and deal with associated model files. - - - - - Loads multiple artifacts of interest from the input model file, given the context - established by the command line arguments. - - The channel to which to provide output. - Whether we want a predictor from the model file. If - false we will not even attempt to load a predictor. If null we will - load the predictor, if present. If true we will load the predictor, or fail - noisily if we cannot. - The predictor in the model, or null if - was false, or was - null and no predictor was present. - Whether we want the training schema. Unlike - , this has no "hard fail if not present" option. If - this is true, it is still possible for to remain - null if there were no role mappings, or pipeline. - The training schema if - is true, and there were role mappings stored in the model. - The data pipe constructed from the combination of the - model and command line arguments. - - - - Saves to the specified . - - - - - Saves to the specified . - - - - - A set of string literals intended to be "canonical" names for column names intended for particular purpose. - While not part of the public API surface, its primary purpose is intended to be used in such a way as to encourage - uniformity on the public API surface, wherever it is judged where columns with default names should be consumed. - - - - - This class contains information about an overall metric, namely its name and whether it is a vector - metric or not. - - - - - An enum specifying whether the metric should be maximized or minimized while sweeping. 'Info' should be - used for metrics that are irrelevant to the model's quality (such as the number of positive/negative - examples etc.). - - - - - This is an interface for evaluation. It has two methods: and . - Both take a as input. The is assumed to contain all the column - roles needed for evaluation, including the score column. - - - - - Compute the aggregate metrics. Return a dictionary from the metric kind - (overal/per-fold/confusion matrix/PR-curves etc.), to a data view containing the metric. - - - - - Return an containing the per-instance results. - - - - - Get all the overall metrics returned by this evaluator. - - - - - Signature for creating an . - - - - - Signature for creating an . - - The data containing the columns to score - The mapper, already bound to the schema column in - This parameter holds a snapshot of the role mapped training schema as - it existed at the point when was trained, or null if it not - available for some reason - - - - Whether a column should be added, assuming it's not hidden - (i.e.: this doesn't check for hidden - - - - - Determines the scorer component factory (if the given one is null or empty), and creates the schema bound mapper. - - - - - Determine the default scorer for a schema bound mapper. This looks for text-valued ScoreColumnKind - metadata on the first column of the mapper. If that text is found and maps to a scorer loadable class, - that component is used. Otherwise, the GenericScorer is used. - - The host environment.. - The schema bound mapper to get the default scorer.. - An optional suffix to append to the default column names. - - - - Given a predictor, an optional mapper factory, and an optional scorer factory settings, - produces a compatible ISchemaBindableMapper. - First, it tries to instantiate the bindable mapper using the mapper factory. - Next, it tries to instantiate the bindable mapper using the - (this will only succeed if there's a registered BindableMapper creation method with load name equal to the one - of the scorer). - If the above fails, it checks whether the predictor implements - directly. - If this also isn't true, it will create a 'matching' standard mapper. - - - - - This shows the schema of the given , ignoring the data specification - in the parameter. Test code invokes this, hence it is internal. - - - - - Returns the sequence of views passed through the transform chain, last to first. - - - - - This command is essentially chaining together and - , without the need to save the intermediary scored data. - - - - - If user name is null or empty, return null. - Else, if the user name is found in the schema, return the user name. - Else, if the user name equals the default name return null. - Else, throw an error. - - - - - Save the model to the output path. - The method saves the loader and the transformations of dataPipe and saves optionally predictor - and command. It also uses featureColumn, if provided, to extract feature names. - - The host environment to use. - The communication channel to use. - The output file handle. - The predictor. - The training examples. - The command string. - - - - Save the model to the stream. - The method saves the loader and the transformations of dataPipe and saves optionally predictor - and command. It also uses featureColumn, if provided, to extract feature names. - - The host environment to use. - The communication channel to use. - The output model stream. - The predictor. - The training examples. - The command string. - - - - Save the data pipeline defined by dataPipe. If blankLoader is true or the root IDataView is not an IDataLoader, - this persists the root as a BinaryLoader having the same schema. - - - - - Traces back the .Source chain of the transformation pipe up to the moment it no longer can. - Returns all the transforms of and the first data view (a non-transform). - - The transformation pipe to traverse. - The beginning data view of the transform chain - The list of the transforms - - - - This class represents an eager 'preview' of a . - - - - - Each column corresponds to a table of contents entry, describing information about the column - and how values may be extracted. For columns represented physically within the stream this will - include its location within the stream and a codec to decode the bytestreams, and for generated - columns procedures to create them. This structure is used both for those columns that - we know how to access (called alive columns), and those columns we do not know how to access - (either because the value codec or compressions scheme is unrecognized, called a dead column). - - - - - The name of the column. - - - - - The codec we will use to read the values from the stream. This will be null if - and only if this is a dead or generated column. - - - - - The column type of the column. This will be null if and only if this is a dead - column. - - - - - The compression scheme used on this column's blocks. - - - - - The number of rows in each block (except for the last one). - - - - - The offset into the stream where the lookup table for this column is stored. - - - - - The offset into the stream where the metadata TOC entries for this column are - stored. This will be 0 if there is no metadata for this column. - - - - - The index of the column. Note that if there are dead columns, this value may - differ from the corresponding column index as reported by the dataview. - - - - - Whether this is a generated column, that is, something dependent on no actual block data - in the file. - - - - - Constructor for a generated column, which corresponds to no column in the original file, - and has no stored blocks associated with it. The input must - be a ValueMapper mapping a long zero based row index, to some value with the - same type as the raw type in . - - - - - Returns the value mapper for a generated column. Only a valid call if - is the same type as . - - - - - Gets an array, one for each block of this column, describing its location within the file. - This will return null if and only if this is a generated column. - - - - - Fetches the maximum block sizes for both the compressed and decompressed - block sizes, for this column. If there are no blocks associated with this - column, for whatever reason (for example, a data view with no rows, or a generated - column), this will return 0 in both vlaues. - - The maximum value of the compressed block size - (that is, the actual size of the block in stream) among all blocks for this - column - The maximum value of the block size when - decompressed among all blocks for this column - - - - Gets an array containing the metadata TOC entries. This will return null if there - are no entries stored at all, and empty if there is metadata, but none of it was - readable. (To inspect attributes of the unreadable metadata, if any, see - .) All entries will point to metadata with - known codecs and compression schemes. - - - - - Gets an array containing the metadata TOC entries for all "dead" pieces of metadata. This - will return null if there are no metadata stored at all either readable or unreadable, and - empty if there is no unreadable piece of metadata. A piece of metadata is considered "dead" - if either its codec or compression kind is unknown. This is primarily for diagnostic purposes. - - - - - Returns the entry for a valid "live" piece of metadata given a kind. - - - - - Returns the location in the stream just past the end of the metadata table of contents. - If this column has no metadata table of contents defined, this will return 0. This is - primarily for diagnostic purposes. - - - - - - A column can be associated with metadata, in which case it will have one or more table of contents entries, - each represented by one of these entries. - - - - - The kind of the metadata, an identifying name. - - - - - The codec we will use to read the metadata value. If this is null, - the metadata is considered "dead," that is, uninterpretable. - - - - - The compression scheme used on the metadata block. If this is an unknown - type, the metadata is considered "dead," that is, uninterpretable. - - - - - The offset into the stream where the metadata block begins. - - - - - The number of bytes used to store the metadata block. - - - - - Return to the stored entry value as . An example of stored value is - . For implementations of , see , - , and . - - - - - Information on a metadata that could not be interpreted for some reason. - - - - - By calling , we make sure 's content get loaded definitely. - Without calling , could be default value of its type. - - - - - This function returns output schema, , of by translating into - s. If a loads a text column from the input file, its - should contains a with as its . - - of loaded file. - - - - Upper inclusive bound of versions this reader can read. - - - - - The first version that removes DvTypes and uses .NET standard - data types. - - - - - The first version of the format that accommodated DvText.NA. - - - - - The first version of the format that accommodated arbitrary metadata. - - - - - The first version of the format that accommodated slot names. - - - - - Low inclusive bound of versions this reader can read. - - - - - Constructs a new data view loader. - - A seekable, readable stream. Note that the data view loader assumes - that it is the exclusive owner of this stream. - Arguments - Host environment - Whether to leave the input stream open - - - - Creates a binary loader from a . Since the loader code - opens the file, this will always take ownership of the stream, that is, this is always - akin to leaveOpen in the other constructor being false. - - - - - Creates a binary loader from a stream that is not owned by the loader. - This creates its own independent copy of input stream for the binary loader. - - - - - Write the parameters of a loader to the save context. Can be called by , where there's no actual - loader, only default parameters. - - - - - Save a zero-row dataview that will be used to infer schema information, used in the case - where the binary loader is instantiated with no input streams. - - - - - Given the schema and a model context, save an imaginary instance of a binary loader with the - specified schema. Deserialization from this context should produce a real binary loader that - has the specified schema. - - This is used in an API scenario, when the data originates from something other than a loader. - Since our model file requires a loader at the beginning, we have to construct a bogus 'binary' loader - to begin the pipe with, with the assumption that the user will bypass the loader at deserialization - time by providing a starting data view. - - - - - This will attempt to extract a compressed block from the - queue. This returns true if and only if it - succeeded in extracting an item from the queue (even a sentinel block); - that is, if it returns false, then there are no more items to extract - (though, continuing to call this method is entirely possible, and legal, - if convenient). - - - - - Necessary to be called in the event of a premature exiting. This executes - the same recycle-fetch block cycle as , except that - nothing is actually done with the resulting block. This should be called - in a similar fashion as the cursor calls . - - - - - This indicates that this block does not contain any actual information, or - correspond to an actual block, but it will still contain the - index. Sentinel blocks are used to indicate that - there will be no more blocks to be decompressed along a particular pipe, - allowing the pipe worker to perform necessary cleanup. - - - - - Constructor for a sentinel compressed block. (For example, - the pipe's last block, which contains no valid data.) - - - - - Calls from the stream reader worker into will feed - into this collection, and calls from the decompress worker into - will consume this collection. - - - - - This indicates that this block does not contain any actual information, or - correspond to an actual block, but it will still contain the - index. Sentinel blocks are used to indicate that - there will be no more blocks to be decompressed along a particular pipe, - allowing the pipe worker to perform necessary cleanup. - - - - - Constructor for a sentinel compressed block. (For example, - the pipe's last block, which contains no valid data.) - - - - - This is called through reflection so it will appear to have no references. - - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Even in the case with no rows, there still must be valid delegates. This will return - a delegate that simply always throws. - - - - - This is a simple struct to associate a source index with a codec, without having to have - parallel structures everywhere. - - - - - Returns an appropriate generic WritePipe{T} for the given column. - - - - - A class useful for encapsulating both compressed and uncompressed block data. - As the mechanism the compress workers communicate with the writer worker, they - also have a dual usage if is non-null of indicating - a source worker threw an exception. - - - - - Take one guess. - - - - - The length of the block if uncompressed. This quantity is only intended to be - meaningful if the block data is compressed. - - - - - The column index, which is the index of the column as being written, which - may be less than the column from the source dataview if there were preceding - columns being dropped. - - - - - The block sequence number for this column, starting consecutively from 0. - - - - - Constructs a saver for a data view. - - - - - A helper method to query and write metadata to the stream. - - A binary writer, which if metadata exists for the - indicated column the base stream will be positioned just past the end of - the written metadata table of contents, and if metadata does not exist - remains unchanged - The schema to query for metadat - The column we are attempting to get metadata for - The channel to which we write any diagnostic information - The offset of the metadata table of contents, or 0 if there was - no metadata - - - - A utility method to save a column type to a stream, if we have a codec for that. - - The stream to save the description to - The type to save - The number of bytes written to the stream, which will - be zero if we could not save the stream - Returns if have the ability to save this column type. If we do, we write - the description to the stream. If we do not, nothing is written to the stream and - the stream is not advanced. - - - - Attempts to load a type description from a stream. In all cases, in the event - of a properly formatted stream, even if the type-descriptor is not recognized, - the stream will be at the end of that type descriptor. Note that any detected - format errors will result in a throw. - - The stream to load the type description from - A non-null value if the type descriptor was recognized, or null if - it was not - - - - A utility method to save a column type and value to a stream, if we have a codec for that. - - The stream to write the type and value to - The type of the codec to write and utilize - The value to encode and write - The number of bytes written - Whether the write was successful or not - - - - Attempts to load a type description and a value of that type from a stream. - - The stream to load the type description and value from - A non-null value if the type descriptor was recognized, or null if - it was not - A non-null value if the type descriptor was recognized and a value - read, or null if the type descriptor was not recognized - Whether the load of a type description and value was successful - - - - Deserializes and returns a value given a stream and codec. - - - - - This structure is utilized by both the binary loader and binary saver to hold - information on the location of blocks written to an .IDV binary file. - - - - The offset of the block into the file. - - - The byte length of the block on disk. - - - The byte length of the block if decompressed. - - - - Given a codec, write a type description to a stream, from which this codec can be - reconstructed later. This returns the number of bytes written, so that, if this - were a seekable stream, the positions would differ by this amount before and after - a call to this method. - - - - - Attempts to define a codec, given a stream positioned at the start of a serialized - codec type definition. - - The input stream, which whether this returns true or false - will be left at the end of the codec type definition - A codec castable to a generic IValueCodec{T} where - typeof(T)==codec.Type.RawType - Whether the codec type definition was understood. If true the codec has defined - value, and should be usable. If false, the name of the codec was unrecognized. Note that - malformed definitions are detected, this will throw instead of returning either true or - false. - - - - A convenient base class for value writers. - - - - - A convenient base class for value readers. - - - - - A simple codec is useful for those types with no parameterizations. - - - - - This codec is for use with types that have UnsafeTypeOps operations defined. - Generally, this corresponds to numeric types that can be safely blitted. - - - - - This is a boolean code that reads from a form that serialized - 1 bit per value. The old encoding (implemented by a different codec) - uses 2 bits per value so NA values can be supported. - - - - - A code indicating the kind of compression. It is supposed that each kind of compression is totally - sufficient to describe how a given stream should be decompressed. - - - - - Generate an appropriate wrapping compressing stream for the codec. This - stream will be closable and disposable, without closing or disposing of - the passed in stream. The scheme for compression is not in any way - parameterizable. - - The compression codec - The stream to which compressed data will be written - A stream to which the user can write uncompressed data - - - - Generate an appropriate wrapping decompressing stream for the codec. - - The compression codec - The stream from which compressed data will be written - A stream from which the user can read uncompressed data - - - - The fixed header size. This should not be changed even in future versions of the format. - - - - - The header must start with this signature. This number will - appear as the eight-byte sequence "CML\0DVB\0" if encoded in - little-endian. (CML DVB is meant to suggest CloudML DataView binary). - - - - - The file must end with this value. Is is simply the - byte-order-reversed version of the head signature. - - - - - The current version of the format this software can write. - - - - - The magic number of this file. - - - - - Indicates the version of the data file. - - - - - Indicates the minimum reader version that can interpret this file, possibly - with some data loss. - - - - - The offset to the table of contents structure where the column type definitions - are stored. - - - - - The eight-byte tail signature starts at this offset. So, the entire dataset - stream should be considered to have eight plus this value bytes. - - - - - The number of rows in this data file. - - - - - The number of columns in this data file. - - - - - A value codec encapsulates implementations capable of writing and reading data of some - type to and from streams. The idea is that one creates a codec using TryGetCodec - on the appropriate ColumnType, then opens multiple writers to write blocks of data - to some stream. The idea is that each writer or reader is called on some "manageable chunk" - of data. - - Codecs should be thread safe, though the readers and writers they spawn do not need to - be thread safe. - - - - - This is the codec's identifying name. This is utilized both by the codec factory's - WriteTypeDescription and TryGetCodec, for persisting and recovering - the codec, respectively. - - - - - Writes the codec parameterization to the stream. (The parameterization - is the third part of the codec type description, after the name, and length - of the parameterization.) - - The number of bytes written to the stream - - - - The column type for this codec. - - - - - The generic value codec. - - The type for which we can spawn readers and writers. - Note that Type.RawType == typeof(T). - - - - Returns a writer for this codec, capable of writing a series of values to a block - starting at the current position of the indicated writable stream. - - - - - Returns a reader for this codec, capable of reading a series of values to a block - starting at the current position of the indicated readable stream. - - Stream on which we open reader. - The number of items expected to be encoded in the block - starting from the current position of the stream. Implementors should, if - possible, throw if it seems if the block contains a different number of - elements. - - - - Finishes writing to the stream. No further values should be written using the - Write methods. Note that failure to commit does not leave the stream in - a defined state: something or nothing could have already been written to the - stream, and the writer has no facilities to "rewind" whatever writes it may - have performed. - - - - - Returns an estimate of the total length that would be written to the stream - were we to commit right now. This may be called very often in some circumstances, - so implementors should optimize for speed over accuracy. - - - - - A value writer on a particular type. The intent is that implementors of this will - be spawned from an , its write methods called some - number of times to write to the stream, and then Commit will be called when - all values have been written, the stream now being at the end of the written block. - - The intended usage of the value writers is that blocks are composed of some small - number of values (perhaps a few thousand), the idea being that a block is something - that should easily fit in main memory, both for reading and writing. Some writers - take advantage of this to organize their values for more efficient reading. - - - - - Writes a single value to the writer. - - - - - Writes a span of values. This should be equivalent to writing each element - singly, though possibly more efficient than such a naive implementation. - - - - - A value reader on a particular type. As with writers, implementors of this will be - spawned form an . Its read methods will be called some - number of times to read from the stream. The read methods should be used to read - precisely the same number of times as was written to the block. if you read more, - then the values returned past the last will be undefined, and in either case the - stream will be left in an undefined state. Implementors may optionally complain in - such a case, but many will not, so outside knowledge should be used by the user - to ensure bad behavior does not happen. (For example, if you have a writer that - just writes packed binary values with no descriptive information, the corresponding - read will have no ability to tell when it is supposed to "end.") - - - - - Moves to the next element. - - - - - Gets the current element. - - - - - Reads into an array of values. This should be roughly equivalent to calling MoveNext - then Get into an array on each element singly, though possibly more efficient than - such a naive implementation. It may also diverge from that, in that Get's behavior - before the next MoveNext is undefined when this function is called. - - - - - Given a byte size, returns an appropriate index to . - This is a non-decreasing function w.r.t. . - - - - - Write the data to the given stream. This requires that FetchData was previously called. - - - - - Returns the string representation of a separator: helpful if it's whitespace or a punctuation mark. - - - - - Converts a ReadOnlySpan to a StringBuilder using TextSaver escaping and string quoting rules. - - - - - The transposed loader reads the transposed binary format. This binary format, at a high level, is nothing more - than, for a dataview with "c" columns, "c+1" binary IDVs glued together. We call these sub-IDVs. The first of these, - the master sub-IDV stores the overall schema, and optionally the data in row-wise format. - - - - - - The fixed header size. This should not be changed even in future versions of the format. - - - - - The header must start with this signature. This number will - appear as the eight-byte sequence "XPOSEDDV" if encoded in - little-endian. (XPOSEDDV is meant to suggest transposed DataView). - - - - - The file must end with this value. Is is simply the - byte-order-reversed version of the head signature. - - - - - The current version of the format this software can write. - - - - - The magic number of this file. - - - - - Indicates the version of the data file. - - - - - Indicates the minimum reader version that can interpret this file, possibly - with some data loss. - - - - - The offset to the list of the directory of the sub-IDV structures. - - - - - The eight-byte tail signature starts at this offset. So, the entire dataset - stream should be considered to have eight plus this value bytes. - - - - - The number of rows. - - - - - The number of columns. There will be this + 1 entries in the sub-IDV table - offset structure. - - - - - A sub-IDV entry corresponds to an offset and length within the transposed file, that points - either to a block binary-IDV formatted data if the offset is positive, or indicates that there - is no corresponding IDV entry if the offset is zero. - - - - - Is true when this sub-IDV appears to exist, without actually loading that sub-IDV. - If this returns true, will either return a non-null - value, or throw some sort of formatting error. - - - - - Reads the table of contents entry from the file, advancing the binary loader stream. - - - - - Constructs an empty table of contents entry, with no offset. - - - - - Gets the dataview corresponding to this sub-IDV entry. This will - lazily load the file, if it has not previously been requested. This - will return null if the offset is 0. - - - - - Called once, to verify that the lazily read dataview is "correct." Called by - once it has been read. Any problems with the data-view - should be handle with or by throwing - , as we consider the views not adhering to - standards to be a file formatting issue. Note that this will never be called if - the offset field is zero. - - - - - This is the entry corresponding to the first IDV entry in the file, which will hold - at least the schema information for all columns. There should be one of these per - file. Optionally, this file can also hold the row-wise data stored as well, in case - the user wanted to have the hybrid row/slotwise store. For this one, it is illegal - for the offset to be zero. - - - - - This is the entry corresponding to the transposed columns. There will be one of - these per column, though some entries will not actually have a corresponding - dataview (for example, they will have an offset of 0) if the column was not one selected - for slot-wise transposition. - - - - - Returns an empty sub-IDV entry for the no-file case. - - - - - Low inclusive bound of versions this reader can read. - - - - - Upper inclusive bound of versions this reader can read. - - - - - Whether the master schema sub-IDV has the actual data. - - - - - Save a zero-row dataview that will be used to infer schema information, used in the case - where the tranpsose loader is instantiated with no input streams. - - - - - Initializes the transpose cursors and getters for a column. - - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Saver for a format that can be loaded using the . - - - - - - Constructs a saver for a data view. - - - - - This class represents a data loader that applies a transformer chain after loading. - It also has methods to save itself to a repository. - - - - - The underlying data loader. - - - - - The chain of transformers (possibly empty) that are applied to data upon loading. - - - - - Produce the data view from the specified input. - Note that 's are lazy, so no actual loading happens here, just schema validation. - - - - - Append a new transformer to the end. - - The new composite data loader - - - - An estimator class for composite data loader. - It can be used to build a 'trainable smart data loader', although this pattern is not very common. - - - - - Create a new loader estimator, by appending another estimator to the end of this loader estimator. - - - - - The output that will be produced by the loader. - - - - - Loads data from into an . - - The source from which to load data. - - - - Describes how an input column should be mapped to an column. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - Name of the column. - of the items in the column. - Index of the column. - - - - Initializes a new instance of the class. - - Name of the column. - of the items in the column. - The minimum inclusive index of the column. - The maximum-inclusive index of the column. - - - - Initializes a new instance of the class. - - Name of the column. - of the items in the column. - Source index range(s) of the column. - For a key column, this defines the range of values. - - - - Name of the column. - - - - - of the items in the column. - - - - - Source index or name range(s) of the column. - - - - - For a key column, this defines the range of values. - - - - - Specifies the range of indices or names of input columns that should be mapped to an output column. - - - - - A range representing a single value. Will result in a scalar column. - - The index of the field of the table to read. - - - - A range representing a single value. Will result in a scalar column. - - The name of the field of the table to read. - - - - A range representing a set of values. Will result in a vector column. - - The minimum inclusive index of the column. - The maximum-inclusive index of the column. - - - - The minimum index of the column, inclusive. - - - This value is ignored if is not null. - - - - - The maximum index of the column, inclusive. - - - This value is ignored if is not null. - - - - - The name of the input column. - - - This value, if non-null, overrides and . - - - - - Force scalar columns to be treated as vectors of length one. - - - - - The settings for - - - - - Specifies the input columns that should be mapped to columns. - - - - - Used as an input column range. - - - - - Information for an output column. - - - - - [i] stores the i-th column's name and type. Columns are loaded from the input database. - - - - - Construct a out of the DbType and the keyCount. - - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - Exposes the data required for opening a database for reading. - - - Creates a new instance of the class. - The factory used to create the .. - The string used to open the connection. - The text command to run against the data source. - - - Creates a new instance of the class. - The factory used to create the .. - The string used to open the connection. - The text command to run against the data source. - The timeout(in seconds) for database command. - - - Gets the timeout for database command. - - - Gets the text command to run against the data source. - - - Gets the string used to open the connection. - - - Gets the factory used to create the . - - - - Maps a to the associated .Net representation type. - - - - Maps a to the associated . - - - - Allow member to specify mapping to field(s) in database. - To override name of column use . - - - - - Maps member to specific field in database. - - The name of the field in the database. - - - - Maps member to set of fields in database. - - Distinct database field names to load as part of this column. - - - - Represents a chain (potentially empty) of estimators that end with a . - If the chain is empty, is always . - - - - - Create an empty estimator chain. - - - - - Append a 'caching checkpoint' to the estimator chain. This will ensure that the downstream estimators will be trained against - cached data. It is helpful to have a caching checkpoint before trainers or feature engineering that take multiple data passes. - It is also helpful to have after a slow operation, for example after dataset loading from a slow source or after feature - engineering that is slow on its apply phase, if downstream estimators will do multiple passes over the output of this operation. - Adding a cache checkpoint at the begin or end of an is meaningless and should be avoided. - Cache checkpoints should be removed if disk thrashing or OutOfMemory exceptions are seen, which can occur on when the featured - dataset immediately prior to the checkpoint is larger than available RAM. - - The host environment to use for caching. - - - - A fake schema that is manufactured out of a SchemaShape. - It will pretend that all vector sizes are equal to 10, all key value counts are equal to 10, - and all values are defaults (for annotations). - - - - - A data loader that wraps an underlying loader plus a sequence of transforms. - It is not valid to have nested 's: if a - is an underlying loader, the resulting loader will 'flatten' the structure. - The family of Create methods only instantiate 's - when there are transforms to keep, otherwise they just return underlying loaders. - - - - - Returns the underlying data view of the composite loader. - This can be used to programmatically explore the chain of transforms that's inside the composite loader. - - - - - Creates a loader according to the specified . - If there are transforms, then the result will be a , - otherwise, it'll be whatever is specified in args.loader. - - - - - Creates a that starts with the , - and follows with transforms created from the array. - If there are no transforms, the is returned. - - - - - Appends transforms to the and returns a loader that contains these new transforms. - If there are no transforms to append, returns intact, otherwise creates a - . The transforms are created by sequentially invoking the provided lambda, - one time for each element of . - - The host environment. - The source loader. - The array of (tag, creationInfo) pairs. Can be an empty array or null, in which case - the function returns . - The delegate to invoke at each transform creation. - Delegate parameters are: host environment, transform index (0 to tagData.Length), source data view. - It should return the that should share the same loader as the source data view. - The resulting data loader. - - - - Apply one transform to the data loader, and returns a (composite) data loader that contains the result. - The transform is created by invoking the lambda for a data source, and it should return an - that shares the same loader as the provided source. - - - - - Loads the entire composite data loader (loader + transforms) from the context. - If there are no transforms, the underlying loader is returned. - - - - - Creates a from the specified source loader, followed by - the transforms that are loaded from the , tags filtered by - by the . - If the contains no accepted transforms, the is - returned intact. - - - - - Loads all transforms from the that pass the test, - applies them sequentially to the , and returns the resulting data view. - If there are no transforms in that are accepted, returns the original . - The difference from the Create method above is that: - - it doesn't wrap the results into a loader, just returns the last transform in the chain. - - it accepts as input, not necessarily a loader. - - it throws away the tag information. - - it doesn't throw if the context is not representing a : in this case it's assumed that no transforms - meet the test, and the is returned. - Essentially, this is a helper method for the LoadTransform class. - - - - - Loads all transforms from the that pass the test, - applies them sequentially to the , and returns the (composite) data loader. - - - - - Save the loader and transforms (if any) to the repository. - This is intended to be used by API, where the components are not part of the same - . - - Environment context - The context to write to. - The code to save the loader. - The transforms. Empty list and null are both allowed. - - - - Wraps a potentially compound path as an IMultiStreamSource. - - Expands wild cards and supports multiple paths separated by +, or loads all the files of a subfolder, - if the syntax for the path is 'FolderPath/...' (separator would be OS relevant). - - - - - Initializes a new instance of . - In case of usage from Maml, the paths would be wildcard concatenated in the first string of . - - The paths of the files to load. - - The provided can utilize wildcards to load all source files. For example: - paths = "Data/*" includes all files in directory Data - paths = "DataFolder/.../*" includes all files in all subdirectories inside directory Data. - paths = "Data1/*", "Data2/*" includes all files in directories Data1 and Data2 - - - - - Wraps an as an IMultiStreamSource. - - - - Provides a thread-safe queue that supports blocking takes when empty and blocking adds when full. - Specifies the type of data contained. - - - The underlying queue storing all elements. - - - A semaphore that can be waited on to know when an item is available for taking. - - - A semaphore that can be waited on to know when space is available for adding. - - - Initializes the blocking queue. - The maximum number of items the queue may contain. - - - Cleans up all resources used by the blocking collection. - - - Adds an item to the blocking collection. - The item to add. - The time to wait, in milliseconds, or -1 to wait indefinitely. - - true if the item was successfully added; false if the timeout expired or if the collection were marked - as complete for adding before the item could be added. - - - - Tries to take an item from the blocking collection. - The item removed, or default if none could be taken. - The time to wait, in milliseconds, or -1 to wait indefinitely. - - true if the item was successfully taken; false if the timeout expired or if the collection is empty - and has been marked as complete for adding. - - - - - Gets an enumerable for taking all items out of the collection until - the collection has been marked as complete for adding and is empty. - - - - Mark the collection as complete for adding. - After this is called, no calls made on this queue will block. - - - - A basic monitor-based semaphore that, in addition to standard Wait/Release semantics, - also supports marking the semaphore as completed, in which case all waiters immediately - fail if there's no count remaining. - - - - The remaining count in the semaphore. - - - The number of threads currently waiting in Wait. - - - Initializes the semaphore with the specified initial count. - The initial count. - - - Gets whether the semaphore has been marked as completed. - - If completed, no calls to Wait will block; if no count remains, regardless of timeout, Waits will - return immediately with a result of false. - - - - Releases the semaphore once. - - - Blocks the current thread until it can enter the semaphore once. - The maximum amount of time to wait to enter the semaphore, or -1 to wait indefinitely. - true if the semaphore was entered; otherwise, false. - - - Marks the semaphore as completed, such that no further operations will block. - - - - Allow member to specify mapping to field(s) in text file. - To override name of column use . - - - - - Maps member to specific field in text file. - - The index of the field in the text file. - - - - Maps member to range of fields in text file. - - The starting field index, for the range. - The ending field index, for the range. - - - - Maps member to set of fields in text file. - - Distinct text file field indices to load as part of this column. - - - - Loads a text file into an IDataView. Supports basic mapping from input columns to columns. - - - - - Describes how an input column should be mapped to an column. - - - - - Describes how an input column should be mapped to an column. - - - - - Describes how an input column should be mapped to an column. - - Name of the column. - of the items in the column. - Index of the column. - - - - Describes how an input column should be mapped to an column. - - Name of the column. - of the items in the column. - The minimum inclusive index of the column. - The maximum-inclusive index of the column. - - - - Describes how an input column should be mapped to an column. - - Name of the column. - of the items in the column. - Source index range(s) of the column. - For a key column, this defines the range of values. - - - - Describes how an input column should be mapped to an column. - - Name of the column. - of the items in the column. - Source index range(s) of the column. - For a key column, this defines the range of values. - - - - Name of the column. - - - - - of the items in the column. It defaults to float. - Although is internal, 's information can be publicly accessed by . - - - - - of the items in the column. - - It's a public interface to access the information in an internal DataKind. - - - - Source index range(s) of the column. - - - - - For a key column, this defines the range of values. - - - - - Returns true iff the ranges are disjoint, and each range satisfies 0 <= min <= max. - - - - - Specifies the range of indices of input columns that should be mapped to an output column. - - - - - A range representing a single value. Will result in a scalar column. - - The index of the field of the text file to read. - - - - A range representing a set of values. Will result in a vector column. - - The minimum inclusive index of the column. - The maximum-inclusive index of the column. If null - indicates that the should auto-detect the legnth - of the lines, and read until the end. - - - - The minimum index of the column, inclusive. - - - - - The maximum index of the column, inclusive. If - indicates that the should auto-detect the legnth - of the lines, and read until the end. - If max is specified, the fields and are ignored. - - - - - Whether this range extends to the end of the line, but should be a fixed number of items. - If is specified, the fields and are ignored. - - - - - Whether this range extends to the end of the line, which can vary from line to line. - If is specified, the fields and are ignored. - If is , then is ignored. - - - - - Whether this range includes only other indices not specified. - - - - - Force scalar columns to be treated as vectors of length one. - - - - - The settings for - - - - - Whether the input may include double-quoted values. This parameter is used to distinguish separator characters - in an input value from actual separators. When , separators within double quotes are treated as part of the - input value. When , all separators, even those within quotes, are treated as delimiting a new column. - - - - - Whether the input may include sparse representations. For example, a row containing - "5 2:6 4:3" means that there are 5 columns, and the only non-zero are columns 2 and 4, which have values 6 and 3, - respectively. Column indices are zero-based, so columns 2 and 4 represent the 3rd and 5th columns. - A column may also have dense values followed by sparse values represented in this fashion. For example, - a row containing "1 2 5 2:6 4:3" represents two dense columns with values 1 and 2, followed by 5 sparsely represented - columns with values 0, 0, 6, 0, and 3. The indices of the sparse columns start from 0, even though 0 represents the third column. - - In addition, should be used when the number of sparse elements (5 in this example) is not present in each line. - It should specify the total size, not just the size of the sparse part. However, indices of the spars part are relative to where the sparse part begins. - If is set to 7, the line "1 2 2:6 4:3" will be mapped to "1 2 0 0 6 0 4", but if set to 10, the same line will - be mapped to "1 2 0 0 6 0 4 0 0 0". - - - - - Number of source columns in the text data. Default is that sparse rows contain their size information. - - - - - The characters that should be used as separators column separator. - - - - - The character that should be used as the decimal marker. Default value is '.'. Only '.' and ',' are allowed to be decimal markers. - - - - - Specifies the input columns that should be mapped to columns. - - - - - Wheter to remove trailing whitespace from lines. - - - - - Whether the file has a header with feature names. When , the loader will skip the first line when - is called. The sample can be used to infer slot name annotations if present. - - - - - Whether to use separate parsing threads. - - - - - If true, new line characters are acceptable inside a quoted field, and thus one field can have multiple lines of text inside it - If is false, this option is ignored. - - - - - File containing a header with feature names. If specified, the header defined in the data file is ignored regardless of . - - - - - Maximum number of rows to produce. - - - - - Character to use to escape quotes inside quoted fields. It can't be a character used as separator. - - - - - If true, missing real fields (i.e. double or single fields) will be loaded as NaN. - If false, they'll be loaded as 0. Default is false. - A field is considered "missing" if it's empty, if it only has whitespace, or if there are missing columns - at the end of a given row. - - - - - Checks that all column specifications are valid (that is, ranges are disjoint and have min<=max). - - - - - Used as an input column range. - A variable length segment (extending to the end of the input line) is represented by Lim == SrcLim. - - - - - Be careful with this ctor. lim == SrcLim means that this segment extends to - the end of the input line. If that is not the intent, pass in Min(lim, SrcLim - 1). - - - - - Defines a segment that extends from min to the end of input. - - - - - Information for an output column. - - - - - [i] stores the i-th column's name and type. Columns are loaded from the input text file. - - - - - [i] stores the i-th column's metadata, named - in . - - - - - Empty if is , no header presents, or upon load - there was no header stored in the model. - - - - - Option flags. These values are serialized, so changing the values requires - bumping the version number. - - - - - Loads a text file into an . Supports basic mapping from input columns to IDataView columns. - - The environment to use. - Defines the settings of the load operation. - Allows to expose items that can be used for loading. - - - - See if we can extract valid arguments from the first data file. If so, update options and set cols to the combined set of columns. - If not, set error to true if there was an error condition. - - - Not all arguments are extracted from the data file. There are three arguments that can vary from iteration to iteration and that are set - directly by the user in the options class. These three arguments are: - , - , - - - - - - Checks whether the source contains the valid TextLoader.Options depiction. - - - - - Convenience method to create a and use it to load a specified file. - - - - - The output that will be produced by the loader. - - - - - Loads data from into an . - - The source from which to load data. - - - - - - - - - Look in the first file for args embedded as comments. This gathers comments - that come before any data line that start with #@. - - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - This type exists to provide efficient delegates for creating a ColumnValue specific to a DataKind. - - - - - Basic statistics and reporting of unparsable stuff. - - - - - Takes the number of blocks, number of rows per block, and number of columns. - - - - - This is info tracked while scanning a line to find "fields". For each line, the first - several values, Path, Line, LineText, IchMinText, and IchLimText, are unchanging, but the - remaining values are updated for each field processed. - - - - - Path for the input file containing the given line (may be null). - - - - - Line number. - - - - - The current text for the entire line (all fields), and possibly more. - - - - - The min position in to consider (all fields). - - - - - The lim position in to consider (all fields). - - - - - Where to start for the next field. This is both an input and - output to the code that fetches the next field. - - - - - The (unquoted) text of the field. - - - - - Whether there was a quoting error in the field. - - - - - For sparse encoding, this is the index of the field. Otherwise, -1. - - - - - The start character location in , including the sparse index - and quoting, if present. Used for logging. - - - - - The end character location in , including the sparse index - and quoting, if present. Used for logging. - - - - - Initializes the ScanInfo. - - - - - This holds a set of raw text fields. This is the input into the parsing - of the individual typed values. - - - - - Make sure there is enough space to add one more item. - - - - - Returns a of with trailing whitespace trimmed. - - - - - This is an abstraction containing all the useful stuff for splitting a raw line of text - into a FieldSet. A cursor has one of these that it passes in whenever it wants a line - parsed. - - - - - Check if the given char is a separator. - - - - - Process the line of text into fields, stored in the Fields field. Ensures that sparse - don't precede non-sparse. Returns the lim of the src columns. - - - - - This enum allows for 'tagging' the estimators (and subsequently transformers) in the chain to be used - 'only for training', 'for training and evaluation' etc. - Most notable example is, transformations over the label column should not be used for scoring, so the scope - should be or . - - - - - Used to determine if object is of type - so that its internal fields can be accessed. - - - - - A chain of transformers (possibly empty) that end with a . - For an empty chain, is always . - - - - - Create a transformer chain by specifying transformers and their scopes. - - Transformers to be chained. - Transformer scopes, parallel to . - - - - Create a transformer chain by specifying all the transformers. The scopes are assumed to be - . - - - - - - The loading constructor of transformer chain. Reverse of . - - - - - Saving/loading routines for transformer chains. - - - - - Save any transformer to a stream by wrapping it into a transformer chain. - - - - - This is a shim class to present the legacy interface as an . - Note that there are some important differences in usages that make this shimming somewhat non-seamless, so the goal - would be gradual removal of this as we do away with based code. - - - - - Estimator for trained wrapped transformers. - - - - - The trivial implementation of that already has - the transformer and returns it on every call to . - - Concrete implementations still have to provide the schema propagation mechanism, since - there is no easy way to infer it from the transformer. - - - - - The trivial wrapper for a that acts as an estimator and ignores the source. - - - - - This class provides the functionality to combine multiple IDataView objects which share the same schema - All sources must contain the same number of columns and their column names, sizes, and item types must match. - The row count of the resulting IDataView will be the sum over that of each individual. - - An AppendRowsDataView instance is shuffleable iff all of its sources are shuffleable and their row counts are known. - - - - - Create a dataview by appending the rows of the sources. - - All sources must be consistent with the passed-in schema in the number of columns, column names, - and column types. If schema is null, the first source's schema will be used. - - The host environment. - The schema for the result. If this is null, the first source's schema will be used. - The sources to be appended. - The resulting IDataView. - - - - Returns whether the given column is active in this row. - - - - - The deterministic cursor. It will scan through the sources sequentially. - - - - - A RandCursor will ask each subordinate cursor to shuffle itself. - Then, at each step, it randomly calls a subordinate to move next with probability (roughly) proportional to - the number of the subordinate's remaining rows. - - - - - Given k classes with counts (N_0, N_2, N_3, ..., N_{k-1}), the goal of this sampler is to select the i-th - class with probability N_i/M, where M = N_0 + N_1 + ... + N_{k-1}. - Once the i-th class is selected, its count will be updated to N_i - 1. - - For efficiency consideration, the sampling distribution is only an approximation of the desired distribution. - - - - - This is a class for composing an in memory IDataView. - - - - - Verifies that the input array to one of the add routines is of the same length - as previously added arrays, assuming there were any. - - - - - Constructs a new column from an array where values are copied to output simply - by being assigned. Output values are returned simply by being assigned, so the - type should be a type where assigning to a different - value does not compromise the immutability of the source object (so, for example, - a scalar, string, or ReadOnlyMemory would be perfectly acceptable, but a - HashSet or VBuffer would not be). - - - - - Constructs a new key column from an array where values are copied to output simply - by being assigned. - - The name of the column. - The delegate that does a reverse lookup based upon the given key. This is for annotation creation - The count of unique keys specified in values - The values to add to the column. Note that since this is creating a column, the values will be offset by 1. - - - - Creates a column with slot names from arrays. The added column will be re-interpreted as a buffer. - - - - - Creates a column from arrays. The added column will be re-interpreted as a buffer. - - - - - Creates a column with slot names from arrays. The added column will be re-interpreted as a buffer and possibly sparsified. - - - - - Creates a column from arrays. The added column will be re-interpreted as a buffer and possibly sparsified. - - - - - Adds a VBuffer{T} valued column. - - - - - Adds a VBuffer{T} valued column. - - - - - Adds a ReadOnlyMemory valued column from an array of strings. - - - - - Constructs a data view from the columns added so far. Note that it is perfectly acceptable - to continue adding columns to the builder, but these additions will not be reflected in the - returned dataview. - - - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Produce the output value given the index. - - - - - Assigns dst in such a way that the caller has ownership of dst without - compromising this object's ownership of src. What that operation will be - will depend on the types. - - - - - Produce the output value given the index. This overload utilizes the CopyOut - helper function. - - - - - A column where the input and output types are the same, and simple assignment does - not compromise ownership of the internal vlaues. - - - - - A convenience column for converting strings into textspans. - - - - - A utility function for subclasses that want to get the type with a dimension based - on the input value array and some length function over the input type. - - - - - A column of buffers. - - - - - This is a dataview that wraps another dataview, and does on-demand caching of the - input columns. When constructed, it caches no data. Whenever a cursor is constructed - that requests a column that has not yet been cached, any requested uncached columns - become cached through a background thread worker. A user can provide a hint to the - constructor to indicate that some columns should be pre-cached. A cursor over this - dataview will block when moved to a row until such time as all requested columns - have that row in cache. - - - - - Cursors can be opened from multiple threads simultaneously, so this is used to - synchronize both at the level of ensuring that only one cache is created per - column. - - - - - Filler threads. Currently nothing is done with them. Possibly it may be good - practice to join against them somehow, but IDataViews as this stage are not - disposed, so it's unclear what would actually have the job of joining against - them. - - - - - One cache per column. If this column is not being cached or has been cached, - this column will be null. - - - - - A waiter used for cursors where no columns are actually requested but it's still - necessary to wait to determine the number of rows. - - - - - Constructs an on demand cache for the input. - - The host environment - The input dataview to cache. Note that if we do not know - how to cache some columns, these columns will not appear in this dataview. - A list of column indices the cacher should frontload, - prior to any cursors being requested. This can be null to indicate no - prefetching. - - - - Since shuffling requires serving up items potentially out of order we need to know - how to save and then copy out values that we read. This transform knows how to save - and copy out only primitive and vector valued columns, but nothing else, so any - other columns are dropped. - - - - - While in typical cases the cache data view will know how to cache all columns, - the cache data view may not know how to cache certain custom types. User code - may require a mapping from input data view to cache data view column index space. - - An input data column index - The column index of the corresponding column in the cache data view - if this was cachable, or else -1 if the column was not cachable - - - - Return the number of rows if available. - - - - - Returns a permutation or null. This function will return null if either - is null, or if the row count of this cache exceeds the maximum array size. - - - - - This is a helper method that, given a list of columns, determines the subset - that are uncached, and if there are any uncached kicks off a filler worker to - fill them in, over a row cursor over this subset of columns. - - The requested set of columns - - - - - The actual body of the filler worker. The filler worker works fairly simply: - for each row, it tells each instance in - to fill in the value at the current position, - then increments the , then moves to the next row. - When it's done, it tells to "freeze" itself, since - there should be no more rows. - The cursor over the rows to cache - The caches we must fill and, at the end of the cursor, freeze - The waiter to increment as we cache each additional row - - - - - Joins all the cache filler threads. This method is currently supposed to be called only by tests. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Returns whether the given column is active in this row. - - - - - Blocks until that position is either available, or it has been - determined no such position exists. Implicit in a true return value - for this is that any values of less than are - also true, that is, if one waits on i, when this returns it - is equivalent to also having waited on i-1, i-2, etc. - Note that this is position within the cache, that is, a row index, - as opposed to position within the cursor. - - This method should be thread safe because in the parallel cursor - case it will be used by multiple threads. - - The position to wait for, must be positive - True if the position can be accessed, false if not - - - - A waiter for use in situations where there is no real waiting, per se, just a row limit. - This should be instantiated only if the analogous - returned true. - - - - - A waiter that determines the necessary waiters for a set of active columns, and waits - on all of them. - - - - - If this is true, then a could be used instead. - - - - - A collection of different simple objects that track the index into the cache at - particular location. Note that this index is, in the shuffled or parallel case, - very different from the position of the cursor that keeps this indexer. - - - - - The index. Callers should never call this either before one of the move - methods has returned true, or ever after either has returned false. - - - - - An ID getter, which should be based on the value that would be returned - from , if valid, and otherwise have undefined behavior. - - - - - Moves to the next index. Once this has returned false, it should never be called again. - (This in constrast to public objects, whose move methods are - robust to that usage.) - - Whether the next index is available. - - - - An where the indices, while valid, are sequential increasing - adjacent indices. - - - - - A simple job scheduler that assigns available jobs (batches/blocks for processing) to - free workers (cursors/threads). This scheduler takes the ids of the completed jobs into - account when assigning next jobs in order to minimize workers wait time as the consumer - of the completed jobs (a.k.a consolidator, see: DataViewUtils.ConsolidateGeneric) can - only consume jobs in order -according to their ids-. Note that workers get assigned - next job ids before they push the completed jobs to the consumer. So the workers are - then subject to being blocked until their current completed jobs are fully accepted - (i.e. added to the to-consume queue). - - How it works: - Suppose we have 7 workers (w0,..,w6) and 14 jobs (j0,..,j13). - Initially, jobs get assigned to workers using a shared counter. - Here is an example outcome of using a shared counter: - w1->j0, w6->j1, w0->j2, w3->j3, w4->j4, w5->j5, w2->j6. - - Suppose workers finished jobs in the following order: - w5->j5, w0->j2, w6->j1, w4->j4, w3->j3,w1->j0, w2->j6. - - w5 finishes processing j5 first, but will be blocked until the processing of jobs - j0,..,j4 completes since the consumer can consume jobs in order only. - Therefore, the next available job (j7) should not be assigned to w5. It should be - assigned to the worker whose job *get consumed first* (w1 since it processes j0 - which is the first job) *not* to the worker who completes its job first (w5 in - this example). - - So, a shared counter can be used to assign jobs to workers initially but should - not be used onwards. - - - - - An that shares a counter among multiple threads. The multiple threads divy up - the work by blocks of rows rather than splitting row by row simply, both to cut down on interthread - communication as well as increased locality of thread data access. - - - - - An that shares a counter among multiple threads. The multiple threads divy up - the work by blocks of rows rather than splitting row by row simply, to cut down on interthread - communication. - - - - - Returns whether the given column is active in this row. - - - - - A cache of values from a single column. The filler worker fills these in row - by row, and increments the associated waiter. The consumer for the cache - waits on the associated waiter (if non-null), then fetches values as it - determines rows are valid. - - - - - The ordered waiter on row indices, indicating when a row index is valid, - or null if it is no longer necessary to wait on this column, that is, - it is completely filled in. Multiple columns can share a single waiter - since often multiple columns are being cached simultaneously, so this - object is not unqiue to this column. - - - - - Creates a cache pipe, over a particular column in a cursor. - - The cache data view for which we are a cache - The cursor to read from - The column of the cursor we are wrapping. - The waiter for the filler associated with this column - - - - - Utilized by the filler worker, to fill in the cache at the current position of the cursor. - The filler worker will have moved the cursor to the next row prior to calling this, so - overrides will merely get the value at the current position of the cursor. - - - - - Utilized by the filler worker, to indicate to the cache that it will not be receiving - any more values through . - - - - - Utilized by the consumer to get a value in the cache at an index. The - consumer should coordinate with the member to ensure - that the row is valid. - - - - - A row-to-row mapper that is the result of a chained application of multiple mappers. - - - - - Out of a series of mappers, construct a seemingly unitary mapper that is able to apply them in sequence. - - The input schema. - The sequence of mappers to wrap. An empty or null argument - is legal, and counts as being a no-op application. - - - - Given a set of columns, return the input columns that are needed to generate those output columns. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Returns whether the given column is active in this row. - - - - - A helper class to create data views based on the user-provided types. - - - - - A row that consumes items of type , and provides an . This - is in contrast to which consumes a data view row and publishes them as the output type. - - The input data type. - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - The base class for the data view over items of user-defined type. - - The user-defined data type. - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Returns whether the given column is active in this row. - - - - - Zero-based position of the cursor. - - - - - Convenience property for checking whether the cursor is in a good state where values - can be retrieved, that is, whenever is non-negative. - - - - - Core implementation of , called if no prior call to this method - has returned . - - - - - An in-memory data view based on the IList of data. - Supports shuffling. - - - - - An in-memory data view based on the IEnumerable of data. - Doesn't support shuffling. - - - - - This represents the 'infinite data view' over one (mutable) user-defined object. - The 'current row' object can be updated at any time, this will affect all the - newly created cursors, but not the ones already existing. - - - - - A single instance of annotation information, associated with a column. - - - - - The type of the annotation. - - - - - The string identifier of the annotation. Some identifiers have special meaning, - like "SlotNames", but any other identifiers can be used. - - - - - Strongly-typed version of , that contains the actual value of the annotation. - - Type of the annotation value. - - - - Constructor for annotation of value type T. - - The string identifier of the annotation. Some identifiers have special meaning, - like "SlotNames", but any other identifiers can be used. - Annotation value. - Type of the annotation. - - - - Get a row cursor. The are the active columns. - The schema of the returned cursor will be the same as the schema of the IDataView, but getting - a getter for an inactive columns will throw. - - The columns requested by this , or as otherwise called, the active columns. - An empty collection indicates that no column is needed. - The containing the . - - - - Get a row cursor. The is the active column. - The schema of the returned cursor will be the same as the schema of the IDataView, but getting - a getter for the other, inactive columns will throw. - - The column requested by this , or as otherwise called, the active column. - The containing the . - - - - Get a row cursor. No colums are needed by this . - - - - - Get a row cursor including all the columns of the . - - - - - Extension method. - - - - - - - - - This implements a data view that has a schema, but no rows. - - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - An internal class that holds the (already validated) mapping between a custom type and an IDataView schema. - - - - - Function that checks whether the InternalSchemaDefinition.Column is a valid one. - To be valid, the Column must: - 1. Have non-empty values for ColumnName and ColumnType - 2. Have a non-empty value for FieldInfo iff it is a field column, else - ReturnParameterInfo and Generator iff it is a computed column - 3. Generator must have the method inputs (TRow rowObject, - long position, ref TValue outputValue) in that order. - - - - - Given a field or property info on a type, returns whether this appears to be a vector type, - and also the associated data kind for this type. If a valid data type could not - be determined, this will throw. - - The field or property info to inspect. - Whether this appears to be a vector type. - - The corresponding RawType of the type, or items of this type if vector. - - - - - Given a type and name for a variable, returns whether this appears to be a vector type, - and also the associated data type for this type. If a valid data type could not - be determined, this will throw. - - The name of the variable to inspect. - The type of the variable to inspect. - Attribute of . It can be if attributes don't exist. - Whether this appears to be a vector type. - - The corresponding RawType of the type, or items of this type if vector. - - - - - This applies the user provided ValueMapper to a column to produce a new column. It automatically - injects a standard conversion from the actual type of the source column to typeSrc (if needed). - - - - - This applies the user provided RefPredicate to a column and drops rows that map to false. It automatically - injects a standard conversion from the actual type of the source column to typeSrc (if needed). - - - - - Opaque IDataView implementation to provide a barrier for data pipe optimizations. - Used in cross validatation to generate the train/test pipelines for each fold. - - - - - This interface is used to create a . - Implementations should be given an in their constructor, and should have a - ctor or Create method with , along with a corresponding - . - - - - - Returns the input columns needed for the requested output columns. - - - - - Returns the getters for the output columns given an active set of output columns. The length of the getters - array should be equal to the number of columns added by the IRowMapper. It should contain the getter for the - i'th output column if activeOutput(i) is true, and null otherwise. If creating a or - out of this, the delegate (if non-null) should be called - from the dispose of either of those instances. - - - - - Returns information about the output columns, including their name, type and any metadata information. - - - - - DO NOT USE IT! - Purpose of this method is to enable legacy loading and unwrapping of RowToRowTransform. - It should be removed as soon as we get rid of - Returns parent transfomer which uses this mapper. - - - - - This class is a transform that can add any number of output columns, that depend on any number of input columns. - It does so with the help of an , that is given a schema in its constructor, and has methods - to get the dependencies on input columns and the getters for the output columns, given an active set of output columns. - - - - - Produces the set of active columns for the data view (as a bool[] of length bindings.ColumnCount), - and the needed active input columns, given a predicate for the needed active output columns. - - - - - Given a set of output columns, return the input columns that are needed to generate those output columns. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Returns whether the given column is active in this row. - - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - An implementation of that gets its , , - and from an input row. The constructor requires a schema and array of getter - delegates. A delegate indicates an inactive column. The delegates are assumed to be - of the appropriate type (this does not validate the type). - REVIEW: Should this validate that the delegates are of the appropriate type? It wouldn't be difficult - to do so. - - - - - Constructor. - - The schema for the row. - The row that is being wrapped by this row, where our , - , . - The collection of getter delegates, whose types should map those in a schema. - If one of these is , the corresponding column is considered inactive. - A method that, if non-null, will be called exactly once during - , prior to disposing . - - - - Returns whether the given column is active in this row. - - - - - This provides a scalable method of getting a "transposed" view of a subset of columns from an - . Instances of act like a wrapped version of - the input dataview, except that an indicated set of columns will be transposable, even if they - were not transposable before. Note that transposition is a somewhat slow and resource intensive - operation. - - - - - Creates an instance given a list of column names. - - The host environment - The view whose columns we want to transpose - Whether the internal transposer should always unconditionally - save the column we are transposing. Can be useful if the original dataview is possibly - slow to iterate over that column. - The non-empty list of columns to transpose - - - - Creates an instance given a list of column indices. - - The host environment - The view whose columns we want to transpose - Whether the internal transposer should always unconditionally - save the column we are transposing. Can be useful if the original dataview is possibly - slow to iterate over that column. - The non-empty list of columns to transpose - - - - Constructs a slot cursor. - - The transposer. - The index of the transposed column. - - - - Ensures that the column from the source data view stored in our intermediate buffers is the - current column requested. - - - - - This takes an input data view, and presents a dataset with "sliced" up columns - that are partitionings of the original columns. Scalar columns and sufficiently - small vector columns are just served up as themselves. The idea is that each of - those slices should be small enough that storing an entire column in memory. - - - - - Given the index of a column we were told to split, get the corresponding range out output - ranges. - - The index into the array of column indices. - The minimum output column index corresponding to that split column - The exclusive limit of the output column index corresponding to that - split column - - - - Given an output column index, find which spliter produces it and which spliter column is its source. - - An output column index - [splitInd] produces the specified output column. - The specified output column is the splitCol-th column among columns produced by [splitInd]. - - - - Given a possibly null predicate for this data view, produce the dependency predicate for the sources, - as well as a list of all the splitters for which we should produce rowsets. - - The predicate input into the method. - A boolean indicator array of length equal to the number of splitters, - indicating whether that splitter has any active columns in its outputs or not - The predicate to use when constructing the row cursor from the source - - - - There is one instance of these per column, implementing the possible splitting - of one column from a into multiple columns. The instance - describes the resulting split columns through , - and then can be bound to an to provide that splitting functionality. - - - - - Output schema of a splitter. A splitter takes a column from input data and then divide it into multiple columns - to form its output data. - - - - - Creates a splitter for a given row. - - - - - Given an input , create the containing the split - version of the columns. - - - - - A splitter that doesn't split, just passes through the column contents. - Useful for when we've been told to "split" a column that we don't need - to split. - - - - - This is NoSplitter. Thus, the column, indexed by col, which supposes to be splitted will just be copied to an output - column without splitting. - - Input data whose columns can be splitted. - The selected column's index. - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - This splitter enables the partition of a single column into two or more - columns. - - - - - Provide a column partitioner that partitions a vector column into multiple - vector columns. - - The view where we are slicing one column - The column we are slicing - Equal in length to the number of slices, this is - the limit of the indices of each slice, where the successive slice - starts with that limit as its minimum index. So slice i comes from - source slot indices from [i-1] inclusive to - [i] exclusive, with slice 0 starting at 0. - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - The cursor implementation creates the s using , - then collates the results from those rows as effectively one big row. - - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - This is a convenience method that extracts a single slot value's vector, - while simultaneously verifying that there is exactly one value. - - - - - The is parameterized by a type that becomes the - type parameter for a , and this is generally preferable and more - sensible but for various reasons it's often a lot simpler to have a get-getter be over - the actual type returned by the getter, that is, parameterize this by the actual - type. - - The type, must be a generic type, - though enforcement of this has to be done only at runtime for practical reasons - The cursor to get the getter for - The exception contxt - The value getter - - - - Given a slot cursor, construct a single-column equivalent row cursor, with the single column - active and having the same type. This is useful to exploit the many utility methods that exist - to handle and but that know nothing about - , without having to rewrite all of them. This is, however, rather - something of a hack; whenever possible or reasonable the slot cursor should be used directly. - The name of this column is always "Waffles". - - The channel provider used in creating the wrapping row cursor - The slot cursor to wrap - A row cursor with a single active column with the same type as the slot type - - - - Presents a single transposed column as a single-column dataview. - - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - This interface is an with 'strongly typed' binding. - It can populate the user-supplied object's fields with the values of the current row. - - The user-defined type that is being populated while cursoring. - - - - Populates the fields of the user-supplied object with the values of the current row. - - The row object. Cannot be null. - - - - This interface provides cursoring through a via a 'strongly typed' binding. - It can populate the user-supplied object's fields with the values of the current row. - - The user-defined type that is being populated while cursoring. - - - - This interface allows to create strongly typed cursors over a . - - The user-defined type that is being populated while cursoring. - - - - Get a new cursor. - - - - - Get a new randomized cursor. - - The random seed to use. - - - - Implementation of the strongly typed Cursorable. - Similarly to the 'DataView{T}, this class uses IL generation to create the 'poke' methods that - write directly into the fields of the user-defined type. - - - - - Returns whether the column type can be bound to field . - They must both be vectors or scalars, and the raw data type should match. - - - - - Create and return a new cursor. - - - - - Create and return a new randomized cursor. - - The random seed to use. - - - - Create a new cursor with additional active columns. - - Predicate that denotes which additional columns to include in the cursor, - in addition to the columns that are needed for populating the object. - The random seed to use. If null, the cursor will be non-randomized. - - - - Create a set of cursors with additional active columns. - - Predicate that denotes which additional columns to include in the cursor, - in addition to the columns that are needed for populating the object. - Number of cursors to create - Random generator to use - - - - Create a Cursorable object on a given data view. - - Host environment. - The underlying data view. - Whether to ignore missing columns in the data view. - The optional user-provided schema. - The constructed Cursorable. - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Returns whether the given column is active in this row. - - - - - Utility methods that facilitate strongly-typed cursoring. - - - - - Generate a strongly-typed cursorable wrapper of the . - - The user-defined row type. - The environment. - The underlying data view. - Whether to ignore the case when a requested column is not present in the data view. - Optional user-provided schema definition. If it is not present, the schema is inferred from the definition of T. - The cursorable wrapper of . - - - - A convenience class for concatenating several schemas together. - This would be necessary when combining IDataViews through any type of combining operation, for example, zip. - - - - - Returns an array of input predicated for sources, corresponding to the input predicate. - The returned array size is equal to the number of sources, but if a given source is not needed at all, - the corresponding predicate will be null. - - - - - Checks whether the column index is in range. - - - - - This is a data view that is a 'zip' of several data views. - The length of the zipped data view is equal to the shortest of the lengths of the components. - - - - - Create an with no requested columns on a data view. - Potentially, this can be optimized by calling GetRowCount(lazy:true) first, and if the count is not known, - wrapping around GetCursor(). - - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Helper base class for building feature vectors (sparse or dense). Note that this is abstract - with some of the esoteric stuff "protected" instead of "public". This is so callees can't - abuse an instance of it. - - - - - This resets the FeatureSet to be used again. This functionality is for memory - efficiency - we can keep pools of these to be re-used. - Dense indicates whether this should start out dense. It can, of course, - become dense when it makes sense to do so. - - - - - This sets the active sub-range of the feature index space. For example, when asking - a feature handler to add features, we call this so the feature handler can use zero-based - indexing for the features it is generating. This also prohibits the feature handler from - messing with a different index range. Note that this is protected so a non-abstract derived - type can choose how to use it, but a feature handler can't directly mess with the active - range. - - The min feature index of the active range - The number of feature indices in the active range - - - - Adds a feature to the current active range. If the index is a duplicate, this adds the - given value to any previously provided value(s). - - - - - Sort the indices/values (by index) and sum the values for duplicate indices. This asserts that - _sorted is false and _dense is false. It also asserts that _count > 1. - - - - - Convert a sorted non-dense representation to dense. - - - - - Try to get the value for the given feature. Returns false if the feature index is not found. - Note that this respects the "active range", just as AddFeature does. - - - - - This type exists to provide efficient delegates for conversion between standard ColumnTypes, - as discussed in the IDataView Type System Specification. This is a singleton class. - Some conversions are "standard" conversions, conforming to the details in the spec. - Others are auxiliary conversions. The use of auxiliary conversions should be limited to - situations that genuinely require them and have been well designed in the particular context. - For example, this contains non-standard conversions from the standard primitive types to - text (and StringBuilder). These are needed by the standard TextSaver, which handles - differences between sparse and dense inputs in a semantically invariant way. - - - - - Return a standard conversion delegate from typeSrc to typeDst. If there is no such standard - conversion, this throws an exception. - - - - - Determine whether there is a standard conversion from typeSrc to typeDst and if so, - set conv to the conversion delegate. The type parameters TSrc and TDst must match - the raw types of typeSrc and typeDst. - - - - - Return a standard conversion delegate from typeSrc to typeDst. If there is no such standard - conversion, this throws an exception. - - - - - Determine whether there is a standard conversion from typeSrc to typeDst and if so, - set conv to the conversion delegate. - - - - - Returns the NA value of the given type, if it has one, otherwise, it returns - default of the type. This only knows about NA values of standard scalar types - and key types. - - - - - Returns the NA value of the given type, if it has one, otherwise, it returns - default of the type. This only knows about NA values of standard scalar types - and key types. Returns whether the returned value is the default value or not. - - - - - Returns a ValueGetter{T} that produces the NA value of the given type, if it has one, - otherwise, it produces default of the type. This only knows about NA values of standard - scalar types and key types. - - - - - This produces zero for empty. It returns false if the text is not parsable or overflows. - - - - - This produces zero for empty. It returns false if the text is not parsable or overflows. - - - - - This produces zero for empty. It returns false if the text is not parsable or overflows. - - - - - This produces zero for empty. It returns false if the text is not parsable or overflows. - - - - - A parse method that transforms a 34-length string into a . - - What should be a 34-length hexadecimal representation, including a 0x prefix, - of the 128-bit number - The result - Whether the input string was parsed successfully, that is, it was exactly length 32 - and had only digits and the letters 'a' through 'f' or 'A' through 'F' as characters - - - - Return true if the span contains a standard text representation of NA - other than the standard TX missing representation - callers should - have already dealt with that case and the case of empty. - The standard representations are any casing of: - ? NaN NA N/A - - - - - Utility to assist in parsing key-type values. The max value defines - the legal input value bound. The output dst value is "normalized" by adding 1 - so max is mapped to 1 + max. - Unparsable or out of range values are mapped to zero with a false return. - - - - - This produces zero for empty. It returns false if the text is not parsable or overflows. - On failure, it sets dst to the default value. - - - - - This produces zero for empty. It returns false if the text is not parsable or overflows. - On failure, it sets dst to the default value. - - - - - This produces zero for empty. It returns false if the text is not parsable or overflows. - On failure, it sets dst to the defualt value. - - - - - This produces zero for empty. It returns false if the text is not parsable or overflows. - On failure, it sets dst to the default value. - - - - - Returns false if the text is not parsable as an non-negative long or overflows. - - - - - This produces zero for empty. It returns false if the text is not parsable as a signed integer - or the result overflows. The min legal value is -max. The NA value null. - When it returns false, result is set to the NA value. The result can be NA on true return, - since some representations of NA are not considered parse failure. - - - - - This produces zero for empty, or NaN depending on the used. - It returns false if the text is not parsable. - On failure, it sets dst to the NA value. - - - - - This produces zero for empty, or NaN depending on the used. - It returns false if the text is not parsable. - On failure, it sets dst to the NA value. - - - - - This produces default for empty. - - - - - This produces default for empty. - - - - - This produces default for empty. - - - - - Try parsing a TX to a BL. This returns false for NA (span.IsMissing). - Otherwise, it trims the span, then succeeds on all casings of the strings: - * false, f, no, n, 0, -1, - => false - * true, t, yes, y, 1, +1, + => true - Empty string (but not missing string) succeeds and maps to false. - - - - - A singleton class for managing the map between ML.NET and C# . - To support custom column type in , the column's underlying type (e.g., a C# class's type) - should be registered with a class derived from . - - - - - Types have been used in ML.NET type systems. They can have multiple-to-one type mapping. - For example, UInt32 and Key can be mapped to . This class enforces one-to-one mapping for all - user-registered types. - - - - - Mapping from a plus its s to a . - - - - - Mapping from a to a plus its s. - - - - - The lock that one should acquire if the state of will be accessed or modified. - - - - - Returns the registered for and its . - - - - - If has been registered with a , this function returns . - Otherwise, this function returns . - - - - - If has been registered with a , this function returns . - Otherwise, this function returns . - - - - - This function tells that should be representation of data in in - ML.NET's type system. The registered must be a standard C# object's type. - - Native type in C#. - The corresponding type of in ML.NET's type system. - The s attached to . - - - - This function tells that should be representation of data in in - ML.NET's type system. The registered must be a standard C# object's type. - - Native type in C#. - The corresponding type of in ML.NET's type system. - The attached to . - - - - An instance of represents an unique key of its and . - - - - - The underlying type. - - - - - The underlying type's attributes. Together with , uniquely defines - a key when using as the key type in . Note that the - uniqueness is determined by and below. - - - - - This function computes a hashing ID from and attributes attached to it. - If a type is defined as a member in a , can be obtained by calling - . - - - - - Generate a unique temporary column name for the given schema. - Use tag to independently create multiple temporary, unique column - names for a single transform. - - - - - Generate n unique temporary column names for the given schema. - Use tag to independently create multiple temporary, unique column - names for a single transform. - - - - - Get the row count from the input view by any means necessary, even explicit enumeration - and counting if insists on returning null. - - - - - Get the target number of threads to use, given an indicator of thread count. - - - - - Try to create a cursor set from upstream and consolidate it here. The host determines - the target cardinality of the cursor set. - - - - - From the given input cursor, split it into a cursor set with the given - cardinality. If not all the active columns are cachable, this will only - produce the given input cursor. - - - - - Return whether all the active columns, as determined by the predicate, are - cachable - either primitive types or vector types. - - - - - Return whether all the active columns, as determined by the predicate, are - cachable - either primitive types or vector types. - - - - - Determine whether the given type is cachable - either a primitive type or a vector type. - - - - - Tests whether the cursors are mutually compatible for consolidation, - that is, they all are non-null, have the same schemas, and the same - set of columns are active. - - - - - Given a parallel cursor set, this consolidates them into a single cursor. The batchSize - is a hint used for efficiency. - - - - - A convenience class to facilitate the creation of a split, as well as a convenient - place to store shared resources that can be reused among multiple splits of a cursor - with the same schema. Since splitting also returns a consolidator, this also contains - a consolidating logic. - - In a very rough sense, both the splitters and consolidators are written in the same way: - For all input cursors, and all active columns, an "in pipe" is created. A worker thread - per input cursor busily retrieves values from the cursors and stores them in the "in - pipe." At appropriate times, "batch" objects are synthesized from the inputs consumed - thusfar, and inserted into a blocking collection. The output cursor or cursors likewise - have a set of "out pipe" instances, one per each of the active columns, through which - successive batches are presented for consumption by the user of the output cursors. Of - course, both split and consolidate have many details from which they differ, for example, the - consolidator must accept batches as they come and reconcile them among multiple inputs, - while the splitter is more free. - - It is ideal if a data view that could be split retains one of these objects itself, - so that multiple splittings will have the capability of sharing buffers from cursoring - to cursoring, but this is not required. - - - - - Pipes, in addition to column values, will also communicate extra information - enumerated within this. This enum serves the purpose of providing nice readable - indices to these "extra" information in pipes. - - - - - An in pipe creator intended to be used from the splitter only. - - - - - An in pipe creator intended to be used from the splitter only. - - - - - There is one of these created per input cursor, per "channel" of information - (necessary channels include values from active columns, as well as additional - side information), in both splitting and consolidating. This is a running buffer - of the input cursor's values. It is used to create objects. - - - - - Creates an out pipe corresponding to the in pipe. This is useful for the splitter, - when we are creating an in pipe. - - - - - These are objects continuously created by the to spin off the - values they have collected. They are collected into a - object, and eventually one is consumed by an instance. - - - - - This holds a collection of objects, which together hold all - the values from a set of rows from the input cursor. These are produced as needed - by the input cursor reader, and consumed by each of the output cursors. - - This class also serves a secondary role in marshalling exceptions thrown in the workers - producing batches, into the threads consuming these batches. - lets us know if this is one of these "special" batches. - If it is, then the method will throw whenever it is called, by the - consumer of the batches. - - - - - Construct a batch object to communicate the objects to consumers. - - - - - Construct a batch object to communicate that something went wrong. In this case all other fields - will have default values. - - - - - Gives all of the batch columns to the output pipes. This should be called only once, - per batch object, because the the batch columns will be returned to the pool. - - If this was an exception bearing batch, that exception will be propagated and thrown - in this. - - - - - This helps a cursor present the results of a . Practically its role - really is to just provide a stable delegate for the . - There is one of these created per column, per output cursor, i.e., in splitting - there are n of these created per column, and when consolidating only one of these - is created per column. - - - - - Creates an in pipe corresponding to this out pipe. Useful for the consolidator, - when we are creating many in pipes from a single out pipe. - - - - - Sets this to start presenting the output of a batch column. - Note that this positions the output on the first item, not before the first item, - so it is not necessary to call to get the first value. - - The batch column whose values we should start presenting. - - - - Moves to the next value. Note that this should be called only when we are certain that - we have a next value to move to, that is, when is non-zero. - - - - - A cursor used by both the splitter and consolidator, that iteratively consumes - objects from the input blocking collection, and yields the - values stored therein through the help of objects. - - - - - Constructs one of the split cursors. - - The channel provider. - The schema. - The mapping from active indices, to input column indices. - The reverse mapping from input column indices to active indices, - where -1 is present if this column is not active. - The output pipes, one per channel of information - - - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - This is a consolidating cursor that is usable even with cursors that are uncachable, - at the cost of being totally synchronous, that is, there is no parallel benefit from - having split the input cursors. - - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - An interface for exposing some number of items that can be opened for reading. - - REVIEW: Reconcile this with the functionality exposed by IHostEnvironment. For example, - we could simply replace this with an array of IFileHandle. - - - - Gets the number of items. - - - - - Return a string representing the "path" to the index'th stream. May return null. - - - - - Opens the indicated item and returns a readable stream on it. - - - - - Opens the indicated item and returns a text stream reader on it. - - REVIEW: Consider making this an extension method. - - - - Signature for creating an . - - - - - Signature for loading an . - - - - - Interface for a data loader. An can save its model information - and is instantiatable from arguments and an . - - - - - Check if the column can be saved. - - True if the column is savable. - - - - Save the data into the given stream. The stream should be kept open. - - The stream that the data will be written. - The data to be saved. - The list of column indices to be saved. - - - - Signature for creating an . - - - - - Signature for loading an . - - - - - Interface for a data transform. An can save its model information - and is instantiatable from arguments and an input . - - - - - Data transforms need to be able to apply themselves to a different input IDataView. - This interface allows them to implement custom rebinding logic. - - - - - Represents a data view that supports random access to a specific row. - - - - - Represents a row seeker with random access that can retrieve a specific row by the row index. - For , when the state is valid (that is when - returns ), it returns the current row index. Otherwise it's -1. - - - - - Moves the seeker to a row at a specific row index. - If the row index specified is out of range (less than zero or not less than the - row count), it returns false and sets its Position property to -1. - - The row index to move to. - True if a row with specified index is found; false otherwise. - - - - A view of data where columns can optionally be accessed slot by slot, as opposed to row - by row in a typical dataview. A slot-accessible column can be accessed with a slot-by-slot - cursor via an returned by - (naturally, as opposed to row-by-row through an ). This interface - is intended to be implemented by classes that want to provide an option for an alternate - way of accessing the data stored in a . - - The interface only advertises that columns may be accessible in slot-wise fashion. The i-th column - is accessible in this fashion iff with col=i doesn't return . - - - - - Presents a cursor over the slots of a transposable column, or throws if the column - is not transposable. - - - - - (input argument is named col) specifies the type of all values at the col-th column of - . For example, if [i] is a scalar float column, then - with col=i may return a whose - field is . If the i-th column can't be iterated column-wisely, this function may - return . - - - - - Returns an appropriate for a row given an active column - index, but as a delegate. The type parameter for the delegate will correspond to the - raw type of the column. - - The row to get the getter for - The column index, which must be active on that row - The getter as a delegate - - - - Given a destination type, , and column index, return a ValueGetter for the column - with a conversion to typeDst, if needed. This is a weakly typed version of - . - - - - - - Given a destination type, , and column index, return a ValueGetter{TDst} for the column - with a conversion to typeDst, if needed. - - - - - Given a , and column index, return a function that utilizes the - on the input - rows to map the values in the column, whatever type they may be, into a string - builder. This method will obviously succeed only if there is a string conversion - into the required type. This method can be useful if you want to output a value - as a string in a generic way, but don't really care how you do it. - - - - - Given the item type, typeDst, a row, and column index, return a ValueGetter for the vector-valued - column with a conversion to a vector of typeDst, if needed. This is the weakly typed version of - . - - - - - Given the item type, typeDst, a row, and column index, return a ValueGetter{VBuffer{TDst}} for the - vector-valued column with a conversion to a vector of typeDst, if needed. - - - - - Given the item type, typeDst, and a slot cursor, return a ValueGetter{VBuffer{TDst}} for the - vector-valued column with a conversion to a vector of typeDst, if needed. - - - - - A convenience wrapper to generalize the operation of fetching a . - - - - - This method returns a small helper delegate that returns whether we are at the start - of a new group, that is, we have just started, or the key-value at indicated column - is different than it was, in the last call. This is practically useful for determining - group boundaries. Note that the delegate will return true on the first row. - - - - - Fetches the value of the column by name, in the given row. - Used by the evaluators to retrieve the metrics from the results IDataView. - - - - - Given a row, returns a one-row data view. This is useful for cases where you have a row, and you - wish to use some facility normally only exposed to dataviews. (For example, you have an - but want to save it somewhere using a .) - Note that it is not possible for this method to ensure that the input does not - change, so users of this convenience must take care of what they do with the input row or the data - source it came from, while the returned dataview is potentially being used. - - An environment used to create the host for the resulting data view - A row, whose columns must all be active - A single-row data view incorporating that row - - - - Given a collection of , that is a subset of the Schema of the data, create a predicate, - that when passed a column index, will return true or false, based on whether - the column with the given is part of the . - - The subset of columns from the that are needed from this . - The from where the columnsNeeded originate. - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Returns whether the given column is active in this row. - - - - - This is an error message meant to be used in the situation where a user calls a delegate as returned from - or . - - - - - Extension methods to facilitate easy consumption of popular contents of . - - - - - Returns if the input column is of , and that has - SlotNames annotation of a whose - is of , and further whose matches - this input vector size. - - The column whose will be queried. - - - - - Stores the slots names of the input column into the provided buffer, if there are slot names. - Otherwise it will throw an exception. - - - The column whose will be queried. - The into which the slot names will be stored. - - - - Returns if the input column is of , and that has - SlotNames annotation of a whose - is of , and further whose matches - this input vector size. - - The column whose will be queried. - The type of the individual key-values to query. A common, - though not universal, type to provide is , so if left unspecified - this will be assumed to have the value . - - - - - Stores the key values of the input column into the provided buffer, if this is of key type and whose - key values are of whose matches - . If there is no matching key valued annotation this will throw an exception. - - The type of the key values. - The column whose will be queried. - The into which the key values will be stored. - - - - Returns if and only if has IsNormalized annotation - set to . - - - - - Allow member to be marked as a . - - - Can be applied only for member of following types: , , , - - - - - Marks member as . - - - Cardinality of would be maximum legal value of member type. - - - - - Marks member as and specifies cardinality. - In case of the attribute being used with int types, the should be set to one more than - the maximum value to account for counting starting at 1 (0 is reserved for the missing KeyType). E.g the cardinality of the - 0-9 range is 10. - If the values are outside of the specified cardinality they will be mapped to the missing value representation: 0. - - Cardinality of . - - - - The key count. - - - - - Allows a member to be marked as a , primarily allowing one to set - the dimensionality of the resulting array. - - - - - The length of the vectors from this vector valued field. - - - - - Mark member as single-dimensional array with unknown size. - - - - - Mark member as single-dimensional array with specified size. - - Expected size of array. A zero value indicates that the vector type is considered to have unknown length. - - - - Mark member with expected dimensions of array. Notice that this attribute is expected to be added to one dimensional arrays, - and it shouldn't be added to multidimensional arrays. Internally, ML.NET will use the shape information provided as the - "dimensions" param of this constructor, to use it as a multidimensional array. - - Dimensions of array. All values should be non-negative. - A zero value indicates that the vector type is considered to have unknown length along that dimension. - - - - Allows a member to specify column name directly, as opposed to the default - behavior of using the member name as the column name. - - - - - Column name. - - - - - Allows one to specify a name to expose this column as, as opposed to the default - behavior of using the member name as the column name. - - - - - Mark this member as not being exposed as a column in the . - - - - - Mark a member that implements exactly IChannel as being permitted to receive - channel information from an external channel. - - - - - When passed some object, and a channel, it attempts to pass the channel to the object. It - passes the channel to the object iff the object has exactly one field marked with the - CursorChannelAttribute, and that field implements only the IChannel interface. - - The function returns the modified object, as well as a boolean indicator of whether it was - able to pass the channel to the object. - - The object that attempts to acquire the channel. - The channel to pass to the object. - The exception context. - 1. A boolean indicator of whether the channel was successfully passed to the object. - 2. The object passed in (only modified by the addition of the channel to the field - with the CursorChannelAttribute, if the channel was added successfully). - - - - This class defines a schema of a typed data view. - - - - - One column of the data view. - - - - - The name of the member the column is taken from. The API - requires this to not be null, and a valid name of a member of - the type for which we are creating a schema. - - - - - The name of the column that's created in the data view. If this - is null, the API uses the . - - - - - The column type. If this is null, the API attempts to derive a type - from the member's type. - - - - - The generator function. if the column is computed. - - - - - Add annotation to the column. - - Type of annotation being added. Types sported as entries in columns - are also supported as entries in Annotations. Multiple annotations may be added to one column. - - The string identifier of the annotation. - Value of annotation. - Type of value. - - - - Returns annotations kind and type associated with this column. - - A dictionary with the kind of the annotation as the key, and the - annotation type as the associated value. - - - - Get or set the column definition by column name. - If there's no such column: - - get returns null, - - set adds a new column. - If there's more than one column with the same name: - - get returns the first column, - - set replaces the first column. - - - - - Create a schema definition by enumerating all public fields of the given type. - - The type to base the schema on. - Accept fields and properties based on their direction. - The generated schema definition. - - - - A cursor that allows slot-by-slot access of data. This is to - what is to . - - - - - Whether the cursor is in a state where it can serve up data, that is, - has been called and returned . - - - - - The slot index. Incremented by one when is called and returns . - When initially created, or after returns , this will be -1. - - - - - Advance to the next slot. When the cursor is first created, this method should be called to - move to the first slot. Returns if there are no more slots. - - - - - The slot type for this cursor. Note that this should equal the - for the column from which this slot cursor - was created. - - - - - A getter delegate for the slot values. The type must correspond - to the item type from . - - - - - For wrapping another slot cursor from which we get and , - but not the data or type accesors. Somewhat analogous to the - for s. - - - - - A useful base class for common implementations, somewhat - analogous to the for s. - - - - - Core implementation of . This is called only if this method - has not yet previously returned . - - - - - A collection of source column indices after removing those we want to drop. Specifically, j=_sources[i] means - that the i-th output column in the output schema is the j-th column in the input schema. - - - - - Input schema of this transform. It's useful when determining column dependencies and other - relations between input and output schemas. - - - - - Some column indexes in the input schema. is computed from - and . - - - - - True, if this transform drops selected columns indexed by . - - - - - Common method of computing from necessary parameters. This function is used in constructors. - - - - - After and are set, pick up selected columns from to create - Note that tells us what columns in are put into . - - - - - Given the column index in the output schema, this function returns its source column's index in the input schema. - - - - - Public constructor corresponding to SignatureDataTransform. - - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - The anomaly detection evaluator outputs a data view by this name, which contains the the examples - with the top scores in the test set. It contains the three columns listed below, with each row corresponding - to one test example. - - - - - Evaluates scored anomaly detection data. - - The scored data. - The name of the label column in . - The name of the score column in . - The name of the predicted label column in . - The evaluation results for these outputs. - - - - This is a base class for TLC evaluators. It implements both of the methods: and - . Note that the input is assumed to contain all the column - roles needed for evaluation, including the score column. - - - - - Compute the AUPRC using the "lower trapesoid" estimator, as described in the paper - https://www.ecmlpkdd2013.org/wp-content/uploads/2013/07/aucpr_2013ecml_corrected.pdf. - - - - - Compute the AUPRC using the "lower trapesoid" estimator, as described in the paper - https://www.ecmlpkdd2013.org/wp-content/uploads/2013/07/aucpr_2013ecml_corrected.pdf. - - - - - Checks the column types of the evaluator's input columns. The base class implementation checks only the type - of the weight column, and all other columns should be checked by the deriving classes in . - - - - - Check that the types of the score and label columns are as expected by the evaluator. The - is assumed to contain the label column (if it exists) and the score column. - Access the label column with the property, and the score column with the - or methods. - - - - - Check the types of any other columns needed by the evaluator. Only override if the evaluator uses - columns other than label, score and weight. - - - - - Used in the Evaluate() method, to get the predicate for cursoring over the data. - The base class implementation activates the score column, the label column if it exists, the weight column if it exists - and the stratification columns. - Override if other input columns need to be activated. - - - - - Get an aggregator for the specific evaluator given the current RoleMappedSchema. - - - - - For each stratification column, get an aggregator dictionary. - - - - - This method returns two functions used to create the data views of metrics computed by the different - aggregators (the overall one, and any stratified ones if they exist). The - function is called for every aggregator, and it is where the aggregators should finish their aggregations - and the aggregator results should be stored. The function - is called after has been called on all the aggregators, and it returns - the dictionary of metric data views. - - - - - This is a helper class for evaluators deriving from EvaluatorBase, used for computing aggregate metrics. - Aggregators should keep track of the number of passes done. The method should get - the input getters of the given that are needed for the current pass, assuming that all the needed column - information is stored in the given . - In the aggregator should call the getters once, and process the input as needed. - increments the pass count after each pass. - - - - - This method should get the getters of the new that are needed for the next pass. - - - - - Call the getters once, and process the input as necessary. - - - - - Increment the pass count. Return true if additional passes are needed. - - - - - Returns a dictionary from metric kinds to data views containing the metrics. - - - - - Gets the stratification column getter for the new . - - - - - This method calls the getter of the stratification column, and returns the aggregator corresponding to - the stratification value. - - - - - - This method returns the aggregators corresponding to all the stratification values seen so far. - - - - - Binary classification evaluator outputs a data view with this name, which contains the p/r data. - It contains the columns listed below, and in case data also contains a weight column, it contains - also columns for the weighted values. - and false positive rate. - - - - - Evaluates scored binary classification data. - - The scored data. - The name of the label column in . - The name of the score column in . - The name of the probability column in , the calibrated version of . - The name of the predicted label column in . - The evaluation results for these calibrated outputs. - - - - Evaluates scored binary classification data and generates precision recall curve data. - - The scored data. - The name of the label column in . - The name of the score column in . - The name of the probability column in , the calibrated version of . - The name of the predicted label column in . - The generated precision recall curve data. Up to 100000 of samples are used for p/r curve generation. - The evaluation results for these calibrated outputs. - - - - Evaluates scored binary classification data, without probability-based metrics. - - The scored data. - The name of the label column in . - The name of the score column in . - The name of the predicted label column in . - The evaluation results for these uncalibrated outputs. - - - - - Evaluates scored binary classification data, without probability-based metrics - and generates precision recall curve data. - - The scored data. - The name of the label column in . - The name of the score column in . - The name of the predicted label column in . - The generated precision recall curve data. Up to 100000 of samples are used for p/r curve generation. - The evaluation results for these uncalibrated outputs. - - - - - Evaluates scored clustering data. - - The scored data. - The name of the score column in . - The name of the optional label column in . - The name of the optional feature column in . - The evaluation results. - - - - This is a helper class for creating the per-instance IDV. - - - - - Derived class, for example A, should overwrite so that (()A).Save(ctx) can correctly dump A. - - - - - Find the score column to use. If is specified, that is used. Otherwise, this searches - for the most recent score set of the given . If there is no such score set and - is specifed it uses . Otherwise, it throws. - - - - - Find the optional auxiliary score column to use. If is specified, that is used. - Otherwise, if is part of a score set, this looks in the score set for a column - with the given . If none is found, it returns . - - - - - If is non-empty, returns it. Otherwise if is non-, - returns its . Otherwise, returns . - - - - - Helper method to get an IEnumerable of double metrics from an overall metrics IDV produced by an evaluator. - - - - - Add a text column containing a fold index to a data view. - - The host environment. - The data view to which we add the column - The current fold this data view belongs to. - The input data view with an additional text column containing the current fold index. - - - - Add a key type column containing a fold index to a data view. - - The host environment. - The data view to which we add the column - The current fold this data view belongs to. - The total number of folds. - The input data view with an additional key type column containing the current fold index. - - - - This method takes an array of data views and a specified input vector column, and adds a new output column to each of the data views. - First, we find the union set of the slot names in the different data views. Next we define a new vector column for each - data view, indexed by the union of the slot names. For each data view, every slot value is the value in the slot corresponding - to its slot name in the original column. If a reconciled slot name does not exist in an input column, the value in the output - column is def. - - - - - This method takes an array of data views and a specified input key column, and adds a new output column to each of the data views. - First, we find the union set of the key values in the different data views. Next we define a new key column for each - data view, with the union of the key values as the new key values. For each data view, the value in the output column is the value - corresponding to the key value in the original column. - - - - - This method takes an array of data views and a specified input key column, and adds a new output column to each of the data views. - First, we find the union set of the key values in the different data views. Next we define a new key column for each - data view, with the union of the key values as the new key values. For each data view, the value in the output column is the value - corresponding to the key value in the original column. - - - - - This method is similar to , but it reconciles the key values over vector - input columns. - - - - - This method gets the per-instance metrics from multiple scored data views and either returns them as an - array or combines them into a single data view, based on user specifications. - - A host environment. - The evaluator to use for getting the per-instance metrics. - If true, data views are combined into a single data view. Otherwise, data views - are returned as an array. - If true, a column containing the fold index is added to the returned data views. - The array of scored data views to evaluate. These are passed as - so that the evaluator can know the role mappings it needs. - A list of column names that are not included in the combined data view - since their types do not match. - - - - - Create an output data view that is the vertical concatenation of the metric data views. - - - - - Takes a data view containing one or more rows of metrics, and returns a data view containing additional - rows with the average and the standard deviation of the metrics in the input data view. - - - - - Get the confusion tables as strings to be printed to the Console. - - The host is used for getting the random number generator for sampling classes - The data view containing the confusion matrix. It should contain a text column - with the label names named "LabelNames", and an R8 vector column named "Count" containing the counts: in the row - corresponding to label i, slot j should contain the number of class i examples that were predicted as j by the predictor. - If there is an R8 vector column named "Weight" containing the weighted counts, this parameter - is assigned the string representation of the weighted confusion table. Otherwise it is assigned null. - Indicates whether the confusion table is for binary classification. - Indicates how many classes to sample from the confusion table (-1 indicates no sampling) - - - - This method returns the per-fold metrics as a string. If weighted metrics are present they are returned in a separate string. - - An IHostEnvironment. - The data view containing the per-fold metrics. Each row in the data view represents a set of metrics - calculated either on the whole dataset or on a subset of it defined by a stratification column. If the data view contains - stratified metrics, it must contain two text columns named "StratCol" and "StratVal", containing the stratification column - name, and a text description of the value. In this case, the value of column StratVal in the row corresponding to the entire - dataset should contain the text "overall", and the value of column StratCol should be DvText.NA. If weighted metrics are present - then the data view should also contain a bool column named "IsWeighted". - If the IsWeighted column exists, this is assigned the string representation of the weighted - metrics. Otherwise it is assigned null. - - - - Print the overall results to the Console. The overall data view should contain rows from all the folds being averaged. - If filename is not null then also save the results to the specified file. The first row in the file is the averaged - results, followed by the results of each fold. - - - - - Searches for a warning dataview in the given dictionary, and if present, prints the warnings to the given channel. The warning dataview - should contain a text column named "WarningText". - - - - - Save the given data view using text saver. - - - - - Filter out the stratified results from overall and drop the stratification columns. - - - - - This is a list of string constants denoting 'standard' metric kinds. - - - - - This data view contains the confusion matrix for N-class classification. It has N rows, and each row has - the following columns: - * Count (vector indicating how many examples of this class were predicted as each one of the classes). This column - should have metadata containing the class names. - * (Optional) Weight (vector with the total weight of the examples of this class that were predicted as each one of the classes). - - - - - This is a data view with 'global' dataset-wise metrics in its columns. It has one row containing the overall metrics, - and optionally more rows for weighted metrics, and stratified metrics. - - - - - This is a data view with precision recall data in its columns. It has four columns: Threshold, Precision, Recall and Fpr. - - - - - This data view contains a single text column, with warnings about bad input values encountered by the evaluator during - the aggregation of metrics. Each warning is in a separate row. - - - - - Names for the columns in the data views output by evaluators. - - - - - This interface is used by Maml components (the , the - and the to evaluate, print and save the results. - The input to the and the methods - should be assumed to contain only the following column roles: label, group, weight and name. Any other columns needed for - evaluation should be searched for by name in the . - - - - - Print the aggregate metrics to the console. - - - - - Combine the overall metrics from multiple folds into a single data view. - - - - - - - Handles custom metrics (such as p/r curves for binary classification, or group summary results for ranking) from one - or more folds. Implementations of this method typically creates a single data view for the custom metric and saves it - to a user specified file. - - - - - Create a data view containing only the columns that are saved as per-instance results by Maml commands. - - - - - A base class implementation of . The and - methods create a new containing all the columns needed for evaluation, and call the corresponding - methods on an of the appropriate type. - - - - - All the input columns needed by an evaluator should be added here. - The base class implementation gets the score column, the label column (if exists) and the weight column (if exists). - Override if additional columns are needed. - - - - - This method simply prints the overall metrics using EvaluateUtils.PrintConfusionMatrixAndPerFoldResults. - Override if something else is needed. - - - - - This method simply prints the overall metrics using EvaluateUtils.PrintOverallMetrics. - Override if something else is needed. - - - - - The perInst dataview contains all a name column (called Instance), the FoldId, Label and Weight columns if - they exist, and all the columns returned by . - It should be overridden only if additional processing is needed, such as dropping slots in the "top k scores" column - in the multi-class case. - - - - - Returns the names of the columns that should be saved in the per-instance results file. These can include - the columns generated by the corresponding , or any of the input columns used by - it. The Name and Weight columns should not be included, since the base class includes them automatically. - - - - - Evaluation results for anomaly detection(unsupervised learning algorithm). - - - - - Gets the area under the ROC curve. - - - The area under the ROC curve is equal to the probability that the algorithm ranks - a randomly chosen positive instance higher than a randomly chosen negative one - (assuming 'positive' ranks higher than 'negative'). Area under the ROC curve ranges between - 0 and 1, with a value closer to 1 indicating a better model. - - - - - Detection rate at K false positives. This gives the ratio of correctly identified anomalies given - the specified number of false positives. A value closer to 1 indicates a better model. - - - This is computed as follows: - 1.Sort the test examples by the output of the anomaly detector in descending order of scores. - 2.Among the top K False Positives, compute ratio : (True Positive @ K) / (Total anomalies in test data) - Example confusion matrix for anomaly detection: - Anomalies (in test data) | Non-Anomalies (in test data) - Predicted Anomalies : TP | FP - Predicted Non-Anomalies : FN | TN - - - - - Evaluation results for binary classifiers, excluding probabilistic metrics. - - - - - Gets the area under the ROC curve. - - - The area under the ROC curve is equal to the probability that the classifier ranks - a randomly chosen positive instance higher than a randomly chosen negative one - (assuming 'positive' ranks higher than 'negative'). Area under the ROC curve ranges between - 0 and 1, with a value closer to 1 indicating a better model. - - Area Under ROC Curve - - - - - Gets the accuracy of a classifier which is the proportion of correct predictions in the test set. - - - - - Gets the positive precision of a classifier which is the proportion of correctly predicted - positive instances among all the positive predictions (i.e., the number of positive instances - predicted as positive, divided by the total number of instances predicted as positive). - - - - - Gets the positive recall of a classifier which is the proportion of correctly predicted - positive instances among all the positive instances (i.e., the number of positive instances - predicted as positive, divided by the total number of positive instances). - - - - - Gets the negative precision of a classifier which is the proportion of correctly predicted - negative instances among all the negative predictions (i.e., the number of negative instances - predicted as negative, divided by the total number of instances predicted as negative). - - - - - Gets the negative recall of a classifier which is the proportion of correctly predicted - negative instances among all the negative instances (i.e., the number of negative instances - predicted as negative, divided by the total number of negative instances). - - - - - Gets the F1 score of the classifier, which is a measure of the classifier's quality considering - both precision and recall. - - - F1 score is the harmonic mean of precision and recall: 2 * precision * recall / (precision + recall). - F1 ranges between 0 and 1, with a value of 1 indicating perfect precision and recall. - - - - - Gets the area under the precision/recall curve of the classifier. - - - The area under the precision/recall curve is a single number summary of the information in the - precision/recall curve. It is increasingly used in the machine learning community, particularly - for imbalanced datasets where one class is observed more frequently than the other. On these - datasets, can highlight performance differences that - are lost with . - - - - - The confusion matrix giving the counts of the - true positives, true negatives, false positives and false negatives for the two classes of data. - - - - - This class represents one data point on Precision-Recall curve for binary classification. - - - - - Gets the threshold for this data point. - - - - - Gets the precision for the current threshold. - - - - - Gets the recall for the current threshold. - - - - - Gets the true positive rate for the current threshold. - - - - - Gets the false positive rate for the given threshold. - - - - - Evaluation results for binary classifiers, including probabilistic metrics. - - - - - Gets the log-loss of the classifier. Log-loss measures the performance of a classifier - with respect to how much the predicted probabilities diverge from the true class label. Lower - log-loss indicates a better model. A perfect model, which predicts a probability of 1 for the - true class, will have a log-loss of 0. - - - - - - - - - Gets the log-loss reduction (also known as relative log-loss, or reduction in information gain - RIG) - of the classifier. It gives a measure of how much a model improves on a model that gives random predictions. - Log-loss reduction closer to 1 indicates a better model. - - - - - - - - - Gets the test-set entropy, which is the prior log-loss based on the proportion of positive - and negative instances in the test set. A classifier's lower than - the entropy indicates that a classifier does better than predicting the proportion of positive - instances as the probability for each instance. - - - - - - - - - The metrics generated after evaluating the clustering predictions. - - - - - Normalized Mutual Information is a measure of the mutual dependence of the variables. - This metric is only calculated if the Label column is provided. - - Its value ranges from 0 to 1, where higher numbers are better. - Normalized variants. - - - - Average Score. For the K-Means algorithm, the 'score' is the distance from the centroid to the example. - The average score is, therefore, a measure of proximity of the examples to cluster centroids. - In other words, it is a measure of 'cluster tightness'. - Note however, that this metric will only decrease if the number of clusters is increased, - and in the extreme case (where each distinct example is its own cluster) it will be equal to zero. - - Distance is to the nearest centroid. - - - - Davies-Bouldin Index is measure of the how much scatter is in the cluster and the cluster separation. - - Davies-Bouldin Index. - - - - Represents the confusion matrix of the classification results. - - - - - The calculated value of precision for each class. - - - - - The calculated value of recall for each class. - - - - - The confusion matrix counts for the combinations actual class/predicted class. - The actual classes are in the rows of the table (stored in the outer ), and the predicted classes - in the columns(stored in the inner ). - - - - - The indicators of the predicted classes. - It might be the classes names, or just indices of the predicted classes, if the name mapping is missing. - - - - - The indicators of the predicted classes. - It might be the classes names, or just indices of the predicted classes, if the name mapping is missing. - - - - - The confusion matrix as a structured type, built from the counts of the confusion table that the or - the constructor. - - The IHost instance. - The values of precision per class. - The vales of recall per class. - The counts of the confusion table. The actual classes values are in the rows of the 2D array, - and the counts of the predicted classes are in the columns. - The predicted classes names, or the indexes of the classes, if the names are missing. - Whether the classes are sampled. - Whether the confusion table is the result of a binary classification. - - - - Returns a human readable representation of the confusion table. - - - - - - Gets the confusion table count for the pair /. - - The index of the predicted label indicator, in the . - The index of the actual label indicator, in the . - - - - - Evaluation results for multi-class classification trainers. - - - - - Gets the average log-loss of the classifier. Log-loss measures the performance of a classifier - with respect to how much the predicted probabilities diverge from the true class label. Lower - log-loss indicates a better model. A perfect model, which predicts a probability of 1 for the - true class, will have a log-loss of 0. - - - - - - - - - Gets the log-loss reduction (also known as relative log-loss, or reduction in information gain - RIG) - of the classifier. It gives a measure of how much a model improves on a model that gives random predictions. - Log-loss reduction closer to 1 indicates a better model. - - - - - - - - - Gets the macro-average accuracy of the model. - - - The macro-average is the average accuracy at the class level. The accuracy for each class is computed - and the macro-accuracy is the average of these accuracies. - - The macro-average metric gives the same weight to each class, no matter how many instances from - that class the dataset contains. - - - - - Gets the micro-average accuracy of the model. - - - The micro-average is the fraction of instances predicted correctly across all classes. Micro-average can - be a more useful metric than macro-average if class imbalance is suspected (i.e. one class has many more - instances than the rest). - - - - - Convenience method for "TopKAccuracyForAllK[TopKPredictionCount - 1]". If is positive, - this is the relative number of examples where - the true label is one of the top K predicted labels by the predictor. - - - - - If positive, this indicates the K in and . - - - - - Returns the top K accuracy for all K from 1 to the value of TopKPredictionCount. - - - - - Gets the log-loss of the classifier for each class. Log-loss measures the performance of a classifier - with respect to how much the predicted probabilities diverge from the true class label. Lower - log-loss indicates a better model. A perfect model, which predicts a probability of 1 for the - true class, will have a log-loss of 0. - - - The log-loss metric is computed as $-\frac{1}{m} \sum_{i=1}^m \log(p_i)$, - where $m$ is the number of instances in the test set. - $p_i$ is the probability returned by the classifier if the instance belongs to the class, - and 1 minus the probability returned by the classifier if the instance does not belong to the class. - - - - - - - - - The confusion matrix giving the counts of the - predicted classes versus the actual classes. - - - - - Evaluation results for rankers. - - - - - - - - - Normalized Discounted Cumulative Gain - - - - - - - - - Discounted Cumulative Gain - - - - - Evaluation results regression algorithms (supervised learning algorithm). - - - - - Gets the absolute loss of the model. - - - - - - - - - Gets the squared loss of the model. - - - - - - - - - Gets the root mean square loss (or RMS) which is the square root of the L2 loss . - - - - - Gets the result of user defined loss function. - - - This is the average of a loss function defined by the user, - computed over all the instances in the test set. - - - - - Gets the R-squared value of the model, which is also known as - the coefficient of determination​. - R-Squared closer to 1 indicates a better fitted model. - - - - - Evaluates scored multiclass classification data. - - The scored data. - The name of the label column in . - The name of the score column in . - The name of the predicted label column in . - The evaluation results for these outputs. - - - - Options to control the output of the RankingEvaluator - - - - - Maximum truncation level for computing (N)DCG - - - - - Label relevance gains - - - - - The ranking evaluator outputs a data view by this name, which contains metrics aggregated per group. - It contains four columns: GroupId, NDCG, DCG and MaxDCG. Each row in the data view corresponds to one - group in the scored data. - - - - - Evaluates scored regression data. - - The data to evaluate. - The name of the label column. - The name of the groupId column. - The name of the predicted score column. - The evaluation metrics for these outputs. - - - - Explicit implementation prevents Schema from being accessed from derived classes. - It's our first step to separate data produced by transform from transform. - - - - - Shape information of the produced output. Note that the input and the output of this transform (and their types) are identical. - - - - - Calculates natural-based max DCG at all truncations from 1 to truncationLevel. - - - - - Evaluates scored regression data. - - The data to evaluate. - The name of the label column. - The name of the predicted score column. - The evaluation metrics for these outputs. - - - - An interface that combines multiple predictors into a single predictor. - - - - - This function performs a number of checks on the inputs and, if appropriate and possible, will produce - a mapper with slots names on the output score column properly mapped. If this is not possible for any - reason, it will just return the input bound mapper. - - - - - This is a utility method used to determine whether - can or should be used to wrap . This will not throw, since the - desired behavior in the event that it cannot be wrapped, is to just back off to the original - "unwrapped" bound mapper. - - The mapper we are seeing if we can wrap - The type of the label names from the metadata (either - originating from the key value metadata of the training label column, or deserialized - from the model of a bindable mapper) - Whether we can call with - this mapper and expect it to succeed - - - - Used only by the command line API for scoring and calculation of feature contribution. - - - - - Holds the definition of the getters for the FeatureContribution column. It also contains the generic mapper that is used to score the Predictor. - This is only used by the command line API. - - - - - Maps a schema from input columns to output columns. Keeps track of the input columns that are needed for the mapping. - - - - - Returns the input columns needed for the requested output columns. - - - - - This class is a scorer that passes through all the ISchemaBound columns without adding any "derived columns". - It also passes through all metadata (except for possibly changing the score column kind), and adds the - score set id metadata. - - - - - The one and only constructor for Bindings. - - - - - Create the bindings given the input schema, bound mapper, and column name suffix. - - - - - Create the bindings given the env, bindable, input schema, column roles, and column name suffix. - - - - - Create a new Bindings from this one, but based on a potentially different schema. - Used by the ITransformTemplate.ApplyToData implementation. - - - - - Deserialize the bindings, given the env, bindable and input schema. - - - - - The entry point for creating a . - - - - - Constructor for method. - - - - - Constructor for deserialization. - - - - - entry point - for deserialization. - - - - - This bindable mapper facilitates the serialization and rebinding of the special bound - mapper that attaches the label metadata to the slot names of the output score column. - - - - - Method corresponding to . - - - - The mapper we are wrapping. - - - - This is the constructor called for the initial wrapping. - - - - - Append label names to score column as its metadata. - - - - - Given a set of columns, return the input columns that are needed to generate those output columns. - - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - This function performs a number of checks on the inputs and, if appropriate and possible, will produce - a mapper with slots names on the output score column properly mapped. If this is not possible for any - reason, it will just return the input bound mapper. - - - - - This is a utility method used to determine whether - can or should be used to wrap . This will not throw, since the - desired behavior in the event that it cannot be wrapped, is to just back off to the original - "unwrapped" bound mapper. - - The mapper we are seeing if we can wrap - The type of the label names from the metadata (either - originating from the key value metadata of the training label column, or deserialized - from the model of a bindable mapper) - Whether we can call with - this mapper and expect it to succeed - - - - This is a utility method used to determine whether - can or should be used to wrap . This will not throw, since the - desired behavior in the event that it cannot be wrapped, is to just back off to the original - "unwrapped" bound mapper. - - The mapper we are seeing if we can wrap - The type of the label names from the metadata (either - originating from the key value metadata of the training label column, or deserialized - from the model of a bindable mapper) - Whether we can call with - this mapper and expect it to succeed - - - - Corresponds to . - - - - - Class for scorers that compute on additional "PredictedLabel" column from the score column. - Currently, this scorer is used for binary classification, multi-class classification, and clustering. - - - - - Base class for transformers with no feature column, or more than one feature columns. - - The type of the model parameters used by this prediction transformer. - - - - The model. - - - - - Whether a call to should succeed, on an - appropriate schema. - - - - - This class is more or less a thin wrapper over the implementing - , which publicly is a deprecated concept as far as the public API is - concerned. Nonetheless, until we move all internal infrastructure to be truely transform based, we - retain this as a wrapper. Even though it is mutable, subclasses of this should set this only in - their constructor. - - - - - Gets the output schema resulting from the - - The of the input data. - The resulting . - - - - Transforms the input data. - - The input data. - The transformed - - - - Gets a IRowToRowMapper instance. - - - - - - - The base class for all the transformers implementing the . - Those are all the transformers that work with one feature column. - - The model used to transform the data. - - - - The name of the feature column used by the prediction transformer. - - - - - The type of the prediction transformer - - - - - Initializes a new reference of . - - The local instance of . - The model used for scoring. - The schema of the training data. - The feature column name. - - - - Schema propagation for this prediction transformer. - - The input schema to attempt to map. - The output schema of the data, given an input schema like . - - - - Base class for the working on anomaly detection tasks. - - An implementation of the - - - - Base class for the working on binary classification tasks. - - An implementation of the - - - - Base class for the working on multi-class classification tasks. - - An implementation of the - - - - Base class for the working on regression tasks. - - An implementation of the - - - - Base class for the working on ranking tasks. - - An implementation of the - - - - Base class for the working on clustering tasks. - - An implementation of the - - - - Constructor corresponding to . - - - - - Constructor corresponding to . - - - - - Base class for scoring rows independently. This assumes that all columns produced by the - underlying should be exposed, as well as zero or more - "derived" columns. - - - - - The main save method handles saving the _bindable. This should do everything else. - - - - - Derived classes provide the specific bindings object. - - - - - Produces the set of active columns for the scorer (as a bool[] of length bindings.ColumnCount). - - - - - This produces either "true" or "null" according to whether - returns true or false. Note that this will never return false. Any derived class - must support (but not necessarily prefer) parallel cursors. - - - - - This should return true iff parallel cursors are advantageous. Typically, this - will return true iff some columns added by this scorer are active. - - - - - Create and fill an array of getters of size InfoCount. The indices of the non-null entries in the - result should be exactly those for which predicate(iinfo) is true. - - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Base bindings for a scorer based on an . This assumes that input schema columns - are echoed, followed by zero or more derived columns, followed by the mapper generated columns. - The names of the derived columns and mapper generated columns have an optional suffix appended. - - - - - The schema bound mapper. - - - - - The column name suffix. Non-null, but may be empty. - - - - - The number of derived columns. InfoCount == DerivedColumnCount + Mapper.OutputSchema.ColumnCount. - - - - - Returns a predicate indicating which Mapper columns are active based on the active scorer columns. - This is virtual so scorers with computed columns can do the right thing. - - - - - This is a base class for wrapping s in an . - - - - - The implementation for predictor wrappers that produce a - single output column. Note that the Bindable wrapper should do any input schema validation. - This class doesn't care. It DOES care that the role mapped schema specifies a unique Feature column. - It also requires that the output schema has ColumnCount == 1. - - - - - Given a set of columns, return the input columns that are needed to generate those output columns. - - - - - This class is a wrapper for all s except for quantile regression predictors, - and calibrated binary classification predictors. - - - - - This is an wrapper for calibrated binary classification predictors. - They need a separate wrapper because they return two values instead of one: the raw score and the probability. - - - - - The implementation for distribution predictor wrappers that produce - two float-valued output columns. Note that the Bindable wrapper does input schema validation. - - - - - Given a set of columns, return the input columns that are needed to generate those output columns. - - - - - This is an wrapper for quantile regression predictors. They need a separate - wrapper because they need the quantiles to create the . - - - - - This class contains method for creating commonly used s. - - - - - Return a which contains a single score column. - - The type of the score column. - The kind of the score column. It's the value of in the score column's metadata. - The score column's name in the generated . - which contains only one column. - - - - Create a with two columns for binary classifier. The first column, indexed by 0, is the score column. - The second column is the probability column. For example, for linear support vector machine, score column stands for the inner product - of linear coefficients and the input feature vector and we convert score column to probability column using a calibrator. - - Column name of score column - Column name of probability column - of binary classifier's output. - - - - This is very similar to but adds one extra metadata field to the only score column. - - Output element's type of quantile regressor. Note that a quantile regressor can produce an array of . - Quantiles used in quantile regressor. - of quantile regressor's output. - - - - This function returns a schema for sequence predictor's output. Its output column is always called . - - Score column's type produced by sequence predictor. - A metadata value of score column. It's the value associated with key - . - Sequence predictor usually generates integer outputs. This field tells the tags of all possible output values. - For example, output integer 0 could be mapped to "Sell" and 0 to "Buy" when predicting stock trend. - of sequence predictor's output. - - - - A class for mapping an input to an output cursor assuming no output columns - are requested, given a bindings object. This can be useful for transforms - utilizing the , but for which it is - inconvenient or inefficient to handle the "no output selected" case in their - own implementation. - - - - - Creates a wrapped version of the cursor - - Channel provider - The input cursor - The bindings object, - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Convenience method to more easily extract an from an - implementor without requiring an explicit cast. - - - - - An internal interface for the benefit of those -bearing objects accessible through - . Because this is meant to consumed by component authors implementations of this interface - should be explicit. - - - - - For parsing from a string. This supports "name" and "name:source". - Derived classes that want to provide parsing functionality to the CmdParser need to implement - a static Parse method. That method can call this (directly or indirectly) to handle the supported - syntax. - - - - - For parsing from a string. This supports "name" and "name:source" and "name:extra:source". For the last - form, the out extra parameter is sort accordingly. For the other forms, extra is set to null. - Derived classes that want to provide parsing functionality to the CmdParser need to implement - a static Parse method. That method can call this (directly or indirectly) to handle the supported - syntax. - - - - - The core unparsing functionality, for generating succinct command line forms "name" and "name:source". - - - - - The core unparsing functionality, for generating the succinct command line form "name:extra:source". - - - - - If both of name and source are null or white-space, return false. - Otherwise, if one is null or white-space, assign that one the other's value. - - - - - The parsing functionality for custom parsing from a string. This supports "name" and "name:sources", - where sources is a comma separated list of source column names. - - - - - Parsing functionality for custom parsing from a string with an "extra" value between name and sources. - This supports "name", "name:sources" and "name:extra:sources". - - - - - Base class that abstracts passing input columns through (with possibly different indices) and adding - InfoCount additional columns. If an added column has the same name as a non-hidden input column, it hides - the input column, and is placed immediately after the input column. Otherwise, the added column is placed - at the end. By default, newly added columns have no annotations (but this can be overridden). - - - - - Constructor taking the input schema and new column names. Names must be non-empty and - each name must be non-white-space. The names must be unique but can match existing names - in schemaInput. For error reporting, this assumes that the names come from a user-supplied - parameter named "column". This takes ownership of the params array of names. - - - - - The number of added columns. - - - - - This maps a column index for this schema to either a source column index (when - is true), or to an "iinfo" index of an added column - (when is false). - - Whether the return index is for a source column - The column index for this schema - The index (either source index or iinfo index) - - - - This maps from an index to an added column "info" to a column index. - - - - - The given predicate maps from output column index to whether the column is active. - This builds an array of bools of length ColumnCount containing the results of calling - predicate on each column index. - - - - - This builds an array of bools of length ColumnCount indicating the index of the active column. - - - - - The given predicate maps from output column index to whether the column is active. - This builds an array of bools of length Input.ColumnCount containing the results of calling - predicate on the output column index corresponding to each input column index. - - - - - This builds an array of bools of length Input.ColumnCount containing indicating the index of the - active input columns, given the actual columns. - - - - - Determine whether any columns generated by this transform are active. - - - - - Class that encapsulates passing input columns through (with possibly different indices) and adding - additional columns. If an added column has the same name as a non-hidden input column, it hides - the input column, and is placed immediately after the input column. Otherwise, the added column is placed - at the end. - This class is intended to simplify predicate propagation for this case. - - - - - The indices of added columns in the . - - - - - The input schema. - - - - - The merged schema. - - - - - Create a new instance of . - - The input schema that we're adding columns to. - The columns being added. - - - - This maps a column index for this schema to either a source column index (when - is true), or to an "iinfo" index of an added column - (when is false). - - Whether the return index is for a source column - The column index for this schema - The index (either source index or iinfo index) - - - - The given predicate maps from output column index to whether the column is active. - This builds an array of bools of length Input.ColumnCount containing the results of calling - predicate on the output column index corresponding to each input column index. - - - - - Parsing utilities for converting between transform column argument objects and - command line representations. - - - - - For parsing name and source from a string. This supports "name" and "name:source". - - - - - For parsing name and source from a string. This supports "name" and "name:source" and "name:extra:source". - For the last form, the out extra parameter is set accordingly. For the other forms, extra is set to null. - - - - - resulting from fitting an . - - - - - This denotes a concatenation of all into column called . - - - - - This denotes a concatenation of input columns into one column called . - For each input column, an 'alias' can be specified, to be used in constructing the resulting slot names. - If the alias is not specified, it defaults to be column name. - - - - - The names of the output and input column pairs for the transformation. - - - - - Concatename columns in into one column . - Original columns are also preserved. - The column types must match, and the output column type is always a vector. - - - - - Concatenates multiple groups of columns, each group is denoted by one of . - - - - - Factory method for SignatureLoadModel. - - - - - Factory method for SignatureDataTransform. - - - - - Factory method corresponding to SignatureDataTransform. - - - - - Factory method for SignatureLoadDataTransform. - - - - - Factory method for SignatureLoadRowMapper. - - - - - This represents the column information bound to the schema. - - - - - Clears a destination StringBuilder. If it is currently null, allocates it. - - - - - Gets the mapping from T into a StringBuilder representation, using various heuristics. - This StringBuilder representation will be a component of the composed KeyValues for the - hash outputs. - - - - - This is a small struct that is meant to compare akin to the value, - but also maintain the order in which it was inserted, assuming that - we're using something like a hashset where order is not preserved. - - - - - Constructs an invert hash collector that collects unique keys per slot, then is able - to build a textual description out of that. - - The maximum number of slots - The number of distinct keys we can accumulate per slot - Utilized in composing the final description, once we have done - collecting the distinct keys. - For detecting uniqueness of the keys we're collecting per slot. - For copying input values into a value to actually store. Useful for - types of objects where it is possible to do a comparison relatively quickly on some sort - of "unsafe" object, but for which when we decide to actually store it we need to provide - a "safe" version of the object. Utilized in the n-gram hash transform, for example. - - - - Simple utility class for saving a of ReadOnlyMemory - as a model, both in a binary and more easily human readable form. - - - - - Base class for handling the schema metadata API. - - - - - Information for a column. - - - - - Base class for metadata getters. - - - - - Strongly typed base class for metadata getters. Introduces the abstract Get method. - - - - - A delegate based metadata getter. - - - - - A primitive value based metadata getter. - - - - - The number of columns. - - - - - Create a ColInfo with the indicated information and no GetterInfos. This doesn't - register a column, only creates a ColInfo. Note that multiple columns can share - the same ColInfo, if desired. Simply call RegisterColumn multiple times, passing - the same ColInfo but different index values. This can only be called before Seal is called. - - - - - Register the given ColInfo as the metadata handling information for the given - column index. Throws if the given column index already has a ColInfo registered for it. - This can only be called before Seal is called. - - - - - Seals this dispatcher from further column registrations. This must be called before any - metadata methods are called, otherwise an exception is thrown. - - - - - Returns the ColInfo registered for the given column index, if there is one. This may be called - before or after Seal is called. - - - - - Gets the metadata kinds and types for the given column index. - This can only be called after Seal is called. - - - - - Gets the metadata type for the given metadata kind and column index, if there is one. - This can only be called after Seal is called. - - - - - Gets the metadata for the given metadata kind and column index. Throws if there isn't any. - This can only be called after Seal is called. - - - - - For handling the schema metadata API. Call one of the BuildMetadata methods to get - a builder for a particular column. Wrap the return in a using statement. Disposing the builder - records the metadata for the column. Call Seal() once all metadata is constructed. - - - - - Start building metadata for a column that doesn't pass through any metadata from - a source column. - - - - - Start building metadata for a column that passes through all metadata from - a source column. - - - - - Start building metadata for a column that passes through metadata of certain kinds from - a source column. The kinds that are passed through are those for which - returns true. - - - - - Start building metadata for a column that passes through metadata of the given kind from - a source column. - - - - - Start building metadata for a column that passes through metadata of the given kinds from - a source column. - - - - - The builder for metadata for a particular column. - - - - - This should really be private to MetadataDispatcher, but C#'s accessibility model doesn't - allow restricting to an outer class. - - - - - Add metadata of the given kind. When requested, the metadata is fetched by calling the given delegate. - - - - - Add metadata of the given kind, with the given value. - - - - - Close out the builder. This registers the metadata with the dispatcher. - - - - - A transform that does nothing. - - - - - Creates a NopTransform if the input is not an IDataTransform. - Otherwise it returns the input. - - - - - Explicit implementation prevents Schema from being accessed from derived classes. - It's our first step to separate data produced by transform from transform. - - - - - Shape information of the produced output. Note that the input and the output of this transform (and their types) are identical. - - - - - Given a set of columns, return the input columns that are needed to generate those output columns. - - - - - Signature for a repository based loader of an . - - - - - Trains on the current value. - - True if it can use more values for training. - - - - Finishes training and returns a column function. - - - - - Interface to define an aggregate function over values - - - - - Updates the aggregate function with a value - - - - - Finishes the aggregation - - - - - This contains entry-point definitions related to . - - - - - Base class for transformer which operates on pairs input and output columns. - - - - - This is a base implementation for a transform that in order to compute its output columns, needs to look - at an entire group of consecutive input examples. For each example in the group, it looks at the value of - two input columns and after seeing the entire group it computes the output column values. The output values - are the same for every example in the same group. - - The type of the values in the first input column - The type of the values in the second input column - Each class deriving from this transform should implement a state class that knows - how to return the current group's output column values. - - - - Deriving classes only need to implement . - If any of the output columns have metadata, then the metadata methods should be overridden. - - - - - Creates the getters for the transform's output columns. It can be assumed that when the getters are called, the state - object contains the current values of the output columns. - - The state object, containing the current group's output values. - Which output columns are active. - - - - Get the getter for the first input column. - - - - - Get the getter for the second input column. - - - - - Return a new state object. - - - - - Update the state object with one example. - - - - - This method is called after processing a whole group of examples. In this method the - state object should compute the output values for the group just seen. - - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Base class for transformer which produce new columns, but doesn't affect existing ones. - - - - - Base class for transforms. - - - - - The field is the type information of the produced IDataView of this transformer. - - Explicit interface implementation hides in all derived classes. The reason - is that a transformer should know the type it will produce but shouldn't contain the type of the data it produces. - Thus, this field will be eventually removed while legacy code can still access for now. - - - - - This returns false when this transform cannot support parallel cursors, null when it - doesn't care, and true when it benefits from parallel cursors. For example, a transform - that simply affects metadata, but not column values should return null, while a transform - that does a bunch of computation should return true (if legal). - - - - - Create a single (non-parallel) row cursor. - - - - - Base class for transforms that map single input row to single output row. - - - - - Base class for transforms that filter out rows without changing the schema. - - - - - Given a set of columns, return the input columns that are needed to generate those output columns. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Returns whether the given column is active in this row. - - - - - Base class for transforms that operate row by row with each destination column using one - source column. It provides an extension mechanism to allow a destination column to depend - on multiple input columns. - The implementation of TransformBase's OutputSchema and GetRowCursorCore are found here. - Because of this, classes deriving from OneToOneTransformerBase do not need to worry about creating - a or a , - since has an AsSchema property which returns the schema, and the nested class - is used by all classes deriving from OneToOneTransformBase when getting the row cursor. - - - - - Information about an added column - the name of the new column, the index of the - source column and the type of the source column. - - - - - Information about each added column. - - - - - Given a set of columns, return the input columns that are needed to generate those output columns. - - - - - Re-applying constructor. - - - - - Called by . Should be implemented by subclasses that return - true from . Will be called - - The context. Can be used to declare cells, access other information, - and whatnot. This method should not actually, however, declare the variable corresponding - to the output column. The calling method will do that. - The index of the output column whose PFA is being composed - The column info - The token in the PFA corresponding to the source col - Shuold return the declaration corresponding to the value of this column. Will - return null in the event that we do not know how to express this column as PFA - - - - Return the (destination) column index for the indicated added column. - - - - - Activates the source column. - Override when you don't need the source column to generate the value for this column or when you need - other auxiliary source columns that iinfo destination column depends on. - - - - - Sub-classes implement this to provide, for a cursor, a getter delegate and optional disposer. - If no action is needed when the cursor is Disposed, the override should set disposer to null, - otherwise it should be set to a delegate to be invoked by the cursor's Dispose method. It's best - for this action to be idempotent - calling it multiple times should be equivalent to calling it once. - - - - - This produces either "true" or "null" according to whether - returns true or false. Note that this will never return false. Any derived class - must support (but not necessarily prefer) parallel cursors. - - - - - This should return true iff parallel cursors are advantageous. The default implementation - returns true iff some columns added by this transform are active. - - - - - Returns a standard exception for responding to an invalid call to - implementation in on a column that is not transposable. - - - - - Implementors should note this only called if - returns a non-null value for this , so in principle - it should always return a valid value, if called. This implementation throws, - since the default implementation of will return - null for all new columns, and so reaching this is only possible if there is a - bug. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Returns whether the given column is active in this row. - - - - - Utilities to rebind data transforms - - - - - Attempt to apply the data transform to a different data view source. - If the transform in question implements , - is called. Otherwise, the transform is serialized into a byte array and then deserialized. - - The host to use - The transform to apply. - The data view to apply the transform to. - The resulting data view. - - - - Walks back the Source chain of the up to the - (or if is null), - and reapplies all transforms in the chain, to produce the same chain but bound to the different data. - It is valid to have no transforms: in this case the result will be equal to - If is specified and not found in the pipe, an exception is thrown. - - The environment to use. - The end of the chain. - The new data to attach the chain to. - The 'old source' of the pipe, that doesn't need to be reapplied. If null, all transforms are reapplied. - The resulting data view. - - - - Extension methods that allow to extract values of a single column of an as an - . - - - - - Extract all values of one column of the data view in a form of an . - - The type of the values. This must match the actual column type. - The data view to get the column from. - The name of the column to be extracted. - - - - Extract all values of one column of the data view in a form of an . - - The type of the values. This must match the actual column type. - The data view to get the column from. - The column to be extracted. - - - - This class defines extension methods for an to facilitate creating - components (loaders, transforms, trainers, scorers, evaluators, savers). - - - - - Create a new data view which is obtained by appending all columns of all the source data views. - If the data views are of different length, the resulting data view will have the length equal to the - length of the shortest source. - - The host environment to use. - A non-empty collection of data views to zip together. - The resulting data view. - - - - Generate training examples for training a predictor or instantiating a scorer. - - The host environment to use. - The data to use for training or scoring. - The name of the features column. Can be null. - The name of the label column. Can be null. - The name of the group ID column (for ranking). Can be null. - The name of the weight column. Can be null. - Additional column mapping to be passed to the trainer or scorer (specific to the prediction type). Can be null or empty. - The constructed examples. - - - - Load the transforms (but not loader) from the model steram and apply them to the specified data. - It is acceptable to have no transforms in the model stream: in this case the original - will be returned. - - The host environment to use. - The model stream to load from. - The data to apply transforms to. - The transformed data. - - - - Creates a data loader from the arguments object. - - - - - Creates a data loader from the 'LoadName{settings}' string. - - - - - Creates a data saver from the arguments object. - - - - - Creates a data saver from the 'LoadName{settings}' string. - - - - - Creates a data transform from the arguments object. - - - - - Creates a data transform from the 'LoadName{settings}' string. - - - - - Creates a data scorer from the 'LoadName{settings}' string. - - The host environment to use. - The settings string. - The data to score. - The predictor to score. - The training data schema from which the scorer can optionally extract - additional information, for example, label names. If this is null, no information will be - extracted. - The scored data. - - - - Creates a default data scorer appropriate to the predictor's prediction kind. - - The host environment to use. - The data to score. - The predictor to score. - The training data schema from which the scorer can optionally extract - additional information, for example, label names. If this is null, no information will be - extracted. - The scored data. - - - - Loads a predictor from the model stream. Returns null iff there's no predictor. - - The host environment to use. - The model stream. - - - - An ML.NET environment for local execution. - - - - - Create an ML.NET for local execution. - - Random seed. Set to null for a non-deterministic environment. - - - - Add a custom listener to the messages of ML.NET components. - - - - - Remove a previously added a custom listener. - - - - - Utilities to parse command-line representations of types. - - - - - Attempt to parse the string into a data kind and (optionally) a keyCount. This method does not check whether - the returned can really be made into a key with the specified . - - The string to parse. - The parsed data kind. - The parsed key count, or null if there's no key specification. - Whether the parsing succeeded or not. - - - - Construct a out of the data kind and the keyCount. - - - - - Defines the cardinality, or count, of valid values of a column. This needs to be strictly positive. - It is used by and . - - - - - Initializes the cardinality, or count, of valid values of a column to the - largest integer that can be expresed by the underlying datatype of the . - - - - - Initializes the cardinality, or count, of valid values of a column to - - - - - Parses the string format for a KeyCount, also supports the old KeyRange format for backwards compatibility. - - - - - Create a file handle from path if it was not empty. - - - - - Create the write stream from the file, if not null. - - - - - Collection of extension methods for the to create instances of - components to save and read objects to and from a high-performance binary format. - - - - - Load a from an on a binary file. - Note that 's are lazy, so no actual loading happens here, just schema validation. - - The catalog. - The file source to load from. This can be a , for example. - - - - Load a from a binary file. - Note that 's are lazy, so no actual loading happens here, just schema validation. - - The catalog. - The path to the file to load from. - - - - - - - - - Save the into a binary stream. - - The catalog. - The data view to save. - The stream to write to. - Whether to keep hidden columns in the dataset. - - - - - - - - - Represents some common global operations over a type - including many unsafe operations. - - - - - - This does NOT take ownership of the names array. - - - - - This takes ownership of the arrays. - - - - - Various utilities - - - - - generic method for parsing arguments using CommandLine. If there's a problem, it throws an InvalidOperationException, with a message giving usage. - - The host environment - The argument object - The settings string (for example, "threshold-") - The name is used for error reporting only - - - - Make a string representation of an array - - - - - Convert string representation of char separator(s) - - - - - Convert from a string representation of separator to a char - - - - - Save the model summary. - - - - - Save the model in text format (if it can save itself) - - - - - Save the model in binary format (if it can save itself). - - - - - Save the model in text format (if it can save itself) - - - - - Save the model in text format (if it can save itself) - - - - - Drops slots from a fixed or variable sized column based on slot ranges. - - - - - Returns -1 for non vector and unknown length vectors. - - - - - Constructs slot dropper. It expects the slot ranges to be in sorted order and not overlap. - - 0 indicates variable sized vector. - Low limit of ranges to be dropped. - Upper limit of ranges to be dropped. - - - - Returns a getter that drops slots. - - - - - Drops slots from src and populates the dst with the resulting vector. Slots are - dropped based on min and max slots that were passed at the constructor. - - - - - Expand an extended wildcard pattern into a set of file paths. - - the pattern to expand - the set of file paths matching the pattern - - The wildcard pattern accepts the standard "*" and "?" placeholders. - "..." also refers to a recursive search over subdirectories. - "+" can also be used to make a union of several filenames or patterns. - Names of files that do not exist will be excluded. - - - - - A timer scope class that starts a when created, calculates and prints elapsed time, physical and virtual memory usages before sending these to the telemetry when disposed. - - - - - A dictionary of uint sequences of variable length. Stores the sequences as - byte sequences encoded with LEB128. Empty sequences (or null) are also valid. - - - - - Returns true if the sequence was added, or false if it was already in the pool. - - The array containing the sequence to add to the pool. - The location in the array of the first sequence element. - The exclusive end of the sequence. - To be populated with the id of the added sequence. - True if the sequence was added, false if the sequence was already present in the pool. - - - - Find the given sequence in the pool. If not found, returns -1. - - An integer sequence - The starting index of the sequence to find in the pool - The length of the sequence to find in the pool - The ID of the sequence if it is found, -1 otherwise - - - - Adds the item. Does NOT check for whether the item is already present. - - - - - Collection of extension methods for the to read from databases. - - - - Create a database loader . - The catalog. - Array of columns defining the schema. - - - Create a database loader . - The catalog. - Defines the settings of the load operation. - - - Create a database loader . - Defines the schema of the data to be loaded. Use public fields or properties - decorated with (and possibly other attributes) to specify the column - names and their data types in the schema of the loaded data. - The catalog. - - - - Class used to load data from one or more files. - - - - - Loads data from one or more file into an . - Note that 's are lazy, so no actual loading happens here, just schema validation. - - The loader to use. - One or more paths from which to load data. - - - - - - - - - Class used to create components that operate on data, but are not part of the model training pipeline. - Includes components to load, save, cache, filter, shuffle, and split data. - - - - - A pair of datasets, for the train and test set. - - - - - Training set. - - - - - Testing set. - - - - - Create pair of datasets. - - Training set. - Testing set. - - - - Create a new over an enumerable of the items of user-defined type. - The user maintains ownership of the and the resulting data view will - never alter the contents of the . - Since is assumed to be immutable, the user is expected to support - multiple enumerations of the that would return the same results, unless - the user knows that the data will only be cursored once. - - One typical usage for streaming data view could be: create the data view that lazily loads data - as needed, then apply pre-trained transformations to it and cursor through it for transformation - results. - - The user-defined item type. - The enumerable data containing type to convert to a . - The optional schema definition of the data view to create. If null, - the schema definition is inferred from . - The constructed . - - - - - - - - - Create a new over an enumerable of the items of user-defined type using the provided , - which might contain more information about the schema than the type can capture. - - - The user maintains ownership of the and the resulting data view will - never alter the contents of the . - Since is assumed to be immutable, the user is expected to support - multiple enumerations of the that would return the same results, unless - the user knows that the data will only be cursored once. - One typical usage for streaming data view could be: create the data view that lazily loads data - as needed, then apply pre-trained transformations to it and cursor through it for transformation - results. - One practical usage of this would be to supply the feature column names through the . - - The user-defined item type. - The enumerable data containing type to convert to an . - The schema of the returned . - An with the given . - - - - Convert an into a strongly-typed . - - The user-defined item type. - The underlying data view. - Whether to return the same object on every row, or allocate a new one per row. - Whether to ignore the case when a requested column is not present in the data view. - Optional user-provided schema definition. If it is not present, the schema is inferred from the definition of T. - The that holds the data in . It can be enumerated multiple times. - - - - - - - - - Take an approximate bootstrap sample of . - - - This sampler is a streaming version of bootstrap resampling. - Instead of taking the whole dataset into memory and resampling, streams through the dataset and - uses a Poisson(1) distribution to select the number of times a - given row will be added to the sample. The parameter allows for the creation of a bootstap sample - and complementary out-of-bag sample by using the same . - - The input data. - The random seed. If unspecified, the random state will be instead derived from the . - Whether this is the out-of-bag sample, that is, all those rows that are not selected by the transform. - Can be used to create a complementary pair of samples by using the same seed. - - - - - - - - - Creates a lazy in-memory cache of . - - - Caching happens per-column. A column is only cached when it is first accessed. - In addition, are considered 'always needed', so these columns - will be cached the first time any data is requested. - - The input data. - The columns that must be cached whenever anything is cached. An empty array or null - value means that columns are cached upon their first access. - - - - - - - - - Filter the dataset by the values of a numeric column. - - - Keep only those rows that satisfy the range condition: the value of column - must be between (inclusive) and (exclusive). - - The input data. - The name of a column to use for filtering. - The inclusive lower bound. - The exclusive upper bound. - - - - - - - - - Filter the dataset by the values of a column. - - - Keep only those rows that satisfy the range condition: the value of a key column - (treated as a fraction of the entire key range) must be between (inclusive) and (exclusive). - This filtering is useful if the is a key column obtained by some 'stable randomization', - for example, hashing. - - The input data. - The name of a column to use for filtering. - The inclusive lower bound. - The exclusive upper bound. - - - - - - - - - Drop rows where any column in contains a missing value. - - The input data. - Name of the columns to filter on. If a row is has a missing value in any of - these columns, it will be dropped from the dataset. - - - - - - - - - Shuffle the rows of . - - - will shuffle the rows of any input using a streaming approach. - In order to not load the entire dataset in memory, a pool of rows will be used - to randomly select rows to output. The pool is constructed from the first rows - in . Rows will then be randomly yielded from the pool and replaced with the next row from - until all the rows have been yielded, resulting in a new of the same size as - but with the rows in a randomized order. - If the property of is true, then it will also be read into the - pool in a random order, offering two sources of randomness. - - The input data. - The random seed. If unspecified, the random state will be instead derived from the . - The number of rows to hold in the pool. Setting this to 1 will turn off pool shuffling and - will only perform a shuffle by reading in a random order. - If , the transform will not attempt to read in a random order and only use - pooling to shuffle. This parameter has no effect if the property of is . - - - - - - - - - - Skip rows in . - - - Skips the first rows from and returns an with all other rows. - - The input data. - Number of rows to skip. - - - - - - - - - Take rows from . - - - Returns returns an with the first rows from . - - The input data. - Number of rows to take. - - - - - - - - - Split the dataset into the train set and test set according to the given fraction. - Respects the if provided. - - The dataset to split. - The fraction of data to go into the test set. - Name of a column to use for grouping rows. If two examples share the same value of the , - they are guaranteed to appear in the same subset (train or test). This can be used to ensure no label leakage from the train to the test set. - Note that when performing a Ranking Experiment, the must be the GroupId column. - If no row grouping will be performed. - Seed for the random number generator used to select rows for the train-test split. - - - - - - - - - Split the dataset into cross-validation folds of train set and test set. - Respects the if provided. - - The dataset to split. - Number of cross-validation folds. - Name of a column to use for grouping rows. If two examples share the same value of the , - they are guaranteed to appear in the same subset (train or test). This can be used to ensure no label leakage from the train to the test set. - Note that when performing a Ranking Experiment, the must be the GroupId column. - If no row grouping will be performed. - Seed for the random number generator used to select rows for cross-validation folds. - - - - - - - - - Splits the data based on the splitColumn, and drops that column as it is only - intended to be used for splitting the data, and shouldn't be part of the output schema. - - - - - Based on the input samplingKeyColumn creates a new splitColumn that will be used by the callers to apply a RangeFilter that will produce train-test splits - or cross-validation splits. - - Notice that the new splitColumn might get dropped by the callers of this method after using it, as it wasn't part of - the input DataView schema. - - IHostEnvironment of the caller - DataView that should contain the "samplingKeyColumn". The new splitColumn will be added to this DataView. - Name of the column that will be used as base of the new splitColumn. - Notice that in other places in the code the samplingKeyColumn, and/or the splitColumn this method creates, - are refered to as "SamplingKeyColumn", "StratificationColumn", "SplitColumn", "GroupPreservationColumn" or similar names. - The seed that might be used by the transformers that will create the new splitColumn - If seed = null, then should we use the env seed? If seed = null, and this parameter is false, then we won't use a seed. - The name of the new column - - - - Extension methods that allow chaining of estimator and transformer pipelines. - - - - - Create a new composite loader estimator, by appending another estimator to the end of this data loader estimator. - - - - - Create a new composite loader estimator, by appending an estimator to this data loader. - - - - - Create a new estimator chain, by appending another estimator to the end of this estimator. - - - - - Append a 'caching checkpoint' to the estimator chain. This will ensure that the downstream estimators will be trained against - cached data. It is helpful to have a caching checkpoint before trainers that take multiple data passes. - - The starting estimator - The host environment to use for caching. - - - - Create a new composite loader, by appending a transformer to this data loader. - - - - - Create a new transformer chain, by appending another transformer to the end of this transformer chain. - - - - - Given an estimator, return a wrapping object that will call a delegate once - is called. It is often important for an estimator to return information about what was fit, which is why the - method returns a specifically typed object, rather than just a general - . However, at the same time, are often formed into pipelines - with many objects, so we may need to build a chain of estimators via where the - estimator for which we want to get the transformer is buried somewhere in this chain. For that scenario, we can through this - method attach a delegate that will be called once fit is called. - - The type of returned by - The estimator to wrap - The delegate that is called with the resulting instances once - is called. Because - may be called multiple times, this delegate may also be called multiple times. - A wrapping estimator that calls the indicated delegate whenever fit is called - - - - - - - - - Collection of extension methods for the to read from delimited text - files such as csv and tsv. - - - - - Create a text loader . - - The catalog. - Array of columns defining the schema. - The character used as separator between data points in a row. By default the tab character is used as separator. - Whether the file has a header with feature names. When a is provided, - indicates that the first line in the will be used for feature names, and that when - is called, the first line will be skipped. When there is no provided, just indicates that the loader should - skip the first line when is called, but columns will not have slot names annotations. This is - because the output schema is made when the loader is created, and not when is called. - The optional location of a data sample. The sample can be used to infer slot name annotations if present, and also the number - of slots in a column defined with with maximum index. - If the sample has been saved with ML.NET's , - it will also contain the schema information in the header that the loader can read even if is . - In order to use the schema defined in the file, all other arguments sould be left with their default values. - Whether the input may include double-quoted values. This parameter is used to distinguish separator characters - in an input value from actual separators. When , separators within double quotes are treated as part of the - input value. When , all separators, even those within quotes, are treated as delimiting a new column. - Remove trailing whitespace from lines. - Whether the input may include sparse representations. For example, a row containing - "5 2:6 4:3" means that there are 5 columns, and the only non-zero are columns 2 and 4, which have values 6 and 3, - respectively. Column indices are zero-based, so columns 2 and 4 represent the 3rd and 5th columns. - A column may also have dense values followed by sparse values represented in this fashion. For example, - a row containing "1 2 5 2:6 4:3" represents two dense columns with values 1 and 2, followed by 5 sparsely represented - columns with values 0, 0, 6, 0, and 3. The indices of the sparse columns start from 0, even though 0 represents the third column. - - - - - - - - - Create a text loader . - - The catalog. - Defines the settings of the load operation. - The optional location of a data sample. The sample can be used to infer slot name annotations if present, and also the number - of slots in defined with with maximum index. - If the sample has been saved with ML.NET's , - it will also contain the schema information in the header that the loader can read even if are not specified. - In order to use the schema defined in the file, all other sould be left with their default values. - - - - Create a text loader by inferencing the dataset schema from a data model type. - - Defines the schema of the data to be loaded. Use public fields or properties - decorated with (and possibly other attributes) to specify the column - names and their data types in the schema of the loaded data. - The catalog. - Column separator character. Default is '\t' - Whether the file has a header with feature names. When a is provided, - indicates that the first line in the will be used for feature names, and that when - is called, the first line will be skipped. When there is no provided, just indicates that the loader should - skip the first line when is called, but columns will not have slot names annotations. This is - because the output schema is made when the loader is created, and not when is called. - The optional location of a data sample. The sample can be used to infer slot name annotations if present. - Whether the input may include double-quoted values. This parameter is used to distinguish separator characters - in an input value from actual separators. When , separators within double quotes are treated as part of the - input value. When , all separators, even those whitin quotes, are treated as delimiting a new column. - Remove trailing whitespace from lines. - Whether the input may include sparse representations. For example, a row containing - "5 2:6 4:3" means that there are 5 columns, and the only non-zero are columns 2 and 4, which have values 6 and 3, - respectively. Column indices are zero-based, so columns 2 and 4 represent the 3rd and 5th columns. - A column may also have dense values followed by sparse values represented in this fashion. For example, - a row containing "1 2 5 2:6 4:3" represents two dense columns with values 1 and 2, followed by 5 sparsely represented - columns with values 0, 0, 6, 0, and 3. The indices of the sparse columns start from 0, even though 0 represents the third column. - - - - Create a text loader by inferencing the dataset schema from a data model type. - - The catalog. - Defines the settings of the load operation. Defines the settings of the load operation. No need to specify a Columns field, - as columns will be infered by this method. - The optional location of a data sample. The sample can be used to infer information - about the columns, such as slot names. - - - - Load a from a text file using . - Note that 's are lazy, so no actual loading happens here, just schema validation. - - The catalog. - The path to the file(s). - The columns of the schema. - The character used as separator between data points in a row. By default the tab character is used as separator. - Whether the file has a header. When , the loader will skip the first line when - is called. - Whether the input may include double-quoted values. This parameter is used to distinguish separator characters - in an input value from actual separators. When , separators within double quotes are treated as part of the - input value. When , all separators, even those whitin quotes, are treated as delimiting a new column. - It is also used to distinguish empty values from missing values. When , missing value are denoted by consecutive - separators and empty values by \"\". When , empty values are denoted by consecutive separators and missing - values by the default missing value for each type documented in . - Remove trailing whitespace from lines. - Whether the input may include sparse representations. For example, a row containing - "5 2:6 4:3" means that there are 5 columns, and the only non-zero are columns 2 and 4, which have values 6 and 3, - respectively. Column indices are zero-based, so columns 2 and 4 represent the 3rd and 5th columns. - A column may also have dense values followed by sparse values represented in this fashion. For example, - a row containing "1 2 5 2:6 4:3" represents two dense columns with values 1 and 2, followed by 5 sparsely represented - columns with values 0, 0, 6, 0, and 3. The indices of the sparse columns start from 0, even though 0 represents the third column. - The data view. - - - - Load a from a text file using . - Note that 's are lazy, so no actual loading happens here, just schema validation. - - The catalog. - Specifies a file or path of files from which to load. - Defines the settings of the load operation. - - - - - - - - - Load a from a text file using . - Note that 's are lazy, so no actual loading happens here, just schema validation. - - The catalog. - The path to the file(s). - Column separator character. Default is '\t' - Whether the file has a header. When , the loader will skip the first line when - is called. - Whether the input may include double-quoted values. This parameter is used to distinguish separator characters - in an input value from actual separators. When , separators within double quotes are treated as part of the - input value. When , all separators, even those whitin quotes, are treated as delimiting a new column. - It is also used to distinguish empty values from missing values. When , missing value are denoted by consecutive - separators and empty values by \"\". When , empty values are denoted by consecutive separators and missing - values by the default missing value for each type documented in . - Remove trailing whitespace from lines. - Whether the input may include sparse representations. For example, a row containing - "5 2:6 4:3" means that there are 5 columns, and the only non-zero are columns 2 and 4, which have values 6 and 3, - respectively. Column indices are zero-based, so columns 2 and 4 represent the 3rd and 5th columns. - A column may also have dense values followed by sparse values represented in this fashion. For example, - a row containing "1 2 5 2:6 4:3" represents two dense columns with values 1 and 2, followed by 5 sparsely represented - columns with values 0, 0, 6, 0, and 3. The indices of the sparse columns start from 0, even though 0 represents the third column. - The data view. - - - - Load a from a text file using . - Note that 's are lazy, so no actual loading happens here, just schema validation. - - The catalog. - Specifies a file or path of files from which to load. - Defines the settings of the load operation. No need to specify a Columns field, - as columns will be infered by this method. - The data view. - - - - Save the as text. - - The catalog. - The data view to save. - The stream to write to. - The column separator. - Whether to write the header row. - Whether to write the header comment with the schema. - Whether to keep hidden columns in the dataset. - Whether to save columns in dense format even if they are sparse vectors. - - - - - - - - - Checks the validity of a given path, and whether or not it is a - valid path to a data file, or a path to a directory of files. - - Specifies a file or path of files from which to load. - - - - Class used to create instances of preview objects for debugging. - Note: this class and all methods should only be used for debugging and not in production code. - - - - - Extract a 'head' of the data view in a view that is convenient to debug. - - The data view to preview - Maximum number of rows to pull - - - - Preview an effect of the on a given . - - The transformer which effect we are previewing - The data view to use for preview - Maximum number of rows to pull - - - - Preview an effect of the on a given . - - The estimator which effect we are previewing - The data view to use for preview - Maximum number of rows to show in preview - Maximum number of rows to fit the estimator - - - - Preview an effect of the on a given . - - The data loader to preview - The source to pull the data from - Maximum number of rows to pull - - - - A series of vector utility functions, generally operating over arrays or - structures. The convention is that if a array or buffer is not modified, that is, it is treated - as a constant, it might have the name a or b or src, but in a situation - where the vector structure might be changed the parameter might have the name dst. - - - - - Returns the L2 norm squared of the vector (sum of squares of the components). - - - - - Returns the L2 norm squared of the vector (sum of squares of the components). - - - - - Returns the L2 norm of the vector. - - L2 norm of the vector - - - - Returns the L1 norm of the vector. - - L1 norm of the vector - - - - Returns the L-infinity norm of the vector (i.e., the maximum absolute value). - - L-infinity norm of the vector - - - - Returns the sum of elements in the vector. - - - - - Scales the vector by a real value. - - Incoming vector - Value to multiply vector with - - - - Scales the vector by a real value. - = * - - - - - Perform in-place vector addition += . - - - - - Perform in-place scaled vector addition - += * . - If either vector is dense, will be dense, unless - is 0 in which case this method does nothing. - - - - - Perform scalar vector addition - = * + - - - - - Calculate - + * - and store the result in . - - - - - Perform in-place scaled vector addition - += * , - except that this takes place in the section of starting - at slot . - - - - - Perform in-place scaling of a vector into another vector as - = * . - This is more or less equivalent to performing the same operation with - except perhaps more efficiently, - with one exception: if is 0 and - is sparse, will have a count of zero, instead of the - same count as . - - - - - Sparsify vector A (keep at most + values) - and optionally rescale values to the [-1, 1] range. - Vector to be sparsified and normalized. - How many top (positive) elements to preserve after sparsification. - How many bottom (negative) elements to preserve after sparsification. - Whether to normalize results to [-1,1] range. - - - - - Multiplies arrays Dst *= A element by element and returns the result in (Hadamard product). - - - - - Computes the dot product of two arrays - Where "offset" is considered to be a's zero index - - one array - the second array (given as a VBuffer) - offset in 'a' - the dot product - - - - Computes the dot product of two arrays - Where "offset" is considered to be a's zero index - - one array - the second array (given as a VBuffer) - offset in 'a' - the dot product - - - - Computes the L1 distance between two VBuffers - - one VBuffer - another VBuffer - L1 Distance from a to b - - - - Computes the Euclidean distance between two VBuffers - - one VBuffer - another VBuffer - Distance from a to b - - - - Computes the Euclidean distance squared between two VBuffers - - one VBuffer - another VBuffer - Distance from a to b - - - - Given two vectors a and b, calculate their L2 distance squared (|a-b|^2). - - The first vector, given as an array - The second vector, given as a VBuffer{float} - The squared L2 distance between a and b - - - - Perform in-place vector addition += . - - - - - Adds a multiple of a to a array. - - Buffer to add - Span to add to - Coefficient - - - - Adds a multiple of a to a array, with an offset into the destination. - - Buffer to add - Array to add to - The offset into at which to add - Coefficient - - - - Adds a multiple of an array to a second array. - - Array to add - Array to add to - Multiple - - - - Returns the L2 norm of the vector (sum of squares of the components). - - - - - Returns sum of elements in array - - - - - Multiples the array by a real value - - The array - Value to multiply vector with - - - - Computes the loss given the output and the ground truth. - Note that the return value has type Double because the loss is usually accumulated over many instances. - - - - - Derivative of the loss function with respect to output - - - - - Delegate signature for standardized classification loss functions. - - - - - Delegate signature for standardized regression loss functions. - - - - - Generic base class for all model parameters. - - Output type produced by the model. - - - - This emits a warning if there is Normalizer sub-model. - - - - - Interface for mapping input values to corresponding feature contributions. - This interface is commonly implemented by predictors. - - - - - Get a delegate for mapping Contributions to Features. - Result will contain vector with topN positive contributions(if available) and - bottomN negative contributions (if available). - For example linear predictor will have both negative and positive contributions. - For trees we will not have negative contributions, so bottom param will be ignored. - If normalization is requested that resulting values will be normalized to [-1, 1]. - - - - - Allows support for feature contribution calculation by model parameters. - - - - - Support for feature contribution calculation. - - - - - Interface for the Trainer Estimator. - - The type of the transformer returned by the estimator. - The type of the model parameters. - - - - Gets the information about the trainer. - - - - - This represents a basic class for 'simple trainer'. - A 'simple trainer' accepts one feature column and one label column, also optionally a weight column. - It produces a 'prediction transformer'. - - - - - A standard string to use in errors or warnings by subclasses, to communicate the idea that no valid - instances were able to be found. - - - - - The feature column that the trainer expects. - - - - - The label column that the trainer expects. Can be null, which indicates that label - is not used for training. - - - - - The weight column that the trainer expects. Can be null, which indicates that weight is - not used for training. - - - - - The information about the trainer: whether it benefits from normalization, caching etc. - - - - Trains and returns a . - - Derived class can overload this function. - For example, it could take an additional dataset to train with a separate validation set. - - - - - The columns that will be created by the fitted transformer. - - - - - This represents a basic class for 'simple trainer'. - A 'simple trainer' accepts one feature column and one label column, also optionally a weight column. - It produces a 'prediction transformer'. - - - - - The optional groupID column that the ranking trainers expects. - - - - - The base class for all trainer inputs. - - - - - The data to be used for training. Used only in entry-points, since in the API the expected mechanism is - that the user will use the or some other train - method. - - - - - Column to use for features. - - - - - Normalize option for the feature column. Used only in entry-points, since in the API the user is expected to do this themselves. - - - - - Whether trainer should cache input training data. Used only in entry-points, since the intended API mechanism - is that the user will use the or other method - like . - - - - - The base class for all trainer inputs that support a Label column. - - - - - Column to use for labels. - - - - - The base class for all trainer inputs that support a weight column. - - - - - Column to use for example weight. - - - - - The base class for all unsupervised trainer inputs that support a weight column. - - - - - Column to use for example weight. - - - - - The base class for all trainer inputs that support a group column. - - - - - Column to use for example groupId. - - - - - Options for creating a from a with specified standard columns active. - - - - - Check for a standard (known-length vector of float) feature column. - - - - - Check for a standard (known-length vector of float) feature column and determine its length. - - - - - Check for a standard binary classification label. - - - - - Check for a standard regression label. - - - - - Check for a standard multi-class label and determine its cardinality. If the column is a - key type, it must have known cardinality. For other numeric types, this scans the data - to determine the cardinality. - - - - - Check for a standard regression label. - - - - - Create a row cursor for the RoleMappedData with the indicated standard columns active. - This does not verify that the columns exist, but merely activates the ones that do exist. - - - - - Create a row cursor set for the with the indicated standard columns active. - This does not verify that the columns exist, but merely activates the ones that do exist. - - - - - Get the getter for the feature column, assuming it is a vector of float. - - - - - Get the getter for the feature column, assuming it is a vector of float. - - - - - Get a getter for the label as a float. This assumes that the label column type - has already been validated as appropriate for the kind of training being done. - - - - - Get a getter for the label as a float. This assumes that the label column type - has already been validated as appropriate for the kind of training being done. - - - - - Get the getter for the weight column, or null if there is no weight column. - - - - - Get the getter for the group column, or null if there is no group column. - - - - - The for the label column for binary classification tasks. - - name of the label column - - - - The for the float type columns. - - name of the column - - - - The for the label column for regression tasks. - - name of the weight column - - - - The for the feature column. - - name of the feature column - - - - The for the weight column. - - name of the weight column - - - - This is a shim class to translate the more contemporaneous - style transformers into the older now disfavored idiom, for components that still - need to operate via that older mechanism. (Mostly command line invocations, and so on.). - - The type of the new model parameters. - The type corresponding to the legacy predictor. - - - - This is a shim for legacy code that takes the more modern - interface, and maps it to the legacy code that wants an . The goal should be to - remove reliance on that interface if possible, but this may not be practical in the immediate term, so for the benefit - of scenarios like this we have this convenience function. - - The trainer estimator type. - The type of the model produced by the estimator. - The type of the predictor to be produced by the predictor. - The host environment. - The trainer estimator. - An implementation of the legacy trainer interface. - - - - This is the base class for a data cursor. Data cursors are specially typed - "convenience" cursor-like objects, less general than a but - more convenient for common access patterns that occur in machine learning. For - example, the common idiom of iterating over features/labels/weights while skipping - "bad" features, labels, and weights. There will be two typical access patterns for - users of the cursor. The first is just creation of the cursor using a constructor; - this is best for one-off accesses of the data. The second access pattern, best for - repeated accesses, is to use a cursor factory (usually a nested class of the cursor - class). This keeps track of what filtering options were actually useful. - - - - - The base constructor class for the factory-based cursor creation. - - - This method is called - - - - This method is called by in the event we have reached the end - of the cursoring. The intended usage is that it returns what flags will be passed to the signal - delegate of the cursor, indicating what additional options should be specified on subsequent - passes over the data. The base implementation checks if any rows were skipped, and if none were - skipped, it signals the context that it needn't bother with any filtering checks. - - Because the result will be "or"-red, a perfectly acceptable implementation is that this - return the default , in which case the flags will not ever change. - - If the cursor was created with a signal delegate, the return value of this method will be sent - to that delegate. - - - - - Calls Cursor.MoveNext() and this.Accept() repeatedly until this.Accept() returns true. - Returns false if Cursor.MoveNext() returns false. If you call Cursor.MoveNext() directly, - also call this.Accept() to fetch the values of the current row. Note that if this.Accept() - returns false, it's possible that not all values were fetched. - - - - - This fetches and validates values for the standard active columns. - It is called automatically by MoveNext(). Client code should only need - to deal with this if it calls MoveNext() on the underlying - directly. That is, this is only for very advanced scenarios. - - - - - This is the base class for a data cursor factory. The factory is a reusable object, - created with data and cursor options. From external non-implementing users it will - appear to be more or less stateless, but internally it is keeping track of what sorts - of filtering it needs to perform. For example, if we construct the factory with the - option that it needs to filter out rows with bad feature values, but on the first - iteration it is revealed there are no bad feature values, then it would be a complete - waste of time to check on subsequent iterations over the data whether there are bad - feature values again. - - - - - The typed analog to . - - Non-null if we are requesting a shuffled cursor. - The extra columns to activate on the row cursor - in addition to those required by the factory's options. - The wrapping typed cursor. - - - - The typed analog to , this provides a - partitioned cursoring of the data set, appropriate to multithreaded algorithms - that want to consume parallel cursors without any consolidation. - - Suggested degree of parallelism. - Non-null if we are requesting a shuffled cursor. - The extra columns to activate on the row cursor - in addition to those required by the factory's options. - The cursor set. Note that this needn't necessarily be of size - . - - - - Called by both the and factory methods. Implementors - should instantiate the particular wrapping cursor. - - The row cursor we will wrap. - The data from which the row cursor was instantiated. - The cursor options this row cursor was created with. - The action that our wrapping cursor will call. Implementors of the cursor - do not usually call it directly, but instead override - , whose return value is used to call - this action. - - - - - Accumulates signals from cursors, anding them together. Once it has - all of the information it needs to signal the factory itself, it will - do so. - - - - - This supports Weight (float), Group (ulong), and Id (RowId) columns. - - - - - This derives from and adds the feature column - as a . - - - - - This derives from the FeatureFloatVectorCursor and adds the Label (float) column. - - - - - This derives from the FeatureFloatVectorCursor and adds the Label (int) column, - enforcing multi-class semantics. - - - - - The loss function may know the close-form solution to the optimal dual update - Ref: Sec(6.2) of http://jmlr.org/papers/volume14/shalev-shwartz13a/shalev-shwartz13a.pdf - - - - - Compute the dual update (\Delta\alpha_i) in SDCA - - alpha: dual variable at the specified instance - - lambdaN: L2 const x number of instances - - cached invariant, hinted by the method above - - - - - The dual loss function for a training example. - If f(x) denotes the loss function on an individual training example, - then this function returns -f*(-x*), where f*(x*) is the Fenchel conjugate - of f(x). - - The label of the example. - The dual variable of the example. - - - - The Log Loss, also known as the Cross Entropy Loss. It is commonly used in classification tasks. - - - - - - - - - Hinge Loss, commonly used in classification tasks. - - - - - - - - - A smooth version of the function, commonly used in classification tasks. - - - - - - - - - Constructor for smoothed hinge losee. - - The smoothing constant. - - - - Exponential Loss, commonly used in classification tasks. - - - - - - - - - The Squared Loss, commonly used in regression tasks. - - - - - - - - - Poisson Loss function for Poisson Regression. - - - - - - - Tweedie loss, based on the log-likelihood of the Tweedie distribution. This loss function is used in Tweedie regression. - - - - - - - Constructor for Tweedie loss. - - Index parameter for the Tweedie distribution, in the range [1, 2]. - 1 is Poisson loss, 2 is gamma loss, and intermediate values are compound Poisson loss. - - - - A generic interface for models that can average parameters from multiple instance of self - - - - - A generic interface for models that can average parameters from multiple instance of self - - - - - Predictor that can specialize for quantile regression. It will produce a , given - an array of quantiles. - - - - - A generic interface for probability distributions - - Type of statistics result - - - - Returns Support sample for the distribution. - - Weights for the distribution.It will be null if the distribution is uniform. - Returns Support sample - - - - Predictors that can output themselves in a human-readable text format - - - - - Predictors that can output themselves in the Bing ini format. - - - - - Predictors that can output Summary. - - - - - Predictors that can output Summary in key value pairs. - The content of value 'object' can be any type such as integer, float, string or an array of them. - It is up the caller to check and decide how to consume the values. - - - - - Gets model summary including model statistics (if exists) in key value pairs. - - - - - Predictors that can output themselves in C#/C++ code. - - - - - Signature for trainers that produce predictors that in turn can be use to score features. - - - - - Interface implemented by components that can assign weights to features. - - - - - Returns the weights for the features. - There should be at most as many weights as there are features. - If there are less weights, it is implied that the remaining features have a weight of zero. - The larger the absolute value of a weights, the more informative/important the feature. - A weights of zero signifies that the feature is not used by the model. - - - - - Interface implemented by predictors that can score features. - - - - - Interface for predictors that can return a string array containing the label names from the label column they were trained on. - If the training label is a key with text key value metadata, it should return this metadata. The order of the labels should be consistent - with the key values. Otherwise, it returns null. - - - - - Whether this object really is capable of saving itself as part of an ONNX - pipeline. An implementor of this object might implement this interface, - but still return false if there is some characteristic of this object - only detectable during runtime that would prevent its being savable. (For example, - it may wrap some other object that may or may not be savable.) - - - - - This component know how to save himself in ONNX format. - - - - - Save as ONNX. - - The ONNX program being built - - - - This data model component is savable as ONNX. - - - - - This is savable in ONNX. Note that this is - typically called within an that is wrapping - this mapper, and has already been bound to it. - - - - - Save as ONNX. If is - false this should not be called. This method is intended to be called - by the wrapping scorer transform, and is intended to produce enough information - for that purpose. - - The ONNX program being built - The role mappings that was passed to this bindable - object, when the was created that this transform - is wrapping - Since this method is called from a scorer transform, - it is that transform that controls what the output column names will be, of - the outputs produced by this bindable mapper. This is the array that holds - those names, so that implementors of this method know what to produce in - . - - - - For simple mappers. Intended to be used for and - instances. - - - - - For simple mappers. Intended to be used for - instances. - - - - - A context for defining a ONNX output. The context internally contains the model-in-progress being built. This - same context object is iteratively given to exportable components via the interface - and subinterfaces, that attempt to express their operations as ONNX nodes, if they can. At the point that it is - given to a component, all other components up to that component have already attempted to express themselves in - this context, with their outputs possibly available in the ONNX graph. - - - - - Generates a unique name for the node based on a prefix. - - The prefix for the node - A name that has not yet been returned from this function, starting with - - - - Determine if a string has been used as ONNX variable name somewhere. - - examined string - True if the input argument has been used to denote an ONNX variable. Otherwise, False. - - - - Looks up whether a given data view column has a mapping in the ONNX context. Once confirmed, callers can - safely call . - - The data view column name - Whether the column is mapped in this context - - - - Check the required OpSet version satisfies our requirement - - - - - - Stops tracking a column. - - Column name to stop tracking - Remove associated ONNX variable. This is useful in the event where an output - variable is created through before realizing - the transform cannot actually save as ONNX. - - - - Removes an ONNX variable. If removeColumn is true then it also removes the tracking for the column associated with it. - - ONNX variable to remove. Note that this is an ONNX variable name, not an column name - IDataView column to stop tracking - - - - Removes a variable from the input columns list. This function is used only by the ColumnSelectingTransformer. - - ONNX variable to remove. - - - - ONNX variables are referred to by name. At each stage of a ML.NET pipeline, the corresponding - 's column names will map to a variable in the ONNX graph if the intermediate steps - used to calculate that value are things we knew how to save as ONNX. Retrieves the variable name that maps - to the column name at a given point in the pipeline execution. Callers should - probably confirm with whether a mapping for that data view column - already exists. - - The data view column name - The ONNX variable name corresponding to that data view column - - - - Establishes a new mapping from an data view column in the context, if necessary generates a unique name, and - returns that newly allocated name. - - The data view type associated with this column name - The data view column name - Whether we should skip the process of establishing the mapping from data view column to - ONNX variable name. - The returned value is the name of the variable corresponding - - - - Creates an ONNX node - - The name of the ONNX operator to apply - The names of the variables as inputs - The names of the variables to create as outputs, - which ought to have been something returned from - The name of the operator, which ought to be something returned from - The domain of the ONNX operator, if non-default - A node added to the in-progress ONNX graph, that attributes can be set on - - - - Convenience alternative to - for the case where there is exactly one input and output. - - The name of the ONNX operator to apply - The name of the variable as input - The name of the variable as output, - which ought to have been something returned from - The name of the operator, which ought to be something returned from - The domain of the ONNX operator, if non-default - A node added to the in-progress ONNX graph, that attributes can be set on - - - - Get the targeted ONNX version string. Only two values are allowed now: "Stable" and "Experimental". - - - - - - Retrieve the shape of an ONNX variable. Returns null if no shape for the specified variable can be found. - - The ONNX name of the returned shape - The shape of the retrieved variable - - - - Call this function to declare a global bool scalar - - The boolean value which is going to be added - A string used as a seed to generate this initializer's name in the ONNX graph. - Whether a unique name should be picked for this initializer. - The initializer's ONNX name - - - - Call this function to declare a global float scalar - - The float number which is going to be added - A string used as a seed to generate this initializer's name in the ONNX graph. - Whether a unique name should be picked for this initializer. - The initializer's ONNX name - - - - Call this function to declare a global integer scalar or smaller types - - The float number which is going to be added - The type of integer to be added, e.g. typeof(short). Use this for all integer types Int32 and smaller - A string used as a seed to generate this initializer's name in the ONNX graph. - Whether a unique name should be picked for this initializer. - The initializer's ONNX name - - - - Call this function to declare a global string scalar - - The string which is going to be added into the ONNX graph - A string used as a seed to generate this initializer's name in the ONNX graph. - Whether a unique name should be picked for this initializer. - The initializer's ONNX name - - - - Call this function to declare a global long scalar - - The long number which is going to be added into the ONNX graph - A string used as a seed to generate this initializer's name in the ONNX graph. - Whether a unique name should be picked for this initializer. - The initializer's ONNX name - - - - Call this function to declare a global double scalar - - The double number which is going to be added into the ONNX graph - A string used as a seed to generate this initializer's name in the ONNX graph. - Whether a unique name should be picked for this initializer. - The initializer's ONNX name - - - - Call this function to declare a global ulong or uint scalar - - The long number which is going to be added into the ONNX graph - true if value contains a ulong value and false if it contains uint - A string used as a seed to generate this initializer's name in the ONNX graph. - Whether a unique name should be picked for this initializer. - The initializer's ONNX name - - - - Call this function to declare a global bool tensor - - The boolean values which are going to be added into the ONNX graph - The shape of values - A string used as a seed to generate this initializer's name in the ONNX graph. - Whether a unique name should be picked for this initializer. - The initializer's ONNX name - - - - Call this function to declare a global float tensor - - The floats which are going to be added into the ONNX graph - The shape of values - A string used as a seed to generate this initializer's name in the ONNX graph. - Whether a unique name should be picked for this initializer. - The initializer's ONNX name - - - - Call this function to declare a global tensor of integer or smaller types - - The ints which are going to be added into the ONNX graph - The type of ints which are going to be added into the ONNX graph, e.g. typeof(short). Use this for adding array initializers of integer types smaller than Int32 - The shape of values - A string used as a seed to generate this initializer's name in the ONNX graph. - Whether a unique name should be picked for this initializer. - The initializer's ONNX name - - - - Call this function to declare a global string tensor - - The strings which are going to be added into the ONNX graph - The shape of values - A string used as a seed to generate this initializer's name in the ONNX graph. - Whether a unique name should be picked for this initializer. - The initializer's ONNX name - - - - Call this function to declare a global long tensor - - The longs which are going to be added into the ONNX graph - The shape of values - A string used as a seed to generate this initializer's name in the ONNX graph. - Whether a unique name should be picked for this initializer. - The initializer's ONNX name - - - - Call this function to declare a global double tensor - - The doubles which are going to be added into the ONNX graph - The shape of values - A string used as a seed to generate this initializer's name in the ONNX graph. - Whether a unique name should be picked for this initializer. - The initializer's ONNX name - - - - Call this function to declare a global ulong tensor - - The unsigned integers which are going to be added into the ONNX graph - Set to true if values contain ulong values false if they contain uint values - The shape of values - A string used as a seed to generate this initializer's name in the ONNX graph. - Whether a unique name should be picked for this initializer. - The initializer's ONNX name - - - - An abstraction for an ONNX node as created by - . - That method creates a with inputs and outputs, but this object can modify the node further - by adding attributes (in ONNX parlance, attributes are more or less constant parameterizations). - - - - - This wraps a , except with auxiliary information - that enables its inclusion relative to the ecosystem. - The idea is that one starts with a context built from some starting point, - then subsequent transforms via augment this context. - Beyond what is offered in , - has facilities to remember what column name in maps to - what token in the PFA being built up. - - - - - The internal PFA context, for an escape hatch. - - - - - This will map from the "current" name of a data view column, to a corresponding - token string. - - - - - This contains a map of those names in - - - - - This call will set to an appropriate output type based - on the columns requested. - - The schema corresponding to what we are outputting - The columns to output - Returns a complete PFA program, where the output will correspond to the subset - of columns from . - - - - Attempts to declare variables corresponding to a given column name. This - will attempt to produce a PFA let/set declaration, and also - do name mapping. The idea is that any transform implementing - will call this method to say, "hey, I produce this column, and this is the equivalent - PFA for it." - - The map from requested name, usually a dataview name, - to the declaration - An array of assigned names in the PFA corresponding to the items in - vars - - - - As a complimentary operation to , - this provides a mechanism for a transform to say, "hey, I am producing this column, but I - am not writing any PFA for it, so if anyone asks for this column downstream don't say I - have it." - - The names to hide - - - - Given an column name, return the string for referencing the corresponding - token in the PFA, or null if such a thing does not exist. - - - - - Given an column name, return whether in the PFA being built up - whether the corresponding PFA variable is still the input. This will return false - also in the event that the column is hidden, or simply not present. - - - - - Whether this object really is capable of saving itself as part of a PFA - pipeline. An implementor of this object might implement this interface, - but still return false if there is some characteristic of this object - only detectable during runtime that would prevent its being savable. (For example, - it may wrap some other object that may or may not be savable.) - - - - - This component know how to save himself in Pfa format. - - - - - Save as PFA. For any columns that are output, this interface should use - to declare themselves, - while any unwritable columns should be registered . - If is false this should not be called. - - The PFA program being built - - - - This data model component is savable as PFA. See https://dmg.org/pfa/ . - - - - - This is savable as a PFA. Note that this is - typically called within an that is wrapping - this mapper, and has already been bound to it. - - - - - Save as PFA. If is - false this should not be called. This method is intended to be called - by the wrapping scorer transform, and is intended to produce enough information - for that purpose. - - The PFA program being built - The role mappings that was passed to this bindable - object, when the was created that this transform - is wrapping - Since this method is called from a scorer transform, - it is that transform that controls what the output column names will be, of - the outputs produced by this bindable mapper. This is the array that holds - those names, so that implementors of this method know what to produce in - . - - - - For simple mappers. Intended to be used for and - instances. - - - - - Implementors of this method are responsible for providing the PFA expression that - computes the output of this object. Note that this method does not control what name - will be given to the output, and is not responsible for declaring the variable into - which the output will be returned. (Though, the method may of course declare other - variables, cells, or such to enable this computation.) - - The PFA context - The PFA token representing the input. In the case of - a predictor, for example, this would be a reference to the variable holding - the features array. - A PFA expression - - - - For simple mappers. Intended to be used for - instances. - - - - - The call for distribution predictors. Unlike , - this method requires this method to handle the declaration of the variables for their - outputs, into the names and provided. - - The PFA context - The PFA token representing the input. In nearly all cases this will - be the name of the variable holding the features array. - The name of the column where the implementing method should - save the expression, through , - or if null - - Similar to , except the probability expression. - - - - - A context for defining a restricted sort of PFA output. - - - - - For creating an anonymous function block. This in itself will not modify the context. - - - - - PFA is weird in that you do not declare types separately, you declare them as part of a variable - declaration. So, if you use a record type three times, that means one of the three usages must be - accompanied by a full type declaration, whereas the other two can just then identify it by name. - This is extremely silly, but there you go. - - Anyway: this will attempt to add a type to the list of registered types. If it returns true - then the caller is responsible, then, for ensuring that their PFA code they are generating contains - not only a reference of the type, but a declaration of the type. If however this returns false - then it can just refer to the type by name, since it has already been declared. - - The type to register - If this name was not already registered - - - - - Generic facilities for calling a function. - - The function to call - The parameters for the function - - - - - Builds a "cast" statement to the two vector types. - - The type of the item in the vector - The token we are casting - The name for the token as it will appear in the - The map case expression - The name for the token as it will appear in the - The array case expression - The cast/case expression - - - - This ensures that there is a function formatted as "count_type" (for example, "count_double"), - that takes either a map or array and returns the number of items in that map or array. - - The context to check for the existence of this - The item type this will operate on - - - - A string -> bool function for determining whether a string has content. - - - - - This class provides utilities for loading components from the model file generated by MAML commands. - - - - - Loads and returns the loader and transforms from the specified model stream. - - The host environment to use. - The model stream. - The data source to initialize the loader with. - Whether to extract the transforms and loader from the wrapped CompositeDataLoader. - The created data view. - - - - Loads and returns the loader and transforms from the specified repository reader. - - The host environment to use. - The repository reader. - The data source to initialize the loader with. - Whether to extract the transforms and loader from the wrapped CompositeDataLoader. - The created data view. - - - - Loads all transforms from the model stream, applies them sequentially to the provided data, and returns - the resulting data. If there are no transforms in the stream, or if there's no DataLoader stream at all - (this can happen if the model is produced by old TL), returns the source data. - If the DataLoader stream is invalid, throws. - - The host environment to use. - The starting data view. - The model stream. - The resulting data view. - - - - Loads all transforms from the model stream, applies them sequentially to the provided data, and returns - the resulting data. If there are no transforms in the stream, or if there's no DataLoader stream at all - (this can happen if the model is produced by old TL), returns the source data. - If the DataLoader stream is invalid, throws. - - The host environment to use. - The starting data view. - The repository reader. - The resulting data view. - - - - Loads a predictor from the model stream. Returns null iff there's no predictor. - - - - - Loads a predictor from the repository. Returns null iff there's no predictor. - - - - - Given a repository, returns the save context for saving the data loader model. - - - - - Loads data view (loader and transforms) from if is set to true, - otherwise loads loader only. - - - - - REVIEW: consider adding an overload that returns of - Loads optionally feature names from the repository directory. - Returns false iff no stream was found for feature names, iff result is set to null. - - - - - Save schema associations of role/column-name in . - - - - - Return role/column-name pairs loaded from . - - - - - Return role/column-name pairs loaded from a repository. - - - - - Returns the from a model stream, or null if there were no - role mappings present. - - - - - Returns the from a repository, or null if there were no - role mappings present. - - - - - The RepositoryStreamWrapper is a IMultiStreamSource wrapper of a Stream object in a repository. - It is used to deserialize RoleMappings.txt from a model zip file. - - - - - A custom entry stream wrapper that includes custom dispose logic for disposing the entry - when the stream is disposed. - - - - - Common output classes for trainers and transform entry-points. - - - - - The common output class for all transforms. - The output consists of the transformed dataset and the transformation model. - - - - - Interface that all API transform output classes will implement. - - - - - The common output class for all trainers. - The output is a trained predictor model. - - - - - The common output for calibrators. - - - - - Marker interface for calibrators output. - - - - - The common output for binary classification trainers. - - - - - Marker interface for binary classification trainer output. - - - - - The common output for multiclass classification trainers. - - - - - Marker interface for multiclass classification trainer output. - - - - - The common output for regression trainers. - - - - - Marker interface for regression trainer output. - - - - - The common output for multi regression trainers. - - - - - Marker interface for multi regression trainer output. - - - - - The common output for clustering trainers. - - - - - Marker interface for clustering trainer output. - - - - - The common output for anomaly detection trainers. - - - - - Marker interface for anomaly detection trainer output. - - - - - The common output for ranking trainers. - - - - - Marker interface for ranking trainer output. - - - - - The common output for sequence prediction trainers. - - - - - Marker interface for sequence prediction trainer output. - - - - - Interface that all API trainer output classes will implement. - - - - - Macro output class base. - - - - - The common output class for all macro entry points. - The output class is the type parameter. The expansion must guarantee - that the generated graph will generate all the outputs. - - The output class of the macro. - - - - The common output class for all evaluators. - - - - - The output class for classification evaluators. - - - - - The output class for regression evaluators. - - - - - Interface that all API evaluator output classes will implement. - - - - - Interface that all API evaluator output classes will implement. - - - - - Marker class for the arguments that can be used as variables - in an entry point graph. - - - - - Marker class for the arguments that can be used as array output variables - in an entry point graph. - - - - - Marker class for the arguments that can be used as dictionary output variables - in an entry point graph. - - - - - A descriptor of one 'variable' of the graph (input or output that is referenced as a $variable in the graph definition). - - - - - The value. It will originally start as null, and then assigned to the value, - once it is available. The type is one of the valid types according to . - - - - - Whether the given type is a valid one to be a variable. - - - - - Set the value. It is only allowed once. - - - - - A collection of all known variables, with an interface to add new variables, get values based on names etc. - This is populated by individual nodes when they parse their respective JSON definitions, and then the values are updated - during the node execution. - - - - - Returns true if added new variable, false if variable already exists. - - - - - A representation of one graph node. - - - - - An alphanumeric string indicating the stage of a node. - The fact that the nodes share the same stage ID hints that they should be executed together whenever possible. - - - - - Hints that the output of this node should be checkpointed. - - - - - The cost of running this node. NaN indicates unknown. - - - - - Checks the given JSON object key-value pair is a valid EntryPoint input and - extracts out any variables that need to be populated. These variables will be - added to the EntryPoint context. Input parameters that are not set to variables - will be immediately set using the input builder instance. - - - - - Checks the given JSON object key-value pair is a valid EntryPoint output. - Extracts out any variables that need to be populated and adds them to the - EntryPoint context. - - - - - Whether the node can run right now. - - - - - Represents a delayed binding in a JSON graph to an . - The subclasses allow us to express that we either desire the variable itself, - or a array-indexed or dictionary-keyed value from the variable, assuming it is - of an Array or Dictionary type. - - - - - Verifies that the name of the graph variable is a valid one - - - - - Represents the l-value assignable destination of a . - Subclasses exist to express the needed bindings for subslots - of a yet-to-be-constructed array or dictionary EntryPoint input parameter - (for example, "myVar": ["$var1", "$var2"] would yield two : (myVar, 0), (myVar, 1)) - - - - - The base class for all evaluators inputs. - - - - - Common input interfaces for TLC components. - - - - - Interface that all API transform input classes will implement. - - - - - Interface that all API trainable featurizers will implement. - - - - - Interface that all API trainer input classes will implement. - - - - - Interface that all API trainer input classes will implement. - - - - - Interface that all API trainer input classes will implement. - - - - - Interface that all API trainer input classes will implement. - - - - - Interface that all API trainer input classes will implement. - - - - - Interface that all API calibrator input classes will implement. - - - - - Interface that all API evaluator input classes will implement. - - - - - The class that creates and wraps around an instance of an input object and gradually populates all fields, keeping track of missing - required values. The values can be set from their JSON representation (during the graph parsing stage), as well as directly - (in the process of graph execution). - - - - - Retreives the field index for a field with the given alias, or -1 if - that field alias is not found. - - - - - Returns the Type of the given field, unwrapping any option - types to be of their inner type. If the given alias doesn't exist - this method returns null. - - - - - Returns the array of required values that were not specified using . - - - - - Set a value of a field specified by by parsing . - - - - - Set a value of a field specified by directly to . - - - - - Ensures that the given value can be assigned to an entry point field with - type . This method will wrap the value in the option - type if needed and throw an exception if the value isn't assignable. - - The exception context. - Type type of the field this value is to be assigned to. - The value, typically originates from either ParseJsonValue, or is an external, user-provided object. - - - - If outerType is an Optional{T}, the innerValue is wrapped in a constructed, explicit - Optional instance, otherwise the value is directly returned. - - - - - Returns the created instance. - - - - - This class wraps around the output object type, does not create an instance, and provides utility methods for field type checking - and extracting values. - - - - - Extract all values of a specified output object. - - - - - These are the common field names used in the JSON objects for defining the manifest. - - - - - Range specific field names. - - - - - Obsolete Attribute specific field names. - - - - - SweepableLongParam specific field names. - - - - - SweepableFloatParam specific field names. - - - - - SweepableDiscreteParam specific field names. - - - - - This class encapsulates the predictor and a preceding transform model, as the concrete and hidden - implementation of . - - - - - Entry point methods for row filtering and selection. - - - - - This encapsulates zero or more transform models. It does this by recording - the initial schema, together with the sequence of transforms applied to that - schema. - - - - - This contains the transforms to save instantiated on an with - appropriate initial schema. Note that the "root" of this is typically either - an empty or a with no rows. However, other root - types are possible, since we don't insist on this when loading a model - from a zip file. However, whenever we save, we force a to - be serialized for the root. - - - - - The input schema that this transform model was originally instantiated on. - Note that the schema may have columns that aren't needed by this transform model. - If an exists with this schema, then applying this transform model to it - shouldn't fail because of column type issues. - REVIEW: Would be nice to be able to trim this to the minimum needed somehow. Note - however that doing so may cause issues for composing transform models. For example, - if transform model A needs column X and model B needs Y, that is NOT produced by A, - then trimming A's input schema would cause composition to fail. - - - - - The resulting schema once applied to this model. The might have - columns that are not needed by this transform and these columns will be seen in the - produced by this transform. - - - - - Create a TransformModel containing the transforms from "result" back to "input". - - - - - Create a TransformModel containing the given (optional) transforms applied to the - given root schema. - - - - - Load a transform model. - - - - - Apply this transform model to the given input data. - - - - - Apply this transform model to the given input transform model to produce a composite transform model. - - - - - Save this transform model. - - - - - Given a set of columns, return the input columns that are needed to generate those output columns. - - - - - Provides data for the event. - - - - - Initializes a new instance of the class. - - The message being logged. - - - - Initializes a new instane of class that includes the kind and source of the message - - The message being logged - The type of message - The source of the message - - - - Gets the source component of the event - - - - - Gets the type of message - - - - - Gets the message being logged. - - - - - Gets the original message that doesn't include the source and kind - - - - - The common context for all ML.NET operations. Once instantiated by the user, it provides a way to - create components for data preparation, feature engineering, training, prediction, and model evaluation. - It also allows logging, execution control, and the ability to set repeatable random numbers. - - - - - Trainers and tasks specific to binary classification problems. - - - - - Trainers and tasks specific to multiclass classification problems. - - - - - Trainers and tasks specific to regression problems. - - - - - Trainers and tasks specific to clustering problems. - - - - - Trainers and tasks specific to ranking problems. - - - - - Trainers and tasks specific to anomaly detection problems. - - - - - Trainers and tasks specific to forecasting problems. - - - - - Data processing operations. - - - - - Operations with trained models. - - - - - Data loading and saving. - - - - - The handler for the log messages. - - - - - This is a catalog of components that will be used for model loading. - - - - - Gets or sets the location for the temp files created by ML.NET. - - - - - Allow falling back to run on CPU if couldn't run on GPU. - - - - - GPU device ID to run execution on, to run on CPU. - - - - - Create the ML context. - - Seed for MLContext's random number generator. See the remarks for more details. - - Many operations in ML.NET require randomness, such as - random data shuffling, random sampling, random parameter initialization, - random permutation, random feature selection, and many more. - MLContext's random number generator is the global source of randomness for - all of such random operations. - - If a fixed seed is provided by , MLContext environment becomes - deterministic, meaning that the results are repeatable and will remain the same across multiple runs. - For instance in many of ML.NET's API reference example code snippets, a seed is provided. - That's because we want the users to get the same output as what's included in example comments, - when they run the example on their own machine. - - Generally though, repeatability is not a requirement and that's the default behavior. - If a seed is not provided by , i.e. it's set to , - MLContext environment becomes non-deterministic and outputs change across multiple runs. - - There are many operations in ML.NET that don't use any randomness, such as - min-max normalization, concatenating columns, missing value indication, etc. - The behavior of those operations are deterministic regardless of the seed value. - - Also ML.NET trainers don't use randomness *after* the training is finished. - So, the predictions from a loaded model don't depend on the seed value. - - - - - Class used by to save and load trained models. - - - - - Save a transformer model and the loader used to create its input data to the stream. - - The trained model to be saved. Note that this can be , as a shorthand - for an empty transformer chain. Upon loading with - the returned value will be an empty . - The loader that was used to create data to train the model. - A writeable, seekable stream to save to. - - - - Save a transformer model and the loader used to create its input data to the file. - - The trained model to be saved. Note that this can be , as a shorthand - for an empty transformer chain. Upon loading with - the returned value will be an empty . - The loader that was used to create data to train the model. - Path where model should be saved. - - - - Save a transformer model and the schema of the data that was used to train it to the stream. - - The trained model to be saved. Note that this can be , as a shorthand - for an empty transformer chain. Upon loading with the returned value will - be an empty . - The schema of the input to the transformer. This can be . - A writeable, seekable stream to save to. - - - - Save a transformer model and the schema of the data that was used to train it to the file. - - The trained model to be saved. Note that this can be , as a shorthand - for an empty transformer chain. Upon loading with the returned value will - be an empty . - The schema of the input to the transformer. This can be . - Path where model should be saved. - - - - - - - - - Load the model and its input schema from a stream. - - A readable, seekable stream to load from. - Will contain the input schema for the model. If the model was saved without - any description of the input, there will be no input schema. In this case this can be . - The loaded model. - - - - - - - - - Load the model and its input schema from a file. - - Path to a file where the model should be read from. - Will contain the input schema for the model. If the model was saved without - any description of the input, there will be no input schema. In this case this can be . - The loaded model. - - - - - - - - - Given a loader, test try to "decompose" it into a source loader, and its transform if any. - If necessary an empty chain will be created to stand in for the trivial transformation; it - should never return . - - - - - Load a transformer model and a data loader model from a stream. - - A readable, seekable stream to load from. - The data loader from the model stream. Note that if there is no data loader, - this method will throw an exception. The scenario where no loader is stored in the stream should - be handled instead using the method. - The transformer model from the model stream. - - - - Load a transformer model and a data loader model from a file. - - Path to a file where the model should be read from. - The data loader from the model stream. Note that if there is no data loader, - this method will throw an exception. The scenario where no loader is stored in the stream should - be handled instead using the method. - The transformer model from the model file. - - - - Create a prediction engine for one-time prediction (default usage). - - The class that defines the input data. - The class that defines the output data. - The transformer to use for prediction. - Whether to throw an exception if a column exists in - but the corresponding member doesn't exist in - . - Additional settings of the input schema. - Additional settings of the output schema. - - - - - - - - - Create a prediction engine for one-time prediction. - It's mainly used in conjunction with , - where input schema is extracted during loading the model. - - The class that defines the input data. - The class that defines the output data. - The transformer to use for prediction. - Input schema. - - - - Create a prediction engine for one-time prediction. - It's mainly used in conjunction with , - where input schema is extracted during loading the model. - - The class that defines the input data. - The class that defines the output data. - The transformer to use for prediction. - Advanced configuration options. - - - - Extension methods to create a prediction engine. - - - - - Create a prediction engine for one-time prediction. - - The class that defines the input data. - The class that defines the output data. - The transformer to use for prediction. - The environment to use. - Whether to throw an exception if a column exists in - but the corresponding member doesn't exist in - . - Additional settings of the input schema. - Additional settings of the output schema. - Whether the prediction engine owns the transformer and should dispose of it. - - - - Signature for the loaders of calibrators. - - - - - This is a legacy interface still used for the command line and entry-points. All applications should transition away - from this interface and still work instead via of , - for example, the subclasses of . However for now we retain this - until such time as those components making use of it can transition to the new way. No public surface should use - this, and even new internal code should avoid its use if possible. - - - - - True if the calibrator needs training, false otherwise. - - - - Training calibrators: provide the output and the class label - True if it needs more examples, false otherwise - - - Finish up training after seeing all examples - - - - This is a shim interface implemented only by to enable - access to the underlying legacy interface for those components that use - that old mechanism that we do not care to change right now. - - - - - An interface for predictors that take care of their own calibration given an input data view. - - - - - provides a weekly-typed way to access strongly-typed - and - . - is commonly used in weekly-typed expressions. The - existence of this interface is just for supporting existing codebase, so we discourage its uses. - - - - - Base class for calibrated model parameters. - - - - - Class for allowing a post-processing step, defined by , to 's - output. - - Type being calibrated. - Type used to calibrate. - - For example, in binary classification, can convert support vector machine's - output value to the probability of belonging to the positive (or negative) class. Detailed math materials - can be found at this paper. - - - - - 's output would calibrated by . - - - - - is used to post-process score produced by . - - - - - - - - Encapsulates a predictor and a calibrator that implement . - Its implementation of combines both the predictors and the calibrators. - - - - - Given a set of columns, return the input columns that are needed to generate those output columns. - - - - - Whether we can save as PFA. Note that this depends on whether the underlying predictor - can save as PFA, since in the event that this in particular does not get saved, - - - - - Trains a calibrator, if needed. - - The environment to use. - The channel. - The calibrator trainer. - The maximum rows to use for calibrator training. - The trainer used to train the predictor. - The predictor that needs calibration. - The examples to used for calibrator training. - The original predictor, if no calibration is needed, - or a metapredictor that wraps the original predictor and the newly trained calibrator. - - - - Trains a calibrator. - - The environment to use. - The channel. - The calibrator trainer. - The predictor that needs calibration. - The examples to used for calibrator training. - The maximum rows to use for calibrator training. - The original predictor, if no calibration is needed, - or a metapredictor that wraps the original predictor and the newly trained calibrator. - - - - Trains a calibrator. - - The environment to use. - The channel. - The calibrator trainer. - The predictor that needs calibration. - The examples to used for calibrator training. - The maximum rows to use for calibrator training. - The original predictor, if no calibration is needed, - or a metapredictor that wraps the original predictor and the newly trained calibrator. - - - - Trains a by dividing the range of the outputs into equally sized bins. - The probability of belonging to a particular class, for example class 1, is the number of class 1 instances in the bin, divided by the total number - of instances in that bin. - - - - - Initializes a new instance of . - - - - - The naive binning-based calibrator. - - - - - Bool required by the interface ISingleCanSaveOnnx, returns true if - and only if calibrator can be exported in ONNX. - - - - The bin size. - - - The minimum value in the first bin. - - - The value of probability in each bin. - - - Initializes a new instance of . - The to use. - The minimum value in the first bin. - The values of the probability in each bin. - The bin size. - - - - Given a classifier output, produce the probability - - - - - Base class for calibrator trainers. - - - - - An enumerator over the entries sorted by score. - - - - - - Training calibrators: provide the classifier output and the class label - - - - - The Platt calibrator calculates the probability following: - P(x) = 1 / (1 + exp( * x + ) - . - - - - Slope value for this calibrator. - - - - - Offset value for this calibrator - - - - - Initializes a new instance of . - - - - Given a classifier output, produce the probability. - - - - The isotonic calibrator. - - - The function that is implemented by this calibrator is: - P(x) = - - [i], if [i] <= x <= [i]> - Linear interpolation between [i] and [i+1], if [i] < x < [i+1] - [0], if x < [0] - [n], if x > [n] - - - - - - Bottom borders of PAV intervals. - - - - - Upper borders of PAV intervals. - - - - - Values of PAV intervals. - - - - - Initializes a new instance of . - - The to use. - The minimum values for each piece. - The maximum values for each piece. - The actual values for each piece. - - - Given a classifier output, produce the probability. - - - - This method calibrates the specified predictor using the specified calibrator, training on the specified data. - - A host to pass to the components created in this method. - The input object, containing the predictor, the data and an integer indicating the maximum number - of examples to use for training the calibrator. - The kind of calibrator to use. - A object, containing an . - - - - An interface for probability calibrators. - - - - Given a classifier output, produce the probability. - - - - Base class for calibrator estimators. - - - CalibratorEstimators take an (the output of a ) - that contains a "Score" column, and converts the scores to probabilities(through binning, interpolation etc.), based on the type. - They are used in pipelines where the binary classifier produces non-calibrated scores. - - - - - Gets the output of the after fitting the calibrator. - Fitting the calibrator will add a column named "Probability" to the schema. If you already had such a column, a new one will be added. - The same annotation data that would be produced by is marked as - being present on the output, if it is present on the input score column. - - The input . - - - - Fits the scored creating a that can transform the data by adding a - column containing the calibrated . - - - A trained that will transform the data by adding the - column. - - - - Implemented by deriving classes that create a concrete calibrator. - - - - - An instance of this class is the result of calling . - If you pass a scored data, to the Transform method, it will add the Probability column - to the dataset. The Probability column is the value of the Score normalized to be a valid probability. - The is an instance of - where score can be viewed as a feature while probability is treated as the label. - - The used to transform the data. - - - - The Platt calibrator estimator. - - - - - Initializes a new instance of - - The environment to use. - /// The name of the label column.This is consumed both when this estimator - is fit and when the estimator is consumed. - The name of the score column.This is consumed when this estimator is fit, - but not consumed by the resulting transformer. - The name of the example weight column (optional). Note that if specified this is - consumed when this estimator is fit, but not consumed by the resulting transformer. - - - - Obtains the probability values by applying the sigmoid: f(x) = 1 / (1 + exp(-slope * x + offset). - Note that unlike, say, , the fit function here is trivial - and just "fits" a calibrator with the provided parameters. - - - - - Initializes a new instance of . - - - Note that unlike many other calibrator estimators this one has the parameters pre-specified. - This means that it does not have a label or weight column specified as an input during training. - - The environment to use. - The slope in the function of the exponent of the sigmoid. - The offset in the function of the exponent of the sigmoid. - The score column name. This is consumed both when this estimator - is fit and when the estimator is consumed. - - - - The implementation obtained by training a or a . - - - - - The naive binning-based calibrator estimator. - - - It divides the range of the outputs into equally sized bins. In each bin, - the probability of belonging to class 1, is the number of class 1 instances in the bin, divided by the total number - of instances in the bin. - - - - - Initializes a new instance of - - The environment to use. - The label column name. This is consumed when this estimator is fit, - but not consumed by the resulting transformer. - The score column name. This is consumed both when this estimator - is fit and when the estimator is consumed. - The optional weight column name. Note that if specified this is - consumed when this estimator is fit, but not consumed by the resulting transformer. - - - - The implementation obtained by training a - - - - - The isotonic calbrated estimator. - - - Calibrator finds a stepwise constant function (using the Pool Adjacent Violators Algorithm aka PAV) that minimizes the squared error. - - - - - Initializes a new instance of - - The environment to use. - The label column name. This is consumed when this estimator is fit, - but not consumed by the resulting transformer. - The score column name. This is consumed both when this estimator - is fit and when the estimator is consumed. - The optional weight column name. Note that if specified this is - consumed when this estimator is fit, but not consumed by the resulting transformer. - - - - The implementation obtained by training a - - - - - An interface for all the transformer that can transform data based on the field. - The implementations of this interface either have no feature column, or have more than one feature column, and cannot implement the - , which most of the ML.Net tranformer implement. - - The or used for the data transformation. - - - - An ISingleFeaturePredictionTransformer contains the name of the - and its type, . Implementations of this interface, have the ability - to score the data of an input through the - - The or used for the data transformation. - - - The name of the feature column. - - - Holds information about the type of the feature column. - - - - An ISingleFeaturePredictionTransformer contains the name of the . - Implementations of this interface, have the ability to score the data of an input - through the - - - - The name of the feature column. - - - - Utility class to run the pipeline to completion and produce a strongly-typed IEnumerable as a result. - Doesn't allocate memory for every row: instead, yields the same row object on every step. - - - - - Class for making single predictions on a previously trained model (and preceding transform pipeline). - - - This class can also be used with trained pipelines that do not end with a predictor: in this case, the - 'prediction' will be just the outcome of all the transformations. - - The PredictionEngine is NOT thread safe. Using it in a threaded environment can cause unexpected issues. - - - - - Run prediction pipeline on one example. - - The example to run on. - The object to store the prediction in. If it's null, a new one will be created, otherwise the old one - is reused. - - - - Base class for making single predictions on a previously trained model (and the preceding transform pipeline). - - The user-defined type that holds the example. - The user-defined type that holds the prediction. - - - - Provides output schema. - - - - - Run prediction pipeline on one example. - - The example to run on. - The result of prediction. A new object is created for every call. - - - - Run prediction pipeline on one example. - - The example to run on. - The object to store the prediction in. If it's null, a new one will be created, otherwise the old one - is reused. - - - - Options for the - - - - - Base class for the trainer catalogs. - - - - - Results for specific cross-validation fold. - - - - - Model trained during cross validation fold. - - - - - Scored test set with for this fold. - - - - - Fold number. - - - - - Results of running cross-validation. - - Type of metric class. - - - - Metrics for this cross-validation fold. - - - - - Model trained during cross-validation fold. - - - - - The scored hold-out set for this fold. - - - - - Fold number. - - - - - Train the on folds of the data sequentially. - Return each model and each scored test dataset. - - - - - Subclasses of will provide little "extension method" hookable objects - (for example, something like ). User code will only - interact with these objects by invoking the extension methods. The actual component code can work - through to get more "hidden" information from this object, - for example, the environment. - - - - - Class used by to create instances of binary classification components, - such as trainers and calibrators. - - - - - The list of trainers for performing binary classification. - - - - - Class used by to create instances of binary classification trainers. - - - - - Evaluates scored binary classification data. - - The scored data. - The name of the label column in . - The name of the score column in . - The name of the probability column in , the calibrated version of . - The name of the predicted label column in . - The evaluation results for these calibrated outputs. - - - - Evaluates scored binary classification data, without probability-based metrics. - - The scored data. - The name of the label column in . - The name of the score column in . - The name of the predicted label column in . - The evaluation results for these uncalibrated outputs. - - - - Run cross-validation over folds of , by fitting , - and respecting if provided. - Then evaluate each sub-model against and return a object, which - do not include probability-based metrics, for each sub-model. Each sub-model is evaluated on the cross-validation fold that it did not see during training. - - The data to run cross-validation on. - The estimator to fit. - Number of cross-validation folds. - The label column (for evaluation). - Name of a column to use for grouping rows. If two examples share the same value of the , - they are guaranteed to appear in the same subset (train or test). This can be used to ensure no label leakage from the train to the test set. - If no row grouping will be performed. - Seed for the random number generator used to select rows for cross-validation folds. - Per-fold results: metrics, models, scored datasets. - - - - Run cross-validation over folds of , by fitting , - and respecting if provided. - Then evaluate each sub-model against and return a object, which - includes probability-based metrics, for each sub-model. Each sub-model is evaluated on the cross-validation fold that it did not see during training. - - The data to run cross-validation on. - The estimator to fit. - Number of cross-validation folds. - The label column (for evaluation). - Name of a column to use for grouping rows. If two examples share the same value of the , - they are guaranteed to appear in the same subset (train or test). This can be used to ensure no label leakage from the train to the test set. - If no row grouping will be performed. - Seed for the random number generator used to select rows for cross-validation folds. - Per-fold results: metrics, models, scored datasets. - - - - Method to modify the threshold to existing model and return modified model. - - The type of the model parameters. - Existing model to modify threshold. - New threshold. - New model with modified threshold. - - - - The list of calibrators for performing binary classification. - - - - - Class used by to create instances of binary classification calibrators. - - - - - Adds probability column by training naive binning-based calibrator. - - The name of the label column. - The name of the score column. - - - - - - - - - Adds probability column by training platt calibrator. - - The name of the label column. - The name of the score column. - The name of the example weight column (optional). - - - - - - - - - Adds probability column by specifying platt calibrator. - - The slope in the function of the exponent of the sigmoid. - The offset in the function of the exponent of the sigmoid. - The name of the score column. - - - - - - - - - Adds probability column by training pair adjacent violators calibrator. - - - The calibrator finds a stepwise constant function (using the Pool Adjacent Violators Algorithm aka PAV) that minimizes the squared error. - Also know as Isotonic regression - - The name of the label column. - The name of the score column. - The name of the example weight column (optional). - - - - - - - - - Class used by to create instances of clustering components, - such as trainers. - - - - - The list of trainers for performing clustering. - - - - - The clustering context. - - - - - Class used by to create instances of clustering trainers. - - - - - Evaluates scored clustering data. - - The scored data. - The name of the score column in . - The name of the optional label column in . - If present, the metric will be computed. - The name of the optional features column in . - If present, the metric will be computed. - The evaluation result. - - - - Run cross-validation over folds of , by fitting , - and respecting if provided. - Then evaluate each sub-model against and return metrics. - - The data to run cross-validation on. - The estimator to fit. - Number of cross-validation folds. - Optional label column for evaluation (clustering tasks may not always have a label). - Optional features column for evaluation (needed for calculating Dbi metric) - Name of a column to use for grouping rows. If two examples share the same value of the , - they are guaranteed to appear in the same subset (train or test). This can be used to ensure no label leakage from the train to the test set. - If no row grouping will be performed. - Seed for the random number generator used to select rows for cross-validation folds. - - - - Class used by to create instances of multiclass classification components, - such as trainers. - - - - - The list of trainers for performing multiclass classification. - - - - - Class used by to create instances of multiclass classification trainers. - - - - - Evaluates scored multiclass classification data. - - The scored data. - The name of the label column in . - The name of the score column in . - The name of the predicted label column in . - If given a positive value, the will be filled with - the top-K accuracy, that is, the accuracy assuming we consider an example with the correct class within - the top-K values as being stored "correctly." - The evaluation results for these calibrated outputs. - - - - Run cross-validation over folds of , by fitting , - and respecting if provided. - Then evaluate each sub-model against and return metrics. - - The data to run cross-validation on. - The estimator to fit. - Number of cross-validation folds. - The label column (for evaluation). - Name of a column to use for grouping rows. If two examples share the same value of the , - they are guaranteed to appear in the same subset (train or test). This can be used to ensure no label leakage from the train to the test set. - If no row grouping will be performed. - Seed for the random number generator used to select rows for cross-validation folds. - Per-fold results: metrics, models, scored datasets. - Per-fold results: metrics, models, scored datasets. - - - - Class used by to create instances of regression components, - such as trainers and evaluators. - - - - - The list of trainers for performing regression. - - - - - Class used by to create instances of regression trainers. - - - - - Evaluates scored regression data. - - The scored data. - The name of the label column in . - The name of the score column in . - The evaluation results for these calibrated outputs. - - - - Run cross-validation over folds of , by fitting , - and respecting if provided. - Then evaluate each sub-model against and return metrics. - - The data to run cross-validation on. - The estimator to fit. - Number of cross-validation folds. - The label column (for evaluation). - Name of a column to use for grouping rows. If two examples share the same value of the , - they are guaranteed to appear in the same subset (train or test). This can be used to ensure no label leakage from the train to the test set. - If no row grouping will be performed. - Seed for the random number generator used to select rows for cross-validation folds. - Per-fold results: metrics, models, scored datasets. - - - - Class used by to create instances of ranking components, - such as trainers and evaluators. - - - - - The list of trainers for performing regression. - - - - - Class used by to create instances of ranking trainers. - - - - - Evaluates scored ranking data. - - The scored data. - The name of the label column in . - The name of the groupId column in . - The name of the score column in . - The evaluation results for these calibrated outputs. - - - - Evaluates scored ranking data. - - The scored data. - Options to control the evaluation result. - The name of the label column in . - The name of the groupId column in . - The name of the score column in . - The evaluation results for these calibrated outputs. - - - - Run cross-validation over folds of , by fitting , - and respecting if provided. - Then evaluate each sub-model against and return metrics. - - The data to run cross-validation on. - The estimator to fit. - Number of cross-validation folds. - The label column (for evaluation). - The name of the groupId column in , which is used to group rows. - This column will automatically be used as SamplingKeyColumn when splitting the data for Cross Validation, - as this is required by the ranking algorithms - If no row grouping will be performed. - Seed for the random number generator used to select rows for cross-validation folds. - Per-fold results: metrics, models, scored datasets. - - - - Class used by to create instances of anomaly detection components, - such as trainers and evaluators. - - - - - The list of trainers for anomaly detection. - - - - - Class used by to create instances of anomaly detection trainers. - - - - - Evaluates scored anomaly detection data. - - The scored data. - The name of the label column in . - The name of the score column in . - The name of the predicted label column in . - The number of false positives to compute the metric. - Evaluation results. - - - - Creates a new with the specified . - If the provided is the same as the threshold it simply returns . - Note that by default the threshold is 0.5 and valid scores range from 0 to 1. - - A trained . - The new threshold value that will be used to determine the label of a data point - based on the predicted score by the model. - - - - Class used by to create instances of forecasting components. - - - - - The list of trainers for performing forecasting. - - - - - Class used by to create instances of forecasting trainers. - - - - - This class approximates bootstrap sampling of a dataview. - - - - - Initializes a new instance of . - - Host Environment. - Input . This is the output from previous transform or loader. - Whether this is the out-of-bag sample, that is, all those rows that are not selected by the transform. - The random seed. If unspecified random state will be instead derived from the environment. - Whether we should attempt to shuffle the source data. By default on, but can be turned off for efficiency. - When shuffling the output, the number of output rows to keep in that pool. Note that shuffling of output is completely distinct from shuffling of input. - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Returns whether the given column is active in this row. - - - - - Entry point methods for bootstrap sampling. - - - - - Concatenates one or more input columns into a new output column. - - - creates a new column, - named as specified in the output column name parameters, where the input values are concatenated in a vector. - The order of the concatenation follows the order in which the input columns are specified. - - If the input columns' data type is a vector the output column data type remains the same. However, the size of - the vector will be the sum of the sizes of the input vectors. - - Check the See Also section for links to usage examples. - ]]> - - - - - - Initializes a new instance of - - The local instance of . - The name of the resulting column. - The columns to concatenate into one single column. - - - - Trains and returns a . - - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - for the . - - - - - - - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - resulting from fitting a . - - - - - Names of output and input column pairs on which the transformation is applied. - - - - - Keeps or drops selected columns from an . - - - - operates on the schema of a given by dropping or keeping selected columns from the schema. - - It is commonly used to remove unwanted columns before serializing a dataset or writing it to a file. - It is not necessary to drop unused columns before training or performing transforms, - as the is lazily evaluated and will not actually materialize the columns until needed. - In the case of serialization, every column in the schema will be written out. If there are columns - that should not be saved, this estimator can be used to remove them. - - Check the See Also section for links to usage examples. - ]]> - - - - - - - - Constructs the Select Columns Estimator. - - Instance of the host environment. - The array of column names to keep. - - - - Constructs the Select Columns Estimator. - - Instance of the host environment. - The array of column names to keep, cannot be set with . - The array of column names to drop, cannot be set with . - If true will keep hidden columns and false will remove hidden columns. The argument is - ignored if the Estimator is in "drop mode". - If false will check for any columns given in - or that are missing from the input. If a missing column exists a - SchemaMistmatch exception is thrown. If true, the check is not made. - - - - KeepColumns is used to select a list of columns that the user wants to keep on a given an input. Any column not specified - will be dropped from the output output schema. - - Instance of the host environment. - The array of column names to keep. - - - - DropColumns is used to select a list of columns that user wants to drop from a given input. Any column not specified will - be maintained in the output schema. - - Instance of the host environment. - The array of column names to drop. - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - resulting from fitting an . - - - - - Helper function to determine the model version that is being loaded. - - - - - Back-compatibility function that handles loading the DropColumns Transform. - - - - - Back-compatibility that is handling the HiddenColumnOption from ChooseColumns. - - - - - Backwards compatibility helper function to convert the HiddenColumnOption to a boolean. - - - - - Backwards compatibility helper function that loads a Choose Column Transform. - - - - - Schema propagation for transformers. - Returns the output schema of the data, if the input schema is like the one provided. - - - - - Constructs a row-to-row mapper based on an input schema. If - is false, then an exception is thrown. If the input schema is in any way - unsuitable for constructing the mapper, an exception should likewise be thrown. - - The input schema for which we should get the mapper. - The row to row mapper. - - - - Take the data in, make transformations, output the data. - Note that 's are lazy, so no actual transformations happen here, just schema validation. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Returns whether the given column is active in this row. - - - - - Given a set of columns, return the input columns that are needed to generate those output columns. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Returns whether the given column is active in this row. - - - - - resulting from fitting a . - - - - - Feature Contribution Calculation computes model-specific contribution scores for each feature. - Note that this functionality is not supported by all the models. See for a list of the sported models. - - The environment to use. - Trained model parameters that support Feature Contribution Calculation and which will be used for scoring. - The name of the feature column that will be used as input. - The number of positive contributions to report, sorted from highest magnitude to lowest magnitude. - Note that if there are fewer features with positive contributions than , the rest will be returned as zeros. - The number of negative contributions to report, sorted from highest magnitude to lowest magnitude. - Note that if there are fewer features with negative contributions than , the rest will be returned as zeros. - Whether the feature contributions should be normalized to the [-1, 1] interval. - - - - Estimator for . Computes model-specific per-feature contributions to the score of each input vector. - - - | - | Output column data type | Known-sized vector of | - | Exportable to ONNX | No | - - Scoring a dataset with a trained model produces a score, or prediction, for each example. To understand and explain these predictions - it can be useful to inspect which features influenced them most significantly. This transformer computes a model-specific - list of per-feature contributions to the score for each example. These contributions can be positive (they make the score higher) or negative - (they make the score lower). - - Feature Contribution Calculation is currently supported for the following models: - - Regression: - - - - - - - - - - - - - - - - - - - - Binary Classification: - - - - - - - - - - - - - - - - - - - - - - - - - - Ranking: - - - - - - For linear models, the contribution of a given feature is equal to the product of feature value times the corresponding weight. Similarly, - for Generalized Additive Models (GAM), the contribution of a feature is equal to the shape function for the given feature evaluated at - the feature value. - - For tree-based models, the calculation of feature contribution essentially consists in determining which splits in the tree have the most impact - on the final score and assigning the value of the impact to the features determining the split. More precisely, the contribution of a feature - is equal to the change in score produced by exploring the opposite sub-tree every time a decision node for the given feature is encountered. - Consider a simple case with a single decision tree that has a decision node for the binary feature F1. Given an example that has feature F1 - equal to true, we can calculate the score it would have obtained if we chose the subtree corresponding to the feature F1 being equal to false - while keeping the other features constant. The contribution of feature F1 for the given example is the difference between the original score - and the score obtained by taking the opposite decision at the node corresponding to feature F1. This algorithm extends naturally to models with - many decision trees. - - Check the See Also section for links to usage examples. - ]]> - - - - - - - Feature Contribution Calculation computes model-specific contribution scores for each feature. - Note that this functionality is not supported by all the models. See for a list of the sported models. - - The environment to use. - A that supports Feature Contribution Calculation, - and which will also be used for scoring. - The number of positive contributions to report, sorted from highest magnitude to lowest magnitude. - Note that if there are fewer features with positive contributions than , the rest will be returned as zeros. - The number of negative contributions to report, sorted from highest magnitude to lowest magnitude. - Note that if there are fewer features with negative contributions than , the rest will be returned as zeros. - TODO - Whether the feature contributions should be normalized to the [-1, 1] interval. - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - This transform adds columns containing either random numbers distributed - uniformly between 0 and 1 or an auto-incremented integer starting at zero. - It will be used in conjunction with a filter transform to create random - partitions of the data, used in cross validation. - - - - - Initializes a new instance of . - - Host Environment. - Input . This is the output from previous transform or loader. - Name of the output column. - Seed to start random number generator. - Use an auto-incremented integer starting at zero instead of a random number. - - - - Public constructor corresponding to SignatureDataTransform. - - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - resulting from fitting a . - - - - - Constructor for case where you don't need to 'train' transform on data, for example, InvertHash for all columns set to zero. - - Host Environment. - Description of dataset columns and how to process them. - - - - The usage of this interface may seem a bit strange, but it is deliberately structured in this way. - One will note all implementors of this interface are structs, and that where used, you never use - the interface itself, but instead an implementing type. This is due to how .NET and the JIT handles - generic types that are also value types. For value types, it will actually generate new assembly - code, which will allow effectively code generation in a way that would not happen if the hasher - implementor was a class, or if the hasher implementation was just passed in with a delegate, or - the hashing logic was encapsulated as the abstract method of some class. - - In a prior time, there were methods for all possible combinations of types, scalar-ness, vector - sparsity/density, whether the hash was sparsity preserving or not, whether it was ordered or not. - This resulted in an explosion of methods that made the hash transform code somewhat hard to maintain. - On the other hand, the methods were fast, since they were effectively (by brute enumeration) completely - inlined, so introducing any levels of abstraction would slow things down. By doing things in this - fashion using generics over struct types, we are effectively (via the JIT) doing code generation so - things are inlined and just as fast as the explicit implementation, while making the code rather - easier to maintain. - - - - - Constructs an instance to accumulate hash/value pairs - from a single column as parameterized by this transform, with values fetched from - the row. - - The input source row, from which the hashed values can be fetched - The extra column info - The number of input hashed valuPres to accumulate per output hash value - A hash getter, built on top of . - - - - This calculates the hash/value pair from the current value of the column, and does - appropriate processing of them to build the invert hash map. - - - - - Estimator for , which hashes either single valued columns or vector columns. For vector columns, - it hashes each slot separately. - - - , , , and OrderedHashing are not supported. | - - Check the See Also section for links to usage examples. - ]]> - - - - - - - Describes how the transformer handles one column pair. - - - - - Name of the column resulting from the transformation of . - - - - Name of column to transform. - - - Number of bits to hash into. Must be between 1 and 31, inclusive. - - - Hashing seed. - - - Whether the position of each term should be included in the hash, only applies to inputs of vector type. - - - - During hashing we constuct mappings between original values and the produced hash values. - Text representation of original values are stored in the key names of the annotations for the new column. Hashing, as such, can map many initial values to one. - specifies the upper bound of the number of distinct input values mapping to a hash that should be retained. - 0 does not retain any input values. -1 retains all input values mapping to each hash. - - - - - Whether the slots of a vector column should be hashed into a single value. - - - - - Describes how the transformer handles one column pair. - - Name of the column resulting from the transformation of . - Name of column to transform. If set to , the value of the will be used as source. - Number of bits to hash into. Must be between 1 and 31, inclusive. - Hashing seed. - Whether the position of each term should be included in the hash, only applies to inputs of vector type. - During hashing we construct mappings between original values and the produced hash values. - Text representation of original values are stored in the slot names of the annotations for the new column.Hashing, as such, can map many initial values to one. - specifies the upper bound of the number of distinct input values mapping to a hash that should be retained. - 0 does not retain any input values. -1 retains all input values mapping to each hash. - Whether the slots of a vector column should be hashed into a single value. - - - - Initializes a new instance of . - - Host Environment. - Name of the column resulting from the transformation of . - Name of the column to transform. - If set to , the value of the will be used as source. - Number of bits to hash into. Must be between 1 and 31, inclusive. - During hashing we construct mappings between original values and the produced hash values. - Text representation of original values are stored in the slot names of the metadata for the new column.Hashing, as such, can map many initial values to one. - specifies the upper bound of the number of distinct input values mapping to a hash that should be retained. - 0 does not retain any input values. -1 retains all input values mapping to each hash. - Whether the position of each term should be included in the hash, only applies to inputs of vector type. - Whether the slots of a vector column should be hashed into a single value. - - - - Initializes a new instance of . - - Host Environment. - Description of dataset columns and how to process them. - - - - Trains and returns a . - - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - resulting from fitting a . - - - - - Create a that takes and transforms one column. - - - - - Create a that takes multiple pairs of columns. - - - - - Factory method for SignatureDataTransform. - - - - - Factory method for SignatureLoadModel. - - - - - Factory method for SignatureLoadDataTransform. - - - - - Factory method for SignatureLoadRowMapper. - - - - - A map is an object capable of creating the association from an input type, to an output - type. This mapping is constructed from key metadata, with the input type being the key type - and the output type being the type specified by the key metadata. - - - - - The item type of the output type, that is, either the output type or, - if a vector, the item type of that type. - - - - - The column index in Infos. - - - - - The parent transform. - - - - - Estimator for . Converts the key types back to their original values. - - - - - - - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - resulting from fitting a . - - - - - This is for the singleton case. This should be equivalent to both Bag and Ord over - a vector of size one. - - - - - This is for the bagging case - vector input and outputs should be added. - - - - - This is for the indicator (non-bagging) case - vector input and outputs should be concatenated. - - - - - Estimator for . Maps the value of a key - into a known-sized vector of . - - - - - - - - - - Describes how the transformer handles one column pair. - - - - Name of the column resulting from the transformation of . - - - Name of column to transform. - - - - Whether to combine multiple indicator vectors into a single vector of counts instead of concatenating them. - This is only relevant when the input column is a vector of keys. - - - - - Describes how the transformer handles one column pair. - - Name of the column resulting from the transformation of . - Name of column to transform. If set to , the value of the will be used as source. - Whether to combine multiple indicator vectors into a single vector of counts instead of concatenating them. - This is only relevant when the input column is a vector of keys. - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - Initializes a new instance of . - - Host Environment. - Input . This is the output from previous transform or loader. - Name of the output column. - Name of the input column. If this is null '' will be used. - - - - Returns whether metadata of the indicated kind should be passed through from the source column. - - - - - Remaps multiclass labels to binary T,F labels, primarily for use with OVA. - - - - - Initializes a new instance of . - - Host Environment. - Input . This is the output from previous transform or loader. - Label of the positive class. - Name of the output column. - Name of the input column. If this is null '' will be used. - - - - - Removes missing values from vector type columns. - - - This transform removes the entire row if any of the input columns have a missing value in that row. - This preprocessing is required for many ML algorithms that cannot work with missing values. - Useful if any missing entry invalidates the entire row. - If the is set to true, this transform would do the exact opposite, - it will keep only the rows that have missing values. - - - - - - Initializes a new instance of . - - Host Environment. - Input . This is the output from previous transform or loader. - If true, keep only rows that contain NA values, and filter the rest. - Name of the columns. Only these columns will be used to filter rows having 'NA' values. - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Gets the appropriate column value getter for a mapped column. If the column - is not mapped, this returns false with the out parameters getting default values. - If the column is mapped but the TValue is of the wrong type, an exception is - thrown. - - - - - The normalize transform for support of normalization via the mechanism. - More contemporaneous API usage of normalization ought to use - and rather than this structure. - - - - - A helper method to create a MinMax normalizer. - - Host Environment. - Input . This is the output from previous transform or loader. - Name of the output column. - Name of the column to be transformed. If this is null '' will be used. - - - - Factory method corresponding to SignatureDataTransform. - - - - - Factory method corresponding to SignatureDataTransform. - - - - - Factory method corresponding to SignatureDataTransform. - - - - - Factory method corresponding to SignatureDataTransform. - - - - - Base class for tracking min and max values for a vector valued column. - It tracks min, max, number of non-sparse values (vCount) and number of ProcessValue() calls (trainCount). - NaNs are ignored when updating min and max. - - - - - Class for computing the mean and variance for a vector valued column. - It tracks the current mean and the M2 (sum of squared diffs of the values from the mean), - the number of NaNs and the number of non-zero elements. - Uses the algorithm described here: https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Online_algorithm - - - - - Based on the algorithm on GeeksForGeeks https://www.geeksforgeeks.org/median-of-stream-of-integers-running-integers/. - - The new number to account for in our median calculation. - The current median. - The MaxHeap that has all the numbers below the median. - The MinHeap that has all the numbers above the median. - - - - This heap class is based on the one done by Egor Grishechko, https://egorikas.com/max-and-min-heap-implementation-with-csharp/, which he based - on the implementation shown by HackerRank https://www.youtube.com/watch?v=t0Cq6tVNRBA. It is used for calculation the median in a much more - memory efficient way. - - - - - - Based on the algorithm on GeeksForGeeks https://www.geeksforgeeks.org/median-of-stream-of-integers-running-integers/. - This heap approach uses much less memory and is faster then other approaches I could find, specifically list based ones. - - The new number to account for in our median calculation. - The current median. - The MaxHeap that has all the numbers below the median. - The MinHeap that has all the numbers above the median. - - - - Base class for tracking median values for a single valued column. - It tracks median values of non-sparse values (vCount). - NaNs are ignored when updating min and max. - - - - - Base class for tracking min and max values for a vector valued column. - It tracks min, max, number of non-sparse values (vCount) and number of ProcessValue() calls (trainCount). - NaNs are ignored when updating min and max. - - - - - Class for computing the mean and variance for a vector valued column. - It tracks the current mean and the M2 (sum of squared diffs of the values from the mean), - the number of NaNs and the number of non-zero elements. - Uses the algorithm described here: https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Online_algorithm - - - - - Base class for tracking median values for a single valued column. - It tracks median values of non-sparse values (vCount). - - - - - for the . - - - or or a known-sized vector of those types. | - | Output column data type | The same data type as the input column | - | Exportable to ONNX | Yes | - - The resulting NormalizingEstimator will normalize the data in one of the following ways based upon how it was created: - * Min Max - A linear rescale that is based upon the minimum and maximum values for each row. - * Mean Variance - Rescale each row to unit variance and, optionally, zero mean. - * Log Mean Variance - Rescale each row to unit variance, optionally, zero mean based on computations in log scale. - * Binning - Bucketizes the data in each row and performs a linear rescale based on the calculated bins. - * Supervised Binning - Bucketize the data in each row and performas a linear rescale based on the calculated bins. The bin calculation is based on correlation of the Label column. - * Robust Scaling - Optionally centers the data and scales based on the range of data and the quantile min and max values provided. This method is more robust to outliers. - - ### Estimator Details - The interval of the normalized data depends on whether fixZero is specified or not. fixZero defaults to true. - When fixZero is false, the normalized interval is $[0,1]$ and the distribution of the normalized values depends on the normalization mode. For example, with Min Max, the minimum - and maximum values are mapped to 0 and 1 respectively and remaining values fall in between. - When fixZero is set, the normalized interval is $[-1,1]$ with the distribution of the normalized values depending on the normalization mode, but the behavior is different. - With Min Max, the distribution depends on how far away the number is from 0, resulting in the number with the largest distance being mapped to 1 if its a positive number - or -1 if its a negative number. The distance from 0 will affect the distribution with a majority of numbers that are closer together normalizing towards 0. Robust Scaling - does not use fixZero, and its values are not constrained to $[0,1]$ or $[-1,1]$. Its scaling is based on the range of the data and the quantile min and max provided. - - The equation for the output $y$ of applying both Mean Variance and Log Mean Variance on input $x$ without - using the CDF option is: $y = (x - \text{offset}) \text{scale}$. Where offset and scale are computed during training. - - Using the CDF option it is: $y = 0.5 * (1 + \text{ERF}((x - \text{mean}) / (\text{standard deviation} * sqrt(2)))$. - Where ERF is the [Error Function](https://en.wikipedia.org/wiki/Error_function) used to approximate the CDF of a random variable assumed to - normally distributed. The mean and standard deviation are computing during training. - - To create this estimator use one of the following: - * [NormalizeMinMax](xref:Microsoft.ML.NormalizationCatalog.NormalizeMinMax(Microsoft.ML.TransformsCatalog, System.String, System.String, System.Int64, System.Boolean)) - * [NormalizeMeanVariance](xref:Microsoft.ML.NormalizationCatalog.NormalizeMeanVariance(Microsoft.ML.TransformsCatalog,System.String,System.String,System.Int64,System.Boolean,System.Boolean)) - * [NormalizeLogMeanVariance](xref:Microsoft.ML.NormalizationCatalog.NormalizeLogMeanVariance(Microsoft.ML.TransformsCatalog,System.String,System.String,System.Int64,System.Boolean)) - * [NormalizeBinning](xref:Microsoft.ML.NormalizationCatalog.NormalizeBinning(Microsoft.ML.TransformsCatalog,System.String,System.String,System.Int64,System.Boolean,System.Int32)) - * [NormalizeSupervisedBinning](xref:Microsoft.ML.NormalizationCatalog.NormalizeSupervisedBinning(Microsoft.ML.TransformsCatalog,System.String,System.String,System.String,System.Int64,System.Boolean,System.Int32,System.Int32)) - * [NormalizeRobustScaling](xref:Microsoft.ML.NormalizationCatalog.NormalizeRobustScaling(Microsoft.ML.TransformsCatalog,System.String,System.String,System.Int64,System.Boolean,System.UInt32,System.UInt32)) - - Check the above links for usage examples. - ]]> - - - - - - Linear rescale such that minimum and maximum values are mapped between -1 and 1. - - - - - Rescale to unit variance and, optionally, zero mean. - - - - - Rescale to unit variance on the log scale. - - - - - Bucketize and then rescale to between -1 and 1. - - - - - Bucketize and then rescale to between -1 and 1. Calculates bins based on correlation with the Label column. - - - - - Optionally centers the data around 0 and then scales based on the data range and the quantile min and max values provided. - - - - - Initializes a new instance of . - - Host Environment. - Name of the column resulting from the transformation of . - Name of the column to transform. - If set to , the value of the will be used as source. - The indicating how to the old values are mapped to the new values. - - - - Initializes a new instance of . - - The private instance of . - The indicating how to the old values are mapped to the new values. - An array of (outputColumnName, inputColumnName) tuples. - - - - Initializes a new instance of . - - The private instance of the . - An array of defining the inputs to the Normalizer, and their settings. - - - - Trains and returns a . - - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - resulting from fitting an . - - - - An accessor of the column functions within . - - - - The configuration of the normalizer. The i-th element describes the i-th input-output column pair. - - - - - The normalization configurations of input columns. It returns the normalization parameters applied to the -th input column. - - column index. - the normalization parameters applied to the -th input column. - - - - Base class for all the data normalizer models like , - , . - - - - - The model parameters generated by affine normalization transformations. - - - - - - - - - - The scales. In the scalar case, this is a single value. In the vector case this is of length equal - to the number of slots. Function is (input - offset) * scale. - - - - - The offsets. In the scalar case, this is a single value. In the vector case this is of length equal - to the number of slots, or of length zero if all the offsets are zero. - - - - - Initializes a new instance of - - - - - The model parameters generated by cumulative distribution normalization transformations. - The cumulative density function is parameterized by and - the as observed during fitting. - - - - - - - - - - The mean(s). In the scalar case, this is a single value. In the vector case this is of length equal - to the number of slots. - - - - - The standard deviation(s). In the scalar case, this is a single value. In the vector case this is of - length equal to the number of slots. - - - - - Whether the we ought to apply a logarithm to the input first. - - - - - Initializes a new instance of - - - - - The model parameters generated by buckettizing the data into bins with monotonically - increasing . - The value is constant from bin to bin, for most cases. - /// - - - - The standard deviation(s). In the scalar case, these are the bin upper bounds for that single value. - In the vector case it is a jagged array of the bin upper bounds for all slots. - - - - - The frequency of the datapoints per each bin. - - - - - If normalization is performed with set to true, - the offset indicates the displacement of zero, if any. - - - - - Initializes a new instance of - - - - - Filters a dataview on a column of type Single, Double or Key (contiguous). - Keeps the values that are in the specified min/max range. NaNs are always filtered out. - If the input is a Key type, the min/max are considered percentages of the number of values. - - - - - Initializes a new instance of . - - Host Environment. - Input . This is the output from previous transform or loader. - Name of the input column. - Minimum value (0 to 1 for key types). - Maximum value (0 to 1 for key types). - Whether to include the upper bound. - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - This is a transformer that, given any input dataview (even an unshufflable one) will, - when we construct a randomized cursor attempt to perform a rude version of shuffling - using a pool. A pool of a given number of rows will be constructed from the first - rows in the input cursor, and then, successively, the output cursor will yield one - of these rows and replace it with another row from the input. - - - - - Initializes a new instance of . - - Host Environment. - Input . This is the output from previous transform or loader. - The pool will have this many rows - If true, the transform will not attempt to shuffle the input cursor but only shuffle based on the pool. This parameter has no effect if the input data was not itself shufflable. - If true, the transform will always provide a shuffled view. - - - - Constructor corresponding to SignatureDataTransform. - - - - - Since shuffling requires serving up items potentially out of order we need to know - how to save and then copy out values that we read. This transform knows how to save - and copy out only primitive and vector valued columns, but nothing else, so any - other columns are dropped. - - - - - Utility to check whether all types in an input schema are shufflable. - - - - - Utility to take a cursor, and get a shuffled version of this cursor. - - - - - This describes the row cursor. Let's imagine we instantiated our shuffle transform - over a pool of size P. Logically, externally, the cursor acts as if you have this pool - P and whenever you randomly sample and yield a row from it, that row is then discarded - and replaced with the next row from the input source cursor. - - It would also be possible to implement in a way that cleaves closely to this logical - interpretation, but this would be inefficient. We instead have a buffer of larger size - P+B. A consumer (running presumably in the main thread) sampling and fetching items and a - producer (running in a task, which may be running in a different thread) filling the buffer - with items to sample, utilizing this extra space to enable an efficient possibly - multithreaded scheme. - - The consumer, for its part, at any given time "owns" a contiguous portion of this buffer. - (A contiguous portion of this buffer we consider to be able to wrap around, from the end - to the beginning. The buffer is accessed in a "circular" fashion.) Consider that this portion - is broken into three distinct regions: there is a sort of middle "sampling" region - (usually of size P but possibly smaller when we've reached the end of the input and so are - running out of rows to sample), a region before this sampling region composed of already - sampled "dead" rows, and a "presampling" region after this sampling region composed of - rows ready to be sampled in future iterations, but that we are not sampling yet (in order - to behave equivalently to the simple logical model of at any given time sampling P items). - The producer owns the complement of the portion owned by the consumer. - - As the cursor progresses, the producer fills in successive items in its portion of the - buffer it owns, and passes them off to the consumer (not one item at a time, but rather in - batches, to keep down the amount of intertask communication). The consumer in addition to - taking ownership of these items, will also periodically pass dead items back to the producer - (again, not one dead item at a time, but in batches when the number of dead items reaches - a certain threshold). - - This communication is accomplished using a pair of BufferBlock instances, through which - the producer and consumer are notified how many additional items they can take ownership - of. - - As the consumer "selects" a row from the pool of selectable rows each time it moves to - the next row, this randomly selected row is considered to be the "first" index, since this - makes its subsequent transition to being a dead row much simpler. It would be inefficient to - swap all the values in each column's buffer to accomplish this to make the selected row - first, of course, so one rather swaps an index, so that these nicely behavior contiguous - circular indices, get mapped in an index within the buffers, through a permutation maintained - in the pipeIndices array. - - The result is something functionally equivalent to but but considerably faster than the - simple implementation described in the first paragraph. - - - - - Pipes, in addition to column values, will also communicate extra information - enumerated within this. This enum serves the purpose of providing nice readable - indices to these "extra" information in pipes. - - - - - There is one of these created per active column plus any extra info, and is a mechanism - through which the producer is able to ingest and store this data from the source cursor, - and the consumer able to fetch data stored at particular indices. - - - - - Creates a shuffle pipe, given a value getter. - - The size of the internal array. - The column type, which determines what type of pipe is created - A getter that should be a value getter corresponding to the - column type - An appropriate - - - - Reads the cursor column's current value, and store it in the indicated index, - in the internal array. - - - - - Copies the values stored at an index through a previous method, - call to a value. - - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Allows limiting input to a subset of row at an optional offset. Can be used to implement data paging. - - - - - Initializes a new instance of . - - Host Environment. - Options for the skip operation. - Input . - - - - Initializes a new instance of . - - Host Environment. - Options for the take operation. - Input . - - - Creates instance of class from context. - - - Saves class data to context - - - - This filter can not shuffle - - - - - Returns the computed count of rows remaining after skip and take operation. - Returns null if count is unknown. - - - - - SkipTakeFilter does not support cursor sets, so this can always be zero. - - - - - Transform to drop slots from columns. If the column is scalar, the only slot that can be dropped is slot 0. - If all the slots are to be dropped, a vector valued column will be changed to a vector of length 1 (a scalar column will retain its type) and - the value will be the default value. - - - - - Returns true if the range is valid. - - - - - Describes how the transformer handles one input-output column pair. - - - - - Describes how the transformer handles one input-output column pair. - - Name of the column resulting from the transformation of . - Name of the column to transform. - If set to , the value of the will be used as source. - Ranges of indices in the input column to be dropped. Setting max in to null sets max to int.MaxValue. - - - - Initializes a new object. - - The environment to use. - Name of the column resulting from the transformation of . - Name of column to transform. If set to , the value of the will be used as source. - Specifies the lower bound of the range of slots to be dropped. The lower bound is inclusive. - Specifies the upper bound of the range of slots to be dropped. The upper bound is exclusive. - - - - Initializes a new object. - - The environment to use. - Specifies the ranges of slots to drop for each column pair. - - - - Both scalars and vectors are acceptable types, but the item type must have a default value which means it must be - a string, a key, a float or a double. - - - - - Computes the types (column and slotnames), the length reduction, categorical feature indices - and whether the column is suppressed. - The slotsMin and slotsMax arrays should be sorted and the intervals should not overlap. - - The input schema - The column index in Infos - The slots to be dropped. - Whether the column is suppressed (all slots dropped) - The column type - Categorical feature indices. - - - - Convenience method for creating . - The allows for model stacking (i.e. to combine information from multiple predictive models to generate a new model) - in the pipeline by using the scores from an already trained model. - - Host Environment. - Input . - The model file. - Role name for the features. - Role name for the group column. - - - - Convenience method for creating . - The allows for model stacking (i.e. to combine information from multiple predictive models to generate a new model) - in the pipeline by training a model first and then using the scores from the trained model. - - Unlike , the trains the model on the fly as name indicates. - - Host Environment. - Input . - The object i.e. the learning algorithm that will be used for training the model. - Role name for features. - Role name for label. - Role name for the group column. - - - - The base class for all transform inputs. - - - - - The input dataset. Used only in entry-point methods, since the normal API mechanism for feeding in a dataset to - create an is to use the method. - - - - - resulting from fitting a . - - - - - A collection of describing the settings of the transformation. - - - - - Convinence constructor for simple one column case. - - Host Environment. - Name of the output column. - Name of the column to be transformed. If this is null '' will be used. - The expected type of the converted column. - New key count if we work with key type. - - - - Create a that takes multiple pairs of columns. - - - - - Estimator for . Converts the underlying input column type to a new type. - The input and output column types need to be compatible. - - - - - - - - - - - Describes how the transformer handles one column pair. - - - - - Name of the column resulting from the transformation of . - - - - - Name of column to transform. If set to , the value of the will be used as source. - - - - - The expected kind of the converted column. - - - - - New key count, if we work with key type. - - - - - Describes how the transformer handles one column pair. - - Name of the column resulting from the transformation of . - The expected kind of the converted column. - Name of column to transform. If set to , the value of the will be used as source. - New key count, if we work with key type. - - - - Describes how the transformer handles one column pair. - - Name of the column resulting from the transformation of . - The expected kind of the converted column. - Name of column to transform. If set to , the value of the will be used as source. - New key count, if we work with key type. - - - - Convinence constructor for simple one column case. - - Host Environment. - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - The expected kind of the converted column. - - - - Create a that takes multiple pairs of columns. - - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - Estimator for creating a key-value map using the pairs of values in the input data - - - - - - - - - - Constructs the ValueMappingEstimator, key type -> value type mapping - - The environment to use. - An instance of that contains the key and value columns. - Name of the key column in . - Name of the value column in . - The list of names of the input columns to apply the transformation, and the name of the resulting column. - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - Estimator for creating a key-value map using the pairs of values in the input data - - - - - - Specifies the key type. - Specifies the value type. - - - - - Constructs the ValueMappingEstimator, key type -> value array type mapping - - The environment to use. - A containing key column and value column. - The key column in . - The value column in . - The list of columns to apply. - - - - The DataViewHelper provides a set of static functions to create a DataView given a list of keys and values. - - - - - Helper function to retrieve the Primitive type given a Type - - - - - Helper function for a reverse lookup given value. This is used for generating the metadata of the value column. - - - - - Helper function to add a column to an ArrayDataViewBuilder. This handles the case if the type is a string. - - - - - Helper function to add a column to an ArrayDataViewBuilder. This handles the case if the type is an array of strings. - - - - - Helper function to create an IDataView given a list of key and vector-based values - - - - - Helper function that builds the IDataView given a list of keys and non-vector values - - - - - resulting from fitting a . - - - - - Helper function to determine the model version that is being loaded. - - - - - Base class that contains the mapping of keys to values. - - - - - Implementation mapping class that maps a key of TKey to a specified value of TValue. - - - - - Generates the mapping based on the IDataView - - - - - Retrieves the byte array given a dataview and columns - - - - - for the - . Converts a set of categorical - values (for example, US state abbreviations) into numerical key values (e.g. 1-50). - The numerical key can be used directly by classification algorithms. - - - - - - - - - - - - Controls how the order of the output keys. - - - - - Values will be assigned keys in the order in which they appear. - - - - - Values will be assigned keys according to their sort via an ordinal comparison for the type. - - - - - Describes how the transformer handles one column pair. - - - - - Describes how the transformer handles one column pair. - - - - - Describes how the transformer handles column pairs. - - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - Maximum number of keys to keep per column when auto-training. - The order in which keys are assigned. - If set to , keys are assigned in the order encountered. - If set to , values are sorted, and keys are assigned based on the sort order. - If set to true, use text type - for values, regardless of the actual input type. When doing the reverse - mapping, the values are text rather than the original input type. - - - - Initializes a new instance of . - - Host Environment. - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - Maximum number of keys to keep per column when auto-training. - The order in which keys are assigned. - If set to , keys are assigned in the order encountered. - If set to , values are sorted, and keys are assigned based on the sort order. - - - - Trains and returns a . - - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - resulting from fitting a . - - - - - Returns a single-column , based on values from , - in the case where is set. If that is not set, this will - return . - - The host environment. - The host channel to use to mark exceptions and log messages. - The name of the file. Must be specified if this method is called. - The single column to select out of this transform. If not specified, - this method will attempt to guess. - The loader creator. If we will attempt to determine - this - Whether we should try to convert to the desired type by ourselves when doing - the term map. This will not be true in the case that the loader was adequately specified automatically. - The single-column data containing the term data from the file. - - - - Utility method to create the file-based . - - - - - This builds the instances per column. - - - - - These are objects shared by both the scalar and vector implementations of - to accumulate individual scalar objects, and facilitate the creation of a . - - - - - The item type we are building into a term map. - - - - - The number of items that would be in the map if created right now. - - - - - Called at the end of training, to get the final mapper object. - - - - - Handling for the "terms" arg. - - The input terms argument - The channel against which to report errors and warnings - - - - Handling for the "term" arg. - - The input terms argument - The channel against which to report errors and warnings - - - - The sorted builder outputs things so that the keys are in sorted order. - - - - - Instantiates. - - The type we are mapping - This indicates whether a given value will map - to the missing value. If this returns true for a value then we do not attempt - to store it in the map. - Indicates whether to sort mapping IDs by input values. - - - - Ensures that the item is in the set. Returns true iff it added the item. - - The value to consider - - - - Handling for the "terms" arg. - - The input terms argument - The channel against which to report errors and warnings - - - - Handling for the "term" arg. - - The input terms argument - The channel against which to report errors and warnings - - - - The trainer is an object that given an instance, maps a particular - input, whether it be scalar or vector, into this and allows us to continue training on it. - - - - - Creates an instance of appropriate for the type at a given - row and column. - - The row to fetch from - The column to get the getter from - The maximum count of items to map - Whether we attempt to automatically convert - the input type to the desired type - The builder we add items to - An associated training pipe - - - - Indicates to the that we have reached a new row and should consider - what to do with these values. Returns false if we have determined that it is no longer necessary - to call this train, because we've already accumulated the maximum number of values. - - - - - Returns a over the items in this column. Note that even if this - was trained over a vector valued column, the particular implementation returned here - should be a mapper over the item type. - - - - - Given this instance, bind it to a particular input column. This allows us to service - requests on the input dataset. This should throw an error if we attempt to bind this - to the wrong type of item. - - - - - A map is an object capable of creating the association from an input type, to an output - type. The input type, whatever it is, must have as its input item - type, and will produce either , or a vector type with that output - type if the input was a vector. - - Note that instances of this class can be shared among multiple - instances. To associate this with a particular transform, use the method. - - These are the immutable and serializable analogs to the used in - training. - - - - - The item type of the input type, that is, either the input type or, - if a vector, the item type of that type. - - - - - The output item type. This will always be of known cardinality. Its count is always - equal to , unless is 0 in which case this has - key count of 1, since a count of 0 would indicate an unbound key. If we ever improve - key types so they are capable of distinguishing between the set they index being - empty vs. of unknown or unbound cardinality, this should change. - - - - - The number of items in the map. - - - - - A pool based text mapping implementation. - - The string pool - - - - A mapper bound to a particular transform, and a particular column. These wrap - a , and facilitate mapping that object to the inputs of - a particular column, providing both values and metadata. - - - - - Allows us to optionally register metadata. It is also perfectly legal for - this to do nothing, which corresponds to there being no metadata. - - - - - Writes out all terms we map to a text writer, with one line per mapped term. - The line should have the format mapped key value, then a tab, then the term - that is mapped. The writer should not be closed, as it will be used to write - all term maps. We should write terms. - - The writer to which we write terms - - - - Returns what the default value maps to. - - - - - The key-typed version is the same as , except the metadata - is based off a subset of the key values metadata. - - - - - Collection of extension methods for to create instances of data conversion and mapping transformer components. - - - - - Create a , which hashes the data from the column specified in - to a new column: . - - The conversion transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be a vector of keys, or a scalar of key based on whether the input column data types - are vectors or scalars. - Name of the column whose data will be hashed. - If set to , the value of the will be used as source. - This estimator operates over vectors or scalars of text, numeric, boolean, key or data types. - Number of bits to hash into. Must be between 1 and 31, inclusive. - During hashing we construct mappings between original values and the produced hash values. - Text representation of original values are stored in the slot names of the annotations for the new column.Hashing, as such, can map many initial values to one. - Specifies the upper bound of the number of distinct input values mapping to a hash that should be retained. - 0 does not retain any input values. -1 retains all input values mapping to each hash. - - - - - - - - Create a , which hashes the input column's data type - to a new column: . - - This transform can operate over several columns. - The transform's catalog. - Advanced options for the estimator that also contain the input and output column names. - This estimator operates over text, numeric, boolean, key and data types. - The new column's data type will be a vector of , or a based on whether the input column data types - are vectors or scalars. - - - - - - - - Create a , which converts the type of the data to the type specified in . - - The conversion transform's catalog. - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - This transform operates over numeric, boolean, text, and key data types. - The expected kind of the output column. - - - - - - - - Create a , which converts the type of the data to the type specified in . - - This transform can operate over several columns. - The conversion transform's catalog. - The input and output columns. - This transform operates over numeric, boolean, text, and key data types. - The expected kind of the output column. - - - - - - - - Create a , which converts the type of the data in the - to the type specified in the - - This transform can operate over several columns. - The conversion transform's catalog. - The input and output columns. - This transform operates over numeric, boolean, text, and keys. - - - - Create a , which converts the key types back to their original values. - - This transform often is in the pipeline after one of the overloads of - - The conversion transform's catalog. - Name of the column resulting from the transformation of . - Its type will be the original value's type. - Name of the column to transform. If set to , the value of the will be used as source. - This transform operates over keys. - - - - - - - - - Create a , which converts the key types back to their original values. - - This transform can operate over several columns. - This transform often is in the pipeline after one of the overloads of - - The conversion transform's catalog. - The input and output columns. - This transform operates over keys. - The new column's data type will be the original value's type. - - - - - - - - - Create a , which maps the value of a key into a floating point vector representing the value. - - This transform can operate over several columns. - The conversion transform's catalog. - The input and output columns. - - - - Create a , which maps the value of a key into a floating point vector representing the value. - - The conversion transform's catalog. - Name of the column resulting from the transformation of . - The data type is a vector of representing the input value. - Name of the column to transform. If set to , the value of the will be used as source. - This transform operates over keys. - Whether to combine multiple indicator vectors into a single vector of counts instead of concatenating them. - This is only relevant when the input column is a vector of keys. - - - - - - - - Create a , which maps the value of a key into a floating point vector representing the value. - - This transform can operate over several columns of keys. - The conversion transform's catalog. - The input and output columns. - The new column's data type is a vector of representing the original value. - Whether to combine multiple indicator vectors into a single vector of counts instead of concatenating them. - This is only relevant when the input column is a vector of keys. - - - - - - - - Create a , which converts categorical values into numerical keys. - - The conversion transform's catalog. - Name of the column containing the keys. - Name of the column containing the categorical values. If set to , the value of the is used. - The input data types can be numeric, text, boolean, or . - - Maximum number of keys to keep per column when training. - The order in which keys are assigned. - If set to , keys are assigned in the order encountered. - If set to , values are sorted, and keys are assigned based on the sort order. - If set to true, use text type - for values, regardless of the actual input type. When doing the reverse - mapping, the values are text rather than the original input type. - Use a pre-defined mapping between values and keys, instead of building - the mapping from the input data during training. If specified, this should be a single column containing the values. - The keys are allocated based on the value of keyOrdinality. - - - - - - - - - Create a , which converts categorical values into keys. - - This transform can operate over multiple pairs of columns, creating a mapping for each pair. - The conversion transform's catalog. - The input and output columns. - The input data types can be numeric, text, boolean, or . - - Maximum number of keys to keep per column when training. - The order in which keys are assigned. - If set to , keys are assigned in the order encountered. - If set to , values are sorted, and keys are assigned based on the sort order. - If set to true, use text type - for values, regardless of the actual input type. When doing the reverse - mapping, the values are text rather than the original input type. - Use a pre-defined mapping between values and keys, instead of building - the mapping from the input data during training. If specified, this should be a single column containing the values. - The keys are allocated based on the value of keyOrdinality. - - - - - - - - - Create a , which converts value types into keys, optionally loading the keys to use from . - - This transform can operate over several columns. - The conversion transform's catalog. - The input and output columns. - The input data types can be numeric, text, boolean, or . - - The data view containing the terms. If specified, this should be a single column data - view, and the key-values will be taken from that column. If unspecified, the key-values will be determined - from the input data upon fitting. - - - - Create a , which converts value types into keys, loading the keys to use from . - - The key type. - The value type. - The conversion transform's catalog - Name of the column resulting from the transformation of . - The output data types can be primitives or vectors of numeric, text, boolean, , or types. - Specifies the mapping that will be performed. The keys will be mapped to the values as specified in the . - Name of the column to transform. - If set to , the value of the will be used as source. - The input data types can be primitives or vectors of numeric, text, boolean, , or types. - - Whether to treat the values as a key. - An instance of the - - - - - - - - Create a , which converts value types into keys, loading the keys to use from . - - This transform can operate over several columns. - The key type. - The value type. - The conversion transform's catalog - Specifies the mapping that will be performed. The keys will be mapped to the values as specified in the . - The input and output columns. - The data types can be primitives or vectors of numeric, text, boolean, , or types. - - - - - Create a , which converts value types into keys, loading the keys to use from . - - This transform can operate over several columns. - The key type. - The value type. - The conversion transform's catalog - Specifies the mapping that will be performed. The keys will be mapped to the values as specified in the . - Whether to treat the values as a keys. - The input and output columns. - The data types can be primitives or vectors of numeric, text, boolean, , or types. - - - - - Create a , which converts value types into keys, loading the keys to use from . - - The key type. - The value type. - The conversion transform's catalog - Name of the column resulting from the transformation of . - The data types can be primitives or vectors of numeric, text, boolean, , or types, - as specified in the . - Specifies the mapping that will be performed. The keys will be mapped to the values as specified in the . - Name of the column to transform. If set to , the value of the will be used as source. - The data types can be primitives or vectors of numeric, text, boolean, , or types, - as specified in the . - - - - - - - - Create a , which converts value types into keys, loading the keys to use from . - - This transform can operate over several columns. - The key type. - The value type. - The conversion transform's catalog - Specifies the mapping that will be performed. The keys will be mapped to the values as specified in the . - The input and output columns. The data types can be primitives or vectors of numeric, text, boolean, , - or types, as specified in the and . - - - - Create a , which converts value types into keys, loading the keys to use from the where the - specifies the keys, and the the respective value. - - The conversion transform's catalog - Name of the column resulting from the transformation of . - The data types can be primitives or vectors of numeric, text, boolean, , - or types. - An instance of that contains the and columns. - The key column in . - The value column in . - Name of the column to transform. If set to , the value of the will be used as source. - The data types can be primitives or vectors of numeric, text, boolean, , - or types. - - - - - - - - Create a , which converts value types into keys, - loading the keys to use from the where the - specifies the keys, and the the respective value. - - This transform can operate over several columns. - The conversion transform's catalog - An instance of that contains the and columns. - The key column in . - The value column in . - The input and output columns. - - - - Collection of extension methods for to create instances of model explainability components. - - - - - Create a that computes model-specific contribution scores for - each feature of the input vector. - - The transforms catalog. - A that supports Feature Contribution Calculation, - and which will also be used for scoring. - The number of positive contributions to report, sorted from highest magnitude to lowest magnitude. - Note that if there are fewer features with positive contributions than , the rest will be returned as zeros. - The number of negative contributions to report, sorted from highest magnitude to lowest magnitude. - Note that if there are fewer features with negative contributions than , the rest will be returned as zeros. - Whether the feature contributions should be normalized to the [-1, 1] interval. - - - - - - - - - Create a that computes model-specific contribution scores for - each feature of the input vector. Supports calibrated models. - - The transforms catalog. - A that supports Feature Contribution Calculation, - and which will also be used for scoring. - The number of positive contributions to report, sorted from highest magnitude to lowest magnitude. - Note that if there are fewer features with positive contributions than , the rest will be returned as zeros. - The number of negative contributions to report, sorted from highest magnitude to lowest magnitude. - Note that if there are fewer features with negative contributions than , the rest will be returned as zeros. - Whether the feature contributions should be normalized to the [-1, 1] interval. - - - - - - - - - Specifies input and output column names for transformer components that operate on multiple columns. - - - It is often advantageous to transform several columns at once as all of the changes can be done in a - single data pass. - - - - - Name of the column to transform. If set to , the value of the will be used as source. - - - - - Name of the column resulting from the transformation of . - - - - - Specifies input and output column names for a transformation. - - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - - - - Collection of extension methods for to create instances of transform components - that manipulate columns. - - - - - Create a , which copies the data from the column specified in - to a new column: . - - The transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be the same as that of the input column. - Name of the column to copy the data from. - This estimator operates over any data type. - - - - - - - - - Create a , which copies the data from the column specified in - to a new column: . - - This transform can operate over several columns. - The transform's catalog. - The pairs of input and output columns. This estimator operates over any data type. - - - - - - - - - Create a , which concatenates one or more input columns into a new output column. - - The transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be a vector of the input columns' data type. - Name of the columns to concatenate. - This estimator operates over any data type except key type. - If more that one column is provided, they must all have the same data type. - - - - - - - - - Create a , which drops a given list of columns from an . Any column not specified will - be maintained in the output. - - The transform's catalog. - The array of column names to drop. - This estimator operates over columns of any data type. - - - - - - - - - Create a , which keeps a given list of columns in an and drops the others. - - The transform's catalog. - The array of column names to keep. - If will keep hidden columns and will remove hidden columns. - Keeping hidden columns, instead of dropping them, is recommended when it is necessary to understand how the inputs of a pipeline - map to outputs of the pipeline, for debugging purposes. - - - - - - - - - Create a , which keeps a given list of columns in an and drops the others. - - The transform's catalog. - The array of column names to keep. - - - - - - - - - Class used by to create instances of transform components. - - - - - The list of operations over categorical data. - - - - - The list of operations for data type conversion. - - - - - The list of operations for processing text data. - - - - - The list of operations for selecting features based on some criteria. - - - - - Class used by to create instances of categorical data transform components. - - - - - Class used by to create instances of type conversion data transform components. - - - - - Class used by to create instances of text data transform components. - - - - - Class used by to create instances of feature selection transform components. - - - - - Each of the specialized 'peek' methods copies the appropriate field value of an instance of T - into the provided buffer. So, the call is 'peek(userObject, ref destination)' and the logic is - indentical to 'destination = userObject.##FIELD##', where ##FIELD## is defined per peek method. - - - - - Each of the specialized 'poke' methods sets the appropriate field value of an instance of T - to the provided value. So, the call is 'peek(userObject, providedValue)' and the logic is - identical to 'userObject.##FIELD## = providedValue', where ##FIELD## is defined per poke method. - - - - diff --git a/W/Debug_Folder/Microsoft.ML.DataView.dll b/W/Debug_Folder/Microsoft.ML.DataView.dll deleted file mode 100644 index 7ab1ab1e1..000000000 Binary files a/W/Debug_Folder/Microsoft.ML.DataView.dll and /dev/null differ diff --git a/W/Debug_Folder/Microsoft.ML.DataView.xml b/W/Debug_Folder/Microsoft.ML.DataView.xml deleted file mode 100644 index d5b8fae8b..000000000 --- a/W/Debug_Folder/Microsoft.ML.DataView.xml +++ /dev/null @@ -1,1156 +0,0 @@ - - - - Microsoft.ML.DataView - - - - - Akin to FindIndexSorted, except stores the found index in the output - index parameter, and returns whether that index is a valid index - pointing to a value equal to the input parameter value. - - - - - Assumes input is sorted and finds value using BinarySearch. - If value is not found, returns the logical index of 'value' in the sorted list i.e index of the first element greater than value. - In case of duplicates it returns the index of the first one. - It guarantees that items before the returned index are < value, while those at and after the returned index are >= value. - - - - - Assumes input is sorted and finds value using BinarySearch. - If value is not found, returns the logical index of 'value' in the sorted list i.e index of the first element greater than value. - In case of duplicates it returns the index of the first one. - It guarantees that items before the returned index are < value, while those at and after the returned index are >= value. - - - - - A structure serving as the identifier of a row of . - For datasets with millions of records, those IDs need to be unique, therefore the need for such a large structure to hold the values. - Those Ids are derived from other Ids of the previous components of the pipelines, and dividing the structure in two: high order and low order of bits, - and reduces the changes of those collisions even further. - - - - - The low order bits. Corresponds to H1 in the Murmur algorithms. - - - The high order bits. Corresponds to H2 in the Murmur algorithms. - - - - Initializes a new instance of - - The low order ulong. - The high order ulong. - - - - An operation that treats the value as an unmixed Murmur3 128-bit hash state, - and returns the hash state that would result if we hashed an addition 16 bytes - that were all zeros, except for the last bit which is one. - - - - - An operation that treats the value as an unmixed Murmur3 128-bit hash state, - and returns the hash state that would result if we hashed an addition 16 bytes - that were all zeros. - - - - - An operation that treats the value as an unmixed Murmur3 128-bit hash state, - and returns the hash state that would result if we took , - scrambled it using , then hashed the result of that. - - - - - - - This is the abstract base class for all types in the type system. - - - Those that wish to extend the type system should derive from one of - the more specific abstract classes or . - - - - - Constructor for extension types, which must be either or . - - - - - The raw for this . Note that this is the raw representation type - and not the complete information content of the . - - - Code should not assume that a uniquely identifiers a . - For example, most practical instances of ML.NET's KeyType and will have a - of , but both are very different in the types of information conveyed in that number. - - - - - Return if is equivalent to and otherwise. - - Another to be compared with . - - - - The abstract base class for all non-primitive types. - - - This class stands in constrast to . As that class is defined - to encapsulate cases where instances of the representation type can be freely copied without concerns - about ownership, mutability, or dispoal, this is defined for those types where these factors become concerns. - - To take the most conspicuous example, is a structure type, - which through the buffer sharing mechanisms of its representation type, - does not have assignment as sufficient to create an independent copy. - - - - - The abstract base class for all primitive types. Values of these types can be freely copied - without concern for ownership, mutation, or disposing. - - - - - The standard text type. This has representation type of with type parameter . - Note this can have only one possible value, accessible by the singleton static property . - - - - - The singleton instance of this type. - - - - - The standard number type. This class is not directly instantiable. All allowed instances of this - type are singletons, and are accessible as static properties on this class. - - - - - The singleton instance of the with representation type of . - - - - - The singleton instance of the with representation type of . - - - - - The singleton instance of the with representation type of . - - - - - The singleton instance of the with representation type of . - - - - - The singleton instance of the with representation type of . - - - - - The singleton instance of the with representation type of . - - - - - The singleton instance of the with representation type of . - - - - - The singleton instance of the with representation type of . - - - - - The singleton instance of the with representation type of . - - - - - The singleton instance of the with representation type of . - - - - - The type. This has representation type of . - Note this can have only one possible value, accessible by the singleton static property . - - - - - The singleton instance of this type. - - - - - The standard boolean type. This has representation type of . - Note this can have only one possible value, accessible by the singleton static property . - - - - - The singleton instance of this type. - - - - - The standard date time type. This has representation type of . - Note this can have only one possible value, accessible by the singleton static property . - - - - - The singleton instance of this type. - - - - - The standard date time offset type. This has representation type of . - Note this can have only one possible value, accessible by the singleton static property . - - - - - The singleton instance of this type. - - - - - The standard timespan type. This has representation type of . - Note this can have only one possible value, accessible by the singleton static property . - - - - - The singleton instance of this type. - - - - - should be used to decorated class properties and fields, if that class' instances will be loaded as ML.NET . - The function will be called to register a for a with its s. - Whenever a value typed to the registered and its s, that value's type (i.e., a ) - in would be the associated . - - - - - A function implicitly invoked by ML.NET when processing a custom type. It binds a DataViewType to a custom type plus its attributes. - - - - - Return if is equivalent to and otherwise. - - Another to be compared with . - - - - Type representing categorical or enumerated values, most commonly used for - the values of labels in multiclass classification models. - - - The underlying .NET type is one of the unsigned integer types. The default is - , but it can also be , - , or . - Despite keys being numerical types, the information is not inherently numeric, - so typically, arithmetic is not meaningful. - - Missing values are mapped to 0. - - The first non-missing value of the set is always 1. - - The other values range up to the value of . - - For example, if you have a key value with a of 3, then - the value 0 corresponds to missing key values, and - one of the values of 1, 2, or 3 is of the valid values, - and no other values are used. - - - - - Initializes a new instance of the class. - - - The underlying representation type. Should be one of , , - (the most common choice), or . - - - The cardinality of the underlying set. This must not exceed the associated maximum value of the - representation type. For example, if is , then this must not - exceed . - - - - - Initializes a new instance of the class. This differs from the hypothetically more general - constructor by taking an for - , to more naturally facilitate the most common case that the key value is being used - as an enumeration over an array or list of some form. - - - The underlying representation type. Should be one of , , - (the most common choice), or . - - - The cardinality of the underlying set. This must not exceed the associated maximum value of the - representation type. For example, if is , then this must not - exceed . - - - - - Returns true iff the given type is valid for a . The valid ones are - , , , and , that is, the unsigned - integer types. - - - - - is the cardinality of the . - - - The typical legal values for data of this type ranges from the missing value of 0, and non-missing - values ranging from to 1 through , inclusive, being the enumeration into whatever - set the key values are enumerated over. - - - - - Determine if this object is equal to another instance. - Checks if the other item is the type of , if the - is the same, and if the is the same. - - The other object to compare against. - if both objects are equal, otherwise . - - - - Determine if a instance is equal to another instance. - Checks if any object is the type of , if the - is the same, and if the is the same. - - The other object to compare against. - if both objects are equal, otherwise . - - - - Retrieves the hash code. - - An integer representing the hash code. - - - - The string representation of the . - - A formatted string. - - - - A buffer that supports both dense and sparse representations. This is the representation type for all - instances. The explicitly defined values of this vector are exposed through - and, if not dense, . - - - This structure is by itself immutable, but to enable buffer editing including re-use of the internal buffers, - a mutable variant can be accessed through . - - Throughout the code, we make the assumption that a sparse is logically equivalent to - a dense with the default value for filling in the default values. - - The type of the vector. There are no compile-time restrictions on what this could be, but - this code and practically all code that uses makes the assumption that an assignment of - a value is sufficient to make a completely independent copy of it. So, for example, this means that a buffer of - buffers is not possible. But, things like , , and , are totally fine. - - - - The internal re-usable array of values. - - - - - The internal re-usable array of indices. - - - - - The number of items explicitly represented. This equals when the representation - is dense and less than when sparse. - - - - - The logical length of the buffer. - - - Note that if this vector , then this will be the same as the - as returned from , since all values are explicitly represented in a dense representation. If - this is a sparse representation, then that will be somewhat shorter, as this - field contains the number of both explicit and implicit entries. - - - - - The explicitly represented values. When this , the - of the returned value will equal , and otherwise will have length less than - . - - - - - The indices. For a dense representation, this array is not used, and will return the default "empty" span. - For a sparse representation it is parallel to that returned from and specifies the - logical indices for the corresponding values, in increasing order, between 0 inclusive and - exclusive, corresponding to all explicitly defined values. All values at unspecified - indices should be treated as being implicitly defined with the default value of . - - - To give one example, if returns [3, 5] and () produces [98, 76], - this stands for a vector with non-zero values 98 and 76 respectively at the 4th and 6th - coordinates, and zeros at all other indices. (Zero, because that is the default value for all .NET numeric - types.) - - - - - Gets a value indicating whether every logical element is explicitly represented in the buffer. - - - - - Construct a dense representation. The array is often unspecified, but if - specified it should be considered a buffer to be held on to, to be possibly used. - - The logical length of the resulting instance. - - The values to be used. This must be at least as long as . If - is 0, it is legal for this to be . The constructed buffer - takes ownership of this array. - - - The internal indices buffer. Because this constructor is for dense representations - this will not be immediately useful, but it does provide a buffer to be potentially reused to avoid - allocation. This is mostly non-null in situations where you want to produce a dense - , but you happen to have an indices array "left over" and you don't want to - needlessly lose. - - - The resulting structure takes ownership of the passed in arrays, so they should not be used for - other purposes in the future. - - - - - Construct a possibly sparse vector representation. - - The length of the constructed buffer. - The count of explicit entries. This must be between 0 and , both - inclusive. If it equals the result is a dense vector, and if less this will be a - sparse vector. - - The values to be used. This must be at least as long as . If - is 0, it is legal for this to be . - - The indices to be used. If we are constructing a dense representation, or - is 0, this can be . Otherwise, this must be at least as long - as . - The resulting structure takes ownership of the passed in arrays, so they should not be used for - other purposes in the future. - - - - Copy from this buffer to the given destination, forcing a dense representation. - - The destination buffer. After the copy, this will have - of . - - - - Copy from this buffer to the given destination. - - The destination buffer. After the copy, this will have - of . - - - - Copy a range of values from this buffer to the given destination. - - The destination buffer. After the copy, this will have - of . - The minimum inclusive index to start copying from this vector. - The logical number of values to copy from this vector into . - - - - Copy from this buffer to the given destination span. This "densifies." - - The destination buffer. This must have least . - - - - Copy from this buffer to the given destination span, starting at the specified index. This "densifies." - - The destination buffer. This must be at least - plus . - The starting index of at which to start copying. - The value to fill in for the implicit sparse entries. This is a potential exception to - general expectation of sparse that the implicit sparse entries have the default value - of . - - - - Copy from a section of a source array to the given destination. - - - - - Returns the joint list of all index/value pairs. - - - If all pairs, even those implicit values of a sparse representation, - will be returned, with the implicit values having the default value, as is appropriate. If left - then only explicitly defined values are returned. - - The index/value pairs. - - - - Returns an enumerable with items, representing the values. - - - - - Gets the item stored in this structure. In the case of a dense vector this is a simple lookup. - In the case of a sparse vector, it will try to find the entry with that index, and set - to that stored value, or if no such value was found, assign it the default value. - - - In the case where is , this will take constant time since it an - directly lookup. For sparse vectors, however, because it must perform a bisection search on the indices to - find the appropriate value, that takes logarithmic time with respect to the number of explicitly represented - items, which is to say, the of the return value of . - - For that reason, a single completely isolated lookup, since constructing as - does is not a free operation, it may be more efficient to use this method. However - if one is doing a more involved computation involving many operations, it may be faster to utilize - and, if appropriate, directly. - - The index, which must be a non-negative number less than . - The value stored at that index, or if this is a sparse vector where this is an implicit - entry, the default value for . - - - - A variant of that returns the value instead of passing it - back using a reference parameter. - - The index, which must be a non-negative number less than . - The value stored at that index, or if this is a sparse vector where this is an implicit - entry, the default value for . - - - - A helper method that gives us an iterable over the items given the fields from a . - Note that we have this in a separate utility class, rather than in its more natural location of - itself, due to a bug in the C++/CLI compiler. (DevDiv 1097919: - [C++/CLI] Nested generic types are not correctly imported from metadata). So, if we want to use - in C++/CLI projects, we cannot have a generic struct with a nested class - that has the outer struct type as a field. - - - - - Various methods for creating instances. - - - - - Creates a with the same shape - (length and density) as the . - - The destination buffer. Note that the resulting is assumed to take ownership - of this passed in object, and so whatever was passed in as this parameter should not be used again, since its - underlying buffers are being potentially reused. - - - - Creates a using - 's values and indices buffers. - - - The destination buffer. Note that the resulting is assumed to take ownership - of this passed in object, and so whatever was passed in as this parameter should not be used again, since its - underlying buffers are being potentially reused. - - - The logical length of the new buffer being edited. - - - The optional number of physical values to be represented in the buffer. - The buffer will be dense if is omitted. - - - The optional number of maximum physical values to represent in the buffer. - The buffer won't grow beyond this maximum size. - - - True means that the old buffer values and indices are preserved, if possible (Array.Resize is called). - False means that a new array will be allocated, if necessary. - - - True means to ensure the Indices buffer is available, even if the buffer will be dense. - - - - - An object capable of editing a by filling out - (and if the buffer is not dense). - - - The structure by itself is immutable. However, the purpose of - is to enable buffer re-use we can edit them through this structure, as created through - or - . - - - - - The mutable span of values. - - - - - The mutable span of indices. - - - - - Gets a value indicating whether a new array was allocated. - - - - - Gets a value indicating whether a new array was allocated. - - - - - Commits the edits and creates a new using the current and . - Note that this structure and its properties should not be used once this is called. - - The newly created . - - - - Commits the edits and creates a new using - the current Values and Indices, while allowing to truncate the length - of and, if sparse, . - Like , this structure and its properties should not be used once this is called. - - - The new number of physical values to be represented in the created buffer. - - - The newly created . - - - This method allows to modify the length of the explicitly defined values. - This is useful in sparse situations where the - was created with a larger physical value count than was needed - because the final value count was not known at creation time. - - - - - The standard vector type. The representation type of this is , - where the type parameter is in . - - - - - The dimensions. This will always have at least one item. All values will be non-negative. - As with , a zero value indicates that the vector type is considered to have - unknown length along that dimension. - - - In the case where this is a multi-dimensional type, that is, a situation where - has length greater than one, since itself is a single dimensional structure, - we must clarify what we mean. The indices represent a "flattened" view of the coordinates implicit in the - dimensions. We consider that the last dimension is the most "minor" index. In the case where - has length 2, this is commonly referred to as row-major order. So, if you hypothetically had - dimensions of { 5, 2 }, then the values would be all of length 10, - and the flattened indices 0, 1, 2, 3, 4, ... would correspond to "coordinates" of - (0, 0), (0, 1), (1, 0), (1, 1), (2, 0), ..., respectively. - - - - - Constructs a new single-dimensional vector type. - - The type of the items contained in the vector. - The size of the single dimension. - - - - Constructs a potentially multi-dimensional vector type. - - The type of the items contained in the vector. - The dimensions. Note that, like , must be non-empty, with all - non-negative values. Also, because is the product of , the result of - multiplying all these values together must not overflow . - - - - Constructs a potentially multi-dimensional vector type. - - The type of the items contained in the vector. - The dimensions. Note that, like , must be non-empty, with all - non-negative values. Also, because is the product of , the result of - multiplying all these values together must not overflow . - - - - Whether this is a vector type with known size. - Equivalent to > 0. - - - - - The type of the items stored as values in vectors of this type. - - - - - The size of the vector. A value of zero means it is a vector whose size is unknown. - A vector whose size is known should correspond to values that always have the same , - whereas one whose size is unknown may have values whose varies from record to record. - Note that this is always the product of the elements in . - - - - - Represents the schema of an or an . - The schema is a collection of . - - - - - Number of columns in the schema. - - - - - Get the column by name. Throws an exception if such column does not exist. - Note that if multiple columns exist with the same name, the one with the biggest index is returned. - The other columns are considered 'hidden', and only accessible by their index. - - - - - Get the column by index. - - - - - Get the column by name, or null if the column is not present. - - - - - This class describes one column in the particular schema. - - - - - The name of the column. - - - - - The column's index in the schema. - - - - - Whether this column is hidden (accessible only by index). - - - - - The type of the column. - - - - - The annotations of the column. - - - - - This class represents the schema of one column of a data view, without an attachment to a particular . - - - - - The name of the column. - - - - - The type of the column. - - - - - The annotations associated with the column. - - - - - Creates an instance of a . - - - - - Create an instance of from an existing schema's column. - - - - - The schema annotations of one . - - - - - Annotation getter delegates. Useful to construct annotations out of other annotations. - - - - - The schema of the annotations row. It is different from the schema that the column belongs to. - - - - - Create an annotations row by supplying the schema columns and the getter delegates for all the values. - - - Note: The array is owned by this instance. - - - - - Get a getter delegate for one value of the annotations row. - - - - - Get the value of an annotation, by annotation kind (aka column name). - - - - - Class containing operations to build an . - - - - - Add some columns from into our new annotations, by applying - to all the names. - - The annotations row to take values from. - The predicate describing which annotation columns to keep. - - - - Add one annotation column, strongly-typed version. - - The type of the value. - The annotation name. - The annotation type. - The getter delegate. - Annotations of the input column. Note that annotations on an annotation column is somewhat rare - except for certain types (for example, slot names for a vector, key values for something of key type). - - - - Add one annotation column, weakly-typed version. - - The annotation name. - The annotation type. - The getter delegate that provides the value. Note that the type of the getter is still checked - inside this method. - Annotations of the input column. Note that annotations on an annotation column is somewhat rare - except for certain types (for example, slot names for a vector, key values for something of key type). - - - - Add one annotation column for a primitive value type. - - The annotation name. - The annotation type. - The value of the annotation. - Annotations of the input column. Note that annotations on an annotation column is somewhat rare - except for certain types (for example, slot names for a vector, key values for something of key type). - - - - Returns a row that contains the current contents of this . - - - - - Class containing operations to build a . - - - - - Create a new instance of . - - - - - Add one column to the schema being built. - - The column name. - The column type. - The column annotations. - - - - Add multiple existing columns to the schema being built. - - Columns to add. - - - - Add multiple existing columns to the schema being built. - - Columns to add. - - - - Returns a that contains the current contents of this . - - - - - This constructor should only be called by . - - The input columns. The constructed instance takes ownership of the array. - - - - The input and output of Query Operators (Transforms). This is the fundamental data pipeline - type, comparable to for LINQ. - - - - - - - - - - Whether this IDataView supports shuffling of rows, to any degree. - - - - - Returns the number of rows if known. Returning null means that the row count is unknown but - it might return a non-null value on a subsequent call. This indicates, that the transform does - not YET know the number of rows, but may in the future. Its implementation's computation - complexity should be O(1). - - Most implementation will return the same answer every time. Some, like a cache, might - return null until the cache is fully populated. - - - - - Get a row cursor. The indicate the active columns that are needed - to iterate over. If set to an empty no column is requested. The schema of the returned - cursor will be the same as the schema of the IDataView, but getting a getter for inactive columns will throw. - - The active columns needed. If passed an empty no column is requested. - An instance of to seed randomizing the access for a shuffled cursor. - - - - This constructs a set of parallel batch cursors. The value is a recommended limit on - cardinality. If is non-positive, this indicates that the caller has no recommendation, - and the implementation should have some default behavior to cover this case. Note that this is strictly a - recommendation: it is entirely possible that an implementation can return a different number of cursors. - - The cursors should return the same data as returned through - , except partitioned: no two cursors should return the - "same" row as would have been returned through the regular serial cursor, but all rows should be returned by - exactly one of the cursors returned from this cursor. The cursors can have their values reconciled - downstream through the use of the property. - - The typical usage pattern is that a set of cursors is requested, each of them is then given to a set of - working threads that consume from them independently while, ultimately, the results are finally collated in - the end by exploiting the ordering of the property described above. More typical - scenarios will be content with pulling from the single serial cursor of - . - - The active columns needed. If passed an empty no column is requested. - The suggested degree of parallelism. - An instance of to seed randomizing the access. - - - - - Gets an instance of Schema. - - - - - Delegate type to get a value. This can be used for efficient access to data in a - or . - - - - - A logical row of data. May be a row of an or a stand-alone row. - - - - - This is incremented when the underlying contents changes, giving clients a way to detect change. It should be - -1 when the object is in a state where values cannot be fetched. In particular, for an , - this will be before if ever called for the first time, or after the first time - is called and returns . - - Note that this position is not position within the underlying data, but position of this cursor only. If - one, for example, opened a set of parallel streaming cursors, or a shuffled cursor, each such cursor's first - valid entry would always have position 0. - - - - - This provides a means for reconciling multiple rows that have been produced generally from - . When getting a set, there is a need - to, while allowing parallel processing to proceed, always have an aim that the original order should be - recoverable. Note, whether or not a user cares about that original order in one's specific application is - another story altogether (most callers of this as a practical matter do not, otherwise they would not call - it), but at least in principle it should be possible to reconstruct the original order one would get from an - identically configured . So: for any cursor - implementation, batch numbers should be non-decreasing. Furthermore, any given batch number should only - appear in one of the cursors as returned by - . In this way, order is determined by - batch number. An operation that reconciles these cursors to produce a consistent single cursoring, could do - so by drawing from the single cursor, among all cursors in the set, that has the smallest batch number - available. - - Note that there is no suggestion that the batches for a particular entry will be consistent from cursoring - to cursoring, except for the consistency in resulting in the same overall ordering. The same entry could - have different batch numbers from one cursoring to another. There is also no requirement that any given - batch number must appear, at all. It is merely a mechanism for recovering ordering from a possibly arbitrary - partitioning of the data. It also follows from this, of course, that considering the batch to be a property - of the data is completely invalid. - - - - - A getter for a 128-bit ID value. It is common for objects to serve multiple - instances to iterate over what is supposed to be the same data, for example, in a - a cursor set will produce the same data as a serial cursor, just partitioned, and a shuffled cursor will - produce the same data as a serial cursor or any other shuffled cursor, only shuffled. The ID exists for - applications that need to reconcile which entry is actually which. Ideally this ID should be unique, but for - practical reasons, it suffices if collisions are simply extremely improbable. - - Note that this ID, while it must be consistent for multiple streams according to the semantics above, is not - considered part of the data per se. So, to take the example of a data view specifically, a single data view - must render consistent IDs across all cursorings, but there is no suggestion at all that if the "same" data - were presented in a different data view (as by, say, being transformed, cached, saved, or whatever), that - the IDs between the two different data views would have any discernible relationship. - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of the given , from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Gets a , which provides name and type information for variables - (i.e., columns in ML.NET's type system) stored in this row. - - - - - Implementation of dispose. Calls with . - - - - - The disposable method for the disposable pattern. This default implementation does nothing. - - Whether this was called from . - Subclasses that implement should call this method with - , but I hasten to add that implementing finalizers should be - avoided if at all possible.. - - - - Class used to cursor through rows of an . - - - Note that this is also an . The is - incremented by . Prior to the first call to , or after - returns , is -1. - Otherwise, when returns , >= 0. - - - - - Advance to the next row. When the cursor is first created, this method should be called to - move to the first row. Returns if there are no more rows. - - - - - The debugger proxy for . - - - - - The debugger proxy for . - - - - diff --git a/W/Debug_Folder/Microsoft.ML.KMeansClustering.dll b/W/Debug_Folder/Microsoft.ML.KMeansClustering.dll deleted file mode 100644 index cda166158..000000000 Binary files a/W/Debug_Folder/Microsoft.ML.KMeansClustering.dll and /dev/null differ diff --git a/W/Debug_Folder/Microsoft.ML.KMeansClustering.xml b/W/Debug_Folder/Microsoft.ML.KMeansClustering.xml deleted file mode 100644 index 1f5d34ecf..000000000 --- a/W/Debug_Folder/Microsoft.ML.KMeansClustering.xml +++ /dev/null @@ -1,383 +0,0 @@ - - - - Microsoft.ML.KMeansClustering - - - - - Collection of extension methods for the to create - instances of KMeans trainers. - - - - - Train a KMeans++ clustering algorithm using . - - The clustering catalog trainer object. - The name of the feature column. - The name of the example weight column (optional). - The number of clusters to use for KMeans. - - - - - - - - Train a KMeans++ clustering algorithm using . - - The clustering catalog trainer object. - Algorithm advanced options. - - - - - - - - - - - - - - Version information to be saved in binary format - - - - - Initialize predictor with a trained model. - - The host environment - Number of centroids - Coordinates of the centroids - If true then the vectors will be subject to - a deep copy, if false then this constructor will take ownership of the passed in centroid vectors. - If false then the caller must take care to not use or modify the input vectors once this object - is constructed, and should probably remove all references. - - - - Initialize predictor from a binary file. - - The load context - The host environment - - - - Save the predictor in binary format. - - The context to save to - - - - This method is called by reflection to instantiate a predictor. - - - - - Initialize internal parameters: L2 norms of the _centroids. - - - - - Copies the centroids to a set of provided buffers. - - The buffer to which to copy. Will be extended to - an appropriate length, if necessary. - The number of clusters, corresponding to the logical size of - . - - - - The for training a KMeans clusterer - - - - - - - - - The number of clusters. - - - - Options for the as used in [KMeansTrainer(Options)](xref:Microsoft.ML.KMeansClusteringExtensions.KMeans(Microsoft.ML.ClusteringCatalog.ClusteringTrainers,Microsoft.ML.Trainers.KMeansTrainer.Options)). - - - - - The number of clusters. - - - - - Cluster initialization algorithm. - - - - - Tolerance parameter for trainer convergence. Low = slower, more accurate. - - - - - Maximum number of iterations. - - - - - Memory budget (in MBs) to use for KMeans acceleration. - - - - - Degree of lock-free parallelism. Defaults to automatic. Determinism not guaranteed. - - - - - Initializes a new instance of - - The to use. - The advanced options of the algorithm. - - - - Initialize starting centroids via KMeans++ algorithm. This algorithm will always run single-threaded, - regardless of the value of . - - - - - An instance of this class is used by SharedStates in YinYangTrainer - and KMeansBarBarInitialization. It effectively bounds MaxInstancesToAccelerate and - initializes RowIndexGetter. - - - - - Initializes the parallel index lookup HashArray using a sequential RowCursor. We - preinitialize the HashArray so we can perform lock-free lookup operations during - the primary KMeans pass. - - - - - Data for optimizing KMeans|| initialization. Very similar to SharedState class - For every instance, there is a space for the best weight and best cluster computed. - - In this class, new clusters mean the clusters that were added to the cluster set - in the previous round of KMeans|| and old clusters are the rest of them (the ones - that were added in the rounds before the previous one). - - In every round of KMeans||, numSamplesPerRound new clusters are added to the set of clusters. - There are 'numRounds' number of rounds. We compute and store the distance of each new - cluster from every round to all of the previous clusters and use it - to avoid unnecessary computation by applying the triangle inequality. - - - - - When assigning an accelerated row to a cluster, we store away the weight - to its closest cluster, as well as the identity of the new - closest cluster. Note that bestWeight can be negative since it is - corresponding to the weight of a distance which does not have - the L2 norm of the point itself. - - - - - Computes and stores the distance of a new cluster to an old cluster - must be between 0..numSamplesPerRound-1. - - - - - This function is the key to use triangle inequality. Given an instance x distance to the best - old cluster, cOld, and distance of a new cluster, cNew, to cOld, this function evaluates whether - the distance computation of dist(x,cNew) can be avoided. - - - - - This function finds the best cluster and the best weight for an instance using - smart triangle inequality to avoid unnecessary weight computations. - - Note that is used to avoid the storing the new cluster in - final round. After the final round, best cluster information will be ignored. - - - - - This method computes the memory requirement for _clusterDistances in SharedState (clusterBytes) and - the maximum number of instances whose weight to the closest cluster can be memorized in order to avoid - recomputation later. - - - - - KMeans|| Implementation, see https://theory.stanford.edu/~sergei/papers/vldb12-kmpar.pdf - This algorithm will require: - - (k * overSampleFactor * rounds * dimensionality * 4) bytes for the final sampled clusters. - - (k * overSampleFactor * numThreads * dimensionality * 4) bytes for the per-round sampling. - - Uses memory in initializationState to cache distances and avoids unnecessary distance computations - akin to YinYang-KMeans paper. - - Everywhere in this function, weight of an instance x from a cluster c means weight(x,c) = dist(x,c)^2-norm(x)^2. - We store weight in most cases to avoid unnecessary computation of norm(x). - - - - - Initialize starting centroids via reservoir sampling. - - - - - Reduces the array of work chunks into this chunk, coalescing the - results from multiple worker threads partitioned over a parallel cursor set and - clearing their values to prepare them for the next iteration. - - - - - Updates all the passed in variables with the results of the most recent iteration - of cluster assignment. It is assumed that centroids will contain the previous results - of this call. - - - - - When assigning an accelerated row to a cluster, we store away the distance - to its closer and second closed cluster, as well as the identity of the new - closest cluster. This method returns the last known closest cluster. - - - - - Updates the known YinYang bounds for the given row using the centroid position - deltas from the previous iteration. - - - - - Determines if the triangle distance inequality still applies to the given row, - allowing us to avoid per-cluster distance computation. - - - - - Performs the 'update' step of KMeans. This method is passed a WorkChunkState. In the parallel version - this chunk will be one of _numThreads chunks and the RowCursor will be part of a RowCursorSet. In the - unthreaded version, this chunk will be the final chunk and hold state for the entire data set. - - - - - Performs a multithreaded version of weighted reservoir sampling, returning - an array of numSamples, where each sample has been selected from the - data set with a probability of numSamples/N * weight/(sum(weight)). Buffer - is sized to the number of threads plus one and stores the minheaps needed to - perform the per-thread reservoir samples. - - This method assumes that the numSamples is much smaller than the full dataset as - it expects to be able to sample numSamples * numThreads. - - This is based on the 'A-Res' algorithm in 'Weighted Random Sampling', 2005; Efraimidis, Spirakis: - https://utopia.duth.gr/~pefraimi/research/data/2007EncOfAlg.pdf - - - - - Takes a data cursor and perform an in-memory parallel aggregation operation on it. This - helper wraps some of the behavior common to parallel operations over a set, - including building the set, creating separate Random instances, and disposal. - - The type that each parallel cursor will be expected to aggregate to. - The type of the final output from combining each per-thread instance of TInterAgg. - - - - - Initializes an instance of TInterAgg, or prepares/clears it if it is already allocated. - Invoked for every row, should update TInterAgg using row cursor data. - Invoked after all row cursors have completed, combines the entire array of TInterAgg instances into a final TAgg result. - A reusable buffer array of TInterAgg. - A reusable reference to the final result. - - - - - Given a point and a set of centroids this method will determine the closest centroid - using L2 distance. It will return a value equivalent to that distance, the index of the - closest cluster, and a value equivalent to the distance to the second-nearest cluster. - - - - The L2 norms of the centroids. Used for efficiency and expected to be computed up front. - The number of centroids. Must be less than or equal to the length of the centroid array. - Whether to return a real L2 distance, or a value missing the L2 norm of . - The distance between and the nearest centroid in . - The index of the nearest centroid. - The second nearest distance, or PosInf if only contains a single point. - The index of the second nearest centroid, or -1 if only contains a single point. - - - - Checks that all coordinates of all centroids are finite, and throws otherwise - - - - diff --git a/W/Debug_Folder/Microsoft.ML.PCA.dll b/W/Debug_Folder/Microsoft.ML.PCA.dll deleted file mode 100644 index 0f5a3fd53..000000000 Binary files a/W/Debug_Folder/Microsoft.ML.PCA.dll and /dev/null differ diff --git a/W/Debug_Folder/Microsoft.ML.PCA.xml b/W/Debug_Folder/Microsoft.ML.PCA.xml deleted file mode 100644 index 2d48bf574..000000000 --- a/W/Debug_Folder/Microsoft.ML.PCA.xml +++ /dev/null @@ -1,330 +0,0 @@ - - - - Microsoft.ML.PCA - - - - - Collection of extension methods used by the , - and catalogs to create instances of Principal Component Analysis (PCA) components. - - - - Initializes a new instance of . - The transform's catalog. - Name of the column resulting from the transformation of . - Name of column to transform. If set to , the value of the will be used as source. - The name of the example weight column (optional). - The number of principal components. - Oversampling parameter for randomized PrincipalComponentAnalysis training. - If enabled, data is centered to be zero mean. - The seed for random number generation. - - - Initializes a new instance of . - The transform's catalog. - Input columns to apply PrincipalComponentAnalysis on. - - - - Create , which trains an approximate principal component analysis (PCA) model using randomized singular value decomposition (SVD) algorithm. - - The anomaly detection catalog trainer object. - The name of the feature column. The column data must be a known-sized vector of . - The name of the example weight column (optional). To use the weight column, the column data - must be of type . - The number of components in the PCA. - Oversampling parameter for randomized PCA training. - If enabled, data is centered to be zero mean. - The seed for random number generation. - - By default the threshold used to determine the label of a data point based on the predicted score is 0.5. Scores range from 0 to 1. A data point with predicted - score higher than 0.5 is considered an outlier. Use to change this threshold. - - - - - - - - - Create with advanced options, which trains an approximate principal component analysis (PCA) model using randomized singular value decomposition (SVD) algorithm. - - The anomaly detection catalog trainer object. - Advanced options to the algorithm. - - By default the threshold used to determine the label of a data point based on the predicted score is 0.5. Scores range from 0 to 1. A data point with predicted - score higher than 0.5 is considered an outlier. Use to change this threshold. - - - - - - - - - The for training an approximate PCA using Randomized SVD algorithm. - - - - to the data before passing it to the trainer. - - Check the See Also section for links to usage examples. - ]]> - - - - - - - - - Options for the as used in - [RandomizedPca(Options)](xref:Microsoft.ML.PcaCatalog.RandomizedPca(Microsoft.ML.AnomalyDetectionCatalog.AnomalyDetectionTrainers,Microsoft.ML.Trainers.RandomizedPcaTrainer.Options)). - - - - - Initializes a new instance of . - - The local instance of the . - The name of the feature column. - The name of the weight column. - The number of components in the PCA. - Oversampling parameter for randomized PCA training. - If enabled, data is centered to be zero mean. - The seed for random number generation. - - - - Modifies in place so it becomes * eigenvectors / eigenvalues. - - - - - Model parameters for . - - - - - Instantiate new model parameters from trained model. - - The host environment. - The rank of the PCA approximation of the covariance matrix. This is the number of eigenvectors in the model. - Array of eigenvectors. - The mean vector of the training data. - - - - Copies the top eigenvectors of the covariance matrix of the training data - into a set of buffers. - - A possibly reusable set of vectors, which will - be expanded as necessary to accommodate the data. - Set to the rank, which is also the logical length - of . - - - - Copies the mean vector of the training data. - - - - - PCA is a dimensionality-reduction transform which computes the projection of the feature vector onto a low-rank subspace. - - Principle Component Analysis (PCA) is a dimensionality-reduction algorithm which computes the projection of the feature vector to onto a low-rank subspace. - Its training is done using the technique described in the paper: Combining Structured and Unstructured Randomness in Large Scale PCA, - and the paper Finding Structure with Randomness: Probabilistic Algorithms for Constructing Approximate Matrix Decompositions - For more information, see also: - - - Randomized Methods for Computing the Singular Value Decomposition (SVD) of very large matrices - - - A randomized algorithm for principal component analysis - - - Finding Structure with Randomness: Probabilistic Algorithms for Constructing Approximate Matrix Decompositions - - - - - - - PCA is a dimensionality-reduction transform which computes the projection of the feature vector onto a low-rank subspace. - - Principle Component Analysis (PCA) is a dimensionality-reduction algorithm which computes the projection of the feature vector to onto a low-rank subspace. - Its training is done using the technique described in the paper: Combining Structured and Unstructured Randomness in Large Scale PCA, - and the paper Finding Structure with Randomness: Probabilistic Algorithms for Constructing Approximate Matrix Decompositions - For more information, see also: - - - Randomized Methods for Computing the Singular Value Decomposition (SVD) of very large matrices - - - A randomized algorithm for principal component analysis - - - Finding Structure with Randomness: Probabilistic Algorithms for Constructing Approximate Matrix Decompositions - - - - - - - Describes how the transformer handles one column pair. - - - - - Name of the column resulting from the transformation of . - - - - - Name of column to transform. - - - - - The name of the weight column. - - - - - The number of components in the PCA. - - - - - Oversampling parameter for randomized PCA training. - - - - - If enabled, data is centered to be zero mean. - - - - - The seed for random number generation. - - - - - Describes how the transformer handles one column pair. - - Name of the column resulting from the transformation of . - Name of column to transform. - If set to , the value of the will be used as source. - The name of the weight column. - The number of components in the PCA. - Oversampling parameter for randomized PCA training. - If enabled, data is centered to be zero mean. - The random seed. If unspecified random state will be instead derived from the . - - - - PCA is a dimensionality-reduction transform which computes the projection of the feature vector onto a low-rank subspace. - - Principle Component Analysis (PCA) is a dimensionality-reduction algorithm which computes the projection of the feature vector to onto a low-rank subspace. - Its training is done using the technique described in the paper: Combining Structured and Unstructured Randomness in Large Scale PCA, - and the paper Finding Structure with Randomness: Probabilistic Algorithms for Constructing Approximate Matrix Decompositions - For more information, see also: - - - Randomized Methods for Computing the Singular Value Decomposition (SVD) of very large matrices - - - A randomized algorithm for principal component analysis - - - Finding Structure with Randomness: Probabilistic Algorithms for Constructing Approximate Matrix Decompositions - - - - The environment to use. - Name of the column resulting from the transformation of . - Name of the column to transform. - If set to , the value of the will be used as source. - The name of the weight column. - The number of components in the PCA. - Oversampling parameter for randomized PCA training. - If enabled, data is centered to be zero mean. - The seed for random number generation. - - - - PCA is a dimensionality-reduction transform which computes the projection of the feature vector onto a low-rank subspace. - - Principle Component Analysis (PCA) is a dimensionality-reduction algorithm which computes the projection of the feature vector to onto a low-rank subspace. - Its training is done using the technique described in the paper: Combining Structured and Unstructured Randomness in Large Scale PCA, - and the paper Finding Structure with Randomness: Probabilistic Algorithms for Constructing Approximate Matrix Decompositions - For more information, see also: - - - Randomized Methods for Computing the Singular Value Decomposition (SVD) of very large matrices - - - A randomized algorithm for principal component analysis - - - Finding Structure with Randomness: Probabilistic Algorithms for Constructing Approximate Matrix Decompositions - - - - The environment to use. - The dataset columns to use, and their specific settings. - - - - Trains and returns a . - - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - diff --git a/W/Debug_Folder/Microsoft.ML.StandardTrainers.dll b/W/Debug_Folder/Microsoft.ML.StandardTrainers.dll deleted file mode 100644 index c0dc16884..000000000 Binary files a/W/Debug_Folder/Microsoft.ML.StandardTrainers.dll and /dev/null differ diff --git a/W/Debug_Folder/Microsoft.ML.StandardTrainers.xml b/W/Debug_Folder/Microsoft.ML.StandardTrainers.xml deleted file mode 100644 index bb2c1b75a..000000000 --- a/W/Debug_Folder/Microsoft.ML.StandardTrainers.xml +++ /dev/null @@ -1,4565 +0,0 @@ - - - - Microsoft.ML.StandardTrainers - - - - - Collection of extension methods for the to create instances - of field aware factorization trainer components. - - - - - Create , which predicts a target using a field-aware factorization machine trained over boolean label data. - - - Note that because there is only one feature column, the underlying model is equivalent to standard factorization machine. - - The binary classification catalog trainer object. - The name of the label column. The column data must be . - The name of the feature column. The column data must be a known-sized vector of . - The name of the example weight column (optional). - - - - - - - - Create , which predicts a target using a field-aware factorization machine trained over boolean label data. - - The binary classification catalog trainer object. - The name of the label column. The column data must be . - The names of the feature columns. The column data must be a known-sized vector of . - The name of the example weight column (optional). - - - - - - - - Create using advanced options, which predicts a target using a field-aware factorization machine trained over boolean label data. - - The binary classification catalog trainer object. - Trainer options. - - - - - - - - The to predict a target using a field-aware factorization machine model trained using a stochastic gradient method. - - - 0$, this model predicts true. Otherwise, it predicts false. - - For a systematic introduction to field-aware factorization machine, please see [this paper](https://www.csie.ntu.edu.tw/~cjlin/papers/ffm.pdf) - - ### Training Algorithm Details - The algorithm implemented in is based on [a stochastic gradient method](http://jmlr.org/papers/volume12/duchi11a/duchi11a.pdf). - Algorithm details is described in Algorithm 3 in [this online document](https://github.com/wschin/fast-ffm/blob/master/fast-ffm.pdf). - The minimized loss function is [logistic loss](https://en.wikipedia.org/wiki/Loss_functions_for_classification), so the trained model can be viewed as a non-linear logistic regression. - - Check the See Also section for links to usage examples. - ]]> - - - - - - - - - - for as used in - . - - - - - Initial learning rate. - - - - - Number of training iterations. - - - - - Latent space dimension. - - - - - Regularization coefficient of linear weights. - - - - - Regularization coefficient of latent weights. - - - - - Whether to normalize the input vectors so that the concatenation of all fields' feature vectors is unit-length. - - - - - Extra feature column names. The column named stores features from the first field. - The i-th string in stores the name of the (i+1)-th field's feature column. - - - - - Whether to shuffle for each training iteration. - - - - - Report traning progress or not. - - - - - Radius of initial latent factors. - - - - - The feature column that the trainer expects. - - - - - The label column that the trainer expects. Can be null, which indicates that label - is not used for training. - - - - - The weight column that the trainer expects. Can be null, which indicates that weight is - not used for training. - - - - - The containing at least the training data for this trainer. - - - - - Initializes a new instance of through the class. - - The private instance of . - An instance of the legacy to apply advanced parameters to the algorithm. - - - - Initializes a new instance of . - - The private instance of . - The name of column hosting the features. The i-th element stores feature column of the i-th field. - The name of the label column. - The name of the weight column (optional). - - - - Initializes the instance. Shared between the two constructors. - REVIEW: Once the legacy constructor goes away, this can move to the only constructor and most of the fields can be back to readonly. - - - - - - - Continues the training of a using an already trained and/or validation data, - and returns a . - - - - Trains and returns a . - - - - Schema propagation for transformers. Returns the output schema of the data, if - the input schema is like the one provided. - - - - - Model parameters for . - - - - - Get the number of fields. It's the symbol `m` in the doc: https://github.com/wschin/fast-ffm/blob/master/fast-ffm.pdf - - - - - Get the number of features. It's the symbol `n` in the doc: https://github.com/wschin/fast-ffm/blob/master/fast-ffm.pdf - - - - - Get the latent dimension. It's the length of `v_{j, f}` in the doc: https://github.com/wschin/fast-ffm/blob/master/fast-ffm.pdf - - - - - Initialize model parameters with a trained model. - - The host environment - True if user wants to normalize feature vector to unit length. - The number of fields, which is the symbol `m` in the doc: https://github.com/wschin/fast-ffm/blob/master/fast-ffm.pdf - The number of features, which is the symbol `n` in the doc: https://github.com/wschin/fast-ffm/blob/master/fast-ffm.pdf - The latent dimensions, which is the length of `v_{j, f}` in the doc: https://github.com/wschin/fast-ffm/blob/master/fast-ffm.pdf - The linear coefficients of the features, which is the symbol `w` in the doc: https://github.com/wschin/fast-ffm/blob/master/fast-ffm.pdf - Latent representation of each feature. Note that one feature may have latent vectors - and each latent vector contains values. In the f-th field, the j-th feature's latent vector, `v_{j, f}` in the doc - https://github.com/wschin/fast-ffm/blob/master/fast-ffm.pdf, starts at latentWeights[j * fieldCount * latentDim + f * latentDim]. - The k-th element in v_{j, f} is latentWeights[j * fieldCount * latentDim + f * latentDim + k]. The size of the array must be featureCount x fieldCount x latentDim. - - - - The linear coefficients of the features. It's the symbol `w` in the doc: https://github.com/wschin/fast-ffm/blob/master/fast-ffm.pdf - - - - - Latent representation of each feature. Note that one feature may have latent vectors - and each latent vector contains values. In the f-th field, the j-th feature's latent vector, `v_{j, f}` in the doc - https://github.com/wschin/fast-ffm/blob/master/fast-ffm.pdf, starts at latentWeights[j * fieldCount * latentDim + f * latentDim]. - The k-th element in v_{j, f} is latentWeights[j * fieldCount * latentDim + f * latentDim + k]. - The size of the returned value is featureCount x fieldCount x latentDim. - - - - - The name of the feature column used by the prediction transformer. - - - - - The type of the feature columns. - - - - - Gets the result after transformation. - - The of the input data. - The post transformation . - - - - Saves the transformer to file. - - The that facilitates saving to the . - - - - Given a set of columns, return the input columns that are needed to generate those output columns. - - - - - Version information to be saved in binary format - - - - - - Constructor. w, thetaPrime, theta must be dense s. - Note that this takes over ownership of all such vectors. - - - - - Create method to instantiate a predictor. - - - - - Save the predictor in binary format. - - - - - Save an array of in binary format. The vectors must be dense. - - The context where we will save the vectors. - An array of vectors. - - - - Load an array of from binary format. - - The context from which to read the vectors. - The length of the array of vectors. - The length of each vector. - An array of vectors. - - - - Compute Margin. - - - - - The to predict a target using a non-linear binary classification model - trained with Local Deep SVM. - - - - - - - - - - - Depth of LDSVM Tree - - - - - Regularizer for classifier parameter W - - - - - Regularizer for kernel parameter Theta - - - - - Regularizer for kernel parameter ThetaPrime - - - - - Parameter for sigmoid sharpness - - - - - Indicates if we should use Bias or not in our model. - - - - - Number of iterations - - - - - Compute gradient w.r.t theta for an instance X - - - - - Adaptively update gamma for indicator function approximation. - - - - - Main LDSVM training routine. - - - - - Inititlize classifier parameters - - - - - Initialization of model. - - - - - A class that contains the current train state to use for learning rate scheduling. - - - - - This abstract class defines a learning rate scheduler. - - - - - This class implements linear scaling rule and LR decay. - Implementation adopted from RESNET-CIFAR benchmark test in Tensorflow slim. - https://github.com/tensorflow/models/blob/b974c3f95a37acedcc3c58566834c78fcae4b214/official/vision/image_classification/resnet_cifar_main.py - - - - - This structure represents a learning rate scheduler item type - - - - - Start epoch to match with the scaling factor - - - - - Scaling factor or multiplier that changes the learning rate for Linear scale rule - - - - - Learning rate is scaled at epoch boundaries provided in LrSchedule to corresponding multiplier in the LrSchedule. - Format for LrSchedule: {start epoch, scaling factor}, ordered with largest start epoch first - - - - - Base Learning rate to start off with. - - - - - Linear Scale rule and LR Decay construtor assigns a default LR scheduler. - - - - - Linear Scale rule and LR Decay construtor assigns a user defined LR scheduler. - - - - - This function returns the corresponding scaling factor or multiplier for the given epoch from the LrSchedule. - - - - - This function returns the Learning rate using linear scale rule and LR decay. - - - - - This class implements Exponential Learning rate decay. - Implemented from the tensorflow documentation. - Source: https://www.tensorflow.org/api_docs/python/tf/compat/v1/train/exponential_decay - Default values and implementation of learning rate is from Tensorflow Slim model tests. - Source : https://github.com/tensorflow/models/blob/master/research/slim/train_image_classifier.py - - - - - Initial learning rate. - - - - - The number of batches seen by the graph so far. - - - - - Number of decay steps - - - - - Learning rate decay factor. - - - - - If Staircase is True the learning rate decays at discrete intervals and the decayed learning rate follows a staircase function. - - - - - Number of epochs after which learning rate decays. - - - - - This contructor initializes intial learning rate, number epochs per decay, decay rate and the staircase option. - The defaults are taken from Tensorflow Slim. - - - - - Computes exponentially decayed learning rate - - - - - This class implements polynomial Learning rate decay. - Implemented from the tensorflow documentation. - Source: https://www.tensorflow.org/api_docs/python/tf/compat/v1/train/polynomial_decay - Default values and implementation of learning rate is from Tensorflow Slim model tests. - Source : https://github.com/tensorflow/models/blob/master/research/slim/train_image_classifier.py - - - - - Initial learning rate. - - - - - The minimal end learning rate. - - - - - The power of the polynomial - - - - - whether or not it should cycle once decay has been reached - - - - - Number of epochs after which learning rate decays. - - - - - Base class for linear model parameters. - - - - The predictor's feature weight coefficients. - - - The predictor's bias term. - - - - Used to determine the contribution of each feature to the score of an example by . - For linear models, the contribution of a given feature is equal to the product of feature value times the corresponding weight. - - - - - Constructs a new linear predictor. - - The host environment. - Component name. - The weights for the linear model. The i-th element of weights is the coefficient - of the i-th feature. Note that this will take ownership of the . - The bias added to every output score. - - - - Combine a bunch of models into one by averaging parameters - - - - - The model parameters class for linear binary trainer estimators. - - - - - Constructs a new linear binary predictor. - - The host environment. - The weights for the linear model. The i-th element of weights is the coefficient - of the i-th feature. Note that this will take ownership of the . - The bias added to every output score. - - - - - Combine a bunch of models into one by averaging parameters - - - - - - - - Model parameters for regression. - - - - - Output the INI model to a given writer - - - - - Model parameters for linear regression. - - - - - Constructs a new linear regression model from trained weights. - - The host environment. - The weights for the linear model. The i-th element of weights is the coefficient - of the i-th feature. Note that this will take ownership of the . - The bias added to every output score. - - - - Combine a bunch of models into one by averaging parameters - - - - - - - - Model parameters for Poisson Regression. - - - - - Constructs a new Poisson regression model parameters from trained model. - - The Host environment. - The weights for the linear model. The i-th element of weights is the coefficient - of the i-th feature. Note that this will take ownership of the . - The bias added to every output score. - - - - Combine a bunch of models into one by averaging parameters - - - - - Helper methods for linear predictors - - - - - print the linear model as code - - - - - Ensure that feature name is a legitimate variable name - - - - - Build a Bing TreeEnsemble .ini representation of the given predictor - - - - - Output the weights of a linear model to a given writer - - - - - Output the weights of a linear model to key value pairs. - - - - - Base class for L-BFGS-based trainers. - - - - - Base options class for trainer estimators deriving from. - - - - - L2 regularization weight. - - - - - L1 regularization weight. - - - - - Tolerance parameter for optimization convergence. (Low = slower, more accurate). - - - - - Number of previous iterations to remember for estimating the Hessian. Lower values mean faster but less accurate estimates. - - - - - Number of iterations. - - - - - Run SGD to initialize LR weights, converging to this tolerance. - - - - - Determines whether to produce output during training or not. - - - If set to no output is produced. - - - - - Initial weights scale. - - - This property is only used if the provided value is positive. - The weights will be randomly selected from InitialWeights * [-0.5,0.5] interval with uniform distribution. - - - - - Number of threads. Null means use the number of processors. - - - - - Force densification of the internal optimization vectors. Default is false. - - - - - Enforce non-negative weights. Default is false. - - - - - Initialize weights by running SGD up to specified tolerance. - - - - - The basic training calls the optimizer - - - - - The gradient being used by the optimizer - - - - - Batch-parallel optimizer - - - REVIEW: consider getting rid of multithread-targeted members - Using TPL, the distinction between Multithreaded and Sequential implementations is unnecessary - - - - - The to predict a target using a linear logistic regression model trained with L-BFGS method. - - - - - - - - - - - - Options for the as used in - - - - - - If set to true training statistics will be generated at the end of training. - If you have a large number of learned training parameters(more than 500), - generating the training statistics might take a few seconds. - More than 1000 weights might take a few minutes. For those cases consider using the instance of - present in the Microsoft.ML.Mkl.Components package. That computes the statistics using hardware acceleration. - - - - - The instance of that computes the std of the training statistics, at the end of training. - The calculations are not part of Microsoft.ML package, due to the size of MKL. - If you need these calculations, add the Microsoft.ML.Mkl.Components package, and initialize . - to the implementation in the Microsoft.ML.Mkl.Components package. - - - - - Initializes a new instance of - - The environment to use. - The name of the label column. - The name of the feature column. - The name for the example weight column. - Enforce non-negative weights. - Weight of L1 regularizer term. - Weight of L2 regularizer term. - Memory size for . Low=faster, less accurate. - Threshold for optimizer convergence. - - - - Initializes a new instance of - - - - - Continues the training of a using an already trained and returns - a . - - - - - Computes the standard deviation matrix of each of the non-zero training weights, needed to calculate further the standard deviation, - p-value and z-Score. - Use this class' implementation in the Microsoft.ML.Mkl.Components package which uses Intel Math Kernel Library. - Due to the existence of regularization, an approximation is used to compute the variances of the trained linear coefficients. - - - - - Computes the standard deviation matrix of each of the non-zero training weights, needed to calculate further the standard deviation, - p-value and z-Score. - The calculations are not part of Microsoft.ML package, due to the size of MKL. - If you need these calculations, add the Microsoft.ML.Mkl.Components package, and initialize - to the implementation in the Microsoft.ML.Mkl.Components package. - Due to the existence of regularization, an approximation is used to compute the variances of the trained linear coefficients. - - - - - The to predict a target using a maximum entropy multiclass classifier trained with L-BFGS method. - - - - - - - - - - - - for as used in - . - - - - - If set to true training statistics will be generated at the end of training. - - - - - Initializes a new instance of . - - The environment to use. - The name of the label column. - The name of the feature column. - The name for the example weight column. - Enforce non-negative weights. - Weight of L1 regularizer term. - Weight of L2 regularizer term. - Memory size for . Low=faster, less accurate. - Threshold for optimizer convergence. - - - - Initializes a new instance of . - - - - - Continues the training of a using an already trained and returns - a . - - - - - Common linear model of multiclass classifiers. contains a single - linear model per class. - - - - - Initializes a new instance of the class. - This constructor is called by to create the predictor. - - The host environment. - Registration name of this model's actual type. - The array of weights vectors. It should contain weights. - The array of biases. It should contain contain weights. - The number of classes for multi-class classification. Must be at least 2. - The length of the feature vector. - The optional label names. If specified not null, it should have the same length as . - The model statistics. - - - - Post-processing function applied to scores of each class' linear model output. - In we compute the i-th class' score - by using inner product of the i-th linear coefficient vector [i] and the input feature vector (plus bias). - Then, will be called to adjust those raw scores. - - - - - Actual implementation of should happen in derived classes. - - - - - Redirect call to the right function. - - - - - Summary is equivalent to its information in text format. - - - - - Actual implementation of should happen in derived classes. - - - - - The raw scores of all linear classifiers are stored in [] . - Derived classes can use this functin to add C# code for post-transformation. - - - - - Redirect call to the right function. - - - - - Actual implementation of should happen in derived classes. - - - - - This is called at the end of to adjust the final outputs of all linear models. - - - - - Redirect call to the right function. - - - - - Actual implementation of should happen in derived classes. - It's ok to make a method in the future - if any derived class wants to override. - - - - - Post-transform applied to the raw scores produced by those linear models of all classes. For maximum entropy classification, it should be - a softmax function. This function is used only in . - - - - - Redirect call to the right function. - - - - - Copies the weight vector for each class into a set of buffers. - - A possibly reusable set of vectors, which will - be expanded as necessary to accommodate the data. - Set to the rank, which is also the logical length - of . - - - - Gets the biases for the logistic regression predictor. - - - - - Linear model of multiclass classifiers. It outputs raw scores of all its linear models, and no probablistic output is provided. - - - - - Function used to pass into parent class. It may be used when saving the model. - - - - - This function does not do any calibration. It's common in multi-class support vector machines where probabilitic outputs are not provided. - - Score vector should be calibrated. - - - - No post-transform is needed for non-clibrated classifier. - - - - - No post-transform is needed for non-clibrated classifier. - - - - - Linear maximum entropy model of multiclass classifiers. It outputs classes probabilities. - This model is also known as multinomial logistic regression. - Please see https://en.wikipedia.org/wiki/Multinomial_logistic_regression for details. - - - - - Function used to pass into parent class. It may be used when saving the model. - - - - - This function applies softmax to . For details about softmax, see https://en.wikipedia.org/wiki/Softmax_function. - - Score vector should be calibrated. - - - - Apply softmax function to , which contains raw scores from all linear models. - - - - - Apply softmax to the raw scores produced by the lienar models of all classes. - - - - - Apply softmax to the raw scores produced by the lienar models of all classes. - - - - - Represents a coefficient statistics object containing statistics about the calculated model parameters. - - - - - The model parameter (bias of weight) for which the statistics are generated. - - - - - The standard deviation of the estimate of this model parameter (bias of weight). - - - - - The standard score of the estimate of this model parameter (bias of weight). - Quantifies by how much the estimate is above or below the mean. - - - - - The probability value of the estimate of this model parameter (bias of weight). - - - - - The index of the feature, in the Features vector, to which this model parameter (bias of weight) corresponds to. - - - - - Statistics for linear model parameters. - - - - - Support method for linear models and . - - - - - Statistics for linear model parameters. - - - - - The weights of the LinearModelParams trained. - - - - - The bias of the LinearModelParams trained. - - - - - Computes the standart deviation, Z-Score and p-Value for the value being passed as the bias. - - - - - Computes the standart deviation, Z-Score and p-Value for the calculated bias. - - - - - Gets the coefficient statistics as an object. - - - - - Saves the statistics in Text format. - - - - - Support method for linear models and . - - - - - The label column that the trainer expects. - - - - - Initializes the from the class. - - The private instance of the . - The legacy arguments class. - The component name. - The label column for the metalinear trainer and the binary trainer. - The binary estimator. - The calibrator. If a calibrator is not explicitly provided, it will default to - - - - The legacy train method. - - The trainig context for this learner. - The trained model. - - - - Gets the output columns. - - The input schema. - The output - - - - Fits the data to the trainer. - - The input data to fit to. - The transformer. - - - - The for training a multiclass Naive Bayes model that supports binary feature values. - - - - - - - - - Return the type of prediction task. - - - - Auxiliary information about the trainer in terms of its capabilities - and requirements. - - - - - Initializes a new instance of - - The environment to use. - The name of the label column. - The name of the feature column. - - - - Initializes a new instance of - - - - - Model parameters for . - - - - Return the type of prediction task. - - - - Get the label histogram. - - - - - Get the label histogram with generic type long. - - - - - Get the feature histogram. - - - - - Get the feature histogram with generic type long. - - - - - Instantiates new model parameters from trained model. - - The host environment. - The histogram of labels. - The feature histogram. - The number of features. - - - - The unit test TestEntryPoints.LoadEntryPointModel() exercises the ReadIntArrary(int size) codepath below - as its ctx.Header.ModelVerWritten is 0x00010001, and the persistent model that gets loaded and executed - for this unit test is located at test\data\backcompat\ep_model3.zip/> - - - - - Creates an Onnx inferencing model by vectorizing and following the logic found in - - - - - The for training a one-versus-all multi-class classifier that uses the specified binary classifier. - - - , - can be different from , which develops a multi-class classifier directly. - Note that even if the classifier indicates that it does not need caching, OneVersusAll will always - request caching, as it will be performing multiple passes over the data set. - This trainer will request normalization from the data pipeline if the classifier indicates it would benefit from it. - - This can allow you to exploit trainers that do not naturally have a - multiclass option, for example, using the - to solve a multiclass problem. - Alternately, it can allow ML.NET to solve a "simpler" problem even in the cases - where the trainer has a multiclass option, but using it directly is not - practical due to, usually, memory constraints. For example, while a multiclass - logistic regression is a more principled way to solve a multiclass problem, it - requires that the trainer store a lot more intermediate state in the form of - L-BFGS history for all classes *simultaneously*, rather than just one-by-one - as would be needed for a one-versus-all classification model. - - Check the See Also section for links to usage examples. - ]]> - - - - - - - Options passed to - - - - - Whether to use probabilities (vs. raw outputs) to identify top-score category. - - - - - Constructs a trainer supplying a . - - The private for this estimator. - The legacy - - - - Initializes a new instance of . - - The instance. - An instance of a binary used as the base trainer. - The calibrator. If a calibrator is not provided, it will default to - The name of the label colum. - If true will treat missing labels as negative labels. - Number of instances to train the calibrator. - Use probabilities (vs. raw outputs) to identify top-score category. - - - Trains a model. - The input data. - A model./> - - - - Model parameters for . - - - - - Retrieves the model parameters. - - - - - The type of the prediction task. - - - - - Function applied to output of predictors. Assume that we have n predictors (one per class) and for the i-th predictor, - y_i is its raw output and p_i is its probability output. Note that not all predictors are able to produce probability output. - - : output the result of predictors without post-processing. Output is [y_1, ..., y_n]. - : fetch probability output of each class probability from provided predictors and make sure the sume of class probabilities is one. - Output is [p_1 / (p_1 + ... + p_n), ..., p_n / (p_1 + ... + p_n)]. - : Generate probability by feeding raw outputs to softmax function. Output is [z_1, ..., z_n], where z_i is exp(y_i) / (exp(y_1) + ... + exp(y_n)). - - - - - - Create a from an array of predictors. - - - - - Each predictor produces a probability of a class. All classes' probabilities are normalized so that - their sum is one. - - - - - The for training a pairwise coupling multi-class classifier that uses the specified binary classifier. - - - - to solve a multiclass problem. - Alternately, it can allow ML.NET to solve a "simpler" problem even in the cases - where the trainer has a multiclass option, but using it directly is not - practical due to, usually, memory constraints. For example, while a multiclass - logistic regression is a more principled way to solve a multiclass problem, it - requires that the trainer store a lot more intermediate state in the form of - L-BFGS history for all classes *simultaneously*, rather than just one-by-one - as would be needed for a pairwise coupling classification model. - - Check the See Also section for links to usage examples. - ]]> - - - - - - - Options passed to . - - - - - Constructs a trainer supplying the base trainer to use, for the classification task - through the Options. - - - - - Initializes a new instance of the - - The instance. - An instance of a binary used as the base trainer. - The name of the label column. - Whether to treat missing labels as having negative labels, instead of keeping them missing. - The calibrator to use for each model instance. If a calibrator is not explicitely provided, it will default to - Number of instances to train the calibrator. - - - - Fits the data to the transformer - - The input data. - The trained predictor. - - - - Model parameters for . - - - - Return the type of prediction task. - - - - Arguments class for averaged linear trainers. - - - - - Learning rate. - - - - - Determine whether to decrease the or not. - - - to decrease the as iterations progress; otherwise, . - Default is . The learning rate will be reduced with every weight update proportional to the square root of the number of updates. - - - - - Number of examples after which weights will be reset to the current average. - - - Default is , which disables this feature. - - - - - Determines when to update averaged weights. - - - to update averaged weights only when loss is nonzero. - to update averaged weights on every example. - Default is . - - - - - The L2 weight for regularization. - - - - - Extra weight given to more recent updates. - - - Default is 0, i.e. no extra gain. - - - - - Determines whether is multiplicative or additive. - - - means is multiplicative. - means is additive. - Default is . - - - - - Determines whether to do averaging or not. - - - to do averaging; otherwise, . - Default is . - - - - - The inexactness tolerance for averaging. - - - - - Base class for averaged linear trainers. - - - - - Return the raw margin from the decision hyperplane - - - - - Add current weights and bias to average weights/bias. - - - - - The to predict a target using a linear binary classification model trained with the averaged perceptron. - - - - - - - - - - - - Options for the as used in - . - - - - - A custom loss. - - - - - A custom loss. - - - - - The calibrator for producing probabilities. Default is exponential (aka Platt) calibration. - - - - - The maximum number of examples to use when training the calibrator. - - - - - Trains a linear binary classifier using the averaged perceptron. - Wikipedia entry for Perceptron - - The local instance of the - The classification loss function. - The name of the label column. - The name of the feature column. - The learning rate. - Whether to decrease learning rate as iterations progress. - Weight of L2 regularization term. - The number of training iterations. - - - - The to predict a target using a linear binary classification model - trained with Linear SVM. - - - - - - - - - - - Options for the as used in - . - - - - - Column to use for example weight. - - - - - Observe an example and update weights if necesary. - - - - - Updates the weights at the end of the batch. Since weightsUpdate can be an instance - feature vector, this function should not change the contents of weightsUpdate. - - - - - Return the raw margin from the decision hyperplane. - - - - - Initializes a new instance of . - - The environment to use. - The name of the label column. - The name of the feature column. - The name of the example weight column (optional). - The number of training iteraitons. - - - - The for training a linear regression model using - Online Gradient Descent (OGD) for estimating the parameters of the linear regression model. - - - - - - - - - - - - Options for the as used in - [OnlineGradientDescent(Options)](xref:Microsoft.ML.StandardTrainersCatalog.OnlineGradientDescent(Microsoft.ML.RegressionCatalog.RegressionTrainers,Microsoft.ML.Trainers.OnlineGradientDescentTrainer.Options)). - - - - - A custom loss. - - - - - Create a new object with default values. - - - - - Trains a new . - - The pricate instance of . - Name of the label column. - Name of the feature column. - The learning Rate. - Decrease learning rate as iterations progress. - Weight of L2 regularization term. - Number of training iterations through the data. - The custom loss functions. Defaults to if not provided. - - - - Arguments class for online linear trainers. - - - - - Number of passes through the training dataset. - - - - - Initial weights and bias, comma-separated. - - - - - Initial weights and bias scale. - - - This property is only used if the provided value is positive and is not specified. - The weights and bias will be randomly selected from InitialWeights * [-0.5,0.5] interval with uniform distribution. - - - - - Determines whether to shuffle data for each training iteration. - - - to shuffle data for each training iteration; otherwise, . - Default is . - - - - - Base class for online linear trainers. Online trainers can be updated incrementally with additional data. - - - - - An object to hold the mutable updatable state for the online linear trainers. Specific algorithms should subclass - this, and return the instance via . - - - - - The number of iterations. Incremented by . - - - - - The number of examples in the current iteration. Incremented by , - and reset by . - - - - - Current weights. The weights vector is considered to be scaled by . Storing this separately - allows us to avoid the overhead of an explicit scaling, which some algorithms will attempt to do on each example's update. - - - - - The implicit scaling factor for . Note that this does not affect . - - - - - The intercept term. - - - - - Propagates the to the vector. - - - - - Conditionally propagates the to the vector - when it reaches a scale where additions to weights would start dropping too much precision. - ("Too much" is mostly empirically defined.) - - - - - Called by at the start of a pass over the dataset. - - - - - Called by after a pass over the dataset. - - - - - This should be overridden by derived classes. This implementation simply increments . - - - - - Return the raw margin from the decision hyperplane - - - - - The default implementation just calls . - - - - - - - Continues the training of a using an already trained and returns a . - - - - - The for training a Poisson regression model. - - - - - - - - - - - - Options for the as used in - [LbfgsPoissonRegression(Options)](xref:Microsoft.ML.StandardTrainersCatalog.LbfgsPoissonRegression(Microsoft.ML.RegressionCatalog.RegressionTrainers,Microsoft.ML.Trainers.LbfgsPoissonRegressionTrainer.Options)). - - - - - Initializes a new instance of - - The environment to use. - The name of the label column. - The name of the feature column. - The name for the example weight column. - Weight of L1 regularizer term. - Weight of L2 regularizer term. - Threshold for optimizer convergence. - Memory size for . Low=faster, less accurate. - Enforce non-negative weights. - - - - Initializes a new instance of - - - - - Continues the training of a using an already trained and returns - a . - - - - - Whether data is to be shuffled every epoch. - - - - - This method ensures that the data meets the requirements of this trainer and its - subclasses, injects necessary transforms, and throws if it couldn't meet them. - - The channel - The training examples - Gets the length of weights and bias array. For binary classification and regression, - this is 1. For multi-class classification, this equals the number of classes on the label. - A potentially modified version of - - - - Options for the SDCA-based trainers. - - - - - The L2 regularization hyperparameter. - - - - - The L1 regularization hyperparameter. - - - - - The degree of lock-free parallelism. - - - Defaults to automatic depending on data sparseness. Determinism is not guaranteed. - - - - - The tolerance for the ratio between duality gap and primal loss for convergence checking. - - - - - The maximum number of passes to perform over the data. - - - Set to 1 to simulate online learning. Defaults to automatic. - - - - - Determines whether to shuffle data for each training iteration. - - - to shuffle data for each training iteration; otherwise, . - Default is . - - - - - Determines the frequency of checking for convergence in terms of number of iterations. - - - Set to zero or negative value to disable checking. If , it defaults to ." - - - - - The learning rate for adjusting bias from being regularized. - - - - - Returns the names of the metrics reported by , as well as the initial values. - - - - - Train the SDCA optimizer with one iteration over the entire training examples. - - The progress reporting channel. - The cursor factory to create cursors over the training examples. - - The random number generator to generate random numbers for randomized shuffling of the training examples. - It may be null. When it is null, the training examples are not shuffled and are cursored in its original order. - - - The id to index mapping. May be null. If it is null, the index is given by the - corresponding lower bits of the id. - - The number of threads used in parallel training. It is used in computing the dual update. - - The dual variables. For binary classification and regression, there is one dual variable per row. - For multiclass classification, there is one dual variable per class per row. - - The array containing regularized bias terms. For binary classification or regression, - it contains only a single value. For multiclass classification its size equals the number of classes. - - The dual updates invariants. It may be null. If not null, it holds an array of pre-computed numerical quantities - that depend on the training example label and features, not the value of dual variables. - - The precomputed numerical quantity 1 / (l2Const * (count of training examples)). - - The weights array. For binary classification or regression, it consists of only one VBuffer. - For multiclass classification, its size equals the number of classes. - - - The array containing unregularized bias terms. For binary classification or regression, - it contains only a single value. For multiclass classification its size equals the number of classes. - - - The array holding the intermediate weights prior to making L1 shrinkage adjustment. It is null iff l1Threshold is zero. - Otherwise, for binary classification or regression, it consists of only one VBuffer; - for multiclass classification, its size equals the number of classes. - - - The array holding the intermediate bias prior to making L1 shrinkage adjustment. It is null iff l1Threshold is zero. - Otherwise, for binary classification or regression, it consists of only one value; - for multiclass classification, its size equals the number of classes. - - - The array holding the pre-computed squared L2-norm of features for each training example. It may be null. It is always null for - binary classification and regression because this quantity is not needed. - - - - - Returns whether the algorithm converged, and also populates the - (which is expected to be parallel to the names returned by ). - When called, the is expected to hold the previously reported values. - - The progress reporting channel. - The iteration number, zero based. - The cursor factory to create cursors over the training data. - - The dual variables. For binary classification and regression, there is one dual variable per row. - For multiclass classification, there is one dual variable per class per row. - - - The id to index mapping. May be null. If it is null, the index is given by the - corresponding lower bits of the id. - - - The weights array. For binary classification or regression, it consists of only one VBuffer. - For multiclass classification, its size equals the number of classes. - - - The weights array that corresponds to the best model obtained from the training iterations thus far. - - - The array containing unregularized bias terms. For binary classification or regression, - it contains only a single value. For multiclass classification its size equals the number of classes. - - - The array containing unregularized bias terms corresponding to the best model obtained from the training iterations thus far. - For binary classification or regression, it contains only a single value. - For multiclass classification its size equals the number of classes. - - - The array containing regularized bias terms. For binary classification or regression, - it contains only a single value. For multiclass classification its size equals the number of classes. - - - The array containing regularized bias terms corresponding to the best model obtained from the training iterations thus far. - For binary classification or regression, it contains only a single value. - For multiclass classification its size equals the number of classes. - - - The count of (valid) training examples. Bad training examples are excluded from this count. - - - The array of metrics for progress reporting. - - - The primal loss function value corresponding to the best model obtained thus far. - - The iteration number when the best model is obtained. - Whether the optimization has converged. - - - - Encapsulates the common functionality of storing and - retrieving the dual variables. - - - - - Implementation of using a standard array. - - - - - Implementation of using a big array. - - - - - Returns a function delegate to retrieve index from id. - This is to avoid redundant conditional branches in the tight loop of training. - - - - - Returns a function delegate to retrieve index from id and row. - Only works if the cursor is not shuffled. - This is to avoid redundant conditional branches in the tight loop of training. - - - - - A hash table data structure to store Id of type , - and accommodates size larger than 2 billion. This class is an extension based on BCL. - Two operations are supported: adding and retrieving an id with asymptotically constant complexity. - The bucket size are prime numbers, starting from 3 and grows to the next prime larger than - double the current size until it reaches the maximum possible size. When a table growth is triggered, - the table growing operation initializes a new larger bucket and rehash the existing entries to - the new bucket. Such operation has an expected complexity proportional to the size. - - - - - Gets the count of id entries. - - - - - Initializes an instance of the class with the specified size. - - - - - Make sure the given id is in this lookup table and return the index of the id. - - - - - Find the index of the given id. - Returns a bool representing if id is present. - Index outputs the index that the id, -1 otherwise. - - - - - Return the index of value, -1 if it is not present. - - - - - Adds the value as a TItem. Does not check whether the TItem is already present. - Returns the index of the added value. - - - - - Sum with underflow compensation for better numerical stability. - - - - - SDCA is a general training algorithm for (generalized) linear models such as support vector machine, linear regression, logistic regression, - and so on. SDCA binary classification trainer family includes several sealed members: - (1) supports general loss functions and returns . - (2) essentially trains a regularized logistic regression model. Because logistic regression - naturally provide probability output, this generated model's type is . - where is and is . - - - - - Options for . - - - - - The weight to be applied to the positive class. This is useful for training with imbalanced data. - - - Default value is 1, which means no extra weight. - - - - - Initializes a new instance of - - The environment to use. - The label, or dependent variable. - The features, or independent variables. - The custom loss. - The optional example weights. - The L2 regularization hyperparameter. - The L1 regularization hyperparameter. Higher values will tend to lead to more sparse model. - The maximum number of passes to perform over the data. - - - - The for training a binary logistic regression classification model using the stochastic dual coordinate ascent method. - The trained model is calibrated and can produce probability by feeding the output value of the - linear function to a . - - - - - - - - - - - - Options for the as used in - [SdcaLogisticRegression(Options)](xref:Microsoft.ML.StandardTrainersCatalog.SdcaLogisticRegression(Microsoft.ML.BinaryClassificationCatalog.BinaryClassificationTrainers,Microsoft.ML.Trainers.SdcaLogisticRegressionBinaryTrainer.Options)). - - - - - The for training a binary logistic regression classification model using the stochastic dual coordinate ascent method. - - - - - - - - - - - - Options for the . - - - - - The custom loss. - - - If unspecified, will be used. - - - - - The custom loss. - - - If unspecified, will be used. - - - - - Comparing with , - directly outputs a built from - the learned weights and bias without calibration. - - - - - is used to support classical command line tools where model is weakly-typed to - . Please do NOT use it whenever possible. - - - - - Legacy configuration to SDCA in legacy framework. - - - - - Weekly-typed function to create calibrated or uncalibrated predictors. - - - - - The L2 weight for regularization. - - - - - The degree of lock-free parallelism used by SGD. - - - Defaults to automatic depending on data sparseness. Determinism is not guaranteed. - - - - - The convergence tolerance. If the exponential moving average of loss reductions falls below this tolerance, - the algorithm is deemed to have converged and will stop. - - - - - The maximum number of passes through the training dataset. - - - Set to 1 to simulate online learning. - - - - - The initial learning rate used by SGD. - - - - - Determines whether to shuffle data for each training iteration. - - - to shuffle data for each training iteration; otherwise, . - Default is . - - - - - The weight to be applied to the positive class. This is useful for training with imbalanced data. - - - Default value is 1, which means no extra weight. - - - - - Determines the frequency of checking for convergence in terms of number of iterations. - - - Default equals ." - - - - - Initializes a new instance of - - The environment to use. - The name of the feature column. - The name of the label column. - The name of the example weight column. - The maximum number of iterations; set to 1 to simulate online learning. - The initial learning rate used by SGD. - The L2 regularizer constant. - The loss function to use. - - - - Initializes a new instance of - - The environment to use. - Advanced arguments to the algorithm. - Loss function would be minimized. - Set to true if a calibration step should be happen after training. Use false otherwise. - - - - Continues the training of a using an already trained and returns a . - - - - - implements a mechanism to craft a typed model out from linear weights and a bias. - It's used at the end of to finalize the trained model. - Derived classes should implement because different trainers may produce different - types of models. - - Weights of linear model. - Bias of linear model. - A model built upon weights and bias. It can be as simple as a . - - - - A helper function used to create in implementations of . - - - - - The for training logistic regression using a parallel stochastic gradient method. - The trained model is calibrated and can produce probability by feeding the output value of the - linear function to a . - - - - - - - - - - - - Options for the as used in - [SgdCalibrated(Options)](xref:Microsoft.ML.StandardTrainersCatalog.SgdCalibrated(Microsoft.ML.BinaryClassificationCatalog.BinaryClassificationTrainers,Microsoft.ML.Trainers.SgdCalibratedTrainer.Options)). - - - - - Initializes a new instance of - - The environment to use. - Advanced arguments to the algorithm. - - - - Logistic regression's output can naturally be interpreted as probability, so this model has three output columns. - - - - - Given weights and bias trained in , - produces the final calibrated linear model. - - - - - The for training logistic regression using a parallel stochastic gradient method. - - - - - - - - - - - - Options for the as used in - [SgdNonCalibrated(Options)](xref:Microsoft.ML.StandardTrainersCatalog.SgdNonCalibrated(Microsoft.ML.BinaryClassificationCatalog.BinaryClassificationTrainers,Microsoft.ML.Trainers.SgdNonCalibratedTrainer.Options)). - - - - - The loss function to use. Default is . - - - - - Initializes a new instance of - - The environment to use. - Advanced arguments to the algorithm. - - - - is used to support classical command line - tools where model is weakly-typed to . Please do NOT use it - whenever possible. - - - - - Initializes a new instance of - - The environment to use. - Advanced arguments to the algorithm. - - - - leads to logistic regression which naturally supports probability output. For other loss functions, - a calibrator would be added after - finishing its job. Therefore, we always have three output columns in the legacy world. - - - - - - - A component to train an SDCA model. - - - The Entry Point for SDCA multiclass. - - - The Entry Point for the SDCA regressor. - - - - - The to predict a target using a linear multiclass classifier model trained with a coordinate descent method. - Depending on the used loss function, the trained model can be, for example, maximum entropy classifier or multi-class support vector machine. - - - - - - - - - - - - - - - Options for the . - - - - - The custom loss. - - - If unspecified, will be used. - - - - - Internal state of or storage of - a customized loss passed in. cannot set this field because its - loss function is always . In addition, and are - the two fields used to determined the actual loss function inside the training framework of . - - - - - Initializes a new instance of . - - The environment to use. - The label, or dependent variable. - The features, or independent variables. - The optional example weights. - The custom loss. - The L2 regularization hyperparameter. - The L1 regularization hyperparameter. Higher values will tend to lead to more sparse model. - The maximum number of passes to perform over the data. - - - - - - - - - - The to predict a target using a maximum entropy multiclass classifier. - The trained model produces probabilities of classes. - - - - - - - - - - - - for as used in - - - - - - The to predict a target using a linear multiclass classifier. - The trained model produces probabilities of classes. - - - - - - - - - - - - for as used in - . - - - - - Loss function minimized by this trainer. - - - If unspecified, will be used. - - - - - The for training a regression model using the stochastic dual coordinate ascent method. - - - - - - - - - - - - Options for the . - - - - - A custom loss. - - - Defaults to - - - - - A custom loss. - - - Defaults to - - - - - Create the object. - - - - - Initializes a new instance of - - The environment to use. - The label, or dependent variable. - The features, or independent variables. - The optional example weights. - The custom loss. - The L2 regularization hyperparameter. - The L1 regularization hyperparameter. Higher values will tend to lead to more sparse model. - The maximum number of passes to perform over the data. - - - - This is a faulty model parameters that claims to be a . We maintain the class for - now for backwards compatibility of models (assuming there are any), but might consider removing it in the future. - - - - Return the type of prediction task. - - - - Instantiate a model that returns a uniform random probability. - - The host environment. - The random seed. - - - - Load the predictor from the binary format. - - - - - Save the predictor in the binary format. - - - - - - The for predicting a target using a binary classification model. - - - - - - - - - Return the type of prediction task. - - - - Auxiliary information about the trainer in terms of its capabilities - and requirements. - - - - - Initializes PriorTrainer object. - - - - - Trains and returns a . - - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - Model parameters for . - - - - - Instantiates a model that returns the prior probability of the positive class in the training set. - - The host environment. - The probability of the positive class. - - - - Whether data is to be shuffled every epoch. - - - - - This method ensures that the data meets the requirements of this trainer and its - subclasses, injects necessary transforms, and throws if it couldn't meet them. - - The channel - The training examples - Gets the length of weights and bias array. For binary classification and regression, - this is 1. For multi-class classification, this equals the number of classes on the label. - A potentially modified version of - - - - A delegate for functions with gradients. - - The point at which to evaluate the function - The gradient vector, which must be filled in (its initial contents are undefined) - The progress channel provider that can be used to report calculation progress. Can be null. - The value of the function - - - - A delegate for indexed sets of functions with gradients. - - REVIEW: I didn't add an here, since it looks like this code is not actually - accessed from anywhere. Maybe it should go away? - - The index of the function - The point at which to evaluate the function - The gradient vector, which must be filled in (its initial contents are undefined) - The value of the function - - - - Class to aggregate an indexed differentiable function into a single function, in parallel - - - - - Creates a DifferentiableFunctionAggregator - - Indexed function to use - Dimensionality of the function - Max index of the function - Number of threads to use - - - - Evaluate and sum the function over all indices, in parallel - - The point at which to evaluate the function - The gradient vector, which must be filled in (its initial contents are undefined) - Function value - - - - A class for testing the gradient of DifferentiableFunctions, useful for debugging - - - Works by comparing the reported gradient to the numerically computed gradient. - If the gradient is correct, the return value should be small (order of 1e-6). - May have false negatives if extreme values cause the numeric gradient to be off, - for example, if the norm of x is very large, or if the gradient is changing rapidly at x. - - - - - Tests the gradient reported by f. - - function to test - point at which to test - maximum normalized difference between analytic and numeric directional derivative over multiple tests - - - - Tests the gradient reported by f. - - function to test - point at which to test - If false, outputs detailed info. - maximum normalized difference between analytic and numeric directional derivative over multiple tests - - - - The head of the test output - - - - - Tests the gradient using finite differences on each axis (appropriate for small functions) - - - - - - - Tests the gradient using finite differences on each axis in the list - - Function to test - Point at which to test - List of coordinates to test - - - - Tests the gradient reported by . - - Function to test - Point at which to test - Direction to test derivative - Whether to disable output - This is a reusable working buffer for intermediate calculations - This is a reusable working buffer for intermediate calculations - Normalized difference between analytic and numeric directional derivative - - - - Orthant-Wise Limited-memory Quasi-Newton algorithm - for optimization of smooth convex objectives plus L1-regularization - If you use this code for published research, please cite - Galen Andrew and Jianfeng Gao, "Scalable Training of L1-Regularized Log-Linear Models", ICML 2007 - - - - - Create an L1Optimizer with the supplied value of M and termination criterion - - The environment - Number of biases - Weight of L1 regularizer - The number of previous iterations to store - Whether the optimizer will keep its internal state dense - Termination criterion - The flag enforcing the non-negativity constraint - - - - Contains information about the state of the optimizer - - - - - This is the original differentiable function with the injected L1 term. - - - - - Backtracking line search with Armijo-like condition, from Andrew & Gao - - - - - Line search that does not use derivatives - - - - - Finds a local minimum of the function - - Function to minimize - Minimizing value - - - - Delegate for differentiable 1-D functions - - Point to evaluate - Derivative at that point - - - - - Line search that uses derivatives - - - - - Finds a local minimum of the function - - Function to minimize - Value of function at 0 - Derivative of function at 0 - Minimizing value - - - - Cubic interpolation line search - - - - - Gets or sets maximum number of steps. - - - - - Gets or sets the minimum relative size of bounds around solution. - - - - - Gets or sets maximum step size - - - - - Makes a CubicInterpLineSearch - - Maximum number of steps before terminating - - - - Makes a CubicInterpLineSearch - - Minimum relative size of bounds around solution - - - - Cubic interpolation routine from Nocedal and Wright - - first point, with value and derivative - second point, with value and derivative - local minimum of interpolating cubic polynomial - - - - Finds a local minimum of the function - - Function to minimize - Value of function at 0 - Derivative of function at 0 - Minimizing value - - - - Finds local minimum with golden section search. - - - - - Gets or sets maximum number of steps before terminating. - - - - - Gets or sets minimum relative size of bounds around solution. - - - - - Gets or sets maximum step size. - - - - - Makes a new GoldenSectionSearch - - Maximum number of steps before terminating (not including bracketing) - - - - Makes a new GoldenSectionSearch - - Minimum relative size of bounds around solution - - - - Finds a local minimum of the function - - Function to minimize - Value of function at 0 - Derivative of function at 0 - Minimizing value - - - - Finds a local minimum of the function - - Function to minimize - Minimizing value - - - - Finds a local minimum of the function - - Function to minimize - Minimizing value - - - - Backtracking line search with Armijo condition - - - - - Makes a backtracking line search - - Parameter for Armijo condition - - - - Finds a local minimum of the function - - Function to minimize - Value of function at 0 - Derivative of function at 0 - Minimizing value - - - - An object which is used to decide whether to stop optimization. - - - - - Name appropriate for display to the user. - - - - - Determines whether to stop optimization - - the state of the optimizer - a message to be printed (or null for no message) - true iff criterion is met, i.e. optimization should halt - - - - Prepares the ITerminationCriterion for a new round of optimization - - - - - A wrapper for a termination criterion that checks the gradient at a specified interval - - - - - Initializes a new instance of the class. - - The termination criterion - The gradient check interval. - - - - Determines whether to stop optimization - - the state of the optimizer - a message to be printed (or null for no message) - - true iff criterion is met, i.e. optimization should halt - - - - - Prepares the ITerminationCriterion for a new round of optimization - - - - - An abstract partial implementation of ITerminationCriterion for those which do not require resetting - - - - - Determines whether to stop optimization - - the state of the optimizer - a message to be printed (or null for no message) - - true iff criterion is met, i.e. optimization should halt - - - - - Prepares the ITerminationCriterion for a new round of optimization - - - - - Terminates when the geometrically-weighted average improvement falls below the tolerance - - - - - Initializes a new instance of the class. - - The tolerance parameter - The geometric weighting factor. Higher means more heavily weighted toward older values. - Maximum amount of iteration - - - - When criterion drops below this value, optimization is terminated - - - - - Determines whether to stop optimization - - the state of the optimizer - a message to be printed (or null for no message) - - true iff criterion is met, i.e. optimization should halt - - - - - Prepares the ITerminationCriterion for a new round of optimization - - - - - Stops optimization when the average objective improvement over the last - n iterations, normalized by the function value, is small enough. - - - Inappropriate for functions whose optimal value is non-positive, because of normalization - - - - - When criterion drops below this value, optimization is terminated - - - - - Number of previous iterations to store - - - - - Create a MeanRelativeImprovementCriterion - - tolerance level - number of past iterations to average over - Maximum amount of iteration - - - - Returns true if the average objective improvement over the last - n iterations, normalized by the function value, is less than the tolerance - - current state of the optimizer - the current value of the criterion - true if criterion is less than tolerance - - - - String summary of criterion - - summary of criterion - - - - Prepares the ITerminationCriterion for a new round of optimization - - - - - Uses the gradient to determine an upper bound on (relative) distance from the optimum. - - - Works if the objective uses L2 prior (or in general if the hessian H is such - that H > (1 / sigmaSq) * I at all points) - Inappropriate for functions whose optimal value is non-positive, because of normalization - - - - - When criterion drops below this value, optimization is terminated - - - - - Create termination criterion with supplied value of sigmaSq and tolerance - - value of sigmaSq in L2 regularizer - tolerance level - - - - Returns true if the proved bound on the distance from the optimum, - normalized by the function value, is less than the tolerance - - current state of the optimizer - value of criterion - true if criterion is less than tolerance - - - - String summary of criterion - - summary of criterion - - - - Criterion based on the norm of the gradient being small enough - - - Inappropriate for functions whose optimal value is non-positive, because of normalization - - - - - When criterion drops below this value, optimization is terminated - - - - - Create a RelativeNormGradient with the supplied tolerance - - tolerance level - - - - Returns true if the norm of the gradient, divided by the value, is less than the tolerance. - - current state of the optimizer - the current value of the criterion - true iff criterion is less than the tolerance - - - - String summary of criterion - - summary of criterion - - - - Limited-memory BFGS quasi-Newton optimization routine - - - - Based on Nocedal and Wright, "Numerical Optimization, Second Edition" - - - - The host environment to use for reporting progress and exceptions. - - - - - Number of previous iterations to remember for estimate of Hessian. - - - Higher M means better approximation to Newton's method, but uses more memory, - and requires more time to compute direction. The optimal setting of M is problem - specific, depending on such factors as how expensive is function evaluation - compared to choosing the direction, how easily approximable is the function's - Hessian, etc. - M = 15..20 is usually reasonable but if necessary even M=2 is better than - gradient descent - - - - - Gets or sets a bound on the total number of bytes allowed. - If the whole application is using more than this, no more vectors will be allocated. - - - - - Create an optimizer with the supplied value of M and termination criterion - - The host environment - The number of previous iterations to store - Whether the optimizer will keep its internal state dense - Termination criterion, defaults to MeanRelativeImprovement if null - The flag enforcing the non-negativity constraint - - - - A class for exceptions thrown by the optimizer. - - - - - The state of the optimizer when premature convergence happened. - - - - - Contains information about the state of the optimizer - - - - - The dimensionality of the function - - - - - The function being optimized - - - - - The current point being explored - - - - - The gradient at the current point - - - - - The direction of search that led to the current point - - - - - The current function value - - - - - The function value at the last point - - - - - The number of iterations so far - - - - - The number of completed gradient calculations in the current iteration. - - This is updated in derived classes, since they may call Eval at different times. - - - - Whether the optimizer state will keep its internal vectors dense or not. - This being true may lead to reduced load on the garbage collector, at the - cost of possibly higher overall memory utilization. - - - - - Convenience function to construct a working vector of length Dim. - - - - - - An implementation of the line search for the Wolfe conditions, from Nocedal & Wright - - - - - Cubic interpolation routine from Nocedal and Wright - - first point, with value and derivative - second point, with value and derivative - local minimum of interpolating cubic polynomial - - - - Minimize a function using the MeanRelativeImprovement termination criterion with the supplied tolerance level - - The function to minimize - The initial point - Convergence tolerance (smaller means more iterations, closer to exact optimum) - The point at the optimum - The optimum function value - Thrown if successive points are within numeric precision of each other, but termination condition is still unsatisfied. - - - - Minimize a function. - - The function to minimize - The initial point - The point at the optimum - The optimum function value - Thrown if successive points are within numeric precision of each other, but termination condition is still unsatisfied. - - - - Minimize a function using the supplied termination criterion - - The function to minimize - The initial point - termination criterion to use - The point at the optimum - The optimum function value - Thrown if successive points are within numeric precision of each other, but termination condition is still unsatisfied. - - - - This exception is thrown if successive differences between points - reach the limits of numerical stability, but the termination condition - still hasn't been satisfied - - - - - Makes a PrematureConvergenceException with the supplied message - - The OptimizerState when the exception was thrown - message for exception - - - - If true, suppresses all output. - - - - - Delegate for functions that determine whether to terminate search. Called after each update. - - Current iterate - True if search should terminate - - - - Stochastic gradient descent with variations (minibatch, momentum, averaging). - - - - - Size of minibatches - - - - - Momentum parameter - - - - - Base of step size schedule s_t = 1 / (t0 + f(t)) - - - - - Termination criterion - - - - - If true, iterates are averaged - - - - - Gets/Sets rate schedule type - - - - - Gets/Sets maximum number of steps. Set to 0 for no max - - - - - Annealing schedule for learning rate - - - - - r_t = 1 / t0 - - - - - r_t = 1 / (t0 + sqrt(t)) - - - - - r_t = 1 / (t0 + t) - - - - - Creates SGDOptimizer and sets optimization parameters - - Termination criterion - Annealing schedule type for learning rate - If true, all iterates are averaged - Base for learning rate schedule - Average this number of stochastic gradients for each update - Momentum parameter - Maximum number of updates (0 for no max) - - - - Delegate for functions to query stochastic gradient at a point - - Point at which to evaluate - Vector to be filled in with gradient - - - - Minimize the function represented by . - - Stochastic gradients of function to minimize - Initial point - Approximate minimum of - - - - Deterministic gradient descent with line search - - - - - Line search to use. - - - - - Gets/Sets maximum number of steps. Set to 0 for no max. - - - - - Gets/sets termination criterion. - - - - - Gets/sets whether to use nonlinear conjugate gradient. - - - - - Makes a new GDOptimizer with the given optimization parameters - - Termination criterion - Line search to use - Maximum number of updates - Use Cubic interpolation line search or Backtracking line search with Armijo condition - - - - Finds approximate minimum of the function - - Function to minimize - Initial point - Approximate minimum - - - - Terminates the optimization if NA value appears in result or no progress is made. - - - - - Test whether the optimization should terminate. Returns true if x contains NA or +/-Inf or x equals xprev. - - The current value. - The value from the previous iteration. - True if the optimization routine should terminate at this iteration. - - - - Collection of extension methods for , - , and - to create - instances of trainer components. - - - - - Create , which predicts a target using a linear classification model. - Stochastic gradient descent (SGD) is an iterative algorithm that optimizes a differentiable objective function. - - The binary classification catalog trainer object. - The name of the label column, or dependent variable. The column data must be . - The features, or independent variables. The column data must be a known-sized vector of . - The name of the example weight column (optional). - The maximum number of passes through the training dataset; set to 1 to simulate online learning. - The initial learning rate used by SGD. - The L2 weight for regularization. - - - - - - - - - Create with advanced options, which predicts a target using a linear classification model. - Stochastic gradient descent (SGD) is an iterative algorithm that optimizes a differentiable objective function. - - The binary classification catalog trainer object. - Trainer options. - - - - - - - - - Create , which predicts a target using a linear classification model. - Stochastic gradient descent (SGD) is an iterative algorithm that optimizes a differentiable objective function. - - The binary classification catalog trainer object. - The name of the label column, or dependent variable. The column data must be . - The features, or independent variables. The column data must be a known-sized vector of . - The name of the example weight column (optional). - The loss function minimized in the training process. Using, for example, leads to a support vector machine trainer. - The maximum number of passes through the training dataset; set to 1 to simulate online learning. - The initial learning rate used by SGD. - The L2 weight for regularization. - - - - - - - - - Create with advanced options, which predicts a target using a linear classification model. - Stochastic gradient descent (SGD) is an iterative algorithm that optimizes a differentiable objective function. - - The binary classification catalog trainer object. - Trainer options. - /// - - - - - - - - Create , which predicts a target using a linear regression model. - - The regression catalog trainer object. - The name of the label column. The column data must be - The name of the feature column. The column data must be a known-sized vector of - The name of the example weight column (optional). - The loss function minimized in the training process. Using, for example, its default leads to a least square trainer. - The L2 weight for regularization. - The L1 regularization hyperparameter. Higher values will tend to lead to more sparse model. - The maximum number of passes to perform over the data. - - - - - - - - Create with advanced options, which predicts a target using a linear regression model. - - The regression catalog trainer object. - Trainer options. - - - - - - - - Create , which predicts a target using a linear classification model. - - The binary classification catalog trainer object. - The name of the label column. The column data must be . - The name of the feature column. The column data must be a known-sized vector of . - The name of the example weight column (optional). - The L2 weight for regularization. - The L1 regularization hyperparameter. Higher values will tend to lead to more sparse model. - The maximum number of passes to perform over the data. - - - - - - - - Create with advanced options, which predicts a target using a linear classification model. - - The binary classification catalog trainer object. - Trainer options. - - - - - - - - Create , which predicts a target using a linear classification model. - - The binary classification catalog trainer object. - The name of the label column. The column data must be . - The name of the feature column. The column data must be a known-sized vector of . - The name of the example weight column (optional). - The loss function minimized in the training process. Defaults to if not specified. - The L2 weight for regularization. - The L1 regularization hyperparameter. Higher values will tend to lead to more sparse model. - The maximum number of passes to perform over the data. - - - - - - - - Create with advanced options, which predicts a target using a linear classification model trained over boolean label data. - - The binary classification catalog trainer object. - Trainer options. - - - - - - - - Create , which predicts a target using a maximum entropy classification model trained with a coordinate descent method. - - The multiclass classification catalog trainer object. - The name of the label column. The column data must be . - The name of the feature column. The column data must be a known-sized vector of . - The name of the example weight column (optional). - The L2 weight for regularization. - The L1 regularization hyperparameter. Higher values will tend to lead to more sparse model. - The maximum number of passes to perform over the data. - - - - - - - - Create with advanced options, which predicts a target using a maximum entropy classification model trained with a coordinate descent method. - - The multiclass classification catalog trainer object. - Trainer options. - - - - - - - - Create , which predicts a target using a linear multiclass classification model trained with a coordinate descent method. - - The multiclass classification catalog trainer object. - The name of the label column. The column data must be . - The name of the feature column. The column data must be a known-sized vector of . - The name of the example weight column (optional). - The loss function to be minimized. Defaults to if not specified. - The L2 weight for regularization. - The L1 regularization hyperparameter. Higher values will tend to lead to more sparse model. - The maximum number of passes to perform over the data. - - - - - - - - Create with advanced options, which predicts a target using a linear multiclass classification model trained with a coordinate descent method. - - The multiclass classification catalog trainer object. - Trainer options. - - - - - - - - Create an , which predicts a target using a linear binary classification model trained over boolean label data. - - The binary classification catalog trainer object. - The name of the label column. The column data must be . - The name of the feature column. The column data must be a known-sized vector of . - The loss function minimized in the training process. If , would be used and lead to a max-margin averaged perceptron trainer. - The initial learning rate used by SGD. - - to decrease the as iterations progress; otherwise, . - Default is . - - The L2 weight for regularization. - Number of passes through the training dataset. - - - - - - - - - Create an with advanced options, which predicts a target using a linear binary classification model trained over boolean label data. - - The binary classification catalog trainer object. - Trainer options. - - - - - - - - - Create , which predicts a target using a linear regression model. - - The regression catalog trainer object. - The name of the label column. The column data must be . - The name of the feature column. The column data must be a known-sized vector of . - The loss function minimized in the training process. Using, for example, leads to a least square trainer. - The initial learning rate used by SGD. - Decrease learning rate as iterations progress. - The L2 weight for regularization. - The number of passes through the training dataset. - - - - - - - - - Create using advanced options, which predicts a target using a linear regression model. - - The regression catalog trainer object. - Trainer options. - - - - - - - - - Create , which predicts a target using a linear binary classification model trained over boolean label data. - - The binary classification catalog trainer object. - The name of the label column. The column data must be . - The name of the feature column. The column data must be a known-sized vector of . - The name of the example weight column (optional). - Enforce non-negative weights. - The L1 regularization hyperparameter. Higher values will tend to lead to more sparse model. - The L2 weight for regularization. - Memory size for . Low=faster, less accurate. - Threshold for optimizer convergence. - - - - - - - - - Create with advanced options, which predicts a target using a linear binary classification model trained over boolean label data. - - The binary classification catalog trainer object. - Advanced arguments to the algorithm. - - - - - - - - - Create , which predicts a target using a linear regression model. - - The regression catalog trainer object. - The name of the label column. The column data must be . - The name of the feature column. The column data must be a known-sized vector of . - The name of the example weight column (optional). - The L1 regularization hyperparameter. Higher values will tend to lead to more sparse model. - The L2 weight for regularization. - Threshold for optimizer convergence. - Number of previous iterations to remember for estimating the Hessian. Lower values mean faster but less accurate estimates. - Enforce non-negative weights. - - - - - - - - Create using advanced options, which predicts a target using a linear regression model. - - The regression catalog trainer object. - Trainer options. - - - - - - - - Create , which predicts a target using a maximum entropy classification model trained with the L-BFGS method. - - The . - The name of the label column. The column data must be . - The name of the feature column. The column data must be a known-sized vector of . - The name of the example weight column (optional). - Enforce non-negative weights. - The L1 regularization hyperparameter. Higher values will tend to lead to more sparse model. - The L2 weight for regularization. - Memory size for . Low=faster, less accurate. - Threshold for optimizer convergence. - - - - - - - - Create with advanced options, which predicts a target using a maximum entropy classification model trained with the L-BFGS method. - - The . - Advanced arguments to the algorithm. - - - - - - - - Create a , which predicts a multiclass target using a Naive Bayes model - that supports binary feature values. - - The . - The name of the label column. - The name of the feature column. - - - - - - - - Works via the shim interface to extract from the calibrating training - estimator the internal object. Note that this should be a temporary measure, - since the trainers should really be changed to actually work over estimators. - - The exception context. - The estimator out of which we should try to extract the calibrator trainer. - The calibrator trainer. - - - - Create a , which predicts a multiclass target using one-versus-all strategy with - the binary classification estimator specified by . - - - - In one-versus-all strategy, a binary classification algorithm is used to train one classifier for each class, - which distinguishes that class from all other classes. Prediction is then performed by running these binary classifiers, - and choosing the prediction with the highest confidence score. - - - The multiclass classification catalog trainer object. - An instance of a binary used as the base trainer. - The calibrator. If a calibrator is not explicitly provided, it will default to - The name of the label column. - Whether to treat missing labels as having negative labels, instead of keeping them missing. - Number of instances to train the calibrator. - Use probabilities (vs. raw outputs) to identify top-score category. - The type of the model. This type parameter will usually be inferred automatically from . - - - - - - - - Create a , which predicts a multiclass target using pairwise coupling strategy with - the binary classification estimator specified by . - - - - In the Pairwise coupling (PKPD) strategy, a binary classification algorithm is used to train one classifier for each pair of classes. - Prediction is then performed by running these binary classifiers, and computing a score for each class by counting how many of the binary - classifiers predicted it. The prediction is the class with the highest score. - - - The multiclass classification catalog trainer object. - An instance of a binary used as the base trainer. - The calibrator. If a calibrator is not explicitly provided, it will default to - The name of the label column. - Whether to treat missing labels as having negative labels, instead of keeping them missing. - Number of instances to train the calibrator. - The type of the model. This type parameter will usually be inferred automatically from . - - - - - - - - Create , which predicts a target using a linear binary classification model trained - over boolean label data. - - The binary classification catalog trainer object. - The name of the label column. The column data must be . - The name of the feature column. The column data must be a known-sized vector of . - The name of the example weight column (optional). - The number of training iteration. - - - - - - - - Create with advanced options, which predicts a target using a linear binary classification model - trained over boolean label data. - - The binary classification catalog trainer object. - Trainer options. - - - - - - - - Create , which predicts a target using a binary classification model. - - - This trainer uses the proportion of a label in the training set as the probability of that label. - This trainer is often used as a baseline for other more sophisticated mdels. - - The . - The name of the label column. - The name of the example weight column (optional). - - - - - - - - Create with advanced options, which predicts a target using a Local Deep SVM model. - - The . - Trainer options. - - - - - - - - Create , which predicts a target using a Local Deep SVM model. - - The . - The name of the label column. - The name of the feature column. The column data must be a known-sized vector of . - The name of the example weight column (optional). - The number of iterations. - The depth of a Local Deep SVM tree. - Indicates if the model should have a bias term. - Indicates whether we should iterate over the data using a cache. - - - - - - - diff --git a/W/Debug_Folder/Microsoft.ML.Transforms.dll b/W/Debug_Folder/Microsoft.ML.Transforms.dll deleted file mode 100644 index 422672d54..000000000 Binary files a/W/Debug_Folder/Microsoft.ML.Transforms.dll and /dev/null differ diff --git a/W/Debug_Folder/Microsoft.ML.Transforms.xml b/W/Debug_Folder/Microsoft.ML.Transforms.xml deleted file mode 100644 index 361a506f6..000000000 --- a/W/Debug_Folder/Microsoft.ML.Transforms.xml +++ /dev/null @@ -1,7777 +0,0 @@ - - - - Microsoft.ML.Transforms - - - - - Collection of extension methods for to create categorical - transformer components. - - - - - Create a , which converts the input column specified by - into a column of one-hot encoded vectors named . - - The transform catalog. - Name of the column resulting from the transformation of . - This column's data type will be a vector of if is - , , and . - If is , this column's data type will be a key in the case of a scalar input column - or a vector of keys in the case of a vector input column. - Name of column to convert to one-hot vectors. If set to , the value of the - will be used as source. This column's data type can be scalar or vector of numeric, text, boolean, or , - Output kind: Bag (multi-set vector), Indicator (indicator vector), Key (index), or Binary encoded indicator vector. - Maximum number of terms to keep per column when auto-training. - How items should be ordered when vectorized. If - choosen they will be in the order encountered. If , - items are sorted according to their default comparison, for example, text sorting will be case sensitive (for example, 'A' then 'Z' then 'a'). - Specifies an ordering for the encoding. If specified, this should be a single column data view, - and the key-values will be taken from that column. If unspecified, the ordering will be determined from the input data upon fitting. - - - - - - - - Create a , which converts one or more input text columns specified in - into as many columns of one-hot encoded vectors. - - If multiple columns are passed to the estimator, all of the columns will be processed in a single pass over the data. - Therefore, it is more efficient to specify one estimator with many columns than it is to specify many estimators each with a single column. - The transform catalog. - The pairs of input and output columns. The output columns' data type will be a vector of if is - , , and . - If is , the output columns' data type will be a key in the case of scalar input column - or a vector of keys in the case of a vector input column. - Output kind: Bag (multi-set vector), Ind (indicator vector), Key (index), or Binary encoded indicator vector. - Maximum number of terms to keep per column when auto-training. - How items should be ordered when vectorized. If - choosen they will be in the order encountered. If , - items are sorted according to their default comparison, for example, text sorting will be case sensitive (for example, 'A' then 'Z' then 'a'). - Specifies an ordering for the encoding. If specified, this should be a single column data view, - and the key-values will be taken from that column. If unspecified, the ordering will be determined from the input data upon fitting. - - - - - - - - Convert several text column into one-hot encoded vectors. - - The transform catalog - The column settings. - - - - Convert several text column into one-hot encoded vectors. - - The transform catalog - The column settings. - Specifies an ordering for the encoding. If specified, this should be a single column data view, - and the key-values will be taken from that column. If unspecified, the ordering will be determined from the input data upon fitting. - - - - Create a , which converts a text column specified by - into a hash-based one-hot encoded vector column named . - - The transform catalog. - Name of the column resulting from the transformation of . - This column's data type will be a vector of if is - , , and . - If is , this column's data type will be a key in the case of a scalar input column - or a vector of keys in the case of a vector input column. - Name of column to transform. If set to , the value of the will be used as source. - This column's data type can be scalar or vector of numeric, text, boolean, or . - The conversion mode. - Number of bits to hash into. Must be between 1 and 30, inclusive. - Hashing seed. - Whether the position of each term should be included in the hash. - During hashing we constuct mappings between original values and the produced hash values. - Text representation of original values are stored in the slot names of the metadata for the new column.Hashing, as such, can map many initial values to one. - specifies the upper bound of the number of distinct input values mapping to a hash that should be retained. - 0 does not retain any input values. -1 retains all input values mapping to each hash. - - - - - - - - Create a , which converts one or more input text columns specified by - into as many columns of hash-based one-hot encoded vectors. - - If multiple columns are passed to the estimator, all of the columns will be processed in a single pass over the data. - Therefore, it is more efficient to specify one estimator with many columns than it is to specify many estimators each with a single column. - - The transform catalog - The pairs of input and output columns. The output columns' data type will be a vector of if is - , , and . - If is , the output columns' data type will be a key in the case of scalar input column - or a vector of keys in the case of a vector input column. - The conversion mode. - Number of bits to hash into. Must be between 1 and 30, inclusive. - Hashing seed. - Whether the position of each term should be included in the hash. - During hashing we constuct mappings between original values and the produced hash values. - Text representation of original values are stored in the slot names of the metadata for the new column. Hashing, as such, can map many initial values to one. - specifies the upper bound of the number of distinct input values mapping to a hash that should be retained. - 0 does not retain any input values. -1 retains all input values mapping to each hash. - - - - - - - - Convert several text column into hash-based one-hot encoded vectors. - - The transform catalog - The column settings. - - - - Selects the slots for which the count of non-default values is greater than or equal to a threshold. - - - , or [text](xref:Microsoft.ML.Data.TextDataViewType) data types| - | Output column data type | Same as the input column| - | Exportable to ONNX | Yes | - - This transform uses a set of aggregators to count the number of values for each slot (vector element) - that are non-default and non-missing (for the definitions of default and missing, refer to the remarks section - in ). If the count value is less than the provided count parameter, that slot is dropped. - This transform is useful when applied together with a . - It can remove the features generated by the hash transform that have no data in the examples. - - For example, if we set the count parameter to 3 and fit the estimator, apply the transformer to the following Features column, - we would see the second slot, containing: NaN (missing value), 5, 5, 0 (default value) values being dropped because that slot - has only two non-default and non-missing values, i.e. the two 5 values. - The third slot is being kept, because it has the values 6, 6, 6, NaN; so it has 3 non-default and non-missing. - - | Features | - | -- | - |4,NaN,6 | - |4,5,6 | - |4,5,6 | - |4,0,NaN| - - This is how the dataset above would look, after the transformation. - - | Features | - | -- | - |4,6 | - |4,6 | - |4,6 | - |4,NaN| - - Check the See Also section for links to usage examples. - ]]> - - - - - - - Describes how the transformer handles one column pair. - - - - Name of the column resulting from the transformation of . - - - Name of the column to transform. - - - If the count of non-default values for a slot is greater than or equal to this threshold in the training data, the slot is preserved. - - - - Describes the parameters of the feature selection process for a column pair. - - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - If the count of non-default values for a slot is greater than or equal to this threshold in the training data, the slot is preserved. - - - - - Selects the slots for which the count of non-default values is greater than or equal to a threshold. - - - - This transform uses a set of aggregators to count the number of non-default values for each slot and - instantiates a to actually drop the slots. - This transform is useful when applied together with a . - The count feature selection can remove those features generated by the hash transform that have no data in the examples. - - - - The environment to use. - Describes the parameters of the feature selection process for each column pair. - - - - - - - - - - Selects the slots for which the count of non-default values is greater than or equal to a threshold. - - - - This transform uses a set of aggregators to count the number of non-default values for each slot and - instantiates a to actually drop the slots. - This transform is useful when applied together with a . - The count feature selection can remove those features generated by the hash transform that have no data in the examples. - - - - The environment to use. - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - If the count of non-default values for a slot is greater than or equal to this threshold in the training data, the slot is preserved. - - - - - - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - Trains and returns a . - - - - - Create method corresponding to SignatureDataTransform. - - - - - Returns the feature selection scores for each slot of each column. - - The host environment. - The input dataview. - The columns for which to compute the feature selection scores. - Outputs an array containing the vector sizes of the input columns - A list of scores. - - - - Place this attribute onto a type to cause it to be considered a custom mapping factory. - - - - - The base type for custom mapping factories. - - The type that describes what 'source' columns are consumed from the input . - The type that describes what new columns are added by this transform. - - - - Returns the mapping delegate that maps from inputs to outputs. - - - - - The base type for stateful custom mapping factories. - - The type that describes what 'source' columns are consumed from the input . - The type that describes what new columns are added by this transform. - The type that describes the state object the mapping uses. - - - - Returns the mapping delegate that maps from a input and a state object of type , - to a output. - - - - - Returns an action that is called once before the row cursor is initialized, to initialize the state object used by the cursor. - - - - - resulting from fitting an . - - The type that describes what 'source' columns are consumed from the input . - The type that describes what new columns are added by this transform. - - - - Whether a call to should succeed, on an - appropriate schema. - - - - - Create a custom mapping of input columns to output columns. - - The host environment - The action by which we map source to destination columns - The name of the action (will be saved to the model). - Additional parameters for schema mapping between and input data. - Additional parameters for schema mapping between and output data. - - - - Returns the which would be produced by the transformer applied to - an input data with schema . - - - - - Take the data in, make transformations, output the data. - Note that 's are lazy, so no actual transformations happen here, just schema validation. - - - - - Constructs a row-to-row mapper based on an input schema. If - is false, then an exception is thrown. If the is in any way - unsuitable for constructing the mapper, an exception is likewise thrown. - - - - - Applies a custom mapping function to the specified input columns. The result will be in output columns. - - - applies a user defined mapping - to one or more input columns and produces one or more output columns. This transformation doesn't change the number of rows, - and can be seen as the result of applying the user's function to every row of the input data. - - The provided custom function must be thread-safe and free from side effects. - The order with which it is applied to the rows of data cannot be guaranteed. - - Check the See Also section for links to usage examples. - ]]> - - - - - - Create a custom mapping of input columns to output columns. - - The host environment - The mapping action. This must be thread-safe and free from side effects. - The contract name, used by ML.NET for loading the model. If null is specified, such a trained model would not be save-able. - Additional parameters for schema mapping between and input data. - Additional parameters for schema mapping between and output data. - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - Populate the array with the counts for the input key - - - - - Garbage threshold the table is using - - - - - Signature for CountTableBuilder. - - - - - Builds a table that provides counts to the - by going over the training data. - - - - - Create a builder that creates the count table using the count-min sketch structure, which has a smaller memory footprint, - at the expense of some possible overcounting due to collisions. - - The depth of the count-min sketch table. - The width of the count-min sketch table. - - - - Create a builder that creates the count table by building a dictionary containing the exact count of each - categorical feature value. - - The garbage threshold (counts below or equal to the threshold are assigned to the garbage bin). - - - - Transforms a categorical column into a set of features that includes the count of each label class, - the log-odds for each label class and the back-off indicator. - - - . | - - The resulting creates a new column, named as specified in the output column name parameters, - containing three parts: the count of each label class, the log-odds for each label class and the back-off indicator. - - Check the See Also section for links to usage examples. - ]]> - - - - - - - - - - This is a merger of arguments for and - - - - - resulting from fitting a or . - - - - - Transforms a categorical column into a set of features that includes the count of each label class, - the log-odds for each label class and the back-off indicator. - - The transforms catalog. - The input and output columns. - The name of the label column. - The builder that creates the count tables from the training data. - The coefficient with which to apply the prior smoothing to the features. - The Laplacian noise diversity/scale-parameter. Recommended values are between 0 and 1. Note that the noise - will only be applied if the estimator is part of an , when fitting the next estimator in the chain. - Indicates whether to keep counts for all columns and slots in one shared count table. If true, the keys in the count table - will include a hash of the column and slot indices. - The number of bits to hash the input into. Must be between 1 and 31, inclusive. - In case the input is a vector column, indicates whether the values should be combined into a single hash to create a single - count table, or be left as a vector of hashes with multiple count tables. - The seed used for hashing the input columns. - - - - - Transforms a categorical column into a set of features that includes the count of each label class, - the log-odds for each label class and the back-off indicator. - - The transforms catalog. - The input and output columns. - A previously trained count table containing initial counts. - The name of the label column. - - - - - Transforms a categorical column into a set of features that includes the count of each label class, - the log-odds for each label class and the back-off indicator. - - The transforms catalog. - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - The name of the label column. - The builder that creates the count tables from the training data. - The coefficient with which to apply the prior smoothing to the features. - The Laplacian noise diversity/scale-parameter. Recommended values are between 0 and 1. Note that the noise - will only be applied if the estimator is part of an , when fitting the next estimator in the chain. - The number of bits to hash the input into. Must be between 1 and 31, inclusive. - In case the input is a vector column, indicates whether the values should be combined into a single hash to create a single - count table, or be left as a vector of hashes with multiple count tables. - The seed used for hashing the input columns. - - - - Transforms a categorical column into a set of features that includes the count of each label class, - the log-odds for each label class and the back-off indicator. - - The transforms catalog. - Name of the column resulting from the transformation of . - A previously trained count table containing initial counts. - Name of the column to transform. If set to , the value of the will be used as source. - The name of the label column. - - - - - Handles simultaneous counting for multiple columns and slots. Incapsulates the counting strategy: - either keep everything in one big count table, or have a count table per column and slot - - - - - Incapsulates count tables (or one count table) for multiple columns and slots. - Handles (de)serialization and featurization. - - - - - Implements the multi count table builder logic by keeping a count table per column and per slot - - - - - Implements the multi count table builder by creating one count table for everything - - - - - Mixes the column and slot index into the key, and then passes it to the wrapped count table - - - - - Entry points for text anylytics transforms. - - - - - resulting from fitting a . - - - - - Provide details about the topics discovered by LightLDA. - - - - - Method to provide details about the topics discovered by LightLDA - - index of column options pair - - - - - Initializes a new object. - - Host Environment. - An array of LdaState objects, where ldas[i] is learnt from the i-th element of . - A list of mappings, where columnMapping[i] is a map of slot names for the i-th element of . - Describes the parameters of the LDA process for each column pair. - - - - The LDA transform implements LightLDA, a state-of-the-art implementation of Latent Dirichlet Allocation. - - - | - | Output column data type | Vector of | - | Exportable to ONNX | No | - - Latent Dirichlet Allocation is a well-known [topic modeling](https://en.wikipedia.org/wiki/Topic_model) algorithm that infers semantic structure from text data, - and ultimately helps answer the question on "what is this document about?". - It can be used to featurize any text fields as low-dimensional topical vectors. - LightLDA is an extremely efficient implementation of LDA that incorporates a number of - optimization techniques. - With the LDA transform, ML.NET users can train a topic model to produce 1 million topics with 1 million words vocabulary - on a 1-billion-token document set one a single machine in a few hours(typically, LDA at this scale takes days and requires large clusters). - The most significant innovation is a super-efficient $O(1)$. [Metropolis-Hastings sampling algorithm](https://en.wikipedia.org/wiki/Metropolis–Hastings_algorithm), - whose running cost is agnostic of model size, allowing it to converges nearly an order of magnitude faster than other [Gibbs samplers](https://en.wikipedia.org/wiki/Gibbs_sampling). - - In an ML.NET pipeline, this estimator requires the output of some preprocessing, as its input. - A typical pipeline operating on text would require text normalization, tokenization and producing n-grams to supply to the LDA estimator. - See the example usage in the See Also section for usage suggestions. - - If we have the following three examples of text, as data points, and use the LDA transform with the number of topics set to 3, - we would get the results displayed in the table below. Example documents: - * I like to eat bananas. - * I eat bananas everyday. - * First celebrated in 1970, Earth Day now includes events in more than 193 countries, - which are now coordinated globally by the Earth Day Network. - - Notice the similarity in values of the first and second row, compared to the third, - and see how those values are indicative of similarities between those two (small) bodies of text. - - | Topic1 | Topic2 | Topic 3 | - | ------- | ------- | ------- | - | 0.5714 | 0.0000 | 0.4286 | - | 0.5714 | 0.0000 | 0.4286 | - | 0.2400 | 0.3200 | 0.4400 | - - For more technical details you can consult the following papers. - * [LightLDA: Big Topic Models on Modest Computer Clusters](https://arxiv.org/abs/1412.1576) - * [LightLDA](https://github.com/Microsoft/LightLDA) - - Check the See Also section for links to usage examples. - ]]> - - - - - - The environment. - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - The number of topics. - Dirichlet prior on document-topic vectors. - Dirichlet prior on vocab-topic vectors. - Number of Metropolis Hasting step. - Number of iterations. - The number of training threads. Default value depends on number of logical processors. - The threshold of maximum count of tokens per doc. - The number of words to summarize the topic. - Compute log likelihood over local dataset on this iteration interval. - The number of burn-in iterations. - Reset the random number generator for each document. - Whether to output the topic-word summary in text format when saving the model to disk. - - - - The environment. - Describes the parameters of the LDA process for each column pair. - - - - Describes how the transformer handles one column pair. - - - - - Name of the column resulting from the transformation of . - - - - - Name of column to transform. - - - - - The number of topics. - - - - - Dirichlet prior on document-topic vectors. - - - - - Dirichlet prior on vocab-topic vectors. - - - - - Number of Metropolis Hasting step. - - - - - Number of iterations. - - - - - Compute log likelihood over local dataset on this iteration interval. - - - - - The number of training threads. - - - - - The threshold of maximum count of tokens per doc. - - - - - The number of words to summarize the topic. - - - - - The number of burn-in iterations. - - - - - Reset the random number generator for each document. - - - - - Whether to output the topic-word summary in text format when saving the model to disk. - - - - - Describes how the transformer handles one column pair. - - The column containing the output scores over a set of topics, represented as a vector of floats. - The column representing the document as a vector of floats.A null value for the column means is replaced. - The number of topics. - Dirichlet prior on document-topic vectors. - Dirichlet prior on vocab-topic vectors. - Number of Metropolis Hasting step. - Number of iterations. - Compute log likelihood over local dataset on this iteration interval. - The number of training threads. Default value depends on number of logical processors. - The threshold of maximum count of tokens per doc. - The number of words to summarize the topic. - The number of burn-in iterations. - Reset the random number generator for each document. - Whether to output the topic-word summary in text format when saving the model to disk. - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - Trains and returns a . - - - - resulting from fitting a . - - - - Constructor for case where you don't need to 'train' transform on data, for example, MaximumNumberOfInverts for all columns set to zero. - - Host Environment. - Description of dataset columns and how to process them. - - - - for the . - - - | - | Exportable to ONNX | No | - - The resulting creates a new column, named as specified in the output column name parameters, and - produces a vector of n-gram counts (sequences of consecutive words of length 1-n) from a given data. - It does so by hashing each n-gram and using the hash value as the index in the bag. - - is different from - in a way that The former takes tokenized text as input while the latter tokenizes text internally. - - Check the See Also section for links to usage examples. - ]]> - - - - - - - Describes how the transformer handles one pair of mulitple inputs - singular output columns. - - - - Name of the column resulting from the transformation of . - - - Names of the columns to transform. - - - Maximum n-gram length. - - - Maximum number of tokens to skip when constructing an n-gram. - - - Whether to store all n-gram lengths up to , or only . - - - Number of bits to hash into. Must be between 1 and 31, inclusive. - - - Hashing seed. - - - Whether the position of each term should be included in the hash. - - - - During hashing we constuct mappings between original values and the produced hash values. - Text representation of original values are stored in the slot names of the metadata for the new column. - Hashing, as such, can map many initial values to one. - specifies the upper bound of the number of distinct input values mapping to a hash that should be retained. - 0 does not retain any input values. -1 retains all input values mapping to each hash. - - - - Whether to rehash unigrams. - - - - Describes how the transformer maps several input columns, , to a output column, . - - Name of the column resulting from the transformation of . - Names of the columns to transform. - Maximum n-gram length. - Maximum number of tokens to skip when constructing an n-gram. - Whether to store all n-gram lengths up to , or only . - Number of bits to hash into. Must be between 1 and 31, inclusive. - Hashing seed. - Whether the position of each term should be included in the hash. - During hashing we constuct mappings between original values and the produced hash values. - Text representation of original values are stored in the slot names of the metadata for the new column. - Hashing, as such, can map many initial values to one. - specifies the upper bound of the number of distinct input values mapping to a hash that should be retained. - 0 does not retain any input values. -1 retains all input values mapping to each hash. - Whether to rehash unigrams. - - - - Produces a bag of counts of hashed n-grams in - and outputs n-gram vector as - - is different from in a way that - takes tokenized text as input while tokenizes text internally. - - The environment. - Name of output column, will contain the n-gram vector. Null means is replaced. - Name of input column containing tokenized text. - Number of bits to hash into. Must be between 1 and 30, inclusive. - Ngram length. - Maximum number of tokens to skip when constructing an n-gram. - Whether to include all n-gram lengths up to or only . - Hashing seed. - Whether the position of each source column should be included in the hash (when there are multiple source columns). - During hashing we constuct mappings between original values and the produced hash values. - Text representation of original values are stored in the slot names of the metadata for the new column.Hashing, as such, can map many initial values to one. - specifies the upper bound of the number of distinct input values mapping to a hash that should be retained. - 0 does not retain any input values. -1 retains all input values mapping to each hash. - - - - Produces a bag of counts of hashed n-grams in - and outputs n-gram vector as - - is different from in a way that - takes tokenized text as input while tokenizes text internally. - - The environment. - Name of output column, will contain the n-gram vector. - Name of input columns containing tokenized text. - Number of bits to hash into. Must be between 1 and 30, inclusive. - Ngram length. - Maximum number of tokens to skip when constructing an n-gram. - Whether to include all n-gram lengths up to or only . - Hashing seed. - Whether the position of each source column should be included in the hash (when there are multiple source columns). - During hashing we constuct mappings between original values and the produced hash values. - Text representation of original values are stored in the slot names of the metadata for the new column.Hashing, as such, can map many initial values to one. - specifies the upper bound of the number of distinct input values mapping to a hash that should be retained. - 0 does not retain any input values. -1 retains all input values mapping to each hash. - - - - Produces a bag of counts of hashed n-grams in - and outputs n-gram vector for each output in - - is different from in a way that - takes tokenized text as input while tokenizes text internally. - - The environment. - Array of columns which specifies the behavior of the transformation. - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - Trains and returns a . - - - - - resulting from fitting an . - - - - - Produces a vector of counts of n-grams (sequences of consecutive words) encountered in the input text. - - - | - | Exportable to ONNX | Yes | - - The resulting - creates a new column, named as specified in the output column name parameters, where each - input vector is mapped to a vector of counts of n-grams (sequences of consecutive words) encountered in the input text. - - The estimator builds a dictionary of n-grams and the - uses the id in the dictionary as the index in the count vector that it produces. - - Check the See Also section for links to usage examples. - ]]> - - - - - - A statistical measure used to evaluate how important a word is to a document in a corpus. - This enumeration is serialized. - - - - Term Frequency. Calculated based on the number of occurrences in the document. - - - - Inverse Document Frequency. A ratio (the logarithm of inverse relative frequency) - that measures the information a slot provides by determining how common or rare it is across the entire corpus. - - - - The product of the term frequency and the inverse document frequency. - - - - Produces a bag of counts of n-grams (sequences of consecutive words) in - and outputs bag of word vector as - - The environment. - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - Ngram length. - Maximum number of tokens to skip when constructing an n-gram. - Whether to include all n-gram lengths up to or only . - Maximum number of n-grams to store in the dictionary. - Statistical measure used to evaluate how important a word is to a document in a corpus. - - - - Produces a bag of counts of n-grams (sequences of consecutive words) in - and outputs bag of word vector for each output in - - The environment. - Pairs of columns to compute bag of word vector. - Ngram length. - Maximum number of tokens to skip when constructing an n-gram. - Whether to include all n-gram lengths up to or only . - Maximum number of n-grams to store in the dictionary. - Statistical measure used to evaluate how important a word is to a document in a corpus. - - - - Produces a bag of counts of n-grams (sequences of consecutive words) in - and outputs bag of word vector for each output in - - The environment. - Array of columns with information how to transform data. - - - - Trains and returns a . - - - - - Describes how the transformer handles one column pair. - - - - Name of the column resulting from the transformation of . - - - Name of column to transform. - - - Maximum n-gram length. - - - Maximum number of tokens to skip when constructing an n-gram. - - - Whether to store all n-gram lengths up to ngramLength, or only ngramLength. - - - The weighting criteria. - - - - Underlying state of . - - - - - Contains the maximum number of terms (that is, n-grams) to store in the dictionary, for each level of n-grams, - from n=1 (in position 0) up to n= (in position -1) - - - - - Describes how the transformer handles one Gcn column pair. - - Name of the column resulting from the transformation of . - Name of column to transform. If set to , the value of the will be used as source. - Maximum n-gram length. - Maximum number of tokens to skip when constructing an n-gram. - Whether to store all n-gram lengths up to ngramLength, or only ngramLength. - The weighting criteria. - Maximum number of n-grams to store in the dictionary. - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - Uses a pretrained sentiment model to score input strings. - - The Sentiment transform returns the probability that the sentiment of a natural text is positive. - - The model was trained with the Sentiment-specific word embedding (SSWE) and NGramFeaturizer on Twitter sentiment data, - similarly to the sentiment analysis part of the - Text Analytics cognitive service. - The transform outputs a score between 0 and 1 as a sentiment prediction - (where 0 is a negative sentiment and 1 is a positive sentiment). - Currently it supports only English. - - - - - If any column names in are present in , this - method will create a transform that copies them to temporary columns. It will populate - with an array of string pairs containing the original name and the generated temporary column name, respectively. - - - - - - resulting from fitting a . - - - - - Defines the behavior of the transformer. - - - - - Stopword remover removes language-specific list of stop words (most common words). - - The environment. - Pairs of columns to remove stop words from. - - - - for the . - - - creates a new column, named as specified in the output column name parameter, - and fills it with a vector of words containing all of the words in the input column **except the predefined list of stopwords for the specified language. - All text comparison made by casting predefined text and text from input column to lower case using casing rules of invariant culture. - - Check the See Also section for links to usage examples. - ]]> - - - - - - - Use stop words remover that can remove language-specific list of stop words (most common words) already defined in the system. - - - - - Language of the text dataset. 'English' is default. - - - - - Describes how the transformer handles one column pair. - - - - Name of the column resulting from the transformation of . - - - Name of the column to transform. - - - Language-specific stop words list. - - - Optional column to use for languages. This overrides language value. - - - - Describes how the transformer handles one column pair. - - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - Language-specific stop words list. - Optional column to use for languages. This overrides language value. - - - - Stopwords language. This enumeration is serialized. - - - - - Removes stop words from incoming token streams in - and outputs the token streams without stopwords as . - - The environment. - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - Langauge of the input text column . - - - - Removes stop words from incoming token streams in input columns - and outputs the token streams without stop words as output columns. - - The environment. - Pairs of columns to remove stop words on. - Langauge of the input text columns . - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - resulting from fitting a . - - - - - The names of the input output column pairs on which this transformation is applied. - - - - - Custom stopword remover removes specified list of stop words. - - The environment. - Array of words to remove. - Pairs of columns to remove stop words from. - - - - for the . - - - creates a new column, named as specified by the output column name parameter, and - fills it with a vector of words containing all of the words in the input column except those given by the stopwords parameter. - All text comparison made by casting provided words and words from input column to lower case using casing rules of invariant culture. - - Check the See Also section for links to usage examples. - ]]> - - - - - - - Use stop words remover that can removes language-specific list of stop words (most common words) already defined in the system. - - - - - List of stop words to remove. - - - - - Removes stop words from incoming token streams in - and outputs the token streams without stopwords as . - - The environment. - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - Array of words to remove. - - - - Removes stop words from incoming token streams in input columns - and outputs the token streams without stop words as output columns. - - The environment. - Pairs of columns to remove stop words on. - Array of words to remove. - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - Defines the different type of stop words remover supported. - - - - - An estimator that turns a collection of text documents into numerical feature vectors. - The feature vectors are normalized counts of word and/or character n-grams (based on the options supplied). - - - | - | Exportable to ONNX | No | - - This estimator gives the user one-stop solution for doing: - * Language Detection - * [Tokenization](https://en.wikipedia.org/wiki/Lexical_analysis#Tokenization) - * [Text normalization](https://en.wikipedia.org/wiki/Text_normalization) - * [Predefined and custom stopwords removal](https://en.wikipedia.org/wiki/Stop_words) - * [Word-based or character-based Ngram extraction and SkipGram extraction (through the advanced [options](xref:Microsoft.ML.Transforms.TextFeaturizingEstimator.Options.WordFeatureExtractor))](https://en.wikipedia.org/wiki/N-gram) - * [TF, IDF or TF-IDF](https://en.wikipedia.org/wiki/Tf%E2%80%93idf) - * [L-p vector normalization](xref: Microsoft.ML.Transforms.LpNormNormalizingTransformer) - - By default the features are made of (word/character) n-grams/skip-grams​ and the number of features are equal to the vocabulary size found by analyzing the data. - To output an additional column with the tokens generated, use [OutputTokensColumnName](xref:Microsoft.ML.Transforms.Text.TextFeaturizingEstimator.Options.OutputTokensColumnName). - The number of features can also be specified by selecting the maximum number of n-gram to keep in the , where the estimator can be further tuned. - - Check the See Also section for links to usage examples. - ]]> - - - - - - - Text language. This enumeration is serialized. - - - - - Text vector normalizer kind. - - - - - Use this to disable normalization. - - - - - L1-norm. - - - - - L2-norm. - - - - - Infinity-norm. - - - - - Advanced options for the . - - - - - The underlying state of and . - - - - - Option to set type of stop word remover to use. - The following options are available - - - The removes the language specific list of stop words from the input. - - - The uses user provided list of stop words. - - - Setting this to 'null' does not remove stop words from the input. - - - - - The underlying state of and . - - - - - Norm of the output vector. It will be normalized to one. - - - - - Ngram feature extractor to use for words (WordBag/WordHashBag). - Set to to turn off n-gram generation for words. - - - - - The underlying state of and - - - - - Ngram feature extractor to use for characters (WordBag/WordHashBag). - Set to to turn off n-gram generation for characters. - - - - - A distilled version of the TextFeaturizingEstimator Arguments, with all fields marked readonly and - only the exact set of information needed to construct the transforms preserved. - - - - - Trains and returns a . - - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - resulting from fitting a . - - - - - The names of the output and input column pairs on which the transformation is applied. - - - - - Whether a character is a combining diacritic character or not. - Combining diacritic characters are the set of diacritics intended to modify other characters. - The list is provided by Office NL team. - - - - - for the . - - - creates a new column, named as specified - in the output column name parameters, and normalizes the textual input data by changing case, removing diacritical marks, - punctuation marks and/or numbers. - - Check the See Also section for links to usage examples. - ]]> - - - - - - - Case normalization mode of text. This enumeration is serialized. - - - - - Make the output characters lowercased. - - - - - Make the output characters uppercased. - - - - - Do not change the case of output characters. - - - - - Normalizes incoming text in by changing case, removing diacritical marks, punctuation marks and/or numbers - and outputs new text as . - - The environment. - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - Casing text using the rules of the invariant culture. - Whether to keep diacritical marks or remove them. - Whether to keep punctuation marks or remove them. - Whether to keep numbers or remove them. - - - - Normalizes incoming text in input columns by changing case, removing diacritical marks, punctuation marks and/or numbers - and outputs new text as output columns. - - The environment. - Casing text using the rules of the invariant culture. - Whether to keep diacritical marks or remove them. - Whether to keep punctuation marks or remove them. - Whether to keep numbers or remove them. - Pairs of columns to run the text normalization on. - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - resulting from fitting a . - - - - - Tokenize incoming text in input columns and output the tokens as output columns. - - The environment. - Whether to prepend a marker character, , to the beginning, - and append another marker character, , to the end of the output vector of characters. - Pairs of columns to run the tokenization on. - - - - The names of the output and input column pairs on which the transformation is applied. - - - - - Get the key values (chars) corresponding to keys in the output columns. - - - - - for the . - - - resulting from fitting the estimator - creates a new column, named as specified in the output column name parameters, which contains the keys of the - sequences of characters that were encountered in the input. - - Check the See Also section for links to usage examples. - ]]> - - - - - - - Tokenize incoming text in and output the tokens as . - - The environment. - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - Whether to prepend a marker character, , to the beginning, - and append another marker character, , to the end of the output vector of characters. - - - - Tokenize incoming text in input columns and output the tokens as output columns. - - The environment. - Whether to prepend a marker character, , to the beginning, - and append another marker character, , to the end of the output vector of characters. - Pairs of columns to run the tokenization on. - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - Signature for creating an INgramExtractorFactory. - - - - - A many-to-one column common to both - and . - - - - - Factory method for SignatureLoadModel. - - - - - Factory method for SignatureLoadRowMapper. - - - - - Factory method for SignatureLoadDataTransform. - - - - - A transform that turns a collection of tokenized text (vector of ReadOnlyMemory), or vectors of keys into numerical - feature vectors. The feature vectors are counts of n-grams (sequences of consecutive *tokens* -words or keys- - of length 1-n). - - - - - This class is a merger of and - , with the allLength option removed. - - - - - Arguments for defining custom list of terms or data file containing the terms. - The class includes a subset of 's arguments. - - - - - An n-gram extractor factory interface to create an n-gram extractor transform. - - - - - Whether the extractor transform created by this factory uses the hashing trick - (by using or , for example). - - - - - An implementation of to create . - - - - - An implementation of to create . - - - - - Generates and returns unique names for columns source. Each element of the returned array is - an array of unique source names per specific column. - - - - - resulting from fitting an . - - - - - Instantiates using the pretrained word embedding model specified by . - - Host Environment. - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - The pretrained word embedding model. - - - - Instantiates using the custom word embedding model by loading it from the file specified by the . - - Host Environment. - Name of the column resulting from the transformation of . - Filename for custom word embedding model. - Name of the column to transform. If set to , the value of the will be used as source. - - - - Instantiates using the pretrained word embedding model specified by . - - Host Environment. - The pretrained word embedding model. - Input/Output columns. - - - - Instantiates using the custom word embedding model by loading it from the file specified by the . - - Host Environment. - Filename for custom word embedding model. - Input/Output columns. - - - - Text featurizer which converts vectors of text tokens into a numerical vector using a pre-trained embeddings model. - - - | - | Exportable to ONNX | No | - - The produces a new column, - named as specified in the output column name parameters, where each input vector is mapped to a numerical vector - with size of 3 * dimensionality of the embedding model used. Notice that this is independent of the size of the input vector. - - For example, when using GloVe50D, which itself is 50 dimensional, the output column is a vector of size 150. - The first third of slots contains the minimum values across the embeddings corresponding to each string in the input vector. - The second third contains the average of the embeddings. The last third of slots contains maximum values - of the encountered embeddings. The min/max provides a bounding hyper-rectangle for the words in the word embedding space. - This can assist for longer phrases where the average of many words drowns out the useful signal. - - The user can specify a custom pre-trained embeddings model or one of the available pre-trained models. - The available options are various versions of [GloVe Models](https://nlp.stanford.edu/projects/glove/), - [FastText](https://en.wikipedia.org/wiki/FastText), and [SSWE](https://anthology.aclweb.org/P/P14/P14-1146.pdf). - - Check the See Also section for links to usage examples. - ]]> - - - - - - - Extracts word embeddings. - Output three times more values than dimension of the model specified in - First set of values represent minumum encountered values (for each dimension), second set represent average (for each dimension) - and third one represent maximum encountered values (for each dimension). - - The local instance of - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - The embeddings to use. - - - - Extracts word embeddings. - Output three times more values than dimension of the model specified in - First set of values represent minimum encountered values (for each dimension), second set represent average (for each dimension) - and third one represent maximum encountered values (for each dimension). - - The local instance of - Name of the column resulting from the transformation of . - The path of the pre-trained embeddings model to use. - Name of the column to transform. - - - - Extracts word embeddings. - Output three times more values than dimension of the model specified in - First set of values represent minimum encountered values (for each dimension), second set represent average (for each dimension) - and third one represent maximum encountered values (for each dimension). - - The local instance of - The embeddings to use. - The array columns, and per-column configurations to extract embeddings from. - - - - Specifies which word embeddings to use. - - - - - GloVe 50 dimensional word embeddings. - - - - - GloVe 100 dimensional word embeddings. - - - - - GloVe 200 dimensional word embeddings. - - - - - GloVe 300 dimensional word embeddings. - - - - - GloVe 25 dimensional word embeddings trained on Twitter data. - - - - - GloVe 50 dimensional word embeddings trained on Twitter data. - - - - - GloVe 100 dimensional word embeddings trained on Twitter data. - - - - - GloVe 200 dimensional word embeddings trained on Twitter data. - - - - - FastText 300 dimensional word embeddings trained on Wikipedia. - - - - - Word embeddings trained on sentiment analysis tasks. - - - - - Information for each column pair. - - - - - Name of the column resulting from the transformation of . - - - - - Name of column to transform. - - - - - Describes how the transformer handles one column pair. - - Name of the column resulting from the transformation of . - Name of column to transform. If set to will be used as source. - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - Trains and returns a . - - - - - A transform that turns a collection of tokenized text (vector of ReadOnlyMemory) into numerical feature vectors - using the hashing trick. - - - - - This class is a merger of and - , with the ordered option, - the rehashUnigrams option and the allLength option removed. - - - - - resulting from fitting an . - - - - - Tokenizes input text using specified delimiters. - - - creates a new column, - named as specified in the output column name parameters, where each input string is mapped to a vector of substrings obtained - by splitting the input string according to the user defined delimiters. The space character is the default delimiter. - - Empty strings and strings containing only spaces are dropped. - - Check the See Also section for links to usage examples. - ]]> - - - - - - Tokenize incoming text in and output the tokens as . - - The environment. - Name of the column resulting from the transformation of . - The output column is of type variable vector of string. - Name of the column to transform. If set to , the value of the will be used as source. - This column should be of type string. - The separators to use (uses space character by default). - - - - Tokenize incoming text in input columns and output the tokens. - - The environment. - Pairs of columns to run the tokenization on. - The separators to use (uses space character by default). - - - - Tokenize incoming text in input columns and output the tokens. - - The environment. - Pairs of columns to run the tokenization on. - - - - Output column name that will be used to store the tokenization result of column. - - - - - Input column name that will be tokenized into words. - - - - - Seperator list used to tokenize input string. If not specified, space will be used. - - - - - State of . Since [] is multable, it's not safe to directly expose this field to users. - - - - - Describes how the transformer handles one column pair. - - Name of the column resulting from the transformation of . - Name of column to transform. If set to , the value of the will be used as source. - Casing text using the rules of the invariant culture. If not specified, space will be used as separator. - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - for the . - - - | - | Exportable to ONNX | Yes | - - The resulting creates a new column, named as specified in the output column name parameters, and - produces a vector of n-gram counts (sequences of n consecutive words) from a given data. - It does so by building a dictionary of n-grams and using the id in the dictionary as the index in the bag. - - is different from - in that the former takes tokenizes text internally while the latter takes tokenized text as input. - - Check the See Also section for links to usage examples. - ]]> - - - - - - - - Options for how the n-grams are extracted. - - - - - Maximum n-gram length. - - - - - Maximum number of tokens to skip when constructing an n-gram. - - - - - Whether to store all n-gram lengths up to ngramLength, or only ngramLength. - - - - - The maximum number of grams to store in the dictionary, for each level of n-grams, - from 1 (in position 0) up to ngramLength (in position ngramLength-1) - - - - - The weighting criteria. - - - - - Produces a bag of counts of n-grams (sequences of consecutive words) in - and outputs bag of word vector as - - The environment. - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - Ngram length. - Maximum number of tokens to skip when constructing an n-gram. - Whether to include all n-gram lengths up to or only . - Maximum number of n-grams to store in the dictionary. - Statistical measure used to evaluate how important a word is to a document in a corpus. - Separator used to separate terms/frequency pairs. - Separator used to separate terms from their frequency. - - - - Produces a bag of counts of n-grams (sequences of consecutive words) in - and outputs bag of word vector as - - The environment. - The column containing output tokens. - The columns containing text to compute bag of word vector. - Ngram length. - Maximum number of tokens to skip when constructing an n-gram. - Whether to include all n-gram lengths up to or only . - Maximum number of n-grams to store in the dictionary. - Statistical measure used to evaluate how important a word is to a document in a corpus. - Separator used to separate terms/frequency pairs. - Separator used to separate terms from their frequency. - - - - Produces a bag of counts of n-grams (sequences of consecutive words) in - and outputs bag of word vector for each output in - - The environment. - Pairs of columns to compute bag of word vector. - Ngram length. - Maximum number of tokens to skip when constructing an n-gram. - Whether to include all n-gram lengths up to or only . - Maximum number of n-grams to store in the dictionary. - Statistical measure used to evaluate how important a word is to a document in a corpus. - Separator used to separate terms/frequency pairs. - Separator used to separate terms from their frequency. - - - Trains and returns a . - - - - Schema propagation for estimators. - Returns the output schema shape of the estimator, if the input schema shape is like the one provided. - - - - - for the . - - - | - | Exportable to ONNX | No | - - The resulting creates a new column, named as specified in the output column name parameters, and - produces a vector of n-gram counts (sequences of n consecutive words) from a given data. - It does so by hashing each n-gram and using the hash value as the index in the bag. - - is different from - in that the former takes tokenizes text internally while the latter takes tokenized text as input. - - Check the See Also section for links to usage examples. - ]]> - - - - - - - - Produces a bag of counts of hashed n-grams in - and outputs bag of word vector as - - The environment. - The column containing bag of word vector. Null means is replaced. - The column containing text to compute bag of word vector. - Number of bits to hash into. Must be between 1 and 30, inclusive. - Ngram length. - Maximum number of tokens to skip when constructing an n-gram. - Whether to include all n-gram lengths up to or only . - Hashing seed. - Whether the position of each source column should be included in the hash (when there are multiple source columns). - During hashing we construct mappings between original values and the produced hash values. - Text representation of original values are stored in the slot names of the annotations for the new column.Hashing, as such, can map many initial values to one. - specifies the upper bound of the number of distinct input values mapping to a hash that should be retained. - 0 does not retain any input values. -1 retains all input values mapping to each hash. - - - - Produces a bag of counts of hashed n-grams in - and outputs bag of word vector as - - The environment. - The column containing output tokens. - The columns containing text to compute bag of word vector. - Number of bits to hash into. Must be between 1 and 30, inclusive. - Ngram length. - Maximum number of tokens to skip when constructing an n-gram. - Whether to include all n-gram lengths up to or only . - Hashing seed. - Whether the position of each source column should be included in the hash (when there are multiple source columns). - During hashing we constuct mappings between original values and the produced hash values. - Text representation of original values are stored in the slot names of the metadata for the new column.Hashing, as such, can map many initial values to one. - specifies the upper bound of the number of distinct input values mapping to a hash that should be retained. - 0 does not retain any input values. -1 retains all input values mapping to each hash. - - - - Produces a bag of counts of hashed n-grams in - and outputs bag of word vector for each output in - - The environment. - Pairs of columns to compute bag of word vector. - Number of bits to hash into. Must be between 1 and 30, inclusive. - Ngram length. - Maximum number of tokens to skip when constructing an n-gram. - Whether to include all n-gram lengths up to or only . - Hashing seed. - Whether the position of each source column should be included in the hash (when there are multiple source columns). - During hashing we constuct mappings between original values and the produced hash values. - Text representation of original values are stored in the slot names of the metadata for the new column.Hashing, as such, can map many initial values to one. - specifies the upper bound of the number of distinct input values mapping to a hash that should be retained. - 0 does not retain any input values. -1 retains all input values mapping to each hash. - - - Trains and returns a . - - - - Schema propagation for estimators. - Returns the output schema shape of the estimator, if the input schema shape is like the one provided. - - - - - This estimator applies a user provided expression (specified as a string) to input column values to produce new output column values. - - - - - - - - Name of the column resulting from the transformation of . - - - - Returns whether the given object is non-null and an NA value for one of the standard types. - - - - - Returns the standard NA value for the given standard type. - - - - - Helper method to bundle one or more MethodInfos into an array. - - - - - Returns the MethodInfo for the given delegate. - - - - - Returns the MethodInfo for the given delegate. - - - - - Returns the MethodInfo for the given delegate. - - - - - Returns the MethodInfo for the given delegate. - - - - - The standard builtin functions for ExprTransform. - - - - - Returns the MethodInfo for - - - - - Given an index meant to index into a given sequence normalize it according to - these rules: negative indices get added to them, and - then the index is clamped the range 0 to inclusive, - and that result is returned. (For those familiar with Python, this is the same - as the logic for slice normalization.) - - The index to normalize - The length of the sequence - The normalized version of the index, a non-positive value no greater - than . - - - - Raise a to the b power. Special cases: - * a^(negative value) => 0 - * In case of overflow, return I4.MinValue or I4.MaxValue, based on whether the result would have been - negative or positive. - - - - - Raise a to the b power. Special cases: - * a^(negative value) => 0 - * In case of overflow, return I8.MinValue or I8.MaxValue, based on whether the result would have been - negative or positive. - - - - - The IL local containing the computed value. - - - - - The boolean local indicating whether the value has been computed yet. - If the value is pre-computed, this is null. - - - - - Get the raw bits from an expression node. If the node is constant, this avoids the - silly "convert to dv type" followed by "extract raw bits". Returns whether the expression - is a constant NA, with null meaning "don't know". - - - - - Generate code to branch to labNa if the top stack element is NA. - Note that this leaves the element on the stack (duplicates before comparing). - If rev is true, this branches when NOT NA. - - - - - Generate code to branch to labNa if the top stack element is NA. - If dup is true, this leaves the element on the stack (duplicates before comparing). - If rev is true, this branches when NOT NA. - - - - - Generate a bool from comparing the raw bits. The values are guaranteed to not be NA. - - - - - Generate a bool from comparing the raw bits. The values are guaranteed to not be NA. - - - - - Generate a bool from comparing the raw bits. The values are guaranteed to not be NA. - - - - - This class contains static helper methods needed for execution. - - - - - Currently this class is not intended to be instantiated. However the methods generated - by ExprTransform need to be associated with some public type. This one serves that - purpose as well as containing static helpers. - - - - - This interface enables extending the ExprTransform language with additional functions. - - - - - The namespace for this provider. This should be a legal identifier in the expression language. - Multiple providers may contribute to the same namespace. - - - - - Returns an array of overloads for the given function name. This may return null instead of an - empty array. The returned MethodInfos should be public static methods that can be freely invoked - by IL in a different assembly. They should also be "pure" functions - with the output only - depending on the inputs and NOT on any global state. - - - - - If the function's value can be determined by the given subset of its arguments, this should - return the resulting value. Note that this should only be called if values is non-empty and - contains at least one null. If all the arguments are non-null, then the MethodInfo will be - invoked to produce the value. - - The name of the function. - The MethodInfo provided by Lookup. When there are multiple overloads of - a function with a given name, this can be used to determine which overload is being used. - The values of the input arguments, with null for the non-constant arguments. This should - only be called if there is at least one null. - The constant value, when it can be determined; null otherwise. - - - - Helper extension methods for using ILGenerator. - Rather than typing out something like: - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldarg_1); - il.Emit(OpCodes.Ldc_I4, i); - il.Emit(OpCodes.Ldelem_Ref); - il.Emit(OpCodes.Stfld, literalFields[i]); - You can do: - il - .Ldarg(0) - .Ldarg(1) - .Ldc_I4(i) - .Ldelem_Ref() - .Stfld(literalFields[i]); - It also provides some type safety over the Emit methods by ensuring - that you don't pass any args when using Add or that you only - pass a Label when using Br. - - - - - Maps from normalized string to keyword token kind. A lexer must be provided with one of these. - - - - - Run Lambda binder on LambdaNode and populate Expr values. - The errors contain list of user errors that occurred during binding. - The printError delegate is only used for reporting issues with function provider implementations, which are programmer errors. - In particular, it is NOT used to report user errors in the lambda expression. - - - - - Reconcile the types of the two ExprNodes. Favor numeric types in cases - where the types can't be reconciled. This does not guarantee that - the resulting kind is numeric, eg, if both a and b are of type Text, it - simply sets kind to Text. - - - - - Returns whether this candidate is applicable to the given argument types. - - - - - Returns -1 if 'this' is better than 'other', 0 if they are the same, +1 otherwise. - Non-variable is always better than variable. When both are variable, longer prefix is - better than shorter prefix. - - - - - Returns whether the given source type can be converted to the given destination type, - for the purposes of function invocation. Returns true if src is null and dst is any - valid type. - - - - - Convert the given ExprNode to the given type and get its value, when constant. - - - - - Multiple applicable candidates; pick the best one. We use a simplification of - C#'s rules, only considering the types TX, BL, I4, I8, R4, R8. Basically, parameter - type X is better than parameter type Y if X can be converted to Y. The conversions are: - I4 => I8, I4 => R4, I4 => R8, I8 => R8, R4 => R8. - - - - - Maps numeric type kinds to an index 0,1,2,3. All others map to -1. - - - - - Indicates which lex routine should be called when this character is the first - character of a token. Each character is associated with exactly one of these values. - Some associations may at first be surprising. For example, dot (.) uses NumLit and - slash (/) uses Comment. - - - - - Encapsulates information needed to map characters to tokens. - - - - - Bit masks of the UnicodeCategory enum. A couple extra values are defined - for convenience for the C# lexical grammar. - - - - - Indicates the different roles a character may have (as non-leading character). This is used for - subsequent (not first) characters in a token. For example, digits all have the Ident flag set. - - - - - Information for each character. We have a table of these for all characters less than 0x80. - - - - - Returns the lexical character type of the given character. - - - - - Convert the given uint to a unicode escape. - Note that the uint contains raw hex - not a surrogate pair. - - - - - The lexer. This is effectively a template. Call LexSource to get an Enumerable of tokens. - - - - - The constructor. Caller must provide the name pool and key word table. - - - - - Whether we've hit the end of input yet. If this returns true, ChCur will be zero. - - - - - The current character. Zero if we've hit the end of input. - - - - - Advance to the next character and return it. - - - - - Marks the beginning of the current token. - - - - - Called to embed an error token in the stream. - - - - - Form and return the next token. Returns null to signal end of input. - - - - - Call once GetNextToken returns null if you need an Eof token. - - - - - Called to lex a punctuator (operator). Asserts the current character lex type - is LexCharType.Punc. - - - - - Called to lex a numeric literal or a Dot token. Asserts the current - character lex type is LexCharType.NumLit. - - - - - Lex a hex literal optionally followed by an integer suffix. Asserts the current - character is a hex digit. - - - - - Lex a decimal integer literal. The digits must be in _sb. - - - - - Lex a real literal (float, double or decimal). The characters should be in _sb. - - - - - Lex an optional integer suffix (U and/or L). - - - - - Lex an optional real suffix (F, D, M). - - - - - Lex a string or character literal. - - - - - Lex a character escape. Returns true if successful (ch is valid). - - - - - Convert the pair of characters to a surrogate pair. - - - - - Lex an identifier. - - - - - Lex a comment. - - - - - Lex a sequence of spacing characters. - Always returns null. - - - - - Lex a line termination character. Transforms CRLF into a single LF. - Updates the line mapping. When this "drops" a character and sb is not - null, it adds the character to sb. It does NOT add the returned character - to the sb. - - - - - Skip over an error character. Always returns null. - REVIEW: Should we skip over multiple? - - - - - MethodGenerator is used to build a method by specifying the IL. - - - - - Create and return a delegate of the given "delegateType" and currying the - given "thisObj". Note that "thisObj" may be null and "delegateType" should - match the types indicated when the MethodGenerator was created. - - - - - This is idempotent (calling multiple times has the same affect as calling once). - - - - - Represents a temporary local. A MethodGenerator maintains a cache of temporary locals. - Clients can 'check-out' temporaries from the cache, use them, then release (Dispose) when - they are no longer needed so other clients can reuse the temporary to cut down on the number - of locals created. Note that Temporary is a struct, but should NOT be copied around. It is - critical that a stray copy of a Temporary is not disposed! - - We have two 'types' of temporaries: 'Regular' and 'Ref'. 'Ref' temporaries are special in that - they should be used when you need to use ldloca. Grouping this way should help the JIT optimize - local usage. - - - - - Called by the Temporary struct's Dispose method, through the _tempDisposer delegate. - - - - - Node for the ternary conditional operator. - - - - - The parse node for a "with" expression. The grammar is: - - WithNode : - with ( WithLocalNode [ , WithLocalNode ]* ; Expr ) - - Note that a with expression with multiple WithLocalNodes gets expanded to multiple - nested WithNodes. This makes the code much simpler and easily allows a with-local to - reference all previous with-locals. - - - - - The with-expression local assignment node. This contains both the name of the local and the - value expression. - - - - - This expects that ItokCur + ditok is either within the buffered token range or just - at the end of it. In other words, it does not support skipping tokens. - - - - - Signature for a constructor. - - - - - This class indicates which kernel should be approximated by the . - . - - - - - The kernels deriving from this class are shift-invariant, and each of them depends on a different distance between - its inputs. The depends on the L2 distance, and the depends - on the L1 distance. - - - - - This method returns an object that can sample from the non-negative measure that is the Fourier transform of this kernel. - - - - - The Fourier transform of a continuous positive definite kernel is a non-negative measure - (Bochner's theorem). This class - samples numbers from the non-negative measure corresponding to the given kernel. - - - - - The Gaussian kernel. - - - - - - - - Create a new instance of a GaussianKernel. - - The coefficient in the exponent of the kernel function. It should be positive. - - - - The Laplacian kernel. - - - - - - - - Create a new instance of a LaplacianKernel. - - The coefficient in the exponent of the kernel function. - - - - resulting from fitting a or . - - - - - The objects describing how the transformation is applied on the input data. - - - - - Create a that takes multiple pairs of columns. - - - - - Compute Standard Deviation. In case of both subMean and useStd are true, we technically need to compute variance - based on centered values (i.e. after subtracting the mean). But since the centered - values mean is approximately zero, we can use variance of non-centered values. - - - - - Compute Standard Deviation. - We have two overloads of StdDev instead of one with mean for perf reasons. - - - - - Compute L2-norm. L2-norm computation doesn't subtract the mean from the source values. - However, we substract the mean here in case subMean is true (if subMean is false, mean is zero). - - - - - Compute L1-norm. L1-norm computation doesn't subtract the mean from the source values. - However, we substract the mean here in case subMean is true (if subMean is false, mean is zero). - - - - - Compute LInf-norm. LInf-norm computation doesn't subtract the mean from the source values. - However, we substract the mean here in case subMean is true (if subMean is false, mean is zero). - - - - - Base estimator class for and normalizers. - - - - - The kind of unit norm vectors are rescaled to. This enumeration is serialized. - - - - - L2-norm. - - - - - Standard deviation of a vector by viewing all its coordinates as a random variable. - - - - - L1-norm. - - - - - Infinity-norm. - - - - - Describes base class for one column pair. - - - - - Name of the column resulting from the transformation of . - - - - - Name of column to transform. - - - - - The norm to use to normalize each sample. - - - - - Subtract mean from each value before normalizing. - - - - - Scale features by this value. - - - - - Create a that takes multiple pairs of columns. - - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - Normalizes (scales) vectors in the input column to the unit norm. The type of norm that is used can be specified by the user. - - - | - | Output column data type | Vector of | - | Exportable to ONNX | Yes | - - The resulting normalizes vectors in the input column individually - by rescaling them to the unit norm. - - Let $x$ be the input vector, $n$ the size of the vector, $L(x)$ the norm function selected by the user. - Let $\mu(x) = \sum_i x_i / n$ be the mean of the values of vector $x$. The - performs the following operation on each input vector $x$: - $y = \frac{x - \mu(x)}{L(x)}$ - if the user specifies that the mean should be zero, or otherwise: - $y = \frac{x}{L(x)}$ - - There are four types of norm that can be selected by the user to be applied on input vector $x$. They are defined as follows: - - : $L_1(x) = \sum_i |x_i|$ - - : $L_2(x) = \sqrt{\sum_i x_i^2}$ - - : $L_{\infty}(x) = \max_i\{|x_i|\}$ - - : $L_\sigma(x)$ is defined as the - standard deviation of the elements of the input vector $x$ - - Check the See Also section for links to usage examples. - ]]> - - - - - - - Describes how the transformer handles one column pair. - - - - - Describes how the transformer handles one column pair. - - Name of the column resulting from the transformation of . - Name of column to transform. If set to , the value of the will be used as source. - Type of norm to use to normalize each sample. The indicated norm of the resulted vector will be normalized to one. - If , subtract mean from each value before normalizing and use the raw input otherwise. - - - - The environment. - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - Type of norm to use to normalize each sample. The indicated norm of the resulted vector will be normalized to one. - If , subtract mean from each value before normalizing and use the raw input otherwise. - - - - The environment. - Pairs of columns to run the normalization on. - Type of norm to use to normalize each sample. The indicated norm of the resulted vector will be normalized to one. - If , subtract mean from each value before normalizing and use the raw input otherwise. - - - - Create a that takes multiple pairs of columns. - - - - - Normalizes (scales) vectors in the input column applying the global contrast normalization. - - - | - | Output column data type | Vector of | - | Exportable to ONNX | Yes | - - The resulting normalizes vectors in the input column individually, - rescaling them by applying global contrast normalization. The transform performs the following operation on each input vector $x$: - $y = \frac{s * x - \mu(x)}{L(x)}$. - Where $s$ is a user provided scaling factor, $\mu(x)$ is the mean of the elements of vector $x$, and $L(x)$ is the $L_2$ norm or the - standard deviation of the elements of vector $x$. These settings can be specified by the user when the - is initialized. - - Check the See Also section for links to usage examples. - ]]> - - - - - - - Describes how the transformer handles one Gcn column pair. - - - - - Describes how the transformer handles one Gcn column pair. - - Name of the column resulting from the transformation of . - Name of column to transform. If set to , the value of the will be used as source. - If , subtract mean from each value before normalizing and use the raw input otherwise. - If , resulted vector's standard deviation would be one. Otherwise, resulted vector's L2-norm would be one. - Scale features by this value. - - - - Performs a global contrast normalization on input values: - Y = (s * X - M) / D - where s is a scale, M is mean and D is either the L2 norm or standard deviation. - - Scaling inputs to unit norms is a common operation for text classification or clustering. - For more information see: - An Analysis of Single-Layer Networks in Unsupervised Feature Learning - - - pipeline.Add(new GlobalContrastNormalizer("FeatureCol") - { - SubMean= false - }); - - - The environment. - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - If , subtract mean from each value before normalizing and use the raw input otherwise. - If , resulted vector's standard deviation would be one. Otherwise, resulted vector's L2-norm would be one. - Scale features by this value. - - - - Performs a global contrast normalization on input values: - Y = (s * X - M) / D - where s is a scale, M is mean and D is either the L2 norm or standard deviation. - - Scaling inputs to unit norms is a common operation for text classification or clustering. - For more information see: - An Analysis of Single-Layer Networks in Unsupervised Feature Learning - - - pipeline.Add(new GlobalContrastNormalizer("FeatureCol") - { - SubMean= false - }); - - - The environment. - Pairs of columns to run the normalization on. - If , subtract mean from each value before normalizing and use the raw input otherwise. - If , resulted vector's standard deviation would be one. Otherwise, resulted vector's L2-norm would be one. - Scale features by this value. - - - - Create a that takes multiple pairs of columns. - - - - - A Trasforms that groups values of a scalar column into a vector, by a contiguous group ID. - - -

This transform essentially performs the following SQL-like operation:

-

SELECT GroupKey1, GroupKey2, ... GroupKeyK, LIST(Value1), LIST(Value2), ... LIST(ValueN) - FROM Data - GROUP BY GroupKey1, GroupKey2, ... GroupKeyK.

- -

It assumes that the group keys are contiguous (if a new group key sequence is encountered, the group is over). - The GroupKeyN and ValueN columns can be of any primitive types. The code requires that every raw type T of the group key column - is an , which is currently true for all existing primitive types. - The produced ValueN columns will be variable-length vectors of the original value column types.

- -

The order of ValueN entries in the lists is preserved.

- - - Example: - User Item - Pete Book - Tom Table - Tom Kitten - Pete Chair - Pete Cup - - Result: - User Item - Pete [Book] - Tom [Table, Kitten] - Pete [Chair, Cup] - -
-
- - - Initializes a new instance of . - - Host Environment. - Input . This is the output from previous transform or loader. - Columns to group by - Columns to group together - - - - This class describes the relation between 's input , - , and output , . - - The contains columns used to group columns and columns being aggregated from input data. - In , group columns are followed by aggregated columns. For example, if column "Age" is used to group "UserId" column, - the first column and the second column in produced by would be "Age" and "UserId," respectively. - Note that "Age" is a group column while "UserId" is an aggregated (also call keep) column. - - For group columns, the schema information is intact. For aggregated columns, the type is Vector of original type and variable length. - The only metadata preserved is the KeyNames and IsNormalized. All other columns are dropped. Please see - how this idea got implemented. - - - - - [i] is the i-th group(-key) column's column index in the source schema. - - - - - [i] is the i-th aggregated column's column index in the source schema. - - - - - Output of when input schema is . - - - - - Compute the output schema of a given a input schema. - - Input schema. - The associated output schema produced by . - - - - Given column names, extract and return column indexes from source schema. - - Source schema - Column names - Marked exception function - column indexes - - - - Determine if output column index is valid to . A valid output column index should be greater than or - equal 0 and smaller than # of output columns. - - Column index of - - - - This cursor will create two cursors on the input data view: - - The leading cursor will activate all the group columns, and will advance until it hits the end of the contiguous group. - - The trailing cursor will activate all the requested columns, and will go through the group - (as identified by the leading cursor), and aggregate the keep columns. - - The getters are as follows: - - The group column getters are taken directly from the trailing cursor. - - The keep column getters are provided by the aggregators. - - - - - This class keeps track of the previous group key and tests the current group key against the previous one. - - - - - This class handles the aggregation of one 'keep' column into a vector. It wraps around an 's - column, reads the data and aggregates. - - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - This transform hashes its input columns. Each column is hashed separately, and within each - column there is an option to specify which slots should be hashed together into one output slot. - This transform can be applied either to single valued columns or to known length vector columns. - - - - - Constructs the correct KeyType for the given hash bits. - Because of array size limitation, if numberOfBits = 31, the key type is not contiguous (not transformable into indicator array) - - - - - Initializes a new instance of . - - Host Environment. - Input . This is the output from previous transform or loader. - Name of the output column. - Name of the column to be transformed. If this is null '' will be used. - Whether the values need to be combined for a single hash. - Number of bits to hash into. Must be between 1 and 31, inclusive. - - - - Converts multiple column values into hashes. - This transform accepts both numeric and text inputs, both single and vector-valued columns. - - This transform can be helpful for ranking and cross-validation. In the case of ranking, where the GroupIdColumn column is required, - and needs to be of a key type you can use the to hash the text value of a single GroupID column into a key value. - If the GroupID is the combination of the values from multiple columns, you can use the HashConverter to hash multiple text columns into one key column. - Similarly with CrossValidator and the StratificationColumn. - - - - - Getter generator for inputs of type - - Input type. Must be a non-vector - Row inout - Index of the getter - - - - Getter generator for inputs of type , where output type is a vector of hashes - - Input type. Must be a vector - Row input - Index of the getter - - - - Getter generator for inputs of type , where output type is a single hash - - Input type. Must be a vector - Row input - Index of the getter - - - - Generic hash function - - - - - Generate a specialized hash function for floats - - - - - Generate a specialized hash function for doubles - - - - - resulting from fitting a . - - - - - The names of the output and input column pairs on which the transformation is performed. - - - - - This is for the scalar case. - - - - - This is for the indicator case - vector input and outputs should be concatenated. - - - - - Estimator for . Converts key types to their corresponding binary representation of the original value. - - - - - - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - Utility class for creating transforms easily. - - - - - This is a 'stateful non-savable' version of the map transform: the mapping function is guaranteed to be invoked once per - every row of the data set, in sequence; one user-defined state object will be allocated per cursor and passed to the - map function every time. If , , or - implement the interface, they will be disposed after use. - - The type that describes what 'source' columns are consumed from the - input . - The type of the state object to allocate per cursor. - The type that describes what new columns are added by this transform. - The host environment to use. - The input data to apply transformation to. - The function that performs the transformation. The function should transform its - argument into its argument and can utilize the per-cursor state. - The function that is called once per cursor to initialize state. Can be null. - The optional input schema. If null, the schema is - inferred from the type. - The optional output schema. If null, the schema is - inferred from the type. - - - - This creates a filter transform that can 'accept' or 'decline' any row of the data based on the contents of the row - or state of the cursor. - This is a 'stateful non-savable' version of the filter: the filter function is guaranteed to be invoked once per - every row of the data set, in sequence (non-parallelizable); one user-defined state object will be allocated per cursor and passed to the - filter function every time. - If or implement the interface, they will be disposed after use. - - The type that describes what 'source' columns are consumed from the - input . - The type of the state object to allocate per cursor. - The host environment to use. - The input data to apply transformation to. - The user-defined function that determines whether to keep the row or discard it. First parameter - is the current row's contents, the second parameter is the cursor-specific state object. - The function that is called once per cursor to initialize state. Can be null. - The optional input schema. If null, the schema is - inferred from the type. - - - - - Selects the slots for which the absolute value of the corresponding weight in a linear learner - is greater than a threshold. - Instantiates a DropSlots transform to actually drop the slots. - - - - - Returns a score for each slot of the features column. - - - - - Load specific transforms from the specified model file. Allows one to 'cherry pick' transforms from - a serialized chain, or to apply a pre-trained transform to a different (but still compatible) data view. - - - - - A helper method to create for public facing API. - - Host Environment. - Input . This is the output from previous transform or loader. - Model file to load the transforms from. - The tags (comma-separated) to be loaded (or omitted, if complement is true). - Whether to load all transforms except those marked by tags. - - - - - Removes missing values from vector type columns. - - - - - - The names of the input columns of the transformation and the corresponding names for the output columns. - - - - - Initializes a new instance of - - The environment to use. - The names of the input columns of the transformation and the corresponding names for the output columns. - - - - Saves the transform. - - - - - - - - Replace with the default value of the column based on its type. For example, 'zero' for numeric and 'empty' for string/text columns. - - - - - Replace with the mean value of the column. Supports only numeric/time span/ DateTime columns. - - - - - Replace with the minimum value of the column. Supports only numeric/time span/ DateTime columns. - - - - - Replace with the maximum value of the column. Supports only numeric/time span/ DateTime columns. - - - - - A helper method to create for public facing API. - - Host Environment. - Input . This is the output from previous transform or loader. - Name of the output column. - Name of the column to be transformed. If this is null '' will be used. - The replacement method to utilize. - - - Factory method for SignatureDataTransform. - - - - Public constructor corresponding to SignatureDataTransform. - - - - - resulting from fitting a . - - - - - The names of the output and input column pairs for the transformation. - - - - - Initializes a new instance of - - The environment to use. - The names of the input columns of the transformation and the corresponding names for the output columns. - - - - Saves the transform. - - - - - Returns the isNA predicate for the respective type. - - - - - Getter generator for single valued inputs. - - - - - Getter generator for vector valued inputs. - - - - - Adds all NAs (or non-NAs) to the indices List. Whether NAs or non-NAs have been added is indicated by the bool sense. - - - - - Fills indicator values for vectors. The indices is a list that either holds all of the NAs or all - of the non-NAs, indicated by sense being true or false respectively. - - - - - for the . - - - or | - | Output column data type | If input column was scalar then otherwise vector of . | - | Exportable to ONNX | Yes | - - The resulting creates a new column, named as specified in the output column name parameters, and - fills it with vector of bools where `true` in the i-th position in array indicates the i-th element in input column has missing value and `false` otherwise. - - Check the See Also section for links to usage examples. - ]]> - - - - - - - - Initializes a new instance of - - The environment to use. - The names of the input columns of the transformation and the corresponding names for the output columns. - - - - Initializes a new instance of - - The environment to use. - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - resulting from fitting a . - - - - - Fill the repValues array with the correct replacement values based on the user-given replacement kinds. - Vectors default to by-slot imputation unless otherwise specified, except for unknown sized vectors - which force across-slot imputation. - - - - - Returns the isNA predicate for the respective type. - - - - - Converts a string to its respective value in the corresponding type. - - - - - Getter generator for single valued inputs. - - - - - Replaces NA values for scalars. - - - - - Getter generator for vector valued inputs. - - - - - Replaces NA values for vectors. - - - - - Fills values for vectors where there is one replacement value. - - - - - Fills values for vectors where there is slot-wise replacement values. - - - - - The base class for stat aggregators for imputing mean, min, and max for the NAReplaceTransform. - - - - - The base class for stat aggregators with knowledge of types. - - The type for the column being aggregated. - The type of the stat being computed by the stat aggregator. - - - - Returns the number of times that ProcessRow has been called. - - - - - Returns the number of values that have been processed so far. - - - - - Returns the number of times that ProcessValue has been called. - - - - - A mutable struct for keeping the appropriate statistics for mode calculations, whose scope is restricted - and only exists as an instance in a field or an array, utilizing the mutation of the struct correctly. - - - - - This is a mutable struct (so is evil). However, its scope is restricted - and the only instances are in a field or an array, so the mutation does - the right thing. - - - - - A mutable struct for keeping the appropriate statistics for mean calculations for IX types, TS, and DT, - whose scope is restricted and only exists as an instance in a field or an array, utilizing the mutation - of the struct correctly. - - - - - for the . - - - or | - | Output column data type | The same as the data type in the input column | - | Exportable to ONNX | Yes | - - The resulting creates a new column, named as specified in the output column name parameters, and - copies the data from the input column to this new column with exception what missing values in data would be replaced according to chosen strategy. - - Check the See Also section for links of usage examples. - ]]> - - - - - - - - The possible ways to replace missing values. - - - - - Replace with the default value of the column based on its type. - - - - - Replace with the mean value of the column. - - - - - Replace with the minimum value of the column. - - - - - Replace with the maximum value of the column. - - - - - Replace with the most frequent value of the column. - - - - - Describes how the transformer handles one column pair. - - - - Name of the column resulting from the transformation of . - - - Name of column to transform. - - - - If true, per-slot imputation of replacement is performed. - Otherwise, replacement value is imputed for the entire vector column. This setting is ignored for scalars and variable vectors, - where imputation is always for the entire column. - - - - How to replace the missing values. - - - Replacement value for missing values (only used in entrypoing and command line API). - - - - Describes how the transformer handles one column pair. - - Name of the column resulting from the transformation of . - Name of column to transform. If set to , the value of the will be used as source. - How to replace the missing values. - If true, per-slot imputation of replacement is performed. - Otherwise, replacement value is imputed for the entire vector column. This setting is ignored for scalars and variable vectors, - where imputation is always for the entire column. - - - - This constructor is used internally to convert from to - as we support in command line and entrypoint API only. - - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - Trains and returns a . - - - - - Selects the top k slots across all specified columns ordered by their mutual information with the label column - (what you can learn about the label by observing the value of the specified column). - - - - - - - - - - Selects the top k slots across all specified columns ordered by their mutual information with the label column. - - - The mutual information of two random variables X and Y is a measure of the mutual dependence between the variables. - Formally, the mutual information can be written as: - - I(X;Y) = E[log(p(x,y)) - log(p(x)) - log(p(y))] - where the expectation is taken over the joint distribution of X and Y. - Here p(x,y) is the joint probability density function of X and Y, p(x) and p(y) are the marginal probability density functions of X and Y respectively. - In general, a higher mutual information between the dependent variable (or label) and an independent variable (or feature) means - that the label has higher mutual dependence over that feature. - It keeps the top SlotsInOutput features with the largest mutual information with the label. - - - The environment to use. - Name of the column to use for labels. - The maximum number of slots to preserve in the output. The number of slots to preserve is taken across all input columns. - Max number of bins used to approximate mutual information between each input column and the label column. Power of 2 recommended. - Specifies the names of the input columns for the transformation, and their respective output column names. - - - - - - - - - Selects the top k slots across all specified columns ordered by their mutual information with the label column. - - - The mutual information of two random variables X and Y is a measure of the mutual dependence between the variables. - Formally, the mutual information can be written as: - - I(X;Y) = E[log(p(x,y)) - log(p(x)) - log(p(y))] - where the expectation is taken over the joint distribution of X and Y. - Here p(x,y) is the joint probability density function of X and Y, p(x) and p(y) are the marginal probability density functions of X and Y respectively. - In general, a higher mutual information between the dependent variable (or label) and an independent variable (or feature) means - that the label has higher mutual dependence over that feature. - It keeps the top SlotsInOutput features with the largest mutual information with the label. - - - The environment to use. - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - Name of the column to use for labels. - The maximum number of slots to preserve in the output. The number of slots to preserve is taken across all input columns. - Max number of bins used to approximate mutual information between each input column and the label column. Power of 2 recommended. - - - - - - - - - Trains and returns a . - - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - Create method corresponding to SignatureDataTransform. - - - - - Computes the threshold for the scores such that the top k slots are preserved. - If there are less than k scores greater than zero, the threshold is set to zero and - the tiedScoresToKeep is set to zero, so that we only keep scores strictly greater than zero. - - The score for each column and each slot. - How many slots to preserve. - If there are ties, how many of them to keep. - The threshold. - - - - Returns the feature selection scores for each slot of each column. - - The host. - The input dataview. - The label column. - The columns for which to compute the feature selection scores. - The number of bins to use for numeric features. - The columns' sizes before dropping any slots. - A list of scores for each column and each slot. - - - - Computes the mutual information for one column. - - - - - Computes the mutual information for one column. - - - - - Computes the mutual information for one slot. - - - - - Fills the contingency table. - - - - - Maps from keys to ints. - - - - - Maps Ints. - - - - - Maps from Singles to ints. NaNs (and only NaNs) are mapped to the first bin. - - - - - Maps from Doubles to ints. NaNs (and only NaNs) are mapped to the first bin. - - - - - Given a mapper from T to int, creates a mapper from VBuffer{T} to VBuffer<int>. - Assumes that the mapper maps default(TSrc) to default(TDst) so that the returned mapper preserves sparsity. - - - - - Entry point methods for NA handling. - - - - - resulting from fitting a . - - - - - Converts one or more input columns of categorical values into as many output columns of one-hot encoded vectors. - - - or [key](xref:Microsoft.ML.Data.KeyDataViewType) type. | - | Output column data type | Scalar or vector of [key](xref:Microsoft.ML.Data.KeyDataViewType), or vector of type. | - | Exportable to ONNX | Yes | - - The builds a dictionary of unique values appearing in the input column. - The resulting converts one or more input columns into as many output - columns of one-hot encoded vectors. - - The is often used to convert categorical data into a form that can be - provided to a machine learning algorithm. - - The output of this transform is specified by : - - - produces an [indicator vector](https://en.wikipedia.org/wiki/Indicator_vector). - Each slot in this vector corresponds to a category in the dictionary, so its length is the size of the built dictionary. - If a value is not found in the dictioray, the output is the zero vector. - - - produces one vector such that each slot stores the number - of occurances of the corresponding value in the input vector. - Each slot in this vector corresponds to a value in the dictionary, so its length is the size of the built dictionary. - and - differ simply in how the bit-vectors generated from individual slots in the input column are aggregated: - for Indicator they are concatenated and for Bag they are added. When the source column is a Scalar, the Indicator and Bag options are identical. - - - produces keys in a column. - If the input column is a vector, the output contains a vectory [key](xref:Microsoft.ML.Data.KeyDataViewType) type, where each slot of the - vector corresponds to the respective slot of the input vector. - If a category is not found in the bulit dictionary, it is assigned the value zero. - - - produces a binary encoded vector to represent the values found in the dictionary - that are present in the input column. If a value in the input column is not found in the dictionary, the output is the zero vector. - - The OneHotEncodingTransformer can be applied to one or more columns, in which case it builds and uses a separate dictionary - for each column that it is applied to. - - Check the See Also section for links to usage examples. - ]]> - - - - - - - - Output is a bag (multi-set) vector - - - - - Output is an indicator vector - - - - - Output is a key value - - - - - Output is binary encoded - - - - - Describes how the transformer handles one column pair. - - - - - Describes how the transformer handles one column pair. - - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - Output kind: Bag (multi-set vector), Ind (indicator vector), Key (index), or Binary encoded indicator vector. - Maximum number of terms to keep per column when auto-training. - How items should be ordered when vectorized. If choosen they will be in the order encountered. - If , items are sorted according to their default comparison, for example, text sorting will be case sensitive (for example, 'A' then 'Z' then 'a'). - - - Initializes an instance of the . - Host Environment. - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - The type of output expected. - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - Trains and returns a . - - - - - resulting from fitting a . - - - - - This class is a merger of and - with join option removed - - - - - A helper method to create . - - Host Environment. - Input . This is the output from previous transform or loader. - Name of the output column. - Name of the column to be transformed. If this is null '' will be used. - Number of bits to hash into. Must be between 1 and 30, inclusive. - During hashing we construct mappings between original values and the produced hash values. - Text representation of original values are stored in the slot names of the metadata for the new column.Hashing, as such, can map many initial values to one. - specifies the upper bound of the number of distinct input values mapping to a hash that should be retained. - 0 does not retain any input values. -1 retains all input values mapping to each hash. - The type of output expected. - - - - Schema propagation for transformers. Returns the output schema of the data, if - the input schema is like the one provided. - - - - - Take the data in, make transformations, output the data. Note that - are lazy, so no actual transformations happen here, just schema validation. - - - - - Whether a call to should succeed, on an appropriate schema. - - - - - Constructs a row-to-row mapper based on an input schema. - - - - - Converts one or more input columns of categorical values into as many output columns of hash-based one-hot encoded vectors. - - - type. | - | Exportable to ONNX | No | - - The resulting converts one or more input columns into as many output - columns of one-hot encoded vectors, where indexing is done by hashing the value and using the hash as an index. - - The is often used to convert categorical data into a form that can be - provided to a machine learning algorithm. - - The output of this transform is specified by : - - - produces an [indicator vector](https://en.wikipedia.org/wiki/Indicator_vector). - Each slot in this vector corresponds to a category in the dictionary, so its length is the size of the built dictionary. - If a value is not found in the dictionary, the output is the zero vector. - - - produces one vector such that each slot stores the number - of occurrences of the corresponding value in the input vector. - Each slot in this vector corresponds to a value in the dictionary, so its length is the size of the built dictionary. - and - differ simply in how the bit-vectors generated from individual slots in the input column are aggregated: - for Indicator they are concatenated and for Bag they are added. When the source column is a Scalar, the Indicator and Bag options are identical. - - - produces keys in a column. - If the input column is a vector, the output contains a vector [key](xref:Microsoft.ML.Data.KeyDataViewType) type, where each slot of the - vector corresponds to the respective slot of the input vector. - If a category is not found in the built dictionary, it is assigned the value zero. - - - produces a binary encoded vector to represent the values found in the dictionary - that are present in the input column. If a value in the input column is not found in the dictionary, the output is the zero vector. - - The OneHotEncodingTransformer can be applied to one or more columns, in which case it builds and uses a separate dictionary - for each column that it is applied to. - - Check the See Also section for links to usage examples. - ]]> - - - - - - - - Describes how the transformer handles one column pair. - - - - - Describes how the transformer handles one column pair. - - Name of the column resulting from the transformation of . - Name of column to transform. If set to , the value of the will be used as source. - Kind of output: bag, indicator vector etc. - Number of bits to hash into. Must be between 1 and 31, inclusive. - Hashing seed. - Whether the position of each term should be included in the hash. - During hashing we construct mappings between original values and the produced hash values. - Text representation of original values are stored in the slot names of the metadata for the new column.Hashing, as such, can map many initial values to one. - specifies the upper bound of the number of distinct input values mapping to a hash that should be retained. - 0 does not retain any input values. -1 retains all input values mapping to each hash. - - - - Instantiates a new instance of . - - Host Environment. - Name of the column resulting from the transformation of . - Name of the column to transform. - If set to , the value of the will be used as source. - Number of bits to hash into. Must be between 1 and 30, inclusive. - During hashing we construct mappings between original values and the produced hash values. - Text representation of original values are stored in the slot names of the metadata for the new column.Hashing, as such, can map many initial values to one. - specifies the upper bound of the number of distinct input values mapping to a hash that should be retained. - 0 does not retain any input values. -1 retains all input values mapping to each hash. - The type of output expected. - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - Trains and returns a . - - - - - Creates a new column with the specified type and default values. - - If the user wish to create additional columns with a particular type and default values, or replicated the values from one column to another, changing their type, they can do so using this transform. - This transform can be used as a workaround to create a Label column after deserializing a model, for prediction. - Some transforms in the serialized model operate on the Label column, and would throw errors during prediction if such a column is not found. - - - - - Given a set of columns, return the input columns that are needed to generate those output columns. - - - - - Initializes a new instance of . - - Host Environment. - Input . This is the output from previous transform or loader. - Columns to transform. - - - - Public constructor corresponding to SignatureDataTransform. - - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - This is used as a hack to force Lambda Transform behave sequentially. - - - - - Helper structure used for features permutation in Lambda Transform. - - - - - Helper class for report's Lambda transform. - - - - - One more helper class for report's Lambda transform. - - - - - Produces a column with the cursor's ID as a column. This can be useful for diagnostic purposes. - - This class will obviously generate different data given different IDs. So, if you save data to - some other file, then apply this transform to that dataview, it may of course have a different - result. This is distinct from most transforms that produce results based on data alone. - - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - Looks up a localized string similar to ب - ب - بعد - حتى - حين - دون - صباح - في - قبل - لكن - مساء - مع - من - نحو - واكد - وفي - ومن - اطار - و - اثر - اجل - احد - اذا - اكثر - اكد - التي - الثاني - الثانية - الذاتي - الذي - الذين - السابق - الف - الماضي - المقبل - الوقت - اليوم - امس - انه - باسم - بان - برس - بسبب - بشكل - بعض - بن - به - بها - بين - تم - ثلاثة - ثم - جميع - حاليا - حوالى - حول - حيث - خلال - ذلك - زيارة - سنة - سنوات - شخصا - صفر - ضد - ضمن - عام - عاما - عدة - عدد - عدم - عشر - عشرة - على - عليه - عليها - عن - عند - عندما - غدا - غير - فان - فيه - فيها - قال - قد - قوة - كان - كانت - كل - كلم - كما - لا - لدى - لقا [rest of string was truncated]";. - - - - - Looks up a localized string similar to bude - budeš - byl - byla - byli - bylo - je - jsem - jsme - jsou - jste - aby - aj - ale - ani - asi - až - bez - bude-li - budeme - budeme-li - budete - budete-li - budeš-li - budou - budou-li - budu - budu-li - buď - buďme - buďte - by - byl-li - byla-li - bylas - byli-li - bylo-li - bylos - byls - byly - byly-li - byt - byv - byvše - byvši - být - býti - co - což - cz - další - design - dnes - do - email - ho - jak - jako - je-li - jeho - jej - jejich - její - jen - ještě - ji - jine - již - jsa - jsem-li - jsi - jsi-li - jsme-li - jsou-li - jsouc - jsouce - jste-li - kam - kde - [rest of string was truncated]";. - - - - - Looks up a localized string similar to af - andre - at - da - de - deres - dette - din - ej - en - ene - et - han - hans - i - ind - lille - ni - ny - otte - stor - store - syv - alle - andet - begge - den - denne - der - det - dig - dog - du - eller - end - eneste - enhver - fem - fire - flere - fleste - for - fordi - forrige - fra - få - før - god - har - hendes - her - hun - hvad - hvem - hver - hvilken - hvis - hvor - hvordan - hvorfor - hvornår - ikke - ingen - intet - jeg - jeres - kan - kom - kommer - lav - lidt - man - mand - mange - med - meget - men - mens - mere - mig - ned - nogen - noget - nyt - nær - næste - næsten - [rest of string was truncated]";. - - - - - Looks up a localized string similar to aan - af - al - als - bij - dan - dat - die - dit - een - en - er - had - heb - hem - het - hij - hoe - hun - ik - in - is - je - kan - me - men - met - mij - nog - nu - of - ons - ook - te - tot - uit - van - was - wat - we - wel - wij - zal - ze - zei - zij - zo - zou - . - - - - - Looks up a localized string similar to a - about - above - above - across - after - afterwards - again - against - all - almost - alone - along - already - also - although - always - am - among - amongst - amoungst - amount - an - and - another - any - anyhow - anyone - anything - anyway - anywhere - are - around - as - at - back - be - became - because - become - becomes - becoming - been - before - beforehand - behind - being - below - beside - besides - between - beyond - both - bottom - but - by - call - can - cannot - cant - co - con - could - couldnt - cry - de - describe - detail - do - done - down - due - du [rest of string was truncated]";. - - - - - Looks up a localized string similar to de - des - d' - la - du - l' - et - à - en - sur - aux - par - pour - au - dans - un - est - été - a - une - sous - ou - pas - entre - qui - nº - lès - plus - il - y - que - contre - je - non - n' - sans - vous - avec - ne - ce - son - ses - mon - moins - se - qu' - moi - j' - c' - si - ma - s' - être - tout - comme - sa - sont - ai - elle - autres - pendant - chez - mais - avant - nous - cette - après - vers - était - tous - autre - tu - très - même - ont - anti - puis - leur - où - lui - ça - suis - depuis - ni - mes - près - hors - outre - ils - votre - toi - lors - t' - aussi - donc - ces - toute - [rest of string was truncated]";. - - - - - Looks up a localized string similar to a - ab - aber - aber - ach - acht - achte - achten - achter - achtes - ag - alle - allein - allem - allen - aller - allerdings - alles - allgemeinen - als - als - also - am - an - andere - anderen - andern - anders - au - auch - auch - auf - aus - ausser - außer - ausserdem - außerdem - b - bald - bei - beide - beiden - beim - beispiel - bekannt - bereits - besonders - besser - besten - bin - bis - bisher - bist - c - d - da - dabei - dadurch - dafür - dagegen - daher - dahin - dahinter - damals - damit - danach - daneben - dank - dann - daran - darauf - daraus - darf - darfst - [rest of string was truncated]";. - - - - - Looks up a localized string similar to a - adesso - ai - al - alla - allo - allora - altre - altri - altro - anche - ancora - avere - aveva - avevano - ben - buono - che - chi - cinque - comprare - con - consecutivi - consecutivo - cosa - cui - da - del - della - dello - dentro - deve - devo - di - doppio - due - e - ecco - fare - fine - fino - fra - gente - giù - ha - hai - hanno - ho - il - indietro - invece - io - la - lavoro - le - lei - lo - loro - lui - lungo - ma - me - meglio - molta - molti - molto - nei - nella - no - noi - nome - nostro - nove - nuovi - nuovo - o - oltre - ora - otto - peggio - pero - persone - più [rest of string was truncated]";. - - - - - Looks up a localized string similar to これ - それ - あれ - この - その - あの - ここ - そこ - あそこ - こちら - どこ - だれ - なに - なん - 何 - 私 - 貴方 - 貴方方 - 我々 - 私達 - あの人 - あのかた - 彼女 - 彼 - です - あります - おります - います - は - が - の - に - を - で - え - から - まで - より - も - どの - と - し - それで - しかし - . - - - - - Looks up a localized string similar to alle - andre - arbeid - av - begge - bort - bra - bruke - da - denne - der - deres - det - din - disse - du - eller - en - ene - eneste - enhver - enn - er - et - folk - for - fordi - forsøke - fra - få - før - først - gjorde - gjøre - god - gå - ha - hadde - han - hans - hennes - her - hva - hvem - hver - hvilken - hvis - hvor - hvordan - hvorfor - i - ikke - inn - innen - kan - kunne - lage - lang - lik - like - makt - mange - med - meg - meget - men - mens - mer - mest - min - mye - må - måte - navn - nei - ny - nå - når - og - også - om - opp - oss - over - part - punkt - på - rett - rikti [rest of string was truncated]";. - - - - - Looks up a localized string similar to ach - aj - albo - bardzo - bez - bo - być - ci - ciebie - cię - co - czy - daleko - dla - dlaczego - dlatego - do - dobrze - dokąd - dość - dużo - dwa - dwaj - dwie - dwoje - dzisiaj - dziś - gdyby - gdzie - go - ich - ile - im - inny - ja - jak - jakby - jaki - je - jeden - jedna - jedno - jego - jej - jemu - jest - jestem - jeśli - jeżeli - już - ją - każdy - kiedy - kierunku - kto - ku - lub - ma - mają - mam - mi - mnie - mną - moi - moja - moje - może - mu - my - mój - na - nam - nami - nas - nasi - nasz - nasza - nasze - natychmiast - nic - nich - nie - niego - niej - niemu - nigdy - n [rest of string was truncated]";. - - - - - Looks up a localized string similar to último - é - acerca - agora - algumas - alguns - ali - ambos - antes - apontar - aquela - aquelas - aquele - aqueles - aqui - atrás - bem - bom - cada - caminho - cima - com - como - comprido - conhecido - corrente - das - debaixo - dentro - desde - desligado - deve - devem - deverá - direita - diz - dizer - dois - dos - e - ela - ele - eles - em - enquanto - então - está - estão - estado - estar - estará - este - estes - esteve - estive - estivemos - estiveram - eu - fará - faz - fazer - fazia - fez - fim - foi - fora - horas - iniciar - inicio - ir - irá - isto - ligado - maio [rest of string was truncated]";. - - - - - Looks up a localized string similar to último - é - acerca - agora - algumas - alguns - ali - ambos - antes - apontar - aquela - aquelas - aquele - aqueles - aqui - atrás - bem - bom - cada - caminho - cima - com - como - comprido - conhecido - corrente - das - debaixo - dentro - desde - desligado - deve - devem - deverá - direita - diz - dizer - dois - dos - e - ela - ele - eles - em - enquanto - então - está - estão - estado - estar - estará - este - estes - esteve - estive - estivemos - estiveram - eu - fará - faz - fazer - fazia - fez - fim - foi - fora - horas - iniciar - inicio - ir - irá - isto - ligado - maio [rest of string was truncated]";. - - - - - Looks up a localized string similar to а - е - и - ж - м - о - на - не - ни - об - но - он - мне - мои - мож - она - они - оно - мной - много - многочисленное - многочисленная - многочисленные - многочисленный - мною - мой - мог - могут - можно - может - можхо - мор - моя - моё - мочь - над - нее - оба - нам - нем - нами - ними - мимо - немного - одной - одного - менее - однажды - однако - меня - нему - меньше - ней - наверху - него - ниже - мало - надо - один - одиннадцать - одиннадцатый - назад - наиболее - недавно - миллионов - недалеко - между - низко - меля - нельзя - нибудь - непрерывно - наконец - никогда - ник [rest of string was truncated]";. - - - - - Looks up a localized string similar to ésa - ésta - éste - última - últimas - último - últimos - aún - a - la - vez - a.m. - abierto - abunda - acaba - además - ahora - al - algún - alguna - alguno - alrededor - alta - altas - alto - altos - am - ambas - ambos - antes - aquél - aquélla - aquí - aquel - aquella - aquellas - aquello - aquellos - así - atardecer - aunque - básicamente - b - c - cada - casi - celebran - centro - cercanía - cierta - ciertas - cierto - ciertos - común - comúnmente - como - complemento - complementos - completamente - comunes - con - conforme - considerable - considerada - consider [rest of string was truncated]";. - - - - - Looks up a localized string similar to aderton - adertonde - adjö - aldrig - alla - allas - allt - alltid - alltså - än - andra - andras - annan - annat - ännu - artonde - arton - åtminstone - att - åtta - åttio - åttionde - åttonde - av - även - båda - bådas - bakom - bara - bäst - bättre - behöva - behövas - behövde - behövt - beslut - beslutat - beslutit - bland - blev - bli - blir - blivit - bort - borta - bra - då - dag - dagar - dagarna - dagen - där - därför - de - del - delen - dem - den - deras - dess - det - detta - dig - din - dina - dit - ditt - dock - du - efter - eftersom - elfte - eller - elva - en - enk [rest of string was truncated]";. - - - - - resulting from fitting an . - - - - - Maps vector columns to a low -dimensional feature space. - - - | - | Output column data type | Known-sized vector of | - | Exportable to ONNX | No | - - The resulting creates a new column, named as specified in - the output column name parameters, where each input vector is mapped to a feature space where inner products - approximate one of two shift-invariant kernel functions: The Gaussian kernel, or the Laplacian kernel. - By mapping features to a space that approximate non-linear kernels, linear methods can be used to approximate - more complex kernel SVM models. - This mapping is based on the paper [Random Features for Large-Scale Kernel Machines](http://pages.cs.wisc.edu/~brecht/papers/07.rah.rec.nips.pdf) - by Rahimi and Recht. - - Check the See Also section for links to usage examples. - ]]> - - - - - - Describes how the transformer handles one Gcn column pair. - - - - - Name of the column resulting from the transformation of . - - - - - Name of the column to transform. - - - - - Which fourier generator to use. - - - - - The number of random Fourier features to create. - - - - - If , use both of cos and sin basis functions to create two features for every random Fourier frequency. - Otherwise, only cos bases would be used. - - - - - The seed of the random number generator for generating the new features (if unspecified, the global random is used). - - - - - Describes how the transformer handles one column pair. - - Name of the column resulting from the transformation of . - The number of random Fourier features to create. - If , use both of cos and sin basis functions to create two features for - every random Fourier frequency. Otherwise, only cos bases would be used. - Name of column to transform. - Which fourier generator to use. - The seed of the random number generator for generating the new features (if unspecified, the global random is used). - - - - Convinence constructor for simple one column case. - - Host Environment. - Name of the column resulting from the transformation of . - Name of the column to transform. If set to , the value of the will be used as source. - The number of random Fourier features to create. - Create two features for every random Fourier frequency? (one for cos and one for sin). - - - - Trains and returns a . - - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - resulting from fitting an . - - The class defining which columns to take from the incoming data. - The class defining which new columns are added to the data. - The type that describes per-cursor state. - - - - Whether a call to should succeed, on an - appropriate schema. - - - - - Create a custom mapping of input columns to output columns. - - The host environment - The action by which we map source to destination columns - The name of the action (will be saved to the model). - The action to initialize the state object, that is called once before the cursor is initialized. - - - - Returns the which would be produced by the transformer applied to - an input data with schema . - - - - - Take the data in, make transformations, output the data. - Note that 's are lazy, so no actual transformations happen here, just schema validation. - - - - - Constructs a row-to-row mapper based on an input schema. If - is false, then an exception is thrown. If the is in any way - unsuitable for constructing the mapper, an exception is likewise thrown. - - - - - Applies a custom mapping function to the specified input columns, while allowing a per-cursor state. The result will be in output columns. - - - applies a user defined mapping - to one or more input columns and produces one or more output columns. This transformation doesn't change the number of rows, - and can be seen as the result of applying the user's function to every row of the input data. - - In addition to the input and output objects, the provided custom function is given a state object that it can look at and/or modify. - - Check the See Also section for links to usage examples. - ]]> - - - - - - Create a custom mapping of input columns to output columns. - - The host environment - The mapping action. This must be thread-safe and free from side effects. - The contract name, used by ML.NET for loading the model. If null is specified, such a trained model would not be save-able. - The action to initialize the state object, that is called once before the cursor is initialized. - - - - Returns the of the schema which will be produced by the transformer. - Used for schema propagation and verification in a pipeline. - - - - - This transform is similar to , but it allows per-cursor state, - as well as the ability to 'accept' or 'filter out' some rows of the supplied . - The downside is that the provided lambda is eagerly called on every row (not lazily when needed), and - parallel cursors are not allowed. - - The type that describes what 'source' columns are consumed from the input . - The type that describes what new columns are added by this transform. - The type that describes per-cursor state. - - - - Create a filter transform - - The host environment - The dataview upon which we construct the transform - The function by which we transform source to destination columns and decide whether - to keep the row. - The function that is called once per cursor to initialize state. Can be null. - The schema definition overrides for - The schema definition overrides for - - - - The 'reapply' constructor. - - - - - Returns whether the given column is active in this row. - - - - - Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row. - This throws if the column is not active in this row, or if the type - differs from this column's type. - - is the column's content type. - is the output column whose getter should be returned. - - - - Un-groups vector columns into sequences of rows, inverse of Group transform. - - This can be thought of as an inverse of the . - For all specified vector columns ("pivot" columns), performs the "ungroup" (or "unroll") operation as outlined below. - - If the only pivot column is called P, and has size K, then for every row of the input we will produce - K rows, that are identical in all columns except P. The column P will become a scalar column, and this - column will hold all the original values of input's P, one value per row, in order. The order of columns - will remain the same. - - Variable-length pivot columns are supported (including zero, which will eliminate the row from the result). - Multiple pivot columns are also supported: - - A number of output rows is controlled by the 'mode' parameter. - - outer it is equal to the maximum length of pivot columns - inner it is equal to the minimum length of pivot columns - first it is equal to the length of the first pivot column - - - - - If a particular pivot column has size that is different than the number of output rows, the extra slots will - be ignored, and the missing slots will be 'padded' with default values. - - - All metadata are preserved for the retained columns. For 'unrolled' columns, all known metadata - except slot names are preserved. - - - - - - Controls the number of output rows produced by the transform - - - - - The number of output rows is equal to the minimum length of pivot columns - - - - - The number of output rows is equal to the maximum length of pivot columns - - - - - The number of output rows is equal to the length of the first pivot column. - - - - - Initializes a new instance of . - - Host Environment. - Input . This is the output from previous transform or loader. - Specifies how to unroll multiple pivot columns of different size. - Columns to unroll, or 'pivot' - - - - Information of columns to be ungrouped in . - - - - - [i] is -1 means that the i-th column in both of and - are not produced by ungrouping; we just copy the i-th input column to the i-th output column. - If [i] is not -1, the i-th output column should be produced by ungrouping the i-th input column. - - - - - Columns contained in passed in . - Note that input data's schema is stored as . - - - - - This attribute specifies how expanding input columns stored in . - - - - - Output data's produced by this - when input data's schema is . - - - - - Return an array of active input columns given the target predicate. - - - - - Determine if an output column is produced by a pivot column from input. - - Column index in - True if the specified column is produced by expanding a pivot column and false otherwise. - - - - Total number of input columns is of . - Note that the number of input columns equals to the number of output columns; that is, - is identical to the number of columns in . - - - - - Create a getter which returns the length of a vector (aka a column's value) in the input data. - - The type of the considered input vector - Column index, which should point to a vector-typed column in the input data. - Getter of the length to the considered input vector. - - - - Returns whether the given column is active in this row. - - - - - Returns the getter of an output column. - - is the output column's content type, for example, . - is the output column whose getter should be returned. - - - - Collection of extension methods for to create instances of - key to binary vector mapping transformer components - - - - - Convert the key types back to binary vector. - - The categorical transform's catalog. - Specifies the output and input columns on which the transformation should be applied. - - - - Create a , which converts key types to their corresponding binary representation of the original value. - - The categorical transform's catalog. - Name of the column resulting from the transformation of . - The data type is a known-size vector of representing the input value. - Name of column to transform. If set to , the value of the will be used as source. - The data type is a key or a known-size vector of keys. - - - - - - - - Class containing an extension method for to create instances of - user-defined one-to-one row mapping transformer components. - - - - - Create a , which applies a custom mapping of input columns to output columns. - - The class defining which columns to take from the incoming data. - The class defining which new columns are added to the data. - The transform catalog - The mapping action. This must be thread-safe and free from side effects. - If the resulting transformer needs to be save-able, the class defining should implement - and needs to be decorated with - with the provided . - In versions v1.5-preview2 and earlier, the assembly containing the class should be registered in the environment where it is loaded back - using . - The contract name, used by ML.NET for loading the model. - If is specified, resulting transformer would not be save-able. - Additional parameters for schema mapping between and input data. - Useful when dealing with annotations. - Additional parameters for schema mapping between and output data. - Useful when dealing with annotations. - - - - - - - - Create a , which applies a custom mapping of input columns to output columns, - while allowing a per-cursor state. - - The class defining which columns to take from the incoming data. - The type that describes per-cursor state. - The class defining which new columns are added to the data. - The transform catalog. - The mapping action. In addition to the input and output objects, the action is given a state object that it can look at and/or modify. - If the resulting transformer needs to be save-able, the class defining should implement - and needs to be decorated with - with the provided . - The assembly containing the class should be registered in the environment where it is loaded back - using . - The action to initialize the state object, that is called once before the cursor is initialized. - The contract name, used by ML.NET for loading the model. - If is specified, resulting transformer would not be save-able. - - - - Drop rows where a specified predicate returns true. - - The class defining which columns to take from the incoming data. - The data operations catalog. - The input data. - A predicate, that takes an input of type and returns true if the row should be filtered (dropped) and false otherwise. - - - - Drop rows where a specified predicate returns true. This filter allows to maintain a per-cursor state. - - The class defining which columns to take from the incoming data. - The type that describes per-cursor state. - The data operations catalog. - The input data. - A predicate, that takes an input of type and a state object of type - , and returns true if the row should be filtered (dropped) and false otherwise. - The action to initialize the state object, that is called once before the cursor is initialized. - - - - Creates an . - - The . - Name of the column resulting from the transformation of . - This column's data type will be the same as that of the input column. - The expression to apply to to create the column . - The names of the input columns. - - - - - - - - - Collection of extension methods for to create instances of - missing value transformer components. - - - - - Create a , which scans the data from the column specified in - and fills new column specified in with vector of bools where i-th bool has value of - if i-th element in column data has missing value and otherwise. - - The transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be a vector of . - Name of the column to copy the data from. - This estimator operates over scalar or vector of or . - - - - - - - - Create a , which copies the data from the column specified in - to a new column: . - - This transform can operate over several columns. - The transform's catalog. - The pairs of input and output columns. This estimator operates over data which is either scalar or vector of or . - - - - - - - - Create a , which copies the data from the column specified in - to a new column: and replaces missing values in it according to . - - The transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be the same as that of the input column. - Name of the column to copy the data from. - This estimator operates over scalar or vector of or . - The type of replacement to use as specified in - If true, per-slot imputation of replacement is performed. - Otherwise, replacement value is imputed for the entire vector column. This setting is ignored for scalars and variable vectors, - where imputation is always for the entire column. - - - - - - - - Create a , which copies the data from the column specified in - to a new column: and replaces missing values in it according to . - - This transform can operate over several columns. - The transform's catalog. - The pairs of input and output columns. This estimator operates over scalar or vector of floats or doubles. - The type of replacement to use as specified in - If , per-slot imputation of replacement is performed. - Otherwise, replacement value is imputed for the entire vector column. This setting is ignored for scalars and variable vectors, - where imputation is always for the entire column. - - - - - - - - Creates a new output column, identical to the input column for everything but the missing values. - The missing values of the input column, in this new column are replaced with . - - The transform extensions' catalog. - The name of the columns to use, and per-column transformation configuraiton. - - - - Collection of extension methods for to create instances of feature - selection transformer components. - - - - - Create a , which selects the top k slots across all specified columns ordered by their mutual information with the label column. - - The transform's catalog. - Name of the column resulting from the transformation of . - Name of column to transform. If set to , the value of the will be used as source. - The name of the label column. - The maximum number of slots to preserve in the output. The number of slots to preserve is taken across all input columns. - Max number of bins used to approximate mutual information between each input column and the label column. Power of 2 recommended. - - - - - - - - - Create a , which selects the top k slots across all specified columns ordered by their mutual information with the label column. - - The transform's catalog. - Specifies the names of the input columns for the transformation, and their respective output column names. - The name of the label column. - The maximum number of slots to preserve in the output. The number of slots to preserve is taken across all input columns. - Max number of bins used to approximate mutual information between each input column and the label column. Power of 2 recommended. - - - - - - - - - Create a , which selects the slots for which the count of non-default values is greater than or equal to a threshold. - - The transform's catalog. - Describes the parameters of the feature selection process for each column pair. - - - - Create a , which selects the slots for which the count of non-default values is greater than or equal to a threshold. - - The transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be the same as the input column's data type. - Name of column to transform. If set to , the value of the will be used as source. - This estimator operates over vector or scalar of numeric, text or keys data types. - If the count of non-default values for a slot is greater than or equal to this threshold in the training data, the slot is preserved. - - - - - - - - - Create a , which selects the slots for which the count of non-default values is greater than or equal to a threshold. - - The transform's catalog. - Specifies the names of the columns on which to apply the transformation. - This estimator operates over vector or scalar of numeric, text or keys data types. - The output columns' data types will be the same as the input columns' data types. - If the count of non-default values for a slot is greater than or equal to this threshold in the training data, the slot is preserved. - - - - - - - - - Collection of extension methods for to create instances of kernel method - feature engineering transformer components. - - - - - Create an that maps input vectors to a low dimensional - feature space where inner products approximate a shift-invariant kernel function. - - The transform's catalog. - Name of the column resulting from the transformation of . - The data type on this column will be a known-sized vector of . - Name of column to transform. If set to , - the value of the will be used as source. - This estimator operates on known-sized vector of data type. - The dimension of the feature space to map the input to. - If , use both of cos and sin basis functions to create - two features for every random Fourier frequency. Otherwise, only cos bases would be used. Note that if set - to , the dimension of the output feature space will be 2*. - The argument that indicates which kernel to use. The two available implementations - are and . - The seed of the random number generator for generating the new features (if unspecified, the global random is used). - - - - - - - - - Create an that maps input vectors to a low dimensional - feature space where inner products approximate a shift-invariant kernel function. - - The transform's catalog. - The input columns to use for the transformation. - - - - The MetricsStatistics class computes summary statistics over multiple observations of a metric. - - - - - Get the mean value for the metric. - - - - - Get the standard deviation for the metric. - - - - - Get the standard error of the mean for the metric. - - - - - Get the count for the number of samples used. Useful for interpreting - the standard deviation and the standard error and building confidence intervals. - - - - - Add another metric to the set of observations. - - The metric being accumulated - - - - This interface handles the accumulation of summary statistics over multiple observations of - evaluation metrics. - - The metric results type, such as . - - - - The class holds summary - statistics over multiple observations of . - - - - - Summary statistics for . - - - - - Summary statistics for . - - - - - Summary statistics for . - - - - - Summary statistics for . - - - - - Summary statistics for . - - - - - Add a set of evaluation metrics to the set of observations. - - The observed regression evaluation metric - - - - The class holds summary - statistics over multiple observations of . - - - - - Summary Statistics for . - - - - - Summary Statistics for . - - - - - Summary statistics for . - - - - - Summary statistics for . - - - - - Summary statistics for . - - - - - Summary statistics for . - - - - - Summary statistics for . - - - - - Summary statistics for . - - - - - Add a set of evaluation metrics to the set of observations. - - The observed binary classification evaluation metric - - - - The class holds summary - statistics over multiple observations of . - - - - - Summary statistics for . - - - - - Summary statistics for . - - - - - Summary statistics for . - - - - - Summary statistics for . - - - - - Summary statistics for . - - - - - Summary statistics for . - - - - - Add a set of evaluation metrics to the set of observations. - - The observed binary classification evaluation metric - - - - The class holds summary - statistics over multiple observations of . - - - - - Summary statistics for . - - - - - Summary statistics for . - - - - - Add a set of evaluation metrics to the set of observations. - - The observed regression evaluation metric - - - - This attempts to reads data in a format close to the SVM-light format, the goal being - that the majority of SVM-light formatted data should be interpretable by this loader. - - - , vectors are required to have a logical length, - and for practical reasons it's helpful if the output of this loader has a fixed - length vector type, since few estimators and no basic trainer estimators accept features - of a variable length vector types. SVM-light had no such concept. - 2. The idiom has different behavior w.r.t. parse errors. - 3. The SVM-light has some restrictions in its format that are unnatural to attempt - to restrict in the concept of this loader. - 4. Some common "extensions" of this format that have happened over the years are - accommodated where sensible, often supported by specifying some options. - - The SVM-light format can be summarized here. An SVM-light file can lead with any number - of lines starting with '#'. These are discarded. - {label} {key}:{value} {key}:{value} ... {key}:{value}[#{comment}] - - Lines are not whitespace trimmed, though whitespace within the line, prior to the # - comment character (if any) are ignored. SVM-light itself uses the standard C "isspace" - function, while we respect only space and tab as whitespace. So, the spaces in the - line above could be, say, tabs, and there could even be multiple of them in sequence. - Unlike the text loader's format, for instance, there is no concept of a "blank" field - having any status. - - The feature vector is specified through a series of key/value pairs. SVM-light - requires that the keys be positive, increasing integers, except for three special keys: - cost (we interpret as Weight), qid (we interpret as GroupId) and sid (we ignore these, - but might present them as a column in the future if any of our learners implement anything - resembling slack id). The value for 'cost' is float, 'qid' is a long, and 'sid' is a long - that must be positive. If these keys are specified multiple times, the last one wins. - - SVM-light, if the tail of the value is not interpretable as a number, will ignore the tail. - E.g., "5:3.14hello" will be interpreted the same as "5:3.14". This loader does not support - this syntax. - - We do not retain the restriction on keys needing to be increasing values in our loader, - due to the way we compose our feature vectors, but it will be most efficient if this policy - is still followed. If it is followed a sort will not be required. - - This loader has the special option to read raw text for the keys and convert to feature - indices, retaining the text key values as feature names for the resulting feature vector. - The intent of this is to allow string keys, a common variant of the format, but one - emphatically not allowed by the original format. - ]]> - - - - - This class is used as input for the mapping the input as a line of text. - It is used by two custom mappers: one that maps the text to a float value indicating whether the line of text is a comment - and the other maps the text to an object of type . - - - - - This class contains the mapper that maps an to an . - The mapper parses the label and weight into floats, the group ID into ulong, the comment into a of , - the feature values into a vector of floats and the feature indices/names into a vector of of . - - - - - This class is used for mapping the vector of of field in an object - to a numeric vector of indices. This class is used in case the indices in the input file are numeric. For the case where the input file contains - feature names, instead of a , we use a . - - - - - This class is used by the - that maps a vector of indices and a vector of values into a single of values. - - - - - This class contains the mapper that maps an an - to an . - - - - - This class creates an from an , that has a single text column - called "Text". - - - - - Creates a loader that loads SVM-light format files. . - - The catalog. - The number of features in the Features column. If 0 is specified, the - loader will determine it by looking at the file sample given in . - The number of rows from the sample to be used for determining the number of features. - If the file contains zero-based indices, this parameter should be set to true. If they are one-based - it should be set to false. - A data sample to be used for determining the number of features in the Features column. - - - - - - - - - Creates a loader that loads SVM-light like files, where features are specified by their names. - - The catalog. - The number of rows from the sample to be used for determining the set of feature names. - A data sample to be used for determining the set of features names. - - - - Load a from a text file using . - - The catalog. - The path to the file. - The number of features in the Features column. If 0 is specified, the - loader will determine it by looking at the file given in . - If the file contains zero-based indices, this parameter should be set to true. If they are one-based - it should be set to false. - The number of rows from the sample to be used for determining the number of features. - - - - Load a from a text file containing features specified by feature names, - using . - - The catalog. - The path to the file. - The number of rows from the sample to be used for determining the set of feature names. - - - - Save the in SVM-light format. Four columns can be saved: a label and a features column, - and optionally a group ID column and an example weight column. - - The catalog. - The data view to save. - The stream to write to. - Whether to index the features starting at 0 or at 1. - If set to true, saves 1 for positive labels, -1 for non-positive labels and 0 for NaN. - Otherwise, saves the value of the label in the data view. - The name of the column to be saved as the label column. - The name of the column to be saved as the features column. - The name of the column to be saved as the group ID column. If null, a group ID column - will not be saved. - The name of the column to be saved as the weight column. If null, a weight column - will not be saved. - - - - The SVM-light saver is a saver class that is capable of saving the label, - features, group ID and weight columns of a dataset in SVM-light format. It is a bit - idiosyncratic in that unlike and , there is no - attempt to save all columns, just those specific columns, with other columns being dropped on - the floor. - - - - - This delegate represents a function that gets an n-gram as input, and outputs the id of - the n-gram and whether or not to continue processing n-grams. - - The array containing the n-gram - The n-gram is stored in ngram[0],...ngram[lim-1]. - The index of the column the transform is applied to. - True if processing should continue, false if it should stop. - It is true on input, so only needs to be set to false. - The n-gram slot if it was found, -1 otherwise. - - - - Collection of extension methods for to create instances of numerical - normalization components. - - - - - Normalize (rescale) several columns according to the specified . - - The transform catalog - The used to map the old values to the new ones. - The pairs of input and output columns. - - - - Create a , which normalizes based on the observed minimum and maximum values of the data. - - The transform catalog - Name of the column resulting from the transformation of . - The data type on this column is the same as the input column. - Name of the column to transform. If set to , the value of the will be used as source. - The data type on this column should be , or a known-sized vector of those types. - Maximum number of examples used to train the normalizer. - Whether to map zero to zero, preserving sparsity. - - - - - - - - - Create a , which normalizes based on the observed minimum and maximum values of the data. - - The transform catalog - The pairs of input and output columns. - The input columns must be of data type , or a known-sized vector of those types. - The data type for the output column will be the same as the associated input column. - Maximum number of examples used to train the normalizer. - Whether to map zero to zero, preserving sparsity. - - - - - - - - - Create a , which normalizes based on the computed mean and variance of the data. - - The transform catalog - Name of the column resulting from the transformation of . - The data type on this column is the same as the input column. - Name of the column to transform. If set to , the value of the will be used as source. - The data type on this column should be , or a known-sized vector of those types. - Maximum number of examples used to train the normalizer. - Whether to map zero to zero, preserving sparsity. - Whether to use CDF as the output. - - - - - - - - - Create a , which normalizes based on the computed mean and variance of the data. - - The transform catalog - The pairs of input and output columns. - The input columns must be of data type , or a known-sized vector of those types. - The data type for the output column will be the same as the associated input column. - Maximum number of examples used to train the normalizer. - Whether to map zero to zero, preserving sparsity. - Whether to use CDF as the output. - - - - Create a , which normalizes based on the computed mean and variance of the logarithm of the data. - - The transform catalog - Name of the column resulting from the transformation of . - The data type on this column is the same as the input column. - Name of the column to transform. If set to , the value of the will be used as source. - The data type on this column should be , or a known-sized vector of those types. - Maximum number of examples used to train the normalizer. - Whether to use CDF as the output. - - - - - - - - - Create a , which normalizes based on the computed mean and variance of the logarithm of the data. - - The transform catalog - The pairs of input and output columns. - The input columns must be of data type , or a known-sized vector of those types. - The data type for the output column will be the same as the associated input column. - Maximum number of examples used to train the normalizer. - Whether to use CDF as the output. - - - - Create a , which normalizes based on the computed mean and variance of the logarithm of the data. - - The transform catalog - Name of the column resulting from the transformation of . - The data type on this column is the same as the input column. - Whether to map zero to zero, preserving sparsity. - Name of the column to transform. If set to , the value of the will be used as source. - The data type on this column should be , or a known-sized vector of those types. - Maximum number of examples used to train the normalizer. - Whether to use CDF as the output. - - - - - - - - - Create a , which normalizes based on the computed mean and variance of the logarithm of the data. - - The transform catalog - The pairs of input and output columns. - The input columns must be of data type , or a known-sized vector of those types. - The data type for the output column will be the same as the associated input column. - Whether to map zero to zero, preserving sparsity. - Maximum number of examples used to train the normalizer. - Whether to use CDF as the output. - - - - Create a , which normalizes by assigning the data into bins with equal density. - - The transform catalog - Name of the column resulting from the transformation of . - The data type on this column is the same as the input column. - Name of the column to transform. If set to , the value of the will be used as source. - The data type on this column should be , or a known-sized vector of those types. - Maximum number of examples used to train the normalizer. - Whether to map zero to zero, preserving sparsity. - Maximum number of bins (power of 2 recommended). - - - - - - - - - Create a , which normalizes by assigning the data into bins with equal density. - - The transform catalog - The pairs of input and output columns. - The input columns must be of data type , or a known-sized vector of those types. - The data type for the output column will be the same as the associated input column. - Maximum number of examples used to train the normalizer. - Whether to map zero to zero, preserving sparsity. - Maximum number of bins (power of 2 recommended). - - - - - - - - - Create a , which normalizes by assigning the data into bins based on correlation with the column. - - The transform catalog - Name of the column resulting from the transformation of . - The data type on this column is the same as the input column. - Name of the column to transform. If set to , the value of the will be used as source. - The data type on this column should be , or a known-sized vector of those types. - Name of the label column for supervised binning. - Maximum number of examples used to train the normalizer. - Whether to map zero to zero, preserving sparsity. - Maximum number of bins (power of 2 recommended). - Minimum number of examples per bin. - - - - - - - - - Create a , which normalizes by assigning the data into bins based on correlation with the column. - - The transform catalog - The pairs of input and output columns. - The input columns must be of data type , or a known-sized vector of those types. - The data type for the output column will be the same as the associated input column. - Name of the label column for supervised binning. - Maximum number of examples used to train the normalizer. - Whether to map zero to zero, preserving sparsity. - Maximum number of bins (power of 2 recommended). - Minimum number of examples per bin. - - - - Create a , which normalizes using statistics that are robust to outliers by centering the data around 0 (removing the median) and scales - the data according to the quantile range (defaults to the interquartile range). - - The transform catalog - Name of the column resulting from the transformation of . - The data type on this column is the same as the input column. - Name of the column to transform. If set to , the value of the will be used as source. - The data type on this column should be , or a known-sized vector of those types. - Maximum number of examples used to train the normalizer. - Whether to center the data around 0 by removing the median. Defaults to true. - Quantile min used to scale the data. Defaults to 25. - Quantile max used to scale the data. Defaults to 75. - - - - - - - - - Create a , which normalizes using statistics that are robust to outliers by centering the data around 0 (removing the median) and scales - the data according to the quantile range (defaults to the interquartile range). - - The transform catalog - The pairs of input and output columns. - The input columns must be of data type , or a known-sized vector of those types. - The data type for the output column will be the same as the associated input column. - Maximum number of examples used to train the normalizer. - Whether to center the data around 0 be removing the median. Defaults to true. - Quantile min used to scale the data. Defaults to 25. - Quantile max used to scale the data. Defaults to 75. - - - - - - - - - Normalize (rescale) columns according to specified custom parameters. - - The transform catalog - The normalization settings for all the columns - - - - Create a , which normalizes (scales) vectors in the input column to the unit norm. - The type of norm that is used is defined by . Setting to , - will apply a pre-processing step to make the specified column's mean be a zero vector. - - The transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be the same as the input column's data type. - Name of the column to normalize. If set to , the value of the - will be used as source. - This estimator operates over known-sized vectors of . - Type of norm to use to normalize each sample. The indicated norm of the resulting vector will be normalized to one. - If , subtract mean from each value before normalizing and use the raw input otherwise. - - - - - - - - - Takes column filled with a vector of floats and normalize its norm to one. Note that the allowed norm functions are defined in . - - The transform's catalog. - Describes the parameters of the lp-normalization process for each column pair. - - - - Create a , which normalizes columns individually applying global contrast normalization. - Setting to , will apply a pre-processing step to make the specified column's mean be the zero vector. - - The transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be the same as the input column's data type. - Name of the column to normalize. If set to , the value of the - will be used as source. - This estimator operates over known-sized vectors of . - If , subtract mean from each value before normalizing and use the raw input otherwise. - If , the resulting vector's standard deviation would be one. - Otherwise, the resulting vector's L2-norm would be one. - Scale features by this value. - - - - - - - - - Takes columns filled with a vector of floats and computes global contrast normalization of it. - - The transform's catalog. - Describes the parameters of the gcn-normaliztion process for each column pair. - - - - Collection of extension methods used by , - , , - and to create instances of permutation feature importance components. - - - - - Permutation Feature Importance (PFI) for Regression. - - - - Permutation feature importance (PFI) is a technique to determine the global importance of features in a trained - machine learning model. PFI is a simple yet powerful technique motivated by Breiman in his Random Forest paper, section 10 - (Breiman. "Random Forests." Machine Learning, 2001.) - The advantage of the PFI method is that it is model agnostic -- it works with any model that can be - evaluated -- and it can use any dataset, not just the training set, to compute feature importance metrics. - - - PFI works by taking a labeled dataset, choosing a feature, and permuting the values - for that feature across all the examples, so that each example now has a random value for the feature and - the original values for all other features. The evaluation metric (e.g. R-squared) is then calculated - for this modified dataset, and the change in the evaluation metric from the original dataset is computed. - The larger the change in the evaluation metric, the more important the feature is to the model. - PFI works by performing this permutation analysis across all the features of a model, one after another. - - - In this implementation, PFI computes the change in all possible regression evaluation metrics for each feature, and an - of objects is returned. See the sample below for an - example of working with these results to analyze the feature importance of a model. - - - - - - - - The regression catalog. - The model on which to evaluate feature importance. - The evaluation data set. - Label column name. The column data must be . - Use features weight to pre-filter features. - Limit the number of examples to evaluate on. means up to ~2 bln examples from will be used. - The number of permutations to perform. - Array of per-feature 'contributions' to the score. - - - - Permutation Feature Importance (PFI) for Regression. - - - - Permutation feature importance (PFI) is a technique to determine the global importance of features in a trained - machine learning model. PFI is a simple yet powerful technique motivated by Breiman in his Random Forest paper, section 10 - (Breiman. "Random Forests." Machine Learning, 2001.) - The advantage of the PFI method is that it is model agnostic -- it works with any model that can be - evaluated -- and it can use any dataset, not just the training set, to compute feature importance metrics. - - - PFI works by taking a labeled dataset, choosing a feature, and permuting the values - for that feature across all the examples, so that each example now has a random value for the feature and - the original values for all other features. The evaluation metric (e.g. R-squared) is then calculated - for this modified dataset, and the change in the evaluation metric from the original dataset is computed. - The larger the change in the evaluation metric, the more important the feature is to the model. - PFI works by performing this permutation analysis across all the features of a model, one after another. - - - In this implementation, PFI computes the change in all possible regression evaluation metrics for each feature, and an - of objects is returned. See the sample below for an - example of working with these results to analyze the feature importance of a model. - - - - - - - - The regression catalog. - The model on which to evaluate feature importance. - The evaluation data set. - Label column name. The column data must be . - Use features weight to pre-filter features. - Limit the number of examples to evaluate on. means up to ~2 bln examples from will be used. - The number of permutations to perform. - Dictionary mapping each feature to its per-feature 'contributions' to the score. - - - - Permutation Feature Importance (PFI) for Binary Classification. - - - - Permutation feature importance (PFI) is a technique to determine the global importance of features in a trained - machine learning model. PFI is a simple yet powerful technique motivated by Breiman in his Random Forest paper, section 10 - (Breiman. "Random Forests." Machine Learning, 2001.) - The advantage of the PFI method is that it is model agnostic -- it works with any model that can be - evaluated -- and it can use any dataset, not just the training set, to compute feature importance metrics. - - - PFI works by taking a labeled dataset, choosing a feature, and permuting the values - for that feature across all the examples, so that each example now has a random value for the feature and - the original values for all other features. The evaluation metric (e.g. AUC) is then calculated - for this modified dataset, and the change in the evaluation metric from the original dataset is computed. - The larger the change in the evaluation metric, the more important the feature is to the model. - PFI works by performing this permutation analysis across all the features of a model, one after another. - - - In this implementation, PFI computes the change in all possible binary classification evaluation metrics for each feature, and an - of objects is returned. See the sample below for an - example of working with these results to analyze the feature importance of a model. - - - - - - - - The binary classification catalog. - The model on which to evaluate feature importance. - The evaluation data set. - Label column name. The column data must be . - Use features weight to pre-filter features. - Limit the number of examples to evaluate on. means up to ~2 bln examples from will be used. - The number of permutations to perform. - Array of per-feature 'contributions' to the score. - - - - Permutation Feature Importance (PFI) for Binary Classification. - - - - Permutation feature importance (PFI) is a technique to determine the global importance of features in a trained - machine learning model. PFI is a simple yet powerful technique motivated by Breiman in his Random Forest paper, section 10 - (Breiman. "Random Forests." Machine Learning, 2001.) - The advantage of the PFI method is that it is model agnostic -- it works with any model that can be - evaluated -- and it can use any dataset, not just the training set, to compute feature importance metrics. - - - PFI works by taking a labeled dataset, choosing a feature, and permuting the values - for that feature across all the examples, so that each example now has a random value for the feature and - the original values for all other features. The evaluation metric (e.g. AUC) is then calculated - for this modified dataset, and the change in the evaluation metric from the original dataset is computed. - The larger the change in the evaluation metric, the more important the feature is to the model. - PFI works by performing this permutation analysis across all the features of a model, one after another. - - - In this implementation, PFI computes the change in all possible binary classification evaluation metrics for each feature, and an - of objects is returned. See the sample below for an - example of working with these results to analyze the feature importance of a model. - - - - - - - - The binary classification catalog. - The model on which to evaluate feature importance. - The evaluation data set. - Label column name. The column data must be . - Use features weight to pre-filter features. - Limit the number of examples to evaluate on. means up to ~2 bln examples from will be used. - The number of permutations to perform. - Dictionary mapping each feature to its per-feature 'contributions' to the score. - - - - Permutation Feature Importance (PFI) for MulticlassClassification. - - - - Permutation feature importance (PFI) is a technique to determine the global importance of features in a trained - machine learning model. PFI is a simple yet powerful technique motivated by Breiman in his Random Forest paper, section 10 - (Breiman. "Random Forests." Machine Learning, 2001.) - The advantage of the PFI method is that it is model agnostic -- it works with any model that can be - evaluated -- and it can use any dataset, not just the training set, to compute feature importance metrics. - - - PFI works by taking a labeled dataset, choosing a feature, and permuting the values - for that feature across all the examples, so that each example now has a random value for the feature and - the original values for all other features. The evaluation metric (e.g. micro-accuracy) is then calculated - for this modified dataset, and the change in the evaluation metric from the original dataset is computed. - The larger the change in the evaluation metric, the more important the feature is to the model. - PFI works by performing this permutation analysis across all the features of a model, one after another. - - - In this implementation, PFI computes the change in all possible multiclass classification evaluation metrics for each feature, and an - of objects is returned. See the sample below for an - example of working with these results to analyze the feature importance of a model. - - - - - - - - The multiclass classification catalog. - The model on which to evaluate feature importance. - The evaluation data set. - Label column name. The column data must be . - Use features weight to pre-filter features. - Limit the number of examples to evaluate on. means up to ~2 bln examples from will be used. - The number of permutations to perform. - Array of per-feature 'contributions' to the score. - - - - Permutation Feature Importance (PFI) for MulticlassClassification. - - - - Permutation feature importance (PFI) is a technique to determine the global importance of features in a trained - machine learning model. PFI is a simple yet powerful technique motivated by Breiman in his Random Forest paper, section 10 - (Breiman. "Random Forests." Machine Learning, 2001.) - The advantage of the PFI method is that it is model agnostic -- it works with any model that can be - evaluated -- and it can use any dataset, not just the training set, to compute feature importance metrics. - - - PFI works by taking a labeled dataset, choosing a feature, and permuting the values - for that feature across all the examples, so that each example now has a random value for the feature and - the original values for all other features. The evaluation metric (e.g. micro-accuracy) is then calculated - for this modified dataset, and the change in the evaluation metric from the original dataset is computed. - The larger the change in the evaluation metric, the more important the feature is to the model. - PFI works by performing this permutation analysis across all the features of a model, one after another. - - - In this implementation, PFI computes the change in all possible multiclass classification evaluation metrics for each feature, and an - of objects is returned. See the sample below for an - example of working with these results to analyze the feature importance of a model. - - - - - - - - The multiclass classification catalog. - The model on which to evaluate feature importance. - The evaluation data set. - Label column name. The column data must be . - Use features weight to pre-filter features. - Limit the number of examples to evaluate on. means up to ~2 bln examples from will be used. - The number of permutations to perform. - Dictionary mapping each feature to its per-feature 'contributions' to the score. - - - - Permutation Feature Importance (PFI) for Ranking. - - - - Permutation feature importance (PFI) is a technique to determine the global importance of features in a trained - machine learning model. PFI is a simple yet powerful technique motivated by Breiman in his Random Forest paper, section 10 - (Breiman. "Random Forests." Machine Learning, 2001.) - The advantage of the PFI method is that it is model agnostic -- it works with any model that can be - evaluated -- and it can use any dataset, not just the training set, to compute feature importance metrics. - - - PFI works by taking a labeled dataset, choosing a feature, and permuting the values - for that feature across all the examples, so that each example now has a random value for the feature and - the original values for all other features. The evaluation metric (e.g. NDCG) is then calculated - for this modified dataset, and the change in the evaluation metric from the original dataset is computed. - The larger the change in the evaluation metric, the more important the feature is to the model. - PFI works by performing this permutation analysis across all the features of a model, one after another. - - - In this implementation, PFI computes the change in all possible ranking evaluation metrics for each feature, and an - of objects is returned. See the sample below for an - example of working with these results to analyze the feature importance of a model. - - - - - - - - The ranking catalog. - The model on which to evaluate feature importance. - The evaluation data set. - Label column name. The column data must be or . - GroupId column name - Use features weight to pre-filter features. - Limit the number of examples to evaluate on. means up to ~2 bln examples from will be used. - The number of permutations to perform. - Array of per-feature 'contributions' to the score. - - - - Permutation Feature Importance (PFI) for Ranking. - - - - Permutation feature importance (PFI) is a technique to determine the global importance of features in a trained - machine learning model. PFI is a simple yet powerful technique motivated by Breiman in his Random Forest paper, section 10 - (Breiman. "Random Forests." Machine Learning, 2001.) - The advantage of the PFI method is that it is model agnostic -- it works with any model that can be - evaluated -- and it can use any dataset, not just the training set, to compute feature importance metrics. - - - PFI works by taking a labeled dataset, choosing a feature, and permuting the values - for that feature across all the examples, so that each example now has a random value for the feature and - the original values for all other features. The evaluation metric (e.g. NDCG) is then calculated - for this modified dataset, and the change in the evaluation metric from the original dataset is computed. - The larger the change in the evaluation metric, the more important the feature is to the model. - PFI works by performing this permutation analysis across all the features of a model, one after another. - - - In this implementation, PFI computes the change in all possible ranking evaluation metrics for each feature, and an - of objects is returned. See the sample below for an - example of working with these results to analyze the feature importance of a model. - - - - - - - - The ranking catalog. - The model on which to evaluate feature importance. - The evaluation data set. - Label column name. The column data must be or . - GroupId column name - Use features weight to pre-filter features. - Limit the number of examples to evaluate on. means up to ~2 bln examples from will be used. - The number of permutations to perform. - Dictionary mapping each feature to its per-feature 'contributions' to the score. - - - - Collection of extension methods for the . - - - - - Create a , which transforms a text column into a featurized vector of that represents normalized counts of n-grams and char-grams. - - The text-related transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be a vector of . - Name of the column to transform. If set to , the value of the will be used as source. - This estimator operates over text data. - - - - - - - - - - Create a , which transforms a text column into featurized vector of that represents normalized counts of n-grams and char-grams. - - This transform can operate over several columns. - The text-related transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be a vector of . - - Advanced options to the algorithm. - Name of the columns to transform. If set to , the value of the will be used as source. - This estimator operates over text data, and it can transform several columns at once, yielding one vector of - as the resulting features for all columns. - - - - - - - - - Create a , which tokenizes by splitting text into sequences of characters - using a sliding window. - - The text-related transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be a variable-sized vector of keys. - Name of the column to transform. If set to , the value of the - will be used as source. - This estimator operates over text data type. - To be able to distinguish the tokens, for example for debugging purposes, - you can choose to prepend a marker character, , to the beginning, - and append another marker character, , to the end of the output vector of characters. - - - - - - - - - Create a , which tokenizes incoming text in input columns and output the tokens as output columns. - - The text-related transform's catalog. - Whether to prepend a marker character, , to the beginning, - and append another marker character, , to the end of the output vector of characters. - Pairs of columns to run the tokenization on. - - - - Creates a , which normalizes incoming text in by optionally - changing case, removing diacritical marks, punctuation marks, numbers, and outputs new text as . - - The text-related transform's catalog. - Name of the column resulting from the transformation of . - This column's data type is a scalar or a vector of text depending on the input column data type. - Name of the column to transform. If set to , - the value of the will be used as source. - This estimator operates on text or vector of text data types. - Casing text using the rules of the invariant culture. - Whether to keep diacritical marks or remove them. - Whether to keep punctuation marks or remove them. - Whether to keep numbers or remove them. - - - - - - - - - Create an , which is a text featurizer that converts a vector - of text into a numerical vector using pre-trained embeddings models. - - The text-related transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be a vector of . - Name of the column to transform. If set to , - the value of the will be used as source. - This estimator operates over known-size vector of text data type. - The embeddings to use. - - - - - - - - - Create an , which is a text featurizer that converts vectors - of text into numerical vectors using pre-trained embeddings models. - - The text-related transform's catalog. - The path of the pre-trained embeddings model to use. - Name of the column resulting from the transformation of . - This column's data type will be a vector of . - Name of the column to transform. If set to , - the value of the will be used as source. - This estimator operates over known-size vector of text data type. - - - - - - - - - Create an , which is a text featurizer that converts vectors - of text into numerical vectors using pre-trained embeddings models. - - The text-related transform's catalog. - The embeddings to use. - The array columns, and per-column configurations to extract embeddings from. - - - - - - - - - Create a , which tokenizes input text using as separators. - - The text-related transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be a variable-size vector of text. - Name of the column to transform. If set to , the value of the will be used as source. - This estimator operates on scalar of text and vector of text data type. - The separators to use (uses space character by default). - - - - - - - - - Tokenizes incoming text in input columns, using per-column configurations, and outputs the tokens. - - The text-related transform's catalog. - Pairs of columns to run the tokenization on. - - - - Creates a which produces a vector of counts of n-grams (sequences of consecutive words) - encountered in the input text. - - The text-related transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be a vector of . - Name of the column to transform. If set to , the value of the will be used as source. - This estimator operates over vectors of keys data type. - Ngram length. - Number of tokens to skip between each n-gram. By default no token is skipped. - Whether to include all n-gram lengths up to or only . - Maximum number of n-grams to store in the dictionary. - Statistical measure used to evaluate how important a word or n-gram is to a document in a corpus. - When is smaller than the total number of encountered n-grams this measure is used - to determine which n-grams to keep. - - - - - - - - - Produces a bag of counts of n-grams (sequences of consecutive words) in - and outputs bag of word vector for each output in - - The text-related transform's catalog. - Pairs of columns to run the n-gram process on. - - - - Create a , which copies the data from the column specified in - to a new column: and removes predifined set of text specific for from it. - - The transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be variable-size vector of text. - Name of the column to copy the data from. - This estimator operates over vector of text. - Langauge of the input text column . - - - - - - - - - Create a , which copies the data from the column specified in - to a new column: and removes text specified in from it. - - The transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be variable-size vector of text. - Name of the column to copy the data from. - This estimator operates over a vector of text. - Array of words to remove. - - - - - - - - - Create a , which maps the column specified in - to a vector of n-gram counts in a new column named . - - - is different from in that the former - tokenizes text internally and the latter takes tokenized text as input. - - The transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be known-size vector of . - Name of the column to take the data from. - This estimator operates over vector of text. - Ngram length. - Maximum number of tokens to skip when constructing an n-gram. - Whether to include all n-gram lengths up to or only . - Maximum number of n-grams to store in the dictionary. - Statistical measure used to evaluate how important a word is to a document in a corpus. - - - - Create a , which maps the column specified in - to a vector of n-gram counts in a new column named . - - - is different from in that the former - tokenizes text internally and the latter takes tokenized text as input. - - The transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be known-size vector of . - Name of the column to take the data from. - Maximum number of n-grams to store in the dictionary. - Separator used to separate terms/frequency pairs. - Separator used to separate terms from their frequency. - This estimator operates over vector of text. - - - - Create a , which maps the multiple columns specified in - to a vector of n-gram counts in a new column named . - - - is different from in that the former - tokenizes text internally and the latter takes tokenized text as input. - - The transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be known-size vector of . - Names of the multiple columns to take the data from. - This estimator operates over vector of text. - Ngram length. - Maximum number of tokens to skip when constructing an n-gram. - Whether to include all n-gram lengths up to or only . - Maximum number of n-grams to store in the dictionary. - Statistical measure used to evaluate how important a word is to a document in a corpus. - - - - Create a , which maps the column specified in - to a vector of counts of hashed n-grams in a new column named . - - - is different from in that the former - tokenizes text internally and the latter takes tokenized text as input. - - The transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be known-size vector of . - Name of the column to take the data from. - This estimator operates over vector of text. - Number of bits to hash into. Must be between 1 and 30, inclusive. - Ngram length. - Maximum number of tokens to skip when constructing an n-gram. - Whether to include all n-gram lengths up to or only . - Hashing seed. - Whether the position of each source column should be included in the hash (when there are multiple source columns). - During hashing we construct mappings between original values and the produced hash values. - Text representation of original values are stored in the slot names of the annotations for the new column. Hashing, as such, can map many initial values to one. - specifies the upper bound of the number of distinct input values mapping to a hash that should be retained. - 0 does not retain any input values. -1 retains all input values mapping to each hash. - - - - Create a , which maps the multiple columns specified in - to a vector of counts of hashed n-grams in a new column named . - - - is different from in that the former - tokenizes text internally and the latter takes tokenized text as input. - - The transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be known-size vector of . - Names of the multiple columns to take the data from. - This estimator operates over vector of text. - Number of bits to hash into. Must be between 1 and 30, inclusive. - Ngram length. - Maximum number of tokens to skip when constructing an n-gram. - Whether to include all n-gram lengths up to or only . - Hashing seed. - Whether the position of each source column should be included in the hash (when there are multiple source columns). - During hashing we construct mappings between original values and the produced hash values. - Text representation of original values are stored in the slot names of the annotations for the new column.Hashing, as such, can map many initial values to one. - specifies the upper bound of the number of distinct input values mapping to a hash that should be retained. - 0 does not retain any input values. -1 retains all input values mapping to each hash. - - - - Create a , which copies the data from the column specified in - to a new column: and produces a vector of counts of hashed n-grams. - - - is different from in a way that - takes tokenized text as input while tokenizes text internally. - - The transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be vector of . - Name of the column to copy the data from. - This estimator operates over vector of key type. - Number of bits to hash into. Must be between 1 and 30, inclusive. - Ngram length. - Maximum number of tokens to skip when constructing an n-gram. - Whether to include all n-gram lengths up to or only . - Hashing seed. - Whether the position of each source column should be included in the hash (when there are multiple source columns). - During hashing we construct mappings between original values and the produced hash values. - Text representation of original values are stored in the slot names of the annotations for the new column.Hashing, as such, can map many initial values to one. - specifies the upper bound of the number of distinct input values mapping to a hash that should be retained. - 0 does not retain any input values. -1 retains all input values mapping to each hash. - Whether to rehash unigrams. - - - - Create a , which takes the data from the multiple columns specified in - to a new column: and produces a vector of counts of hashed n-grams. - - - is different from in a way that - takes tokenized text as input while tokenizes text internally. - - The transform's catalog. - Name of the column resulting from the transformation of . - This column's data type will be vector of known size of . - Name of the multiple columns to take the data from. - This estimator operates over vector of key type. - Number of bits to hash into. Must be between 1 and 30, inclusive. - Ngram length. - Maximum number of tokens to skip when constructing an n-gram. - Whether to include all n-gram lengths up to or only . - Hashing seed. - Whether the position of each source column should be included in the hash (when there are multiple source columns). - During hashing we construct mappings between original values and the produced hash values. - Text representation of original values are stored in the slot names of the annotations for the new column.Hashing, as such, can map many initial values to one. - specifies the upper bound of the number of distinct input values mapping to a hash that should be retained. - 0 does not retain any input values. -1 retains all input values mapping to each hash. - Whether to rehash unigrams. - - - - - - - - - Produces a bag of counts of hashed n-grams for each . For each column, - are the input columns of the output column named as . - - is different from in a way that - takes tokenized text as input while tokenizes text internally. - - The text-related transform's catalog. - Pairs of columns to compute n-grams. Note that gram indices are generated by hashing. - - - - Create a , which uses LightLDA to transform text (represented as a vector of floats) - into a vector of indicating the similarity of the text with each topic identified. - - The transform's catalog. - Name of the column resulting from the transformation of . - This estimator outputs a vector of . - Name of the column to transform. If set to , the value of the will be used as source. - This estimator operates over a vector of . - - The number of topics. - Dirichlet prior on document-topic vectors. - Dirichlet prior on vocab-topic vectors. - Number of Metropolis Hasting step. - Number of iterations. - Compute log likelihood over local dataset on this iteration interval. - The number of training threads. Default value depends on number of logical processors. - The threshold of maximum count of tokens per doc. - The number of words to summarize the topic. - The number of burn-in iterations. - Reset the random number generator for each document. - - - - - - - - - Uses LightLDA to transform a document (represented as a vector of floats) - into a vector of floats over a set of topics. - - The transform's catalog. - Describes the parameters of LDA for each column pair. - -
-
diff --git a/W/Debug_Folder/Microsoft.ML.dll b/W/Debug_Folder/Microsoft.ML.dll deleted file mode 100644 index dd6a5a276..000000000 Binary files a/W/Debug_Folder/Microsoft.ML.dll and /dev/null differ diff --git a/W/Debug_Folder/Microsoft.ML.xml b/W/Debug_Folder/Microsoft.ML.xml deleted file mode 100644 index 2c0d4a7c1..000000000 --- a/W/Debug_Folder/Microsoft.ML.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - Microsoft.ML - - - - diff --git a/W/Debug_Folder/Newtonsoft.Json.dll b/W/Debug_Folder/Newtonsoft.Json.dll deleted file mode 100644 index 7af125a24..000000000 Binary files a/W/Debug_Folder/Newtonsoft.Json.dll and /dev/null differ diff --git a/W/Debug_Folder/Newtonsoft.Json.xml b/W/Debug_Folder/Newtonsoft.Json.xml deleted file mode 100644 index 008e0ca23..000000000 --- a/W/Debug_Folder/Newtonsoft.Json.xml +++ /dev/null @@ -1,11305 +0,0 @@ - - - - Newtonsoft.Json - - - - - Represents a BSON Oid (object id). - - - - - Gets or sets the value of the Oid. - - The value of the Oid. - - - - Initializes a new instance of the class. - - The Oid value. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. - - - - - Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. - - - true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. - - - - - Gets or sets a value indicating whether the root object will be read as a JSON array. - - - true if the root object will be read as a JSON array; otherwise, false. - - - - - Gets or sets the used when reading values from BSON. - - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. - - - - - Gets or sets the used when writing values to BSON. - When set to no conversion will occur. - - The used when writing values to BSON. - - - - Initializes a new instance of the class. - - The to write to. - - - - Initializes a new instance of the class. - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. - - - - - Writes the end. - - The token. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes the beginning of a JSON array. - - - - - Writes the beginning of a JSON object. - - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Closes this writer. - If is set to true, the underlying is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value that represents a BSON object id. - - The Object ID value to write. - - - - Writes a BSON regex. - - The regex pattern. - The regex options. - - - - Specifies how constructors are used when initializing objects during deserialization by the . - - - - - First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. - - - - - Json.NET will use a non-public default constructor before falling back to a parameterized constructor. - - - - - Converts a binary value to and from a base 64 string value. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Creates a custom object. - - The object type to convert. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Creates an object which will then be populated by the serializer. - - Type of the object. - The created object. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, false. - - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Provides a base class for converting a to and from JSON. - - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a F# discriminated union type to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an Entity Framework to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, false. - - - - - Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). - - - - - Gets or sets the date time styles used when converting a date to and from JSON. - - The date time styles used when converting a date to and from JSON. - - - - Gets or sets the date time format used when converting a date to and from JSON. - - The date time format used when converting a date to and from JSON. - - - - Gets or sets the culture used when converting a date to and from JSON. - - The culture used when converting a date to and from JSON. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from its name string value. - - - - - Gets or sets a value indicating whether the written enum text should be camel case. - The default value is false. - - true if the written enum text will be camel case; otherwise, false. - - - - Gets or sets the naming strategy used to resolve how enum text is written. - - The naming strategy used to resolve how enum text is written. - - - - Gets or sets a value indicating whether integer values are allowed when serializing and deserializing. - The default value is true. - - true if integers are allowed when serializing and deserializing; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - true if the written enum text will be camel case; otherwise, false. - - - - Initializes a new instance of the class. - - The naming strategy used to resolve how enum text is written. - true if integers are allowed when serializing and deserializing; otherwise, false. - - - - Initializes a new instance of the class. - - The of the used to write enum text. - - - - Initializes a new instance of the class. - - The of the used to write enum text. - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - - Initializes a new instance of the class. - - The of the used to write enum text. - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - true if integers are allowed when serializing and deserializing; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from Unix epoch time - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Converts a to and from a string (e.g. "1.2.3.4"). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts XML to and from JSON. - - - - - Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. - - The name of the deserialized root element. - - - - Gets or sets a value to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - true if the array attribute is written to the XML; otherwise, false. - - - - Gets or sets a value indicating whether to write the root JSON object. - - true if the JSON root object is omitted; otherwise, false. - - - - Gets or sets a value indicating whether to encode special characters when converting JSON to XML. - If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify - XML namespaces, attributes or processing directives. Instead special characters are encoded and written - as part of the XML element name. - - true if special characters are encoded; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The calling serializer. - The value. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Checks if the is a namespace attribute. - - Attribute name to test. - The attribute name prefix if it has one, otherwise an empty string. - true if attribute name is for a namespace attribute, otherwise false. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Specifies how dates are formatted when writing JSON text. - - - - - Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". - - - - - Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". - - - - - Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. - - - - - Date formatted strings are not parsed to a date type and are read as strings. - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Specifies how to treat the time value when converting between string and . - - - - - Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. - - - - - Treat as a UTC. If the object represents a local time, it is converted to a UTC. - - - - - Treat as a local time if a is being converted to a string. - If a string is being converted to , convert to a local time if a time zone is specified. - - - - - Time zone information should be preserved when converting. - - - - - The default JSON name table implementation. - - - - - Initializes a new instance of the class. - - - - - Gets a string containing the same characters as the specified range of characters in the given array. - - The character array containing the name to find. - The zero-based index into the array specifying the first character of the name. - The number of characters in the name. - A string containing the same characters as the specified range of characters in the given array. - - - - Adds the specified string into name table. - - The string to add. - This method is not thread-safe. - The resolved string. - - - - Specifies default value handling options for the . - - - - - - - - - Include members where the member value is the same as the member's default value when serializing objects. - Included members are written to JSON. Has no effect when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - so that it is not written to JSON. - This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, - decimals and floating point numbers; and false for booleans). The default value ignored can be changed by - placing the on the property. - - - - - Members with a default value but no JSON will be set to their default value when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - and set members to their default value when deserializing. - - - - - Specifies float format handling options when writing special floating point numbers, e.g. , - and with . - - - - - Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". - - - - - Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. - Note that this will produce non-valid JSON. - - - - - Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. - - - - - Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Floating point numbers are parsed to . - - - - - Floating point numbers are parsed to . - - - - - Specifies formatting options for the . - - - - - No special formatting is applied. This is the default. - - - - - Causes child objects to be indented according to the and settings. - - - - - Provides an interface for using pooled arrays. - - The array type content. - - - - Rent an array from the pool. This array must be returned when it is no longer needed. - - The minimum required length of the array. The returned array may be longer. - The rented array from the pool. This array must be returned when it is no longer needed. - - - - Return an array to the pool. - - The array that is being returned. - - - - Provides an interface to enable a class to return line and position information. - - - - - Gets a value indicating whether the class can return line information. - - - true if and can be provided; otherwise, false. - - - - - Gets the current line number. - - The current line number or 0 if no line information is available (for example, when returns false). - - - - Gets the current line position. - - The current line position or 0 if no line information is available (for example, when returns false). - - - - Instructs the how to serialize the collection. - - - - - Gets or sets a value indicating whether null items are allowed in the collection. - - true if null items are allowed in the collection; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with a flag indicating whether the array can contain null items. - - A flag indicating whether the array can contain null items. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to use the specified constructor when deserializing that object. - - - - - Instructs the how to serialize the object. - - - - - Gets or sets the id. - - The id. - - - - Gets or sets the title. - - The title. - - - - Gets or sets the description. - - The description. - - - - Gets or sets the collection's items converter. - - The collection's items converter. - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets a value that indicates whether to preserve object references. - - - true to keep object reference; otherwise, false. The default is false. - - - - - Gets or sets a value that indicates whether to preserve collection's items references. - - - true to keep collection's items object references; otherwise, false. The default is false. - - - - - Gets or sets the reference loop handling used when serializing the collection's items. - - The reference loop handling. - - - - Gets or sets the type name handling used when serializing the collection's items. - - The type name handling. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Provides methods for converting between .NET types and JSON types. - - - - - - - - Gets or sets a function that creates default . - Default settings are automatically used by serialization methods on , - and and on . - To serialize without using any default settings create a with - . - - - - - Represents JavaScript's boolean value true as a string. This field is read-only. - - - - - Represents JavaScript's boolean value false as a string. This field is read-only. - - - - - Represents JavaScript's null as a string. This field is read-only. - - - - - Represents JavaScript's undefined as a string. This field is read-only. - - - - - Represents JavaScript's positive infinity as a string. This field is read-only. - - - - - Represents JavaScript's negative infinity as a string. This field is read-only. - - - - - Represents JavaScript's NaN as a string. This field is read-only. - - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - The time zone handling when the date is converted to a string. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - The string escape handling. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Serializes the specified object to a JSON string. - - The object to serialize. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting. - - The object to serialize. - Indicates how the output should be formatted. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a collection of . - - The object to serialize. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting and a collection of . - - The object to serialize. - Indicates how the output should be formatted. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using formatting and . - - The object to serialize. - Indicates how the output should be formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - Indicates how the output should be formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Deserializes the JSON to a .NET object. - - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to a .NET object using . - - The JSON to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The JSON to deserialize. - The of object being deserialized. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The type of the object to deserialize to. - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the given anonymous type. - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the given anonymous type using . - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The type of the object to deserialize to. - The JSON to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The type of the object to deserialize to. - The object to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The JSON to deserialize. - The type of the object to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The JSON to deserialize. - The type of the object to deserialize to. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Populates the object with values from the JSON string. - - The JSON to populate values from. - The target object to populate values onto. - - - - Populates the object with values from the JSON string using . - - The JSON to populate values from. - The target object to populate values onto. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - - - - Serializes the to a JSON string. - - The node to serialize. - A JSON string of the . - - - - Serializes the to a JSON string using formatting. - - The node to serialize. - Indicates how the output should be formatted. - A JSON string of the . - - - - Serializes the to a JSON string using formatting and omits the root object if is true. - - The node to serialize. - Indicates how the output should be formatted. - Omits writing the root object. - A JSON string of the . - - - - Deserializes the from a JSON string. - - The JSON string. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by - and writes a Json.NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A value to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by , - writes a Json.NET array attribute for collections, and encodes special characters. - - The JSON string. - The name of the root element to append when deserializing. - - A value to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - - A value to indicate whether to encode special characters when converting JSON to XML. - If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify - XML namespaces, attributes or processing directives. Instead special characters are encoded and written - as part of the XML element name. - - The deserialized . - - - - Serializes the to a JSON string. - - The node to convert to JSON. - A JSON string of the . - - - - Serializes the to a JSON string using formatting. - - The node to convert to JSON. - Indicates how the output should be formatted. - A JSON string of the . - - - - Serializes the to a JSON string using formatting and omits the root object if is true. - - The node to serialize. - Indicates how the output should be formatted. - Omits writing the root object. - A JSON string of the . - - - - Deserializes the from a JSON string. - - The JSON string. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by - and writes a Json.NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A value to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by , - writes a Json.NET array attribute for collections, and encodes special characters. - - The JSON string. - The name of the root element to append when deserializing. - - A value to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - - A value to indicate whether to encode special characters when converting JSON to XML. - If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify - XML namespaces, attributes or processing directives. Instead special characters are encoded and written - as part of the XML element name. - - The deserialized . - - - - Converts an object to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can read JSON. - - true if this can read JSON; otherwise, false. - - - - Gets a value indicating whether this can write JSON. - - true if this can write JSON; otherwise, false. - - - - Converts an object to and from JSON. - - The object type to convert. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. If there is no existing value then null will be used. - The existing value has a value. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Instructs the to use the specified when serializing the member or class. - - - - - Gets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - - - - - Initializes a new instance of the class. - - Type of the . - - - - Initializes a new instance of the class. - - Type of the . - Parameter list to use when constructing the . Can be null. - - - - Represents a collection of . - - - - - Instructs the how to serialize the collection. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Instructs the to deserialize properties with no matching class member into the specified collection - and write values during serialization. - - - - - Gets or sets a value that indicates whether to write extension data when serializing the object. - - - true to write extension data when serializing the object; otherwise, false. The default is true. - - - - - Gets or sets a value that indicates whether to read extension data when deserializing the object. - - - true to read extension data when deserializing the object; otherwise, false. The default is true. - - - - - Initializes a new instance of the class. - - - - - Instructs the not to serialize the public field or public read/write property value. - - - - - Base class for a table of atomized string objects. - - - - - Gets a string containing the same characters as the specified range of characters in the given array. - - The character array containing the name to find. - The zero-based index into the array specifying the first character of the name. - The number of characters in the name. - A string containing the same characters as the specified range of characters in the given array. - - - - Instructs the how to serialize the object. - - - - - Gets or sets the member serialization. - - The member serialization. - - - - Gets or sets the missing member handling used when deserializing this object. - - The missing member handling. - - - - Gets or sets how the object's properties with null values are handled during serialization and deserialization. - - How the object's properties with null values are handled during serialization and deserialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified member serialization. - - The member serialization. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to always serialize the member with the specified name. - - - - - Gets or sets the type used when serializing the property's collection items. - - The collection's items type. - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the null value handling used when serializing this property. - - The null value handling. - - - - Gets or sets the default value handling used when serializing this property. - - The default value handling. - - - - Gets or sets the reference loop handling used when serializing this property. - - The reference loop handling. - - - - Gets or sets the object creation handling used when deserializing this property. - - The object creation handling. - - - - Gets or sets the type name handling used when serializing this property. - - The type name handling. - - - - Gets or sets whether this property's value is serialized as a reference. - - Whether this property's value is serialized as a reference. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets a value indicating whether this property is required. - - - A value indicating whether this property is required. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified name. - - Name of the property. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Asynchronously reads the next JSON token from the source. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns true if the next token was read successfully; false if there are no more tokens to read. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously skips the children of the current token. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a []. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the []. This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Specifies the state of the reader. - - - - - A read method has not been called. - - - - - The end of the file has been reached successfully. - - - - - Reader is at a property. - - - - - Reader is at the start of an object. - - - - - Reader is in an object. - - - - - Reader is at the start of an array. - - - - - Reader is in an array. - - - - - The method has been called. - - - - - Reader has just read a value. - - - - - Reader is at the start of a constructor. - - - - - Reader is in a constructor. - - - - - An error occurred that prevents the read operation from continuing. - - - - - The end of the file has been reached successfully. - - - - - Gets the current reader state. - - The current reader state. - - - - Gets or sets a value indicating whether the source should be closed when this reader is closed. - - - true to close the source when this reader is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether multiple pieces of JSON content can - be read from a continuous stream without erroring. - - - true to support reading multiple pieces of JSON content; otherwise false. - The default is false. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - Gets or sets how time zones are handled when reading JSON. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how custom date formatted strings are parsed when reading JSON. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - A null value means there is no maximum. - The default value is 128. - - - - - Gets the type of the current JSON token. - - - - - Gets the text value of the current JSON token. - - - - - Gets the .NET type for the current JSON token. - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Initializes a new instance of the class. - - - - - Reads the next JSON token from the source. - - true if the next token was read successfully; false if there are no more tokens to read. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a []. - - A [] or null if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Skips the children of the current token. - - - - - Sets the current token. - - The new token. - - - - Sets the current token and value. - - The new token. - The value. - - - - Sets the current token and value. - - The new token. - The value. - A flag indicating whether the position index inside an array should be updated. - - - - Sets the state based on current token type. - - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Changes the reader's state to . - If is set to true, the source is also closed. - - - - - The exception thrown when an error occurs while reading JSON text. - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Initializes a new instance of the class - with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The line number indicating where the error occurred. - The line position indicating where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Instructs the to always serialize the member, and to require that the member has a value. - - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Initializes a new instance of the class - with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The line number indicating where the error occurred. - The line position indicating where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Serializes and deserializes objects into and from the JSON format. - The enables you to control how objects are encoded into JSON. - - - - - Occurs when the errors during serialization and deserialization. - - - - - Gets or sets the used by the serializer when resolving references. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets how type name writing and reading is handled by the serializer. - The default value is . - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - The default value is . - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - The default value is . - - The type name assembly format. - - - - Gets or sets how object references are preserved by the serializer. - The default value is . - - - - - Gets or sets how reference loops (e.g. a class referencing itself) is handled. - The default value is . - - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - The default value is . - - - - - Gets or sets how null values are handled during serialization and deserialization. - The default value is . - - - - - Gets or sets how default values are handled during serialization and deserialization. - The default value is . - - - - - Gets or sets how objects are created during deserialization. - The default value is . - - The object creation handling. - - - - Gets or sets how constructors are used during deserialization. - The default value is . - - The constructor handling. - - - - Gets or sets how metadata properties are used during deserialization. - The default value is . - - The metadata properties handling. - - - - Gets a collection that will be used during serialization. - - Collection that will be used during serialization. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Indicates how JSON text output is formatted. - The default value is . - - - - - Gets or sets how dates are written to JSON text. - The default value is . - - - - - Gets or sets how time zones are handled during serialization and deserialization. - The default value is . - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - The default value is . - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - The default value is . - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written as JSON text. - The default value is . - - - - - Gets or sets how strings are escaped when writing JSON text. - The default value is . - - - - - Gets or sets how and values are formatted when writing JSON text, - and the expected date format when reading JSON text. - The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". - - - - - Gets or sets the culture used when reading JSON. - The default value is . - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - A null value means there is no maximum. - The default value is 128. - - - - - Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. - The default value is false. - - - true if there will be a check for additional JSON content after deserializing an object; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Creates a new instance. - The will not use default settings - from . - - - A new instance. - The will not use default settings - from . - - - - - Creates a new instance using the specified . - The will not use default settings - from . - - The settings to be applied to the . - - A new instance using the specified . - The will not use default settings - from . - - - - - Creates a new instance. - The will use default settings - from . - - - A new instance. - The will use default settings - from . - - - - - Creates a new instance using the specified . - The will use default settings - from as well as the specified . - - The settings to be applied to the . - - A new instance using the specified . - The will use default settings - from as well as the specified . - - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to read values from. - The target object to populate values onto. - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to read values from. - The target object to populate values onto. - - - - Deserializes the JSON structure contained by the specified . - - The that contains the JSON structure to deserialize. - The being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The type of the object to deserialize. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is Auto to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Specifies the settings on a object. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) are handled. - The default value is . - - Reference loop handling. - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - The default value is . - - Missing member handling. - - - - Gets or sets how objects are created during deserialization. - The default value is . - - The object creation handling. - - - - Gets or sets how null values are handled during serialization and deserialization. - The default value is . - - Null value handling. - - - - Gets or sets how default values are handled during serialization and deserialization. - The default value is . - - The default value handling. - - - - Gets or sets a collection that will be used during serialization. - - The converters. - - - - Gets or sets how object references are preserved by the serializer. - The default value is . - - The preserve references handling. - - - - Gets or sets how type name writing and reading is handled by the serializer. - The default value is . - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - The type name handling. - - - - Gets or sets how metadata properties are used during deserialization. - The default value is . - - The metadata properties handling. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - The default value is . - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - The default value is . - - The type name assembly format. - - - - Gets or sets how constructors are used during deserialization. - The default value is . - - The constructor handling. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - The contract resolver. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets the used by the serializer when resolving references. - - The reference resolver. - - - - Gets or sets a function that creates the used by the serializer when resolving references. - - A function that creates the used by the serializer when resolving references. - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the error handler called during serialization and deserialization. - - The error handler called during serialization and deserialization. - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Gets or sets how and values are formatted when writing JSON text, - and the expected date format when reading JSON text. - The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - A null value means there is no maximum. - The default value is 128. - - - - - Indicates how JSON text output is formatted. - The default value is . - - - - - Gets or sets how dates are written to JSON text. - The default value is . - - - - - Gets or sets how time zones are handled during serialization and deserialization. - The default value is . - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - The default value is . - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written as JSON. - The default value is . - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - The default value is . - - - - - Gets or sets how strings are escaped when writing JSON text. - The default value is . - - - - - Gets or sets the culture used when reading JSON. - The default value is . - - - - - Gets a value indicating whether there will be a check for additional content after deserializing an object. - The default value is false. - - - true if there will be a check for additional content after deserializing an object; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Represents a reader that provides fast, non-cached, forward-only access to JSON text data. - - - - - Asynchronously reads the next JSON token from the source. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns true if the next token was read successfully; false if there are no more tokens to read. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a []. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the []. This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Initializes a new instance of the class with the specified . - - The containing the JSON data to read. - - - - Gets or sets the reader's property name table. - - - - - Gets or sets the reader's character buffer pool. - - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a []. - - A [] or null if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Gets a value indicating whether the class can return line information. - - - true if and can be provided; otherwise, false. - - - - - Gets the current line number. - - - The current line number or 0 if no line information is available (for example, returns false). - - - - - Gets the current line position. - - - The current line position or 0 if no line information is available (for example, returns false). - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the JSON value delimiter. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the specified end token. - - The end token to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously closes this writer. - If is set to true, the destination is also closed. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of the current JSON object or array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes indent characters. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes an indent space. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes raw JSON without changing the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a null value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the beginning of a JSON array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the beginning of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the start of a constructor with the given name. - - The name of the constructor. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes an undefined value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the given white space. - - The string of white space characters. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a [] value. - - The [] value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of an array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of a constructor. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Gets or sets the writer's character array pool. - - - - - Gets or sets how many s to write for each level in the hierarchy when is set to . - - - - - Gets or sets which character to use to quote attribute values. - - - - - Gets or sets which character to use for indenting when is set to . - - - - - Gets or sets a value indicating whether object names will be surrounded with quotes. - - - - - Initializes a new instance of the class using the specified . - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying . - - - - - Closes this writer. - If is set to true, the underlying is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the specified end token. - - The end token to write. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Specifies the type of JSON token. - - - - - This is returned by the if a read method has not been called. - - - - - An object start token. - - - - - An array start token. - - - - - A constructor start token. - - - - - An object property name. - - - - - A comment. - - - - - Raw JSON. - - - - - An integer. - - - - - A float. - - - - - A string. - - - - - A boolean. - - - - - A null token. - - - - - An undefined token. - - - - - An object end token. - - - - - An array end token. - - - - - A constructor end token. - - - - - A Date. - - - - - Byte data. - - - - - - Represents a reader that provides validation. - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - Sets an event handler for receiving schema validation errors. - - - - - Gets the text value of the current JSON token. - - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - - Gets the type of the current JSON token. - - - - - - Gets the .NET type for the current JSON token. - - - - - - Initializes a new instance of the class that - validates the content returned from the given . - - The to read from while validating. - - - - Gets or sets the schema. - - The schema. - - - - Gets the used to construct this . - - The specified in the constructor. - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a []. - - - A [] or null if the next JSON token is null. - - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Asynchronously closes this writer. - If is set to true, the destination is also closed. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the specified end token. - - The end token to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes indent characters. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the JSON value delimiter. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes an indent space. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes raw JSON without changing the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the end of the current JSON object or array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the end of an array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the end of a constructor. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the end of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a null value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the beginning of a JSON array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the start of a constructor with the given name. - - The name of the constructor. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the beginning of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the current token. - - The to read the token from. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the current token. - - The to read the token from. - A flag indicating whether the current token's children should be written. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the token and its value. - - The to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the token and its value. - - The to write. - - The value to write. - A value is only required for tokens that have an associated value, e.g. the property name for . - null can be passed to the method for tokens that don't have a value, e.g. . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a [] value. - - The [] value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes an undefined value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the given white space. - - The string of white space characters. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously ets the state of the . - - The being written. - The value being written. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Gets or sets a value indicating whether the destination should be closed when this writer is closed. - - - true to close the destination when this writer is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. - - - true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. - - - - - Gets the top. - - The top. - - - - Gets the state of the writer. - - - - - Gets the path of the writer. - - - - - Gets or sets a value indicating how JSON text output should be formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled when writing JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written to JSON text. - - - - - Gets or sets how and values are formatted when writing JSON text. - - - - - Gets or sets the culture used when writing JSON. Defaults to . - - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the destination and also flushes the destination. - - - - - Closes this writer. - If is set to true, the destination is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the end of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the end of an array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end constructor. - - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes the end of the current JSON object or array. - - - - - Writes the current token and its children. - - The to read the token from. - - - - Writes the current token. - - The to read the token from. - A flag indicating whether the current token's children should be written. - - - - Writes the token and its value. - - The to write. - - The value to write. - A value is only required for tokens that have an associated value, e.g. the property name for . - null can be passed to the method for tokens that don't have a value, e.g. . - - - - - Writes the token. - - The to write. - - - - Writes the specified end token. - - The end token to write. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON without changing the writer's state. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Sets the state of the . - - The being written. - The value being written. - - - - The exception thrown when an error occurs while writing JSON text. - - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Initializes a new instance of the class - with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Specifies how JSON comments are handled when loading JSON. - - - - - Ignore comments. - - - - - Load comments as a with type . - - - - - Specifies how duplicate property names are handled when loading JSON. - - - - - Replace the existing value when there is a duplicate property. The value of the last property in the JSON object will be used. - - - - - Ignore the new value when there is a duplicate property. The value of the first property in the JSON object will be used. - - - - - Throw a when a duplicate property is encountered. - - - - - Contains the LINQ to JSON extension methods. - - - - - Returns a collection of tokens that contains the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the descendants of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, and the descendants of every token in the source collection. - - - - Returns a collection of child properties of every object in the source collection. - - An of that contains the source collection. - An of that contains the properties of every object in the source collection. - - - - Returns a collection of child values of every object in the source collection with the given key. - - An of that contains the source collection. - The token key. - An of that contains the values of every token in the source collection with the given key. - - - - Returns a collection of child values of every object in the source collection. - - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child values of every object in the source collection with the given key. - - The type to convert the values to. - An of that contains the source collection. - The token key. - An that contains the converted values of every token in the source collection with the given key. - - - - Returns a collection of converted child values of every object in the source collection. - - The type to convert the values to. - An of that contains the source collection. - An that contains the converted values of every token in the source collection. - - - - Converts the value. - - The type to convert the value to. - A cast as a of . - A converted value. - - - - Converts the value. - - The source collection type. - The type to convert the value to. - A cast as a of . - A converted value. - - - - Returns a collection of child tokens of every array in the source collection. - - The source collection type. - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child tokens of every array in the source collection. - - An of that contains the source collection. - The type to convert the values to. - The source collection type. - An that contains the converted values of every token in the source collection. - - - - Returns the input typed as . - - An of that contains the source collection. - The input typed as . - - - - Returns the input typed as . - - The source collection type. - An of that contains the source collection. - The input typed as . - - - - Represents a collection of objects. - - The type of token. - - - - Gets the of with the specified key. - - - - - - Represents a JSON array. - - - - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous load. The property contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous load. The property contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads an from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object. - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the at the specified index. - - - - - - Determines the index of a specific item in the . - - The object to locate in the . - - The index of if found in the list; otherwise, -1. - - - - - Inserts an item to the at the specified index. - - The zero-based index at which should be inserted. - The object to insert into the . - - is not a valid index in the . - - - - - Removes the item at the specified index. - - The zero-based index of the item to remove. - - is not a valid index in the . - - - - - Returns an enumerator that iterates through the collection. - - - A of that can be used to iterate through the collection. - - - - - Adds an item to the . - - The object to add to the . - - - - Removes all items from the . - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Copies the elements of the to an array, starting at a particular array index. - - The array. - Index of the array. - - - - Gets a value indicating whether the is read-only. - - true if the is read-only; otherwise, false. - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - - - Represents a JSON constructor. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets or sets the name of this constructor. - - The constructor name. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name. - - The constructor name. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Represents a token that can contain other tokens. - - - - - Occurs when the list changes or an item in the list changes. - - - - - Occurs before an item is added to the collection. - - - - - Occurs when the items list of the collection has changed, or the collection is reset. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Get the first child token of this token. - - - A containing the first child token of the . - - - - - Get the last child token of this token. - - - A containing the last child token of the . - - - - - Returns a collection of the child tokens of this token, in document order. - - - An of containing the child tokens of this , in document order. - - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - - A containing the child values of this , in document order. - - - - - Returns a collection of the descendant tokens for this token in document order. - - An of containing the descendant tokens of the . - - - - Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. - - An of containing this token, and all the descendant tokens of the . - - - - Adds the specified content as children of this . - - The content to be added. - - - - Adds the specified content as the first children of this . - - The content to be added. - - - - Creates a that can be used to add tokens to the . - - A that is ready to have content written to it. - - - - Replaces the child nodes of this token with the specified content. - - The content. - - - - Removes the child nodes from this token. - - - - - Merge the specified content into this . - - The content to be merged. - - - - Merge the specified content into this using . - - The content to be merged. - The used to merge the content. - - - - Gets the count of child JSON tokens. - - The count of child JSON tokens. - - - - Represents a collection of objects. - - The type of token. - - - - An empty collection of objects. - - - - - Initializes a new instance of the struct. - - The enumerable. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Gets the of with the specified key. - - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Represents a JSON object. - - - - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Occurs when a property value changes. - - - - - Occurs when a property value is changing. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Gets the node type for this . - - The type. - - - - Gets an of of this object's properties. - - An of of this object's properties. - - - - Gets a with the specified name. - - The property name. - A with the specified name or null. - - - - Gets the with the specified name. - The exact name will be searched for first and if no matching property is found then - the will be used to match a property. - - The property name. - One of the enumeration values that specifies how the strings will be compared. - A matched with the specified name or null. - - - - Gets a of of this object's property values. - - A of of this object's property values. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the with the specified property name. - - - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - is not valid JSON. - - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - is not valid JSON. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object. - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified property name. - - Name of the property. - The with the specified property name. - - - - Gets the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - One of the enumeration values that specifies how the strings will be compared. - The with the specified property name. - - - - Tries to get the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - The value. - One of the enumeration values that specifies how the strings will be compared. - true if a value was successfully retrieved; otherwise, false. - - - - Adds the specified property name. - - Name of the property. - The value. - - - - Determines whether the JSON object has the specified property name. - - Name of the property. - true if the JSON object has the specified property name; otherwise, false. - - - - Removes the property with the specified name. - - Name of the property. - true if item was successfully removed; otherwise, false. - - - - Tries to get the with the specified property name. - - Name of the property. - The value. - true if a value was successfully retrieved; otherwise, false. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Represents a JSON property. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous creation. The - property returns a that contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous creation. The - property returns a that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the property name. - - The property name. - - - - Gets or sets the property value. - - The property value. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Represents a view of a . - - - - - Initializes a new instance of the class. - - The name. - - - - When overridden in a derived class, returns whether resetting an object changes its value. - - - true if resetting the component changes its value; otherwise, false. - - The component to test for reset capability. - - - - When overridden in a derived class, gets the current value of the property on a component. - - - The value of a property for a given component. - - The component with the property for which to retrieve the value. - - - - When overridden in a derived class, resets the value for this property of the component to the default value. - - The component with the property value that is to be reset to the default value. - - - - When overridden in a derived class, sets the value of the component to a different value. - - The component with the property value that is to be set. - The new value. - - - - When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. - - - true if the property should be persisted; otherwise, false. - - The component with the property to be examined for persistence. - - - - When overridden in a derived class, gets the type of the component this property is bound to. - - - A that represents the type of component this property is bound to. - When the or - - methods are invoked, the object specified might be an instance of this type. - - - - - When overridden in a derived class, gets a value indicating whether this property is read-only. - - - true if the property is read-only; otherwise, false. - - - - - When overridden in a derived class, gets the type of the property. - - - A that represents the type of the property. - - - - - Gets the hash code for the name of the member. - - - - The hash code for the name of the member. - - - - - Represents a raw JSON string. - - - - - Asynchronously creates an instance of with the content of the reader's current token. - - The reader. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous creation. The - property returns an instance of with the content of the reader's current token. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class. - - The raw json. - - - - Creates an instance of with the content of the reader's current token. - - The reader. - An instance of with the content of the reader's current token. - - - - Specifies the settings used when loading JSON. - - - - - Initializes a new instance of the class. - - - - - Gets or sets how JSON comments are handled when loading JSON. - The default value is . - - The JSON comment handling. - - - - Gets or sets how JSON line info is handled when loading JSON. - The default value is . - - The JSON line info handling. - - - - Gets or sets how duplicate property names in JSON objects are handled when loading JSON. - The default value is . - - The JSON duplicate property name handling. - - - - Specifies the settings used when merging JSON. - - - - - Initializes a new instance of the class. - - - - - Gets or sets the method used when merging JSON arrays. - - The method used when merging JSON arrays. - - - - Gets or sets how null value properties are merged. - - How null value properties are merged. - - - - Gets or sets the comparison used to match property names while merging. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - The comparison used to match property names while merging. - - - - Specifies the settings used when selecting JSON. - - - - - Gets or sets a timeout that will be used when executing regular expressions. - - The timeout that will be used when executing regular expressions. - - - - Gets or sets a flag that indicates whether an error should be thrown if - no tokens are found when evaluating part of the expression. - - - A flag that indicates whether an error should be thrown if - no tokens are found when evaluating part of the expression. - - - - - Represents an abstract JSON token. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Writes this token to a asynchronously. - - A into which this method will write. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously creates a from a . - - An positioned at the token to read into this . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains - the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a . - - An positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains - the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a . - - A positioned at the token to read into this . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a . - - A positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Gets a comparer that can compare two tokens for value equality. - - A that can compare two nodes for value equality. - - - - Gets or sets the parent. - - The parent. - - - - Gets the root of this . - - The root of this . - - - - Gets the node type for this . - - The type. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Compares the values of two tokens, including the values of all descendant tokens. - - The first to compare. - The second to compare. - true if the tokens are equal; otherwise false. - - - - Gets the next sibling token of this node. - - The that contains the next sibling token. - - - - Gets the previous sibling token of this node. - - The that contains the previous sibling token. - - - - Gets the path of the JSON token. - - - - - Adds the specified content immediately after this token. - - A content object that contains simple content or a collection of content objects to be added after this token. - - - - Adds the specified content immediately before this token. - - A content object that contains simple content or a collection of content objects to be added before this token. - - - - Returns a collection of the ancestor tokens of this token. - - A collection of the ancestor tokens of this token. - - - - Returns a collection of tokens that contain this token, and the ancestors of this token. - - A collection of tokens that contain this token, and the ancestors of this token. - - - - Returns a collection of the sibling tokens after this token, in document order. - - A collection of the sibling tokens after this tokens, in document order. - - - - Returns a collection of the sibling tokens before this token, in document order. - - A collection of the sibling tokens before this token, in document order. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets the with the specified key converted to the specified type. - - The type to convert the token to. - The token key. - The converted token value. - - - - Get the first child token of this token. - - A containing the first child token of the . - - - - Get the last child token of this token. - - A containing the last child token of the . - - - - Returns a collection of the child tokens of this token, in document order. - - An of containing the child tokens of this , in document order. - - - - Returns a collection of the child tokens of this token, in document order, filtered by the specified type. - - The type to filter the child tokens on. - A containing the child tokens of this , in document order. - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - A containing the child values of this , in document order. - - - - Removes this token from its parent. - - - - - Replaces this token with the specified token. - - The value. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Returns the indented JSON for this token. - - - ToString() returns a non-JSON string value for tokens with a type of . - If you want the JSON for all token types then you should use . - - - The indented JSON for this token. - - - - - Returns the JSON for this token using the given formatting and converters. - - Indicates how the output should be formatted. - A collection of s which will be used when writing the token. - The JSON for this token using the given formatting and converters. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to []. - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from [] to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Creates a for this token. - - A that can be used to read this token and its descendants. - - - - Creates a from an object. - - The object that will be used to create . - A with the value of the specified object. - - - - Creates a from an object using the specified . - - The object that will be used to create . - The that will be used when reading the object. - A with the value of the specified object. - - - - Creates an instance of the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates a from a . - - A positioned at the token to read into this . - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a . - - An positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - - - Creates a from a . - - A positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a . - - A positioned at the token to read into this . - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Selects a using a JSONPath expression. Selects the token that matches the object path. - - - A that contains a JSONPath expression. - - A , or null. - - - - Selects a using a JSONPath expression. Selects the token that matches the object path. - - - A that contains a JSONPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - A . - - - - Selects a using a JSONPath expression. Selects the token that matches the object path. - - - A that contains a JSONPath expression. - - The used to select tokens. - A . - - - - Selects a collection of elements using a JSONPath expression. - - - A that contains a JSONPath expression. - - An of that contains the selected elements. - - - - Selects a collection of elements using a JSONPath expression. - - - A that contains a JSONPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - An of that contains the selected elements. - - - - Selects a collection of elements using a JSONPath expression. - - - A that contains a JSONPath expression. - - The used to select tokens. - An of that contains the selected elements. - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Creates a new instance of the . All child tokens are recursively cloned. - - A new instance of the . - - - - Adds an object to the annotation list of this . - - The annotation to add. - - - - Get the first annotation object of the specified type from this . - - The type of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets the first annotation object of the specified type from this . - - The of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets a collection of annotations of the specified type for this . - - The type of the annotations to retrieve. - An that contains the annotations for this . - - - - Gets a collection of annotations of the specified type for this . - - The of the annotations to retrieve. - An of that contains the annotations that match the specified type for this . - - - - Removes the annotations of the specified type from this . - - The type of annotations to remove. - - - - Removes the annotations of the specified type from this . - - The of annotations to remove. - - - - Compares tokens to determine whether they are equal. - - - - - Determines whether the specified objects are equal. - - The first object of type to compare. - The second object of type to compare. - - true if the specified objects are equal; otherwise, false. - - - - - Returns a hash code for the specified object. - - The for which a hash code is to be returned. - A hash code for the specified object. - The type of is a reference type and is null. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Gets the at the reader's current position. - - - - - Initializes a new instance of the class. - - The token to read from. - - - - Initializes a new instance of the class. - - The token to read from. - The initial path of the token. It is prepended to the returned . - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Gets the path of the current JSON token. - - - - - Specifies the type of token. - - - - - No token type has been set. - - - - - A JSON object. - - - - - A JSON array. - - - - - A JSON constructor. - - - - - A JSON object property. - - - - - A comment. - - - - - An integer value. - - - - - A float value. - - - - - A string value. - - - - - A boolean value. - - - - - A null value. - - - - - An undefined value. - - - - - A date value. - - - - - A raw JSON value. - - - - - A collection of bytes value. - - - - - A Guid value. - - - - - A Uri value. - - - - - A TimeSpan value. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Gets the at the writer's current position. - - - - - Gets the token being written. - - The token being written. - - - - Initializes a new instance of the class writing to the given . - - The container being written to. - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the underlying . - - - - - Closes this writer. - If is set to true, the JSON is auto-completed. - - - Setting to true has no additional effect, since the underlying is a type that cannot be closed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end. - - The token. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes a value. - An error will be raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Represents a value in JSON (string, integer, date, etc). - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Creates a comment with the given value. - - The value. - A comment with the given value. - - - - Creates a string with the given value. - - The value. - A string with the given value. - - - - Creates a null value. - - A null value. - - - - Creates a undefined value. - - A undefined value. - - - - Gets the node type for this . - - The type. - - - - Gets or sets the underlying token value. - - The underlying token value. - - - - Writes this token to a . - - A into which this method will write. - A collection of s which will be used when writing the token. - - - - Indicates whether the current object is equal to another object of the same type. - - - true if the current object is equal to the parameter; otherwise, false. - - An object to compare with this object. - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - - true if the specified is equal to the current ; otherwise, false. - - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - Returns a that represents this instance. - - - ToString() returns a non-JSON string value for tokens with a type of . - If you want the JSON for all token types then you should use . - - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format provider. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - The format provider. - - A that represents this instance. - - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. - - An object to compare with this instance. - - A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: - Value - Meaning - Less than zero - This instance is less than . - Zero - This instance is equal to . - Greater than zero - This instance is greater than . - - - is not of the same type as this instance. - - - - - Specifies how line information is handled when loading JSON. - - - - - Ignore line information. - - - - - Load line information. - - - - - Specifies how JSON arrays are merged together. - - - - Concatenate arrays. - - - Union arrays, skipping items that already exist. - - - Replace all array items. - - - Merge array items together, matched by index. - - - - Specifies how null value properties are merged. - - - - - The content's null value properties will be ignored during merging. - - - - - The content's null value properties will be merged. - - - - - Specifies the member serialization options for the . - - - - - All public members are serialized by default. Members can be excluded using or . - This is the default member serialization mode. - - - - - Only members marked with or are serialized. - This member serialization mode can also be set by marking the class with . - - - - - All public and private fields are serialized. Members can be excluded using or . - This member serialization mode can also be set by marking the class with - and setting IgnoreSerializableAttribute on to false. - - - - - Specifies metadata property handling options for the . - - - - - Read metadata properties located at the start of a JSON object. - - - - - Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. - - - - - Do not try to read metadata properties. - - - - - Specifies missing member handling options for the . - - - - - Ignore a missing member and do not attempt to deserialize it. - - - - - Throw a when a missing member is encountered during deserialization. - - - - - Specifies null value handling options for the . - - - - - - - - - Include null values when serializing and deserializing objects. - - - - - Ignore null values when serializing and deserializing objects. - - - - - Specifies how object creation is handled by the . - - - - - Reuse existing objects, create new objects when needed. - - - - - Only reuse existing objects. - - - - - Always create new objects. - - - - - Specifies reference handling options for the . - Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . - - - - - - - - Do not preserve references when serializing types. - - - - - Preserve references when serializing into a JSON object structure. - - - - - Preserve references when serializing into a JSON array structure. - - - - - Preserve references when serializing. - - - - - Specifies reference loop handling options for the . - - - - - Throw a when a loop is encountered. - - - - - Ignore loop references and do not serialize. - - - - - Serialize loop references. - - - - - Indicating whether a property is required. - - - - - The property is not required. The default state. - - - - - The property must be defined in JSON but can be a null value. - - - - - The property must be defined in JSON and cannot be a null value. - - - - - The property is not required but it cannot be a null value. - - - - - - Contains the JSON schema extension methods. - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - true if the specified is valid; otherwise, false. - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - When this method returns, contains any error messages generated while validating. - - true if the specified is valid; otherwise, false. - - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - The validation event handler. - - - - - An in-memory representation of a JSON Schema. - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets the id. - - - - - Gets or sets the title. - - - - - Gets or sets whether the object is required. - - - - - Gets or sets whether the object is read-only. - - - - - Gets or sets whether the object is visible to users. - - - - - Gets or sets whether the object is transient. - - - - - Gets or sets the description of the object. - - - - - Gets or sets the types of values allowed by the object. - - The type. - - - - Gets or sets the pattern. - - The pattern. - - - - Gets or sets the minimum length. - - The minimum length. - - - - Gets or sets the maximum length. - - The maximum length. - - - - Gets or sets a number that the value should be divisible by. - - A number that the value should be divisible by. - - - - Gets or sets the minimum. - - The minimum. - - - - Gets or sets the maximum. - - The maximum. - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). - - A flag indicating whether the value can not equal the number defined by the minimum attribute (). - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). - - A flag indicating whether the value can not equal the number defined by the maximum attribute (). - - - - Gets or sets the minimum number of items. - - The minimum number of items. - - - - Gets or sets the maximum number of items. - - The maximum number of items. - - - - Gets or sets the of items. - - The of items. - - - - Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . - - - true if items are validated using their array position; otherwise, false. - - - - - Gets or sets the of additional items. - - The of additional items. - - - - Gets or sets a value indicating whether additional items are allowed. - - - true if additional items are allowed; otherwise, false. - - - - - Gets or sets whether the array items must be unique. - - - - - Gets or sets the of properties. - - The of properties. - - - - Gets or sets the of additional properties. - - The of additional properties. - - - - Gets or sets the pattern properties. - - The pattern properties. - - - - Gets or sets a value indicating whether additional properties are allowed. - - - true if additional properties are allowed; otherwise, false. - - - - - Gets or sets the required property if this property is present. - - The required property if this property is present. - - - - Gets or sets the a collection of valid enum values allowed. - - A collection of valid enum values allowed. - - - - Gets or sets disallowed types. - - The disallowed types. - - - - Gets or sets the default value. - - The default value. - - - - Gets or sets the collection of that this schema extends. - - The collection of that this schema extends. - - - - Gets or sets the format. - - The format. - - - - Initializes a new instance of the class. - - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The object representing the JSON Schema. - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The to use when resolving schema references. - The object representing the JSON Schema. - - - - Load a from a string that contains JSON Schema. - - A that contains JSON Schema. - A populated from the string that contains JSON Schema. - - - - Load a from a string that contains JSON Schema using the specified . - - A that contains JSON Schema. - The resolver. - A populated from the string that contains JSON Schema. - - - - Writes this schema to a . - - A into which this method will write. - - - - Writes this schema to a using the specified . - - A into which this method will write. - The resolver used. - - - - Returns a that represents the current . - - - A that represents the current . - - - - - - Returns detailed information about the schema exception. - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - - Generates a from a specified . - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets how undefined schemas are handled by the serializer. - - - - - Gets or sets the contract resolver. - - The contract resolver. - - - - Generate a from the specified type. - - The type to generate a from. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - - Resolves from an id. - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets the loaded schemas. - - The loaded schemas. - - - - Initializes a new instance of the class. - - - - - Gets a for the specified reference. - - The id. - A for the specified reference. - - - - - The value types allowed by the . - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - No type specified. - - - - - String type. - - - - - Float type. - - - - - Integer type. - - - - - Boolean type. - - - - - Object type. - - - - - Array type. - - - - - Null type. - - - - - Any type. - - - - - - Specifies undefined schema Id handling options for the . - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - Do not infer a schema Id. - - - - - Use the .NET type name as the schema Id. - - - - - Use the assembly qualified .NET type name as the schema Id. - - - - - - Returns detailed information related to the . - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the associated with the validation error. - - The JsonSchemaException associated with the validation error. - - - - Gets the path of the JSON location where the validation error occurred. - - The path of the JSON location where the validation error occurred. - - - - Gets the text description corresponding to the validation error. - - The text description. - - - - - Represents the callback method that will handle JSON schema validation events and the . - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - A camel case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Resolves member mappings for a type, camel casing property names. - - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used by to resolve a for a given . - - - - - Gets a value indicating whether members are being get and set using dynamic code generation. - This value is determined by the runtime permissions available. - - - true if using dynamic code generation; otherwise, false. - - - - - Gets or sets the default members search flags. - - The default members search flags. - - - - Gets or sets a value indicating whether compiler generated members should be serialized. - - - true if serialized compiler generated members; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. - - - true if the interface will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. - - - true if the attribute will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore IsSpecified members when serializing and deserializing types. - - - true if the IsSpecified members will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore ShouldSerialize members when serializing and deserializing types. - - - true if the ShouldSerialize members will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. - - The naming strategy used to resolve how property names and dictionary keys are serialized. - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Gets the serializable members for the type. - - The type to get serializable members for. - The serializable members for the type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates the constructor parameters. - - The constructor to create properties for. - The type's member properties. - Properties for the given . - - - - Creates a for the given . - - The matching member property. - The constructor parameter. - A created for the given . - - - - Resolves the default for the contract. - - Type of the object. - The contract's default . - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Determines which contract type is created for the given type. - - Type of the object. - A for the given type. - - - - Creates properties for the given . - - The type to create properties for. - /// The member serialization mode for the type. - Properties for the given . - - - - Creates the used by the serializer to get and set values from a member. - - The member. - The used by the serializer to get and set values from a member. - - - - Creates a for the given . - - The member's parent . - The member to create a for. - A created for the given . - - - - Resolves the name of the property. - - Name of the property. - Resolved name of the property. - - - - Resolves the name of the extension data. By default no changes are made to extension data names. - - Name of the extension data. - Resolved name of the extension data. - - - - Resolves the key of the dictionary. By default is used to resolve dictionary keys. - - Key of the dictionary. - Resolved key of the dictionary. - - - - Gets the resolved name of the property. - - Name of the property. - Name of the property. - - - - The default naming strategy. Property names and dictionary keys are unchanged. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - The default serialization binder used when resolving and loading classes from type names. - - - - - Initializes a new instance of the class. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - The type of the object the formatter creates a new instance of. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Represents a trace writer that writes to the application's instances. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Get and set values for a using dynamic methods. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Provides information surrounding an error. - - - - - Gets the error. - - The error. - - - - Gets the original object that caused the error. - - The original object that caused the error. - - - - Gets the member that caused the error. - - The member that caused the error. - - - - Gets the path of the JSON location where the error occurred. - - The path of the JSON location where the error occurred. - - - - Gets or sets a value indicating whether this is handled. - - true if handled; otherwise, false. - - - - Provides data for the Error event. - - - - - Gets the current object the error event is being raised against. - - The current object the error event is being raised against. - - - - Gets the error context. - - The error context. - - - - Initializes a new instance of the class. - - The current object. - The error context. - - - - Get and set values for a using dynamic methods. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Provides methods to get attributes. - - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Used by to resolve a for a given . - - - - - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used to resolve references when serializing and deserializing JSON by the . - - - - - Resolves a reference to its object. - - The serialization context. - The reference to resolve. - The object that was resolved from the reference. - - - - Gets the reference for the specified object. - - The serialization context. - The object to get a reference for. - The reference to the object. - - - - Determines whether the specified object is referenced. - - The serialization context. - The object to test for a reference. - - true if the specified object is referenced; otherwise, false. - - - - - Adds a reference to the specified object. - - The serialization context. - The reference. - The object to reference. - - - - Allows users to control class loading and mandate what class to load. - - - - - When implemented, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object - The type of the object the formatter creates a new instance of. - - - - When implemented, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Represents a trace writer. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - The that will be used to filter the trace messages passed to the writer. - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Provides methods to get and set values. - - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Contract details for a used by the . - - - - - Gets the of the collection items. - - The of the collection items. - - - - Gets a value indicating whether the collection type is a multidimensional array. - - true if the collection type is a multidimensional array; otherwise, false. - - - - Gets or sets the function used to create the object. When set this function will override . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the collection values. - - true if the creator has a parameter with the collection values; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the default collection items . - - The converter. - - - - Gets or sets a value indicating whether the collection items preserve object references. - - true if collection items preserve object references; otherwise, false. - - - - Gets or sets the collection item reference loop handling. - - The reference loop handling. - - - - Gets or sets the collection item type name handling. - - The type name handling. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Handles serialization callback events. - - The object that raised the callback event. - The streaming context. - - - - Handles serialization error callback events. - - The object that raised the callback event. - The streaming context. - The error context. - - - - Sets extension data for an object during deserialization. - - The object to set extension data on. - The extension data key. - The extension data value. - - - - Gets extension data for an object during serialization. - - The object to set extension data on. - - - - Contract details for a used by the . - - - - - Gets the underlying type for the contract. - - The underlying type for the contract. - - - - Gets or sets the type created during deserialization. - - The type created during deserialization. - - - - Gets or sets whether this type contract is serialized as a reference. - - Whether this type contract is serialized as a reference. - - - - Gets or sets the default for this contract. - - The converter. - - - - Gets the internally resolved for the contract's type. - This converter is used as a fallback converter when no other converter is resolved. - Setting will always override this converter. - - - - - Gets or sets all methods called immediately after deserialization of the object. - - The methods called immediately after deserialization of the object. - - - - Gets or sets all methods called during deserialization of the object. - - The methods called during deserialization of the object. - - - - Gets or sets all methods called after serialization of the object graph. - - The methods called after serialization of the object graph. - - - - Gets or sets all methods called before serialization of the object. - - The methods called before serialization of the object. - - - - Gets or sets all method called when an error is thrown during the serialization of the object. - - The methods called when an error is thrown during the serialization of the object. - - - - Gets or sets the default creator method used to create the object. - - The default creator method used to create the object. - - - - Gets or sets a value indicating whether the default creator is non-public. - - true if the default object creator is non-public; otherwise, false. - - - - Contract details for a used by the . - - - - - Gets or sets the dictionary key resolver. - - The dictionary key resolver. - - - - Gets the of the dictionary keys. - - The of the dictionary keys. - - - - Gets the of the dictionary values. - - The of the dictionary values. - - - - Gets or sets the function used to create the object. When set this function will override . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the dictionary values. - - true if the creator has a parameter with the dictionary values; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets the object's properties. - - The object's properties. - - - - Gets or sets the property name resolver. - - The property name resolver. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the object constructor. - - The object constructor. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the object member serialization. - - The member object serialization. - - - - Gets or sets the missing member handling used when deserializing this object. - - The missing member handling. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Gets or sets how the object's properties with null values are handled during serialization and deserialization. - - How the object's properties with null values are handled during serialization and deserialization. - - - - Gets the object's properties. - - The object's properties. - - - - Gets a collection of instances that define the parameters used with . - - - - - Gets or sets the function used to create the object. When set this function will override . - This function is called with a collection of arguments which are defined by the collection. - - The function used to create the object. - - - - Gets or sets the extension data setter. - - - - - Gets or sets the extension data getter. - - - - - Gets or sets the extension data value type. - - - - - Gets or sets the extension data name resolver. - - The extension data name resolver. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Maps a JSON property to a .NET member or constructor parameter. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the type that declared this property. - - The type that declared this property. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets the name of the underlying member or parameter. - - The name of the underlying member or parameter. - - - - Gets the that will get and set the during serialization. - - The that will get and set the during serialization. - - - - Gets or sets the for this property. - - The for this property. - - - - Gets or sets the type of the property. - - The type of the property. - - - - Gets or sets the for the property. - If set this converter takes precedence over the contract converter for the property type. - - The converter. - - - - Gets or sets the member converter. - - The member converter. - - - - Gets or sets a value indicating whether this is ignored. - - true if ignored; otherwise, false. - - - - Gets or sets a value indicating whether this is readable. - - true if readable; otherwise, false. - - - - Gets or sets a value indicating whether this is writable. - - true if writable; otherwise, false. - - - - Gets or sets a value indicating whether this has a member attribute. - - true if has a member attribute; otherwise, false. - - - - Gets the default value. - - The default value. - - - - Gets or sets a value indicating whether this is required. - - A value indicating whether this is required. - - - - Gets a value indicating whether has a value specified. - - - - - Gets or sets a value indicating whether this property preserves object references. - - - true if this instance is reference; otherwise, false. - - - - - Gets or sets the property null value handling. - - The null value handling. - - - - Gets or sets the property default value handling. - - The default value handling. - - - - Gets or sets the property reference loop handling. - - The reference loop handling. - - - - Gets or sets the property object creation handling. - - The object creation handling. - - - - Gets or sets or sets the type name handling. - - The type name handling. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets a predicate used to determine whether the property should be deserialized. - - A predicate used to determine whether the property should be deserialized. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets an action used to set whether the property has been deserialized. - - An action used to set whether the property has been deserialized. - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets the converter used when serializing the property's collection items. - - The collection's items converter. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - A collection of objects. - - - - - Initializes a new instance of the class. - - The type. - - - - When implemented in a derived class, extracts the key from the specified element. - - The element from which to extract the key. - The key for the specified element. - - - - Adds a object. - - The property to add to the collection. - - - - Gets the closest matching object. - First attempts to get an exact case match of and then - a case insensitive match. - - Name of the property. - A matching property if found. - - - - Gets a property by property name. - - The name of the property to get. - Type property name string comparison. - A matching property if found. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Lookup and create an instance of the type described by the argument. - - The type to create. - Optional arguments to pass to an initializing constructor of the JsonConverter. - If null, the default constructor is used. - - - - A kebab case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Represents a trace writer that writes to memory. When the trace message limit is - reached then old trace messages will be removed as new messages are added. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Initializes a new instance of the class. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Returns an enumeration of the most recent trace messages. - - An enumeration of the most recent trace messages. - - - - Returns a of the most recent trace messages. - - - A of the most recent trace messages. - - - - - A base class for resolving how property names and dictionary keys are serialized. - - - - - A flag indicating whether dictionary keys should be processed. - Defaults to false. - - - - - A flag indicating whether extension data names should be processed. - Defaults to false. - - - - - A flag indicating whether explicitly specified property names, - e.g. a property name customized with a , should be processed. - Defaults to false. - - - - - Gets the serialized name for a given property name. - - The initial property name. - A flag indicating whether the property has had a name explicitly specified. - The serialized property name. - - - - Gets the serialized name for a given extension data name. - - The initial extension data name. - The serialized extension data name. - - - - Gets the serialized key for a given dictionary key. - - The initial dictionary key. - The serialized dictionary key. - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Hash code calculation - - - - - - Object equality implementation - - - - - - - Compare to another NamingStrategy - - - - - - - Represents a method that constructs an object. - - The object type to create. - - - - When applied to a method, specifies that the method is called when an error occurs serializing an object. - - - - - Provides methods to get attributes from a , , or . - - - - - Initializes a new instance of the class. - - The instance to get attributes for. This parameter should be a , , or . - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Get and set values for a using reflection. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - A snake case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Specifies how strings are escaped when writing JSON text. - - - - - Only control characters (e.g. newline) are escaped. - - - - - All non-ASCII and control characters (e.g. newline) are escaped. - - - - - HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. - - - - - Indicates the method that will be used during deserialization for locating and loading assemblies. - - - - - In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. - - - - - In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. - - - - - Specifies type name handling options for the . - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - - - - Do not include the .NET type name when serializing types. - - - - - Include the .NET type name when serializing into a JSON object structure. - - - - - Include the .NET type name when serializing into a JSON array structure. - - - - - Always include the .NET type name when serializing. - - - - - Include the .NET type name when the type of the object being serialized is not the same as its declared type. - Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON - you must specify a root type object with - or . - - - - - Determines whether the collection is null or empty. - - The collection. - - true if the collection is null or empty; otherwise, false. - - - - - Adds the elements of the specified collection to the specified generic . - - The list to add to. - The collection of elements to add. - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The value to convert. - The culture to use when converting. - The type to convert or cast the value to. - - The converted type. If conversion was unsuccessful, the initial value - is returned if assignable to the target type. - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic that returns a result - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic, but uses one of the arguments for - the result. - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic, but uses one of the arguments for - the result. - - - - - Returns a Restrictions object which includes our current restrictions merged - with a restriction limiting our type - - - - - Helper class for serializing immutable collections. - Note that this is used by all builds, even those that don't support immutable collections, in case the DLL is GACed - https://github.com/JamesNK/Newtonsoft.Json/issues/652 - - - - - Gets the type of the typed collection's items. - - The type. - The type of the typed collection's items. - - - - Gets the member's underlying type. - - The member. - The underlying type of the member. - - - - Determines whether the property is an indexed property. - - The property. - - true if the property is an indexed property; otherwise, false. - - - - - Gets the member's value on the object. - - The member. - The target object. - The member's value on the object. - - - - Sets the member's value on the target object. - - The member. - The target. - The value. - - - - Determines whether the specified MemberInfo can be read. - - The MemberInfo to determine whether can be read. - /// if set to true then allow the member to be gotten non-publicly. - - true if the specified MemberInfo can be read; otherwise, false. - - - - - Determines whether the specified MemberInfo can be set. - - The MemberInfo to determine whether can be set. - if set to true then allow the member to be set non-publicly. - if set to true then allow the member to be set if read-only. - - true if the specified MemberInfo can be set; otherwise, false. - - - - - Builds a string. Unlike this class lets you reuse its internal buffer. - - - - - Determines whether the string is all white space. Empty string will return false. - - The string to test whether it is all white space. - - true if the string is all white space; otherwise, false. - - - - - Specifies the state of the . - - - - - An exception has been thrown, which has left the in an invalid state. - You may call the method to put the in the Closed state. - Any other method calls result in an being thrown. - - - - - The method has been called. - - - - - An object is being written. - - - - - An array is being written. - - - - - A constructor is being written. - - - - - A property is being written. - - - - - A write method has not been called. - - - - Specifies that an output will not be null even if the corresponding type allows it. - - - Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it. - - - Initializes the attribute with the specified return value condition. - - The return value condition. If the method returns this value, the associated parameter will not be null. - - - - Gets the return value condition. - - - Specifies that an output may be null even if the corresponding type disallows it. - - - Specifies that null is allowed as an input even if the corresponding type disallows it. - - - - Specifies that the method will not return if the associated Boolean parameter is passed the specified value. - - - - - Initializes a new instance of the class. - - - The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to - the associated parameter matches this value. - - - - Gets the condition parameter value. - - - diff --git a/W/Debug_Folder/System.Buffers.dll b/W/Debug_Folder/System.Buffers.dll deleted file mode 100644 index b6d9c7782..000000000 Binary files a/W/Debug_Folder/System.Buffers.dll and /dev/null differ diff --git a/W/Debug_Folder/System.Buffers.xml b/W/Debug_Folder/System.Buffers.xml deleted file mode 100644 index d3d239ec3..000000000 --- a/W/Debug_Folder/System.Buffers.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - System.Buffers - - - - Provides a resource pool that enables reusing instances of type . - The type of the objects that are in the resource pool. - - - Initializes a new instance of the class. - - - Creates a new instance of the class. - A new instance of the class. - - - Creates a new instance of the class using the specifed configuration. - The maximum length of an array instance that may be stored in the pool. - The maximum number of array instances that may be stored in each bucket in the pool. The pool groups arrays of similar lengths into buckets for faster access. - A new instance of the class with the specified configuration. - - - Retrieves a buffer that is at least the requested length. - The minimum length of the array. - An array of type that is at least minimumLength in length. - - - Returns an array to the pool that was previously obtained using the method on the same instance. - A buffer to return to the pool that was previously obtained using the method. - Indicates whether the contents of the buffer should be cleared before reuse. If bufferLength is set to true, and if the pool will store the buffer to enable subsequent reuse, the method will clear the array of its contents so that a subsequent caller using the method will not see the content of the previous caller. If bufferLength is set to false or if the pool will release the buffer, the array's contents are left unchanged. - - - Gets a shared instance. - A shared instance. - - - \ No newline at end of file diff --git a/W/Debug_Folder/System.CodeDom.dll b/W/Debug_Folder/System.CodeDom.dll deleted file mode 100644 index 5597b90de..000000000 Binary files a/W/Debug_Folder/System.CodeDom.dll and /dev/null differ diff --git a/W/Debug_Folder/System.Collections.Immutable.dll b/W/Debug_Folder/System.Collections.Immutable.dll deleted file mode 100644 index 049149f17..000000000 Binary files a/W/Debug_Folder/System.Collections.Immutable.dll and /dev/null differ diff --git a/W/Debug_Folder/System.Collections.Immutable.xml b/W/Debug_Folder/System.Collections.Immutable.xml deleted file mode 100644 index 9e5817348..000000000 --- a/W/Debug_Folder/System.Collections.Immutable.xml +++ /dev/null @@ -1,4908 +0,0 @@ - - - System.Collections.Immutable - - - - Represents an immutable collection of key/value pairs. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - The type of keys in the dictionary. - The type of values in the dictionary. - - - Adds an element with the specified key and value to the dictionary. - The key of the element to add. - The value of the element to add. - A new immutable dictionary that contains the additional key/value pair. - The given key already exists in the dictionary but has a different value. - - - Adds the specified key/value pairs to the dictionary. - The key/value pairs to add. - A new immutable dictionary that contains the additional key/value pairs. - One of the given keys already exists in the dictionary but has a different value. - - - Retrieves an empty dictionary that has the same ordering and key/value comparison rules as this dictionary instance. - An empty dictionary with equivalent ordering and key/value comparison rules. - - - Determines whether the immutable dictionary contains the specified key/value pair. - The key/value pair to locate. - true if the specified key/value pair is found in the dictionary; otherwise, false. - - - Removes the element with the specified key from the immutable dictionary. - The key of the element to remove. - A new immutable dictionary with the specified element removed; or this instance if the specified key cannot be found in the dictionary. - - - Removes the elements with the specified keys from the immutable dictionary. - The keys of the elements to remove. - A new immutable dictionary with the specified keys removed; or this instance if the specified keys cannot be found in the dictionary. - - - Sets the specified key and value in the immutable dictionary, possibly overwriting an existing value for the key. - The key of the entry to add. - The key value to set. - A new immutable dictionary that contains the specified key/value pair. - - - Sets the specified key/value pairs in the immutable dictionary, possibly overwriting existing values for the keys. - The key/value pairs to set in the dictionary. If any of the keys already exist in the dictionary, this method will overwrite their previous values. - A new immutable dictionary that contains the specified key/value pairs. - - - Determines whether this dictionary contains a specified key. - The key to search for. - The matching key located in the dictionary if found, or equalkey if no match is found. - true if a match for equalKey is found; otherwise, false. - - - Represents a list of elements that cannot be modified. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - The type of elements in the list. - - - Makes a copy of the list, and adds the specified object to the end of the copied list. - The object to add to the list. - A new list with the object added, or this list if the object is already in the list. - - - Makes a copy of the list and adds the specified objects to the end of the copied list. - The objects to add to the list. - A new list with the elements added, or this list if the elements already exist in the list. - - - Creates a list with all the items removed, but with the same sorting and ordering semantics as this list. - An empty list that has the same sorting and ordering semantics as this instance. - - - Searches for the specified object and returns the zero-based index of the first occurrence within the range of elements in the that starts at the specified index and contains the specified number of elements. - The object to locate in the . This value can be null for reference types. - The zero-based starting indes of the search. 0 (zero) is valid in an empty list. - The number of elements in the section to search. - The equality comparer to use to locate item. - The zero-based index of the first occurrence of item within the range of elements in the that starts at index and contains count number of elements if found; otherwise -1. - - - Inserts the specified element at the specified index in the immutable list. - The zero-based index at which to insert the value. - The object to insert. - A new immutable list that includes the specified element. - - - Inserts the specified elements at the specified index in the immutable list. - The zero-based index at which the new elements should be inserted. - The elements to insert. - A new immutable list that includes the specified elements. - - - Searches for the specified object and returns the zero-based index of the last occurrence within the range of elements in the that contains the specified number of elements and ends at the specified index. - The object to locate in the list. The value can be null for reference types. - The zero-based starting index of the search. 0 (zero) is valid in an empty list. - The number of elements in the section to search. - The equality comparer to match item. - Returns . - - - Removes the first occurrence of a specified object from this immutable list. - The object to remove from the list. - The equality comparer to use to locate value. - Returns a new list with the specified object removed. - - - Removes all the elements that match the conditions defined by the specified predicate. - The delegate that defines the conditions of the elements to remove. - A new immutable list with the elements removed. - - - Removes the element at the specified index of the immutable list. - The index of the element to remove. - A new list with the element removed. - - - Removes the specified object from the list. - The objects to remove from the list. - The equality comparer to use to determine if items match any objects in the list. - A new immutable list with the specified objects removed, if items matched objects in the list. - - - Removes a range of elements from the . - The zero-based starting index of the range of elements to remove. - The number of elements to remove. - A new immutable list with the elements removed. - - - Returns a new list with the first matching element in the list replaced with the specified element. - The element to be replaced. - The element to replace the the first occurrence of oldValue with - The equality comparer to use for matching oldValue. - A new list that contains newValue, even if oldvalue is the same as newValue. - oldValue does not exist in the list. - - - Replaces an element in the list at a given position with the specified element. - The position in the list of the element to replace. - The element to replace the old element with. - A new list that contains the new element, even if the element at the specified location is the same as the new element. - - - Represents an immutable first-in, first-out collection of objects. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - The type of elements in the queue. - - - Returns a new queue with all the elements removed. - An empty immutable queue. - - - Removes the first element in the immutable queue, and returns the new queue. - The new immutable queue with the first element removed. This value is never null. - - - Adds an element to the end of the immutable queue, and returns the new queue. - The element to add. - The new immutable queue with the specified element added. - - - Gets a value that indicates whether this immutable queue is empty. - true if this queue is empty; otherwise, false. - - - Returns the element at the beginning of the immutable queue without removing it. - The element at the beginning of the queue. - - - Represents a set of elements that can only be modified by creating a new instance of the set. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - The type of element stored in the set. - - - Adds the specified element to this immutable set. - The element to add. - A new set with the element added, or this set if the element is already in the set. - - - Retrieves an empty immutable set that has the same sorting and ordering semantics as this instance. - An empty set that has the same sorting and ordering semantics as this instance. - - - Determines whether this immutable set contains a specified element. - The element to locate in the set. - true if the set contains the specified value; otherwise, false. - - - Removes the elements in the specified collection from the current immutable set. - The collection of items to remove from this set. - A new set with the items removed; or the original set if none of the items were in the set. - - - Creates an immutable set that contains only elements that exist in this set and the specified set. - The collection to compare to the current . - A new immutable set that contains elements that exist in both sets. - - - Determines whether the current immutable set is a proper (strict) subset of the specified collection. - The collection to compare to the current set. - true if the current set is a proper subset of the specified collection; otherwise, false. - - - Determines whether the current immutable set is a proper (strict) superset of the specified collection. - The collection to compare to the current set. - true if the current set is a proper superset of the specified collection; otherwise, false. - - - Determines whether the current immutable set is a subset of a specified collection. - The collection to compare to the current set. - true if the current set is a subset of the specified collection; otherwise, false. - - - Determines whether the current immutable set is a superset of a specified collection. - The collection to compare to the current set. - true if the current set is a superset of the specified collection; otherwise, false. - - - Determines whether the current immutable set overlaps with the specified collection. - The collection to compare to the current set. - true if the current set and the specified collection share at least one common element; otherwise, false. - - - Removes the specified element from this immutable set. - The element to remove. - A new set with the specified element removed, or the current set if the element cannot be found in the set. - - - Determines whether the current immutable set and the specified collection contain the same elements. - The collection to compare to the current set. - true if the sets are equal; otherwise, false. - - - Creates an immutable set that contains only elements that are present either in the current set or in the specified collection, but not both. - The collection to compare to the current set. - A new set that contains the elements that are present only in the current set or in the specified collection, but not both. - - - Determines whether the set contains a specified value. - The value to search for. - The matching value from the set, if found, or equalvalue if there are no matches. - true if a matching value was found; otherwise, false. - - - Creates a new immutable set that contains all elements that are present in either the current set or in the specified collection. - The collection to add elements from. - A new immutable set with the items added; or the original set if all the items were already in the set. - - - Represents an immutable last-in-first-out (LIFO) collection. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - The type of elements in the stack. - - - Removes all objects from the immutable stack. - An empty immutable stack. - - - Gets a value that indicates whether this immutable stack is empty. - true if this stack is empty; otherwise,false. - - - Returns the element at the top of the immutable stack without removing it. - The element at the top of the stack. - - - Removes the element at the top of the immutable stack and returns the new stack. - The new stack; never null - - - Inserts an element at the top of the immutable stack and returns the new stack. - The element to push onto the stack. - The new stack. - - - A writable array accessor that can be converted into an instance without allocating extra memory. -NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - - Adds the specified item to the array. - The object to add to the array. - - - Adds the specified items to the end of the array. - The items to add to the array. - - - Adds the specified items to the end of the array. - The items to add to the array. - - - Adds the specified items to the end of the array. - The items to add to the array. - - - Adds the specified items to the end of the array. - The items to add to the array. - - - Adds the specified items to the end of the array. - The items to add to the array. - The number of elements from the source array to add. - - - Adds the specified items to the end of the array. - The items to add to the array. - The number of elements from the source array to add. - - - Adds the specified items that derive from the type currently in the array, to the end of the array. - The items to add to end of the array. - The type that derives from the type of item already in the array. - - - Adds the specified items that derive from the type currently in the array, to the end of the array. - The items to add to the end of the array. - The type that derives from the type of item already in the array. - - - Adds the specified items that derive from the type currently in the array, to the end of the array - The items to add to the end of the array. - The type that derives from the type of item already in the array. - - - Get and sets the length of the internal array. When set the internal array is reallocated to the given capacity if it is not already the specified length. - - - - Removes all items from the array. - - - Determines whether the array contains a specific value. - The object to locate in the array. - true if the object is found; otherwise, false. - - - Copies the current contents to the specified array. - The array to copy to. - The index to start the copy operation. - - - Gets or sets the number of items in the array. - The number of items in the array. - - - Gets an object that can be used to iterate through the collection. - An object that can be used to iterate through the collection. - - - Determines the index of the specified item. - The item to locate in the array. - The starting position of the search. - The number of elements to search. - The index of item if it’s found in the list; otherwise, -1. - - - Determines the index for the specified item. - The item to locate in the array. - The index at which to begin the search. - The starting position of the search. - The equality comparer to use in the search - The index of item if it’s found in the list; otherwise, -1. - - - Determines the index of a specific item in the array. - The item to locate in the array. - The index of item if it’s found in the list; otherwise, -1. - - - Determines the index of the specified item. - The item to locate in the array. - The starting position of the search. - The index of item if it’s found in the list; otherwise, -1. - - - Inserts an item in the array at the specified index. - The zero-based index at which to insert the item. - The object to insert into the array. - - - Gets or sets the item at the specified index. - The index of the item to get or set. - The item at the specified index. - The specified index is not in the array. - - - Determines the 0-based index of the last occurrence of the specified item in this array. - The item to search for. - The 0-based index where the item was found; or -1 if it could not be found. - - - Determines the 0-based index of the last occurrence of the specified item in this array. - The item to search for. - The starting position of the search. - The 0-based index into the array where the item was found; or -1 if it could not be found. - - - Determines the 0-based index of the last occurrence of the specified item in this array. - The item to search for. - The starting position of the search. - The number of elements to search. - The 0-based index into the array where the item was found; or -1 if it could not be found. - - - Determines the 0-based index of the last occurrence of the specified item in this array. - The item to search for. - The starting position of the search. - The number of elements to search. - The equality comparer to use in the search. - The 0-based index into the array where the item was found; or -1 if it could not be found. - - - Extracts the internal array as an and replaces it with a zero length array. - - When doesn&#39;t equal . - - - Removes the specified element. - The item to remove. - true if element was found and removed; otherwise, false. - - - Removes the item at the specified index from the array. - The zero-based index of the item to remove. - - - Reverses the order of elements in the collection. - - - Sorts the contents of the array. - - - Sorts the contents of the array. - The comparer to use for sorting. If comparer is null, the default comparer for the elements type in the array is used. - - - Sorts the elements in the entire array using the specified . - The to use when comparing elements. - comparison is null. - - - Sorts the contents of the array. - The starting index for the sort. - The number of elements to include in the sort. - The comparer to use for sorting. If comparer is null, the default comparer for the elements type in the array is used. - - - Creates a new array with the current contents of this . - A new array with the contents of this . - - - Returns an immutable array that contains the current contents of this . - An immutable array that contains the current contents of this . - - - Gets a value indicating whether the is read-only. - true if the is read-only; otherwise, false. - - - Returns an enumerator that iterates through the array. - An enumerator that iterates through the array. - - - Returns an enumerator that iterates through the array. - An enumerator that iterates through the array. - - - An array enumerator. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - - Gets the currently item. - The current item. - - - Advances to the next value in the array. - true if another item exists in the array; otherwise, false. - - - Represents an array that is immutable; meaning it cannot be changed once it is created. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - The type of element stored by the array. - - - Returns a copy of the original array with the specified item added to the end. - The item to be added to the end of the array. - A new array with the specified item added to the end. - - - Returns a copy of the original array with the specified elements added to the end of the array. - The elements to add to the array. - A new array with the elements added. - - - Returns a copy of the original array with the specified elements added to the end of the array. - The elements to add to the array. - A new array with the elements added. - - - Returns a new immutable array that contains the elements of this array cast to a different type. - The type of array element to return. - An immutable array that contains the elements of this array, cast to a different type. If the cast fails, returns an array whose property returns true. - - - Initializes a new instance of the struct by casting the underlying array to an array of type TOther. - - - Thrown if the cast is illegal. - - - Initializes a new instance of the struct based on the contents of an existing instance, allowing a covariant static cast to efficiently reuse the existing array. - The array to initialize the array with. No copy is made. - - - - - Returns an array with all the elements removed. - An array with all of the elements removed. - - - Determines whether the specified item exists in the array. - The item to search for. - true if the specified item was found in the array; otherwise false. - - - Copies the contents of this array to the specified array starting at the specified destination index. - The array to copy to. - The index in array where copying begins. - - - Copies the specified items in this array to the specified array at the specified starting index. - The index of this array where copying begins. - The array to copy to. - The index in array where copying begins. - The number of elements to copy from this array. - - - Copies the contents of this array to the specified array. - The array to copy to. - - - Gets an empty immutable array. - - - - Indicates whether specified array is equal to this array. - An object to compare with this object. - true if other is equal to this array; otherwise, false. - - - Determines if this array is equal to the specified object. - The to compare with this array. - true if this array is equal to obj; otherwise, false. - - - Returns an enumerator that iterates through the contents of the array. - An enumerator. - - - Returns a hash code for this instance. - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - Searches the array for the specified item. - The item to search for. - The index at which to begin the search. - The number of elements to search. - The equality comparer to use in the search. - The zero-based index position of the item if it is found, or -1 if it is not. - - - Searches the array for the specified item. - The item to search for. - The zero-based index position of the item if it is found, or -1 if it is not. - - - Searches the array for the specified item. - The item to search for. - The index at which to begin the search. - The zero-based index position of the item if it is found, or -1 if it is not. - - - Searches the array for the specified item. - The item to search for. - The index at which to begin the search. - The equality comparer to use in the search. - The zero-based index position of the item if it is found, or -1 if it is not. - - - Searches the array for the specified item. - The item to search for. - The index at which to begin the search. - The number of elements to search. - The zero-based index position of the item if it is found, or -1 if it is not. - - - Returns a new array with the specified value inserted at the specified position. - The 0-based index into the array at which the new item should be added. - The item to insert at the start of the array. - A new array with the item inserted at the specified index. - - - Inserts the specified values at the specified index. - The index at which to insert the value. - The elements to insert. - A new immutable array with the items inserted at the specified index. - - - Inserts the specified values at the specified index. - The index at which to insert the value. - The elements to insert. - A new immutable array with the items inserted at the specified index. - - - Gets a value indicating whether this array was declared but not initialized. - true to indicate the is null; otherwise, false. - - - Gets a value indicating whether this is empty or is not initialized. - true to indicate the is null or ; otherwise, false. - - - Gets a value indicating whether this is empty. - true to indicate the is empty; otherwise, false. - - - Gets the element at the specified index in the immutable array. - The zero-based index of the element to get. - The element at the specified index in the immutable array. - - - Searches the array for the specified item; starting at the end of the array. - The item to search for. - The 0-based index into the array where the item was found; or -1 if it could not be found. - - - Searches the array for the specified item; starting at the end of the array. - The item to search for. - The index at which to begin the search. - The 0-based index into the array where the item was found; or -1 if it could not be found. - - - Searches the array for the specified item; starting at the end of the array. - The item to search for. - The index at which to begin the search. - The number of elements to search. - The 0-based index into the array where the item was found; or -1 if it could not be found. - - - Searches the array for the specified item; starting at the end of the array. - The item to search for. - The index at which to begin the search. - The number of elements to search. - The equality comparer to use in the search. - The 0-based index into the array where the item was found; or -1 if it could not be found. - - - Gets the number of elements in the array. - The number of elements in the array - - - Filters the elements of this array to those assignable to the specified type. - The type to filter the elements of the sequence on. - An that contains elements from the input sequence of type of TResult. - - - Returns a value that indicates if two arrays are equal. - The array to the left of the operator. - The array to the right of the operator. - true if the arrays are equal; otherwise, false. - - - Returns a value that indicates if two arrays are equal. - The array to the left of the operator. - The array to the right of the operator. - true if the arrays are equal; otherwise, false. - - - Returns a value that indicates whether two arrays are not equal. - The array to the left of the operator. - The array to the right of the operator. - true if the arrays are not equal; otherwise, false. - - - Checks for inequality between two array. - The object to the left of the operator. - The object to the right of the operator. - true if the two arrays are not equal; otherwise, false. - - - Returns an array with the first occurrence of the specified element removed from the array. If no match is found, the current array is returned. - The item to remove. - A new array with the item removed. - - - Returns an array with the first occurrence of the specified element removed from the array. - If no match is found, the current array is returned. - The item to remove. - The equality comparer to use in the search. - A new array with the specified item removed. - - - Removes all the items from the array that meet the specified condition. - The delegate that defines the conditions of the elements to remove. - A new array with items that meet the specified condition removed. - - - Returns an array with the element at the specified position removed. - The 0-based index of the element to remove from the returned array. - A new array with the item at the specified index removed. - - - Removes the specified items from this list. - The items to remove if matches are found in this list. - The equality comparer to use in the search. - A new array with the elements removed. - - - Removes the specified items from this array. - The items to remove if matches are found in this list. - The equality comparer to use in the search. - A new array with the elements removed. - - - Returns an array with the elements at the specified position removed. - The 0-based index of the starting element to remove from the array. - The number of elements to remove from the array. - The new array with the specified elements removed. - - - Removes the specified items from this array. - The items to remove if matches are found in this list. - A new array with the elements removed. - - - Removes the specified values from this list. - The items to remove if matches are found in this list. - A new list with the elements removed. - - - Finds the first element in the array equal to the specified value and replaces the value with the specified new value. - The value to find and replace in the array. - The value to replace the oldvalue with. - The equality comparer to use to compare values. - A new array that contains newValue even if the new and old values are the same. - oldValue is not found in the array. - - - Finds the first element in the array equal to the specified value and replaces the value with the specified new value. - The value to find and replace in the array. - The value to replace the oldvalue with. - A new array that contains newValue even if the new and old values are the same. - oldValue is not found in the array. - - - Replaces the item at the specified index with the specified item. - The index of the item to replace. - The item to add to the list. - The new array that contains item at the specified index. - - - Sorts the elements in the immutable array using the default comparer. - A new immutable array that contains the items in this array, in sorted order. - - - Sorts the elements in the immutable array using the specified comparer. - The implementation to use when comparing elements, or null to use the default comparer - A new immutable array that contains the items in this array, in sorted order. - - - Sorts the elements in the entire using the specified . - The to use when comparing elements. - The sorted list. - comparison is null. - - - Sorts the specified elements in the immutable array using the specified comparer. - The index of the first element to sort. - The number of elements to include in the sort. - The implementation to use when comparing elements, or null to use the default comparer - A new immutable array that contains the items in this array, in sorted order. - - - Creates a mutable array that has the same contents as this array and can be efficiently mutated across multiple operations using standard mutable interfaces. - The new builder with the same contents as this array. - - - Throws in all cases. - The item to add to the end of the array. - - - Throws in all cases. - - - Gets the number of array in the collection. - - Thrown if the property returns true. - - - Gets a value indicating whether this instance is read only. - true if this instance is read only; otherwise, false. - - - Throws in all cases. - The object to remove from the array. - Throws in all cases. - - - Returns an enumerator that iterates through the array. - An enumerator that can be used to iterate through the array. - - - Throws in all cases. - The index of the location to insert the item. - The item to insert. - - - Gets or sets the element at the specified index in the read-only list. - The zero-based index of the element to get. - The element at the specified index in the read-only list. - Always thrown from the setter. - Thrown if the property returns true. - - - Throws in all cases. - The index. - - - Gets the number of array in the collection. - - Thrown if the property returns true. - - - Gets the element at the specified index. - The index. - The element. - Thrown if the property returns true. - - - Copies this array to another array starting at the specified index. - The array to copy this array to. - The index in the destination array to start the copy operation. - - - Gets the size of the array. - - Thrown if the property returns true. - - - See the interface. - - - - Gets the sync root. - - - - Returns an enumerator that iterates through the immutable array. - An enumerator that iterates through the immutable array. - - - Throws in all cases. - The value to add to the array. - Throws in all cases. - - - Throws in all cases. - - - Throws in all cases. - The value to check for. - Throws in all cases. - - - Gets the value at the specified index. - The value to return the index of. - The value of the element at the specified index. - - - Throws in all cases. - Index that indicates where to insert the item. - The value to insert. - - - Gets a value indicating whether this instance is fixed size. - true if this instance is fixed size; otherwise, false. - - - Gets a value indicating whether this instance is read only. - true if this instance is read only; otherwise, false. - - - Gets or sets the at the specified index. - The index. - - Always thrown from the setter. - Thrown if the property returns true. - - - Throws in all cases. - The value to remove from the array. - - - Throws in all cases. - The index of the item to remove. - - - Returns a copy of the original array with the specified item added to the end. - The value to add to the end of the array. - A new array with the specified item added to the end. - - - Returns a copy of the original array with the specified elements added to the end of the array. - The elements to add to the end of the array. - A new array with the elements added to the end. - - - Returns an array with all the elements removed. - Returns an array with all the elements removed. - - - Returns a new array with the specified value inserted at the specified position. - The 0-based index into the array at which the new item should be added. - The item to insert at the start of the array. - A new array with the specified value inserted. - - - Inserts the specified values at the specified index - The index at which to insert the value. - The elements to insert. - A new array with the specified values inserted. - - - Returns an array with the first occurrence of the specified element removed from the array; if no match is found, the current array is returned. - The value to remove from the array. - The equality comparer to use in the search. - A new array with the value removed. - - - Removes all the items from the array that meet the specified condition. - The delegate that defines the conditions of the elements to remove. - A new array with items that meet the specified condition removed. - - - Returns an array with the element at the specified position removed. - The 0-based index of the element to remove from the returned array. - A new array with the specified item removed. - - - Removes the specified items from this array. - The items to remove if matches are found in this list. - The equality comparer to use in the search. - A new array with the elements removed. - - - Returns an array with the elements at the specified position removed. - The 0-based index of the starting element to remove from the array. - The number of elements to remove from the array. - The new array with the specified elements removed. - - - Finds the first element in the array equal to the specified value and replaces the value with the specified new value. - The value to find and replace in the array. - The value to replace the oldvalue with. - The equality comparer to use to compare values. - A new array that contains newValue even if the new and old values are the same. - oldValue is not found in the array. - - - Replaces the item at the specified index with the specified item. - The index of the item to replace. - The value to add to the list. - The new array that contains item at the specified index. - - - Determines whether the current collection element precedes, occurs in the same position as, or follows another element in the sort order. - The element to compare with the current instance. - The object used to compare members of the current array with the corresponding members of other array. - An integer that indicates whether the current element precedes, is in the same position or follows the other element. - The arrays are not the same length. - - - Determines whether this array is structurally equal to the specified array. - The array to compare with the current instance. - An object that determines whether the current instance and other are structurally equal. - true if the two arrays are structurally equal; otherwise, false. - - - Returns a hash code for the current instance. - An object that computes the hash code of the current object. - The hash code for the current instance. - - - Provides methods for creating an array that is immutable; meaning it cannot be changed once it is created. -NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - Searches the sorted immutable array for a specified element using the default comparer and returns the zero-based index of the element, if it’s found. - The sorted array to search. - The object to search for. - The type of element stored in the array. - The zero-based index of the item in the array, if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than value or, if there is no larger element, the bitwise complement of . - value does not implement or the search encounters an element that does not implement . - - - Searches a sorted immutable array for a specified element and returns the zero-based index of the element, if it’s found. - The sorted array to search. - The object to search for. - The comparer implementation to use when comparing elements, or null to use the default comparer. - The type of element stored in the array. - The zero-based index of the item in the array, if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than value or, if there is no larger element, the bitwise complement of . - comparer is null and value does not implement or the search encounters an element that does not implement . - - - Searches a sorted immutable array for a specified element and returns the zero-based index of the element, if it’s found. - The sorted array to search. - The starting index of the range to search. - The length of the range to search. - The object to search for. - The type of element stored in the array. - The zero-based index of the item in the array, if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than value or, if there is no larger element, the bitwise complement of . - value does not implement or the search encounters an element that does not implement . - - - Searches a sorted immutable array for a specified element and returns the zero-based index of the element. - The sorted array to search. - The starting index of the range to search. - The length of the range to search. - The object to search for. - The comparer to use when comparing elements for equality or null to use the default comparer. - The type of element stored in the array. - The zero-based index of the item in the array, if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than value or, if there is no larger element, the bitwise complement of . - comparer is null and value does not implement or the search encounters an element that does not implement . - - - Creates an immutable array that contains the specified objects. - The first object to store in the array. - The second object to store in the array. - The third object to store in the array. - The fourth object to store in the array. - The type of elements stored in the array. - An immutable array that contains the specified objects. - - - Creates an immutable array with specified objects from another array. - The source array of objects. - The index of the first element to copy from items. - The number of elements from items to include in this immutable array. - The type of elements stored in the array. - An immutable array that contains the specified objects from the source array. - - - Creates an immutable array with the specified objects from another immutable array. - The source array of objects. - The index of the first element to copy from items. - The number of elements from items to include in this immutable array. - The type of elements stored in the array. - An immutable array that contains the specified objects from the source array. - - - Creates an immutable array that contains the specified objects. - The first object to store in the array. - The second object to store in the array. - The third object to store in the array. - The type of elements stored in the array. - An immutable array that contains the specified objects. - - - Creates an immutable array from the specified array of objects. - The array of objects to populate the array with. - The type of elements stored in the array. - An immutable array that contains the array of items. - - - Creates an immutable array that contains the specified object. - The object to store in the array. - The type of elements stored in the array. - Returns an immutable array that contains the specified object. - - - Creates an empty immutable array. - The type of elements stored in the array. - An empty immutable array. - - - Creates an immutable array that contains the specified objects. - The first object to store in the array. - The second object to store in the array. - The type of elements stored in the array. - Returns an immutable array that contains the specified objects. - - - Creates a mutable array that can be converted to an without allocating new memory. - The type of elements stored in the builder. - A mutable array of the specified type that can be efficiently converted to an immutable array. - - - Creates a mutable array that can be converted to an without allocating new memory. - The initial capacity of the builder. - The type of elements stored in the builder. - A mutable array of the specified type that can be efficiently converted to an immutable array. - - - Creates a new populated with the specified items. - The elements to add to the array. - The type of element stored in the array. - An immutable array that contains the specified items. - - - Initializes a new instance of the struct. - The source array to initialize the resulting array with. - The index of the first element in the source array to include in the resulting array. - The number of elements from the source array to include in the resulting array. - The function to apply to each element from the source array included in the resulting array. - An argument to be passed to the selector mapping function. - - - - - - - Initializes a new instance of the struct. - The source array to initialize the resulting array with. - The function to apply to each element from the source array. - An argument to be passed to the selector mapping function. - - - - - - - Initializes a new instance of the struct. - The source array to initialize the resulting array with. - The function to apply to each element from the source array. - - - - - - Initializes a new instance of the struct. - The source array to initialize the resulting array with. - The index of the first element in the source array to include in the resulting array. - The number of elements from the source array to include in the resulting array. - The function to apply to each element from the source array included in the resulting array. - - - - - - Creates an immutable array from the specified collection. - The collection of objects to copy to the immutable array. - The type of elements contained in items. - An immutable array that contains the specified collection of objects. - - - Represents a hash map that mutates with little or no memory allocations and that can produce or build on immutable hash map instances very efficiently. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - - - Adds the specified item to the immutable dictionary. - The object to add to the dictionary. - The dictionary is read-only. - - - Adds an element that has the specified key and value to the immutable dictionary. - The key of the element to add. - The value of the element to add. - key is null. - An element with the same key already exists in the dictionary. - The dictionary is read-only. - - - Adds a sequence of values to this collection. - The items to add to this collection. - - - Removes all items from the immutable dictionary. - The dictionary is read-only. - - - Determines whether the immutable dictionary contains a specific value. - The object to locate in the dictionary. - true if item is found in the dictionary; otherwise, false. - - - Determines whether the immutable dictionary contains an element that has the specified key. - The key to locate in the dictionary. - true if the dictionary contains an element with the key; otherwise, false. - key is null. - - - Determines whether the immutable dictionary contains an element that has the specified value. - The value to locate in the immutable dictionary. The value can be null for reference types. - true if the dictionary contains an element with the specified value; otherwise, false. - - - Gets the number of elements contained in the immutable dictionary. - The number of elements contained in the immutable dictionary. - - - Returns an enumerator that iterates through the immutable dictionary. - An enumerator that can be used to iterate through the collection. - - - Gets the value for a given key if a matching key exists in the dictionary. - The key to search for. - The default value to return if no matching key is found in the dictionary. - The value for the key, or defaultValue if no matching key was found. - - - Gets the value for a given key if a matching key exists in the dictionary. - The key to search for. - The value for the key, or default(TValue) if no matching key was found. - - - Gets or sets the element with the specified key. - The element to get or set. - The element that has the specified key. - - - Gets or sets the key comparer. - The key comparer. - - - Gets a collection that contains the keys of the immutable dictionary. - A collection that contains the keys of the object that implements the immutable dictionary. - - - Removes the first occurrence of a specific object from the immutable dictionary. - The object to remove from the dictionary. - true if item was successfully removed from the dictionary; otherwise, false. This method also returns false if item is not found in the dictionary. - The dictionary is read-only. - - - Removes the element with the specified key from the immutable dictionary. - The key of the element to remove. - true if the element is successfully removed; otherwise, false. This method also returns false if key was not found in the dictionary. - key is null. - The dictionary is read-only. - - - Removes any entries with keys that match those found in the specified sequence from the immutable dictionary. - The keys for entries to remove from the dictionary. - - - Creates an immutable dictionary based on the contents of this instance. - An immutable dictionary. - - - Determines whether this dictionary contains a specified key. - The key to search for. - The matching key located in the dictionary if found, or equalkey if no match is found. - true if a match for equalKey is found; otherwise, false. - - - Returns the value associated with the specified key. - The key whose value will be retrieved. - When this method returns, contains the value associated with the specified key, if the key is found; otherwise, returns the default value for the type of the value parameter. This parameter is passed uninitialized. - true if the object that implements the immutable dictionary contains an element with the specified key; otherwise, false. - key is null. - - - Gets or sets the value comparer. - The value comparer. - - - Gets a collection that contains the values of the immutable dictionary. - A collection that contains the values of the object that implements the dictionary. - - - - - - - - - - - - - - - - - - - Copies the elements of the dictionary to an array of type , starting at the specified array index. - The one-dimensional array of type that is the destination of the elements copied from the dictionary. The array must have zero-based indexing. - The zero-based index in array at which copying begins. - - - Gets a value indicating whether access to the is synchronized (thread safe). - true if access to the is synchronized (thread safe); otherwise, false. - - - Gets an object that can be used to synchronize access to the . - An object that can be used to synchronize access to the . - - - Adds an element with the provided key and value to the dictionary object. - The key of the element to add. - The value of the element to add. - - - Determines whether the dictionary object contains an element with the specified key. - The key to locate. - true if the dictionary contains an element with the key; otherwise, false. - - - Returns an object for the dictionary. - An object for the dictionary. - - - - Gets a value indicating whether the object has a fixed size. - true if the object has a fixed size; otherwise, false. - - - Gets a value indicating whether the is read-only. - true if the is read-only; otherwise, false. - - - Gets or sets the element with the specified key. - The key. - - - - Gets an containing the keys of the . - An containing the keys of the object that implements . - - - Removes the element with the specified key from the dictionary. - The key of the element to remove. - - - Gets an containing the values in the . - An containing the values in the object that implements . - - - Returns an enumerator that iterates through a collection. - An enumerator object that can be used to iterate through the collection. - - - Enumerates the contents of the immutable dictionary without allocating any memory. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - - - Gets the element at the current position of the enumerator. - The element in the dictionary at the current position of the enumerator. - - - Releases the resources used by the current instance of the class. - - - Advances the enumerator to the next element of the immutable dictionary. - true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the dictionary. - The dictionary was modified after the enumerator was created. - - - Sets the enumerator to its initial position, which is before the first element in the dictionary. - The dictionary was modified after the enumerator was created. - - - Gets the current element. - - - - Represents an immutable, unordered collection of keys and values. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - The type of the keys in the dictionary. - The type of the values in the dictionary. - - - Adds an element with the specified key and value to the immutable dictionary. - The key of the element to add. - The value of the element to add. - A new immutable dictionary that contains the additional key/value pair. - The given key already exists in the dictionary but has a different value. - - - Adds the specified key/value pairs to the immutable dictionary. - The key/value pairs to add. - A new immutable dictionary that contains the additional key/value pairs. - One of the given keys already exists in the dictionary but has a different value. - - - Retrieves an empty immutable dictionary that has the same ordering and key/value comparison rules as this dictionary instance. - An empty dictionary with equivalent ordering and key/value comparison rules. - - - Determines whether this immutable dictionary contains the specified key/value pair. - The key/value pair to locate. - true if the specified key/value pair is found in the dictionary; otherwise, false. - - - Determines whether the immutable dictionary contains an element with the specified key. - The key to locate. - true if the immutable dictionary contains an element with the specified key; otherwise, false. - - - Determines whether the immutable dictionary contains an element with the specified value. - The value to locate. The value can be null for reference types. - true if the dictionary contains an element with the specified value; otherwise, false. - - - Gets the number of key/value pairs in the immutable dictionary. - The number of key/value pairs in the dictionary. - - - Gets an empty immutable dictionary - - - - Returns an enumerator that iterates through the immutable dictionary. - An enumerator that can be used to iterate through the dictionary. - - - Gets a value that indicates whether this instance of the immutable dictionary is empty. - true if this instance is empty; otherwise, false. - - - Gets the TValue associated with the specified key. - The type of the key. - The value associated with the specified key. If no results are found, the operation throws an exception. - - - Gets the key comparer for the immutable dictionary. - The key comparer. - - - Gets the keys in the immutable dictionary. - The keys in the immutable dictionary. - - - Removes the element with the specified key from the immutable dictionary. - The key of the element to remove. - A new immutable dictionary with the specified element removed; or this instance if the specified key cannot be found in the dictionary. - - - Removes the elements with the specified keys from the immutable dictionary. - The keys of the elements to remove. - A new immutable dictionary with the specified keys removed; or this instance if the specified keys cannot be found in the dictionary. - - - Sets the specified key and value in the immutable dictionary, possibly overwriting an existing value for the key. - The key of the entry to add. - The key value to set. - A new immutable dictionary that contains the specified key/value pair. - - - Sets the specified key/value pairs in the immutable dictionary, possibly overwriting existing values for the keys. - The key/value pairs to set in the dictionary. If any of the keys already exist in the dictionary, this method will overwrite their previous values. - A new immutable dictionary that contains the specified key/value pairs. - - - Creates an immutable dictionary with the same contents as this dictionary that can be efficiently mutated across multiple operations by using standard mutable interfaces. - A collection with the same contents as this dictionary that can be efficiently mutated across multiple operations by using standard mutable interfaces. - - - Determines whether this dictionary contains a specified key. - The key to search for. - The matching key located in the dictionary if found, or equalkey if no match is found. - true if a match for equalKey is found; otherwise, false. - - - Gets the value associated with the specified key. - The key whose value will be retrieved. - When this method returns, contains the value associated with the specified key, if the key is found; otherwise, contains the default value for the type of the value parameter. This parameter is passed uninitialized. - true if the object that implements the dictionary contains an element with the specified key; otherwise, false. - key is null. - - - Gets the value comparer used to determine whether values are equal. - The value comparer used to determine whether values are equal. - - - Gets the values in the immutable dictionary. - The values in the immutable dictionary. - - - Gets an instance of the immutable dictionary that uses the specified key comparer. - The key comparer to use. - An instance of the immutable dictionary that uses the given comparer. - - - Gets an instance of the immutable dictionary that uses the specified key and value comparers. - The key comparer to use. - The value comparer to use. - An instance of the immutable dictionary that uses the given comparers. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Copies the elements of the dictionary to an array, starting at a particular array index. - The one-dimensional array that is the destination of the elements copied from the dictionary. The array must have zero-based indexing. - The zero-based index in array at which copying begins. - - - Gets a value indicating whether access to the is synchronized (thread safe). - true if access to the is synchronized (thread safe); otherwise, false. - - - Gets an object that can be used to synchronize access to the . - An object that can be used to synchronize access to the . - - - Adds an element with the provided key and value to the immutable dictionary object. - The object to use as the key of the element to add. - The object to use as the value of the element to add. - - - Clears this instance. - The dictionary object is read-only. - - - Determines whether the immutable dictionary object contains an element with the specified key. - The key to locate in the dictionary object. - true if the dictionary contains an element with the key; otherwise, false. - - - Returns an object for the immutable dictionary object. - An enumerator object for the dictionary object. - - - Gets a value indicating whether the object has a fixed size. - true if the object has a fixed size; otherwise, false. - - - Gets a value indicating whether the is read-only. - true if the is read-only; otherwise, false. - - - Gets or sets the element with the specified key. - The key. - - - - Gets an containing the keys of the . - An containing the keys of the object that implements . - - - Removes the element with the specified key from the immutable dictionary object. - The key of the element to remove. - - - Gets an containing the values in the . - An containing the values in the object that implements . - - - Returns an enumerator that iterates through a collection. - An enumerator object that can be used to iterate through the collection. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Provides a set of initialization methods for instances of the class. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - Determines whether the specified immutable dictionary contains the specified key/value pair. - The immutable dictionary to search. - The key to locate in the immutable dictionary. - The value to locate on the specified key, if the key is found. - The type of the keys in the immutable dictionary. - The type of the values in the immutable dictionary. - true if this map contains the specified key/value pair; otherwise, false. - - - Creates an empty immutable dictionary. - The type of keys stored by the dictionary. - The type of values stored by the dictionary. - An empty immutable dictionary. - - - Creates an empty immutable dictionary that uses the specified key comparer. - The implementation to use to determine the equality of keys in the dictionary. - The type of keys stored by the dictionary. - The type of values stored by the dictionary. - An empty immutable dictionary. - - - Creates an empty immutable dictionary that uses the specified key and value comparers. - The implementation to use to determine the equality of keys in the dictionary. - The implementation to use to determine the equality of values in the dictionary. - The type of keys stored by the dictionary. - The type of values stored by the dictionary. - An empty immutable dictionary. - - - Creates a new immutable dictionary builder. - The type of keys stored by the dictionary. - The type of values stored by the dictionary. - The new builder. - - - Creates a new immutable dictionary builder. - The key comparer. - The type of keys stored by the dictionary. - The type of values stored by the dictionary. - The new builder. - - - Creates a new immutable dictionary builder. - The key comparer. - The value comparer. - The type of keys stored by the dictionary. - The type of values stored by the dictionary. - The new builder. - - - Creates a new immutable dictionary that contains the specified items and uses the specified key comparer. - The comparer implementation to use to compare keys for equality. - The items to add to the dictionary before it’s immutable. - The type of keys in the dictionary. - The type of values in the dictionary. - A new immutable dictionary that contains the specified items and uses the specified comparer. - - - Creates a new immutable dictionary that contains the specified items and uses the specified key comparer. - The comparer implementation to use to compare keys for equality. - The comparer implementation to use to compare values for equality. - The items to add to the dictionary before it’s immutable. - The type of keys in the dictionary. - The type of values in the dictionary. - A new immutable dictionary that contains the specified items and uses the specified comparer. - - - Creates a new immutable dictionary that contains the specified items. - The items used to populate the dictionary before it’s immutable. - The type of keys in the dictionary. - The type of values in the dictionary. - A new immutable dictionary that contains the specified items. - - - Gets the value for a given key if a matching key exists in the dictionary. - The dictionary to retrieve the value from. - The key to search for. - The type of the key. - The type of the value. - The value for the key, or default(TValue) if no matching key was found. - - - Gets the value for a given key if a matching key exists in the dictionary. - The dictionary to retrieve the value from. - The key to search for. - The default value to return if no matching key is found in the dictionary. - The type of the key. - The type of the value. - The value for the key, or defaultValue if no matching key was found. - - - Enumerates a sequence of key/value pairs and produces an immutable dictionary of its contents. - The sequence of key/value pairs to enumerate. - The type of the keys in the dictionary. - The type of the values in the dictionary. - An immutable dictionary that contains the key/value pairs in the specified sequence. - - - Enumerates a sequence of key/value pairs and produces an immutable dictionary of its contents by using the specified key comparer. - The sequence of key/value pairs to enumerate. - The key comparer to use when building the immutable dictionary. - The type of the keys in the dictionary. - The type of the values in the dictionary. - An immutable dictionary that contains the key/value pairs in the specified sequence. - - - Enumerates a sequence of key/value pairs and produces an immutable dictionary of its contents by using the specified key and value comparers. - The sequence of key/value pairs to enumerate. - The key comparer to use when building the immutable dictionary. - The value comparer to use for the immutable dictionary. - The type of the keys in the dictionary. - The type of the values in the dictionary. - An immutable dictionary that contains the key/value pairs in the specified sequence. - - - Enumerates and transforms a sequence, and produces an immutable dictionary of its contents by using the specified key comparer. - The sequence to enumerate to generate the dictionary. - The function that will produce the key for the dictionary from each sequence element. - The function that will produce the value for the dictionary from each sequence element. - The key comparer to use for the dictionary. - The type of the elements in the sequence. - The type of the keys in the resulting dictionary. - The type of the values in the resulting dictionary. - An immutable dictionary that contains the items in the specified sequence. - - - Enumerates and transforms a sequence, and produces an immutable dictionary of its contents. - The sequence to enumerate to generate the dictionary. - The function that will produce the key for the dictionary from each sequence element. - The function that will produce the value for the dictionary from each sequence element. - The type of the elements in the sequence. - The type of the keys in the resulting dictionary. - The type of the values in the resulting dictionary. - An immutable dictionary that contains the items in the specified sequence. - - - Enumerates and transforms a sequence, and produces an immutable dictionary of its contents by using the specified key and value comparers. - The sequence to enumerate to generate the dictionary. - The function that will produce the key for the dictionary from each sequence element. - The function that will produce the value for the dictionary from each sequence element. - The key comparer to use for the dictionary. - The value comparer to use for the dictionary. - The type of the elements in the sequence. - The type of the keys in the resulting dictionary. - The type of the values in the resulting dictionary. - An immutable dictionary that contains the items in the specified sequence. - - - Constructs an immutable dictionary from an existing collection of elements, applying a transformation function to the source keys. - The source collection used to generate the immutable dictionary. - The function used to transform keys for the immutable dictionary. - The type of element in the source collection. - The type of key in the resulting immutable dictionary. - The immutable dictionary that contains elements from source, with keys transformed by applying keySelector. - - - Constructs an immutable dictionary based on some transformation of a sequence. - The source collection used to generate the immutable dictionary. - The function used to transform keys for the immutable dictionary. - The key comparer to use for the dictionary. - The type of element in the source collection. - The type of key in the resulting immutable dictionary. - The immutable dictionary that contains elements from source, with keys transformed by applying keySelector. - - - Represents a hash set that mutates with little or no memory allocations and that can produce or build on immutable hash set instances very efficiently. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - - Adds the specified item to the immutable hash set. - The item to add. - true if the item did not already belong to the collection; otherwise, false. - - - Removes all items from the immutable hash set. - The hash set is read-only. - - - Determines whether the immutable hash set contains a specific value. - The object to locate in the hash set. - true if item is found in the hash set ; otherwise, false. - - - Gets the number of elements contained in the immutable hash set. - The number of elements contained in the immutable hash set. - - - Removes all elements in the specified collection from the current hash set. - The collection of items to remove from the set. - - - Returns an enumerator that iterates through the immutable hash set. - An enumerator that can be used to iterate through the set. - - - Modifies the current set so that it contains only elements that are also in a specified collection. - The collection to compare to the current set. - - - Determines whether the current set is a proper (strict) subset of a specified collection. - The collection to compare to the current set. - true if the current set is a proper subset of other; otherwise, false. - - - Determines whether the current set is a proper (strict) superset of a specified collection. - The collection to compare to the current set. - true if the current set is a proper superset of other; otherwise, false. - - - Determines whether the current set is a subset of a specified collection. - The collection to compare to the current set. - true if the current set is a subset of other; otherwise, false. - - - Determines whether the current set is a superset of a specified collection. - The collection to compare to the current set. - true if the current set is a superset of other; otherwise, false. - - - Gets or sets the key comparer. - The key comparer. - - - Determines whether the current set overlaps with the specified collection. - The collection to compare to the current set. - true if the current set and other share at least one common element; otherwise, false. - - - Removes the first occurrence of a specific object from the immutable hash set. - The object to remove from the set. - true if item was successfully removed from the set ; otherwise, false. This method also returns false if item is not found in the original set. - The set is read-only. - - - Determines whether the current set and the specified collection contain the same elements. - The collection to compare to the current set. - true if the current set is equal to other; otherwise, false. - - - Modifies the current set so that it contains only elements that are present either in the current set or in the specified collection, but not both. - The collection to compare to the current set. - - - Creates an immutable hash set based on the contents of this instance. - An immutable set. - - - Modifies the current set so that it contains all elements that are present in both the current set and in the specified collection. - The collection to compare to the current set. - - - Adds an item to the hash set. - The object to add to the set. - The set is read-only. - - - Copies the elements of the hash set to an array, starting at a particular array index. - The one-dimensional array that is the destination of the elements copied from the hash set. The array must have zero-based indexing. - The zero-based index in array at which copying begins. - - - Gets a value indicating whether the is read-only. - true if the is read-only; otherwise, false. - - - Returns an enumerator that iterates through the collection. - An enumerator that can be used to iterate through the collection. - - - Returns an enumerator that iterates through a collection. - An enumerator that can be used to iterate through the collection. - - - Enumerates the contents of the immutable hash set without allocating any memory. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - - Gets the element at the current position of the enumerator. - The element at the current position of the enumerator. - - - Releases the resources used by the current instance of the class. - - - Advances the enumerator to the next element of the immutable hash set. - true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the hash set. - The hash set was modified after the enumerator was created. - - - Sets the enumerator to its initial position, which is before the first element in the hash set. - The hash set was modified after the enumerator was created. - - - Gets the current element. - - - - Represents an immutable, unordered hash set. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - The type of elements in the hash set. - - - Adds the specified element to the hash set. - The element to add to the set. - A hash set that contains the added value and any values previously held by the object. - - - Retrieves an empty immutable hash set that has the same sorting and ordering semantics as this instance. - An empty hash set that has the same sorting and ordering semantics as this instance. - - - Determines whether this immutable hash set contains the specified element. - The object to locate in the immutable hash set. - true if item is found in the ; otherwise, false. - - - Gets the number of elements in the immutable hash set. - The number of elements in the hash set. - - - Gets an immutable hash set for this type that uses the default . - - - - Removes the elements in the specified collection from the current immutable hash set. - The collection of items to remove from this set. - A new set with the items removed; or the original set if none of the items were in the set. - - - Returns an enumerator that iterates through the collection. - An enumerator that can be used to iterate through the collection. - - - Creates an immutable hash set that contains elements that exist in both this set and the specified set. - The collection to compare to the current set. - A new immutable set that contains any elements that exist in both sets. - - - Gets a value that indicates whether the current immutable hash set is empty. - true if this instance is empty; otherwise, false. - - - Determines whether the current immutable hash set is a proper (strict) subset of a specified collection. - The collection to compare to the current set. - true if the current set is a proper subset of the specified collection; otherwise, false. - - - Determines whether the current immutable hash set is a proper (strict) superset of a specified collection. - The collection to compare to the current set. - true if the current set is a proper superset of the specified collection; otherwise, false. - - - Determines whether the current immutable hash set is a subset of a specified collection. - The collection to compare to the current set. - true if the current set is a subset of the specified collection; otherwise, false. - - - Determines whether the current immutable hash set is a superset of a specified collection. - The collection to compare to the current set. - true if the current set is a superset of the specified collection; otherwise, false. - - - Gets the object that is used to obtain hash codes for the keys and to check the equality of values in the immutable hash set. - The comparer used to obtain hash codes for the keys and check equality. - - - Determines whether the current immutable hash set overlaps with the specified collection. - The collection to compare to the current set. - true if the current set and the specified collection share at least one common element; otherwise, false. - - - Removes the specified element from this immutable hash set. - The element to remove. - A new set with the specified element removed, or the current set if the element cannot be found in the set. - - - Determines whether the current immutable hash set and the specified collection contain the same elements. - The collection to compare to the current set. - true if the sets are equal; otherwise, false. - - - Creates an immutable hash set that contains only elements that are present either in the current set or in the specified collection, but not both. - The collection to compare to the current set. - A new set that contains the elements that are present only in the current set or in the specified collection, but not both. - - - Creates an immutable hash set that has the same contents as this set and can be efficiently mutated across multiple operations by using standard mutable interfaces. - A set with the same contents as this set that can be efficiently mutated across multiple operations by using standard mutable interfaces. - - - Searches the set for a given value and returns the equal value it finds, if any. - The value to search for. - The value from the set that the search found, or the original value if the search yielded no match. - A value indicating whether the search was successful. - - - Creates a new immutable hash set that contains all elements that are present in either the current set or in the specified collection. - The collection to add elements from. - A new immutable hash set with the items added; or the original set if all the items were already in the set. - - - Gets an instance of the immutable hash set that uses the specified equality comparer for its search methods. - The equality comparer to use. - An instance of this immutable hash set that uses the given comparer. - - - Adds an item to the set. - The object to add to the set. - The set is read-only. - - - Removes all items from this set. - The set is read-only. - - - Copies the elements of the set to an array, starting at a particular index. - The one-dimensional array that is the destination of the elements copied from the set. The array must have zero-based indexing. - The zero-based index in array at which copying begins. - - - See the interface. - - - - Removes the first occurrence of a specific object from the set. - The object to remove from the set. - true if the element is successfully removed; otherwise, false. - - - Returns an enumerator that iterates through the collection. - An enumerator that iterates through the collection. - - - Adds an element to the current set and returns a value that indicates whether the element was successfully added. - The element to add to the collection. - true if the element is added to the set; false if the element is already in the set. - - - Removes all elements in the specified collection from the current set. - The collection of items to remove. - - - Modifies the current set so that it contains only elements that are also in a specified collection. - The collection to compare to the current collection. - - - Modifies the current set so that it contains only elements that are present either in the current set or in the specified collection, but not both. - The collection to compare to the current set. - - - Modifies the current set so that it contains all elements that are present in either the current set or in the specified collection. - The collection to compare to the current set. - - - Copies the elements of the set to an array, starting at a particular index. - The one-dimensional array that is the destination of the elements copied from the set. The array must have zero-based indexing. - The zero-based index in array at which copying begins. - - - See the interface. - - - - See . - - - - Returns an enumerator that iterates through a set. - An enumerator that can be used to iterate through the set. - - - Adds the specified element to this immutable set. - The element to add. - A new set with the element added, or this set if the element is already in the set. - - - Retrieves an empty set that has the same sorting and ordering semantics as this instance. - An empty set that has the same sorting or ordering semantics as this instance. - - - Removes the elements in the specified collection from the current set. - The collection of items to remove from this set. - A new set with the items removed; or the original set if none of the items were in the set. - - - Creates an immutable set that contains elements that exist in both this set and the specified set. - The collection to compare to the current set. - A new immutable set that contains any elements that exist in both sets. - - - Removes the specified element from this immutable set. - The element to remove. - A new set with the specified element removed, or the current set if the element cannot be found in the set. - - - Creates an immutable set that contains only elements that are present either in the current set or in the specified collection, but not both. - The collection to compare to the current set. - A new set that contains the elements that are present only in the current set or in the specified collection, but not both. - - - Creates a new immutable set that contains all elements that are present in either the current set or in the specified collection. - The collection to add elements from. - A new immutable set with the items added; or the original set if all the items were already in the set. - - - Provides a set of initialization methods for instances of the class. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - Creates an empty immutable hash set. - The type of items to be stored in the immutable hash set. - An empty immutable hash set. - - - Creates an empty immutable hash set that uses the specified equality comparer. - The object to use for comparing objects in the set for equality. - The type of items in the immutable hash set. - An empty immutable hash set. - - - Creates a new immutable hash set that contains the specified item. - The item to prepopulate the hash set with. - The type of items in the immutable hash set. - A new immutable hash set that contains the specified item. - - - Creates a new immutable hash set that contains the specified array of items. - An array that contains the items to prepopulate the hash set with. - The type of items in the immutable hash set. - A new immutable hash set that contains the specified items. - - - Creates a new immutable hash set that contains the specified item and uses the specified equality comparer for the set type. - The object to use for comparing objects in the set for equality. - The item to prepopulate the hash set with. - The type of items in the immutable hash set. - A new immutable hash set that contains the specified item. - - - Creates a new immutable hash set that contains the items in the specified collection and uses the specified equality comparer for the set type. - The object to use for comparing objects in the set for equality. - An array that contains the items to prepopulate the hash set with. - The type of items stored in the immutable hash set. - A new immutable hash set that contains the specified items. - - - Creates a new immutable hash set builder. - The type of items stored by the collection. - The immutable hash set builder. - - - Creates a new immutable hash set builder. - The object to use for comparing objects in the set for equality. - The type of items stored by the collection. - The new immutable hash set builder. - - - Creates a new immutable hash set prefilled with the specified items. - The items to add to the hash set. - The type of items stored by the collection. - The new immutable hash set that contains the specified items. - - - Creates a new immutable hash set that contains the specified items and uses the specified equality comparer for the set type. - The object to use for comparing objects in the set for equality. - The items add to the collection before immutability is applied. - The type of items stored in the collection. - The new immutable hash set. - - - Enumerates a sequence and produces an immutable hash set of its contents. - The sequence to enumerate. - The type of the elements in the sequence. - An immutable hash set that contains the items in the specified sequence. - - - Enumerates a sequence, produces an immutable hash set of its contents, and uses the specified equality comparer for the set type. - The sequence to enumerate. - The object to use for comparing objects in the set for equality. - The type of the elements in the sequence. - An immutable hash set that contains the items in the specified sequence and uses the specified equality comparer. - - - Contains interlocked exchange mechanisms for immutable collections. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - Obtains the value from a dictionary after having added it or updated an existing entry. - The variable or field to atomically update if the specified is not in the dictionary. - The key for the value to add or update. - The function that receives the key and returns a new value to add to the dictionary when no value previously exists. - The function that receives the key and prior value and returns the new value with which to update the dictionary. - - - The added or updated value. - - - Obtains the value from a dictionary after having added it or updated an existing entry. - The variable or field to atomically update if the specified is not in the dictionary. - The key for the value to add or update. - The value to use if no previous value exists. - The function that receives the key and prior value and returns the new value with which to update the dictionary. - - - The added or updated value. - - - Atomically enqueues an element to the end of a queue. - The variable or field to atomically update. - The value to enqueue. - The type of items contained in the collection - - - Gets the value for the specified key from the dictionary, or if the key was not found, adds a new value to the dictionary. - The variable or field to update if the specified is not in the dictionary. - The key for the value to retrieve or add. - The function to execute to obtain the value to insert into the dictionary if the key is not found. - The argument to pass to the value factory. - The type of the keys contained in the collection. - The type of the values contained in the collection. - - The value at the specified key or valueFactory if the key was not present. - - - Gets the value for the specified key from the dictionary, or if the key was not found, adds a new value to the dictionary. - The variable or field to atomically update if the specified is not in the dictionary. - The key for the value to retrieve or add. - The function to execute to obtain the value to insert into the dictionary if the key is not found. This delegate will not be invoked more than once. - The type of the keys contained in the collection. - The type of the values contained in the collection. - The value at the specified key or valueFactory if the key was not present. - - - Gets the value for the specified key from the dictionary, or if the key was not found, adds a new value to the dictionary. - The variable or field to atomically update if the specified key is not in the dictionary. - The key for the value to get or add. - The value to add to the dictionary the key is not found. - The type of the keys contained in the collection. - The type of the values contained in the collection. - The value at the specified key or valueFactory if the key was not present. - - - Compares two immutable arrays for equality and, if they are equal, replaces one of the arrays. - The destination, whose value is compared with comparand and possibly replaced. - The value that replaces the destination value if the comparison results in equality. - The value that is compared to the value at location. - The type of element stored by the array. - The original value in location. - - - Sets an array to the specified array and returns a reference to the original array, as an atomic operation. - The array to set to the specified value. - The value to which the location parameter is set. - The type of element stored by the array. - The original value of location. - - - Sets an array to the specified array if the array has not been initialized. - The array to set to the specified value. - The value to which the location parameter is set, if it’s not initialized. - The type of element stored by the array. - true if the array was assigned the specified value; otherwise, false. - - - Pushes a new element onto the stack. - The stack to update. - The value to push on the stack. - The type of items in the stack. - - - Adds the specified key and value to the dictionary if the key is not in the dictionary. - The dictionary to update with the specified key and value. - The key to add, if is not already defined in the dictionary. - The value to add. - The type of the keys contained in the collection. - The type of the values contained in the collection. - true if the key is not in the dictionary; otherwise, false. - - - Atomically removes and returns the specified element at the head of the queue, if the queue is not empty. - The variable or field to atomically update. - Set to the value from the head of the queue, if the queue not empty. - The type of items in the queue. - true if the queue is not empty and the head element is removed; otherwise, false. - - - Removes an element from the top of the stack, if there is an element to remove. - The stack to update. - Receives the value removed from the stack, if the stack is not empty. - The type of items in the stack. - true if an element is removed from the stack; otherwise, false. - - - Removes the element with the specified key, if the key exists. - The dictionary to update. - The key to remove. - Receives the value of the removed item, if the dictionary is not empty. - The type of the keys contained in the collection. - The type of the values contained in the collection. - true if the key was found and removed; otherwise, false. - - - Sets the specified key to the specified value if the specified key already is set to a specific value. - The dictionary to update. - The key to update. - The new value to set. - The current value for key in order for the update to succeed. - The type of the keys contained in the collection. - The type of the values contained in the collection. - true if key and comparisonValue are present in the dictionary and comparison was updated to newValue; otherwise, false. - - - Mutates a value in-place with optimistic locking transaction semantics via a specified transformation function. The transformation is retried as many times as necessary to win the optimistic locking race. - The variable or field to be changed, which may be accessed by multiple threads. - A function that mutates the value. This function should be side-effect free, as it may run multiple times when races occur with other threads. - The argument to pass to transformer. - The type of data. - The type of argument passed to the transformer. - true if the location&#39;s value is changed by applying the result of the transformer function; false if the location&#39;s value remained the same because the last invocation of transformer returned the existing value. - - - Mutates a value in-place with optimistic locking transaction semantics via a specified transformation function. The transformation is retried as many times as necessary to win the optimistic locking race. - The variable or field to be changed, which may be accessed by multiple threads. - A function that mutates the value. This function should be side-effect free, as it may run multiple times when races occur with other threads. - The type of data. - true if the location&#39;s value is changed by applying the result of the transformer function; false if the location&#39;s value remained the same because the last invocation of transformer returned the existing value. - - - Represents a list that mutates with little or no memory allocations and that can produce or build on immutable list instances very efficiently. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - - Adds an item to the immutable list. - The item to add to the list. - - - Adds a series of elements to the end of this list. - The elements to add to the end of the list. - - - Searches the entire for an element using the default comparer and returns the zero-based index of the element. - The object to locate. The value can be null for reference types. - The zero-based index of item in the , if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than item. - - - Searches the entire for an element using the specified comparer and returns the zero-based index of the element. - The object to locate. This value can be null for reference types. - The implementation to use when comparing elements, or null for the default comparer. - The zero-based index of item in the , if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than item. - - - Searches the specified range of the for an element using the specified comparer and returns the zero-based index of the element. - The zero-based starting index of the range to search. - The length of the range to search. - The object to locate. This value can be null for reference types. - The implementation to use when comparing elements, or null for the default comparer. - The zero-based index of item in the , if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than item. - - - Removes all items from the immutable list. - - - Determines whether the immutable list contains a specific value. - The object to locate in the list. - true if item is found in the list; otherwise, false. - - - Creates a new immutable list from the list represented by this builder by using the converter function. - The converter function. - The type of the output of the delegate converter function. - A new immutable list from the list represented by this builder. - - - Copies the entire immutable list to a compatible one-dimensional array, starting at the beginning of the target array. - The one-dimensional array that is the destination of the elements copied from the immutable list. The array must have zero-based indexing. - - - Copies the entire immutable list to a compatible one-dimensional array, starting at the specified index of the target array. - The one-dimensional array that is the destination of the elements copied from the immutable list. The array must have zero-based indexing. - The zero-based index in array at which copying begins. - - - Copies the entire immutable list to a compatible one-dimensional array, starting at the specified index of the target array. - The zero-based index in the source immutable list at which copying begins. - The one-dimensional array that is the destination of the elements copied from the immutable list. The array must have zero-based indexing. - The zero-based index in array at which copying begins. - The number of elements to copy. - - - Gets the number of elements in this immutable list. - The number of elements in this list. - - - Determines whether the immutable list contains elements that match the conditions defined by the specified predicate. - The delegate that defines the conditions of the elements to search for. - true if the immutable list contains one or more elements that match the conditions defined by the specified predicate; otherwise, false. - - - Searches for an element that matches the conditions defined by the specified predicate, and returns the first occurrence within the entire immutable list. - The delegate that defines the conditions of the element to search for. - The first element that matches the conditions defined by the specified predicate, if found; otherwise, the default value for type T. - - - Retrieves all the elements that match the conditions defined by the specified predicate. - The delegate that defines the conditions of the elements to search for. - An immutable list containing all the elements that match the conditions defined by the specified predicate, if found; otherwise, an empty immutable list. - - - Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the entire immutable list. - The delegate that defines the conditions of the element to search for. - The zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, –1. - - - Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the range of elements in the immutable list that extends from the specified index to the last element. - The zero-based starting index of the search. - The delegate that defines the conditions of the element to search for. - The zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, –1. - - - Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the range of elements in the immutable list that starts at the specified index and contains the specified number of elements. - The zero-based starting index of the search. - The number of elements in the section to search. - The delegate that defines the conditions of the element to search for. - The zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, –1. - - - Searches for an element that matches the conditions defined by the specified predicate, and returns the last occurrence within the entire immutable list. - The delegate that defines the conditions of the element to search for. - The last element that matches the conditions defined by the specified predicate, found; otherwise, the default value for type T. - - - Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the last occurrence within the entire immutable list. - The delegate that defines the conditions of the element to search for. - The zero-based index of the last occurrence of an element that matches the conditions defined by match, if found; otherwise, –1. - - - Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the last occurrence within the range of elements in the immutable list that extends from the first element to the specified index. - The zero-based starting index of the backward search. - The delegate that defines the conditions of the element to search for. - The zero-based index of the last occurrence of an element that matches the conditions defined by match, if found; otherwise, –1. - - - Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the last occurrence within the range of elements in the immutable list that contains the specified number of elements and ends at the specified index. - The zero-based starting index of the backward search. - The number of elements in the section to search. - The delegate that defines the conditions of the element to search for. - The zero-based index of the last occurrence of an element that matches the conditions defined by match, if found; otherwise, –1. - - - Performs the specified action on each element of the list. - The delegate to perform on each element of the list. - - - Returns an enumerator that iterates through the collection. - An enumerator that can be used to iterate through the list. - - - Creates a shallow copy of a range of elements in the source immutable list. - The zero-based index at which the range starts. - The number of elements in the range. - A shallow copy of a range of elements in the source immutable list. - - - Searches for the specified object and returns the zero-based index of the first occurrence within the range of elements in the immutable list. - The object to locate in the immutable list. The value can be null for reference types. - The zero-based index of the first occurrence of item within the range of elements in the immutable list, if found; otherwise, –1. - - - Searches for the specified object and returns the zero-based index of the first occurrence within the range of elements in the immutable list that extends from the specified index to the last element. - The object to locate in the immutable list. The value can be null for reference types. - The zero-based starting index of the search. 0 (zero) is valid in an empty list. - The zero-based index of the first occurrence of item within the range of elements in the immutable list that extends from index to the last element, if found; otherwise, –1. - - - Searches for the specified object and returns the zero-based index of the first occurrence within the range of elements in the immutable list that starts at the specified index and contains the specified number of elements. - The object to locate in the immutable list. The value can be null for reference types. - The zero-based starting index of the search. 0 (zero) is valid in an empty list. - The number of elements in the section to search. - The zero-based index of the first occurrence of item within the range of elements in the immutable list that starts at index and contains count number of elements, if found; otherwise, –1. - - - Searches for the specified object and returns the zero-based index of the first occurrence within the range of elements in the that starts at the specified index and contains the specified number of elements. - The object to locate in the immutable list. The value can be null for reference types. - The zero-based starting index of the search. 0 (zero) is valid in an empty list. - The number of elements to search. - The value comparer to use for comparing elements for equality. - The zero-based index of the first occurrence of item within the range of elements in the immutable list that starts at index and contains count number of elements, if found; otherwise, –1 - - - Inserts an item to the immutable list at the specified index. - The zero-based index at which item should be inserted. - The object to insert into the immutable list. - - - Inserts the elements of a collection into the immutable list at the specified index. - The zero-based index at which the new elements should be inserted. - The collection whose elements should be inserted into the immutable list. The collection itself cannot be null, but it can contain elements that are null, if type T is a reference type. - - - Gets or sets the value for a given index in the list. - The index of the item to get or set. - The value at the specified index. - - - Searches for the specified object and returns the zero-based index of the last occurrence within the entire immutable list. - The object to locate in the immutable list. The value can be null for reference types. - The zero-based index of the last occurrence of item within the entire immutable list, if found; otherwise, –1. - - - Searches for the specified object and returns the zero-based index of the last occurrence within the range of elements in the immutable list that extends from the first element to the specified index. - The object to locate in the immutable list. The value can be null for reference types. - The zero-based starting index of the backward search. - The zero-based index of the last occurrence of item within the range of elements in the immutable list that extends from the first element to index, if found; otherwise, –1. - - - Searches for the specified object and returns the zero-based index of the last occurrence within the range of elements in the immutable list that contains the specified number of elements and ends at the specified index. - The object to locate in the immutable list. The value can be null for reference types. - The zero-based starting index of the backward search. - The number of elements in the section to search. - The zero-based index of the last occurrence of item within the range of elements in the immutable list that contains count number of elements and ends at index, if found; otherwise, –1. - - - Searches for the specified object and returns the zero-based index of the last occurrence within the range of elements in the immutable list that contains the specified number of elements and ends at the specified index. - The object to locate in the immutable list. The value can be null for reference types. - The zero-based starting index of the search. 0 (zero) is valid in an empty list. - The number of elements to search. - The value comparer to use for comparing elements for equality. - The zero-based index of the first occurrence of item within the range of elements in the immutable list that starts at index and contains count number of elements, if found; otherwise, –1 - - - Removes the first occurrence of a specific object from the immutable list. - The object to remove from the list. - true if item was successfully removed from the list; otherwise, false. This method also returns false if item is not found in the list. - - - Removes all the elements that match the conditions defined by the specified predicate. - The delegate that defines the conditions of the elements to remove. - The number of elements removed from the immutable list. - - - Removes the item at the specified index of the immutable list. - The zero-based index of the item to remove from the list. - - - Reverses the order of the elements in the entire immutable list. - - - Reverses the order of the elements in the specified range of the immutable list. - The zero-based starting index of the range to reverse. - The number of elements in the range to reverse. - - - Sorts the elements in the entire immutable list by using the default comparer. - - - Sorts the elements in the entire immutable list by using the specified comparer. - The implementation to use when comparing elements, or null to use the default comparer (). - - - Sorts the elements in the entire immutable list by using the specified comparison object. - The object to use when comparing elements. - - - Sorts the elements in a range of elements in the immutable list by using the specified comparer. - The zero-based starting index of the range to sort. - The length of the range to sort. - The implementation to use when comparing elements, or null to use the default comparer (). - - - Creates an immutable list based on the contents of this instance. - An immutable list. - - - Determines whether every element in the immutable list matches the conditions defined by the specified predicate. - The delegate that defines the conditions to check against the elements. - true if every element in the immutable list matches the conditions defined by the specified predicate; otherwise, false. If the list has no elements, the return value is true. - - - Gets a value indicating whether this instance is read-only. - Always false. - - - Returns an enumerator that iterates through the collection. - An enumerator that can be used to iterate through the collection. - - - Copies the elements of the list to an array, starting at a particular array index. - The one-dimensional array that is the destination of the elements copied from the list. The array must have zero-based indexing. - The zero-based index in array at which copying begins. - - - - Gets a value indicating whether access to the is synchronized (thread safe). - true if access to the is synchronized (thread safe); otherwise, false. - - - Gets an object that can be used to synchronize access to the . - An object that can be used to synchronize access to the . - - - Returns an enumerator that iterates through the collection. - An enumerator that can be used to iterate through the collection. - - - Adds an item to the list. - The object to add to the list. - The position into which the new element was inserted, or -1 to indicate that the item was not inserted into the collection. - - - - Removes all items from the list. - - - - Determines whether the list contains a specific value. - The object to locate in the list. - true if the is found in the list; otherwise, false. - - - - Determines the index of a specific item in the list. - The object to locate in the list. - The index of value if found in the list; otherwise, -1. - - - - Inserts an item to the list at the specified index. - The zero-based index at which value should be inserted. - The object to insert into the list. - - - - Gets a value indicating whether the has a fixed size. - true if the has a fixed size; otherwise, false. - - - Gets a value indicating whether the is read-only. - true if the is read-only; otherwise, false. - - - Gets or sets the at the specified index. - The index. - - - - Removes the first occurrence of a specific object from the list. - The object to remove from the list. - - - - Enumerates the contents of a binary tree. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - - Gets the element at the current position of the enumerator. - The element at the current position of the enumerator. - - - Releases the resources used by the current instance of the class. - - - Advances enumeration to the next element of the immutable list. - true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the list. - - - Sets the enumerator to its initial position, which is before the first element in the immutable list. - - - The current element. - - - - Represents an immutable list, which is a strongly typed list of objects that can be accessed by index. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - The type of elements in the list. - - - Adds the specified object to the end of the immutable list. - The object to add. - A new immutable list with the object added, or the current list if it already contains the specified object. - - - Adds the elements of the specified collection to the end of the immutable list. - The collection whose elements will be added to the end of the list. - A new immutable list with the elements added, or the current list if it already contains the specified elements. - - - Searches the entire sorted list for an element using the default comparer and returns the zero-based index of the element. - The object to locate. The value can be null for reference types. - The zero-based index of item in the sorted List, if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than item or, if there is no larger element, the bitwise complement of . - The default comparer cannot find a comparer implementation of the for type T. - - - Searches the entire sorted list for an element using the specified comparer and returns the zero-based index of the element. - The object to locate. The value can be null for reference types. - The comparer implementation to use when comparing elements or null to use the default comparer. - The zero-based index of item in the sorted List, if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than item or, if there is no larger element, the bitwise complement of . - comparer is null, and the default comparer cannot find an comparer implementation for type T. - - - Searches a range of elements in the sorted list for an element using the specified comparer and returns the zero-based index of the element. - The zero-based starting index of the range to search. - The length of the range to search. - The object to locate. The value can be null for reference types. - The comparer implementation to use when comparing elements, or null to use the default comparer. - The zero-based index of item in the sorted list, if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than item or, if there is no larger element, the bitwise complement of count. - index is less than 0 or count is less than 0. - index and count do not denote a valid range in the list. - comparer is null, and the default comparer cannot find an comparer implementation for type T. - - - Removes all elements from the immutable list. - An empty list that retains the same sort or unordered semantics that this instance has. - - - Determines whether this immutable list contains the specified value. - The value to locate. - true if the list contains the specified value; otherwise, false. - - - Converts the elements in the current immutable list to another type, and returns a list containing the converted elements. - A delegate that converts each element from one type to another type. - The type of the elements of the target array. - - - - Copies the entire immutable list to a compatible one-dimensional array, starting at the specified index of the target array. - The one-dimensional array that is the destination of the elements copied from the immutable list. The array must have zero-based indexing. - The zero-based index in array at which copying begins. - - - Copies a range of elements from the immutable list to a compatible one-dimensional array, starting at the specified index of the target array. - The zero-based index in the source immutable list at which copying begins. - The one-dimensional array that is the destination of the elements copied from the immutable list. The array must have zero-based indexing. - The zero-based index in array at which copying begins. - The number of elements to copy. - - - Copies the entire immutable list to a compatible one-dimensional array, starting at the beginning of the target array. - The one-dimensional array that is the destination of the elements copied from the immutable list. The array must have zero-based indexing. - - - Gets the number of elements contained in the list. - The number of elements in the list. - - - Gets an empty set with the default sort comparer. - - - - Determines whether the immutable list contains elements that match the conditions defined by the specified predicate. - The delegate that defines the conditions of the elements to search for. - true if the immutable list contains one or more elements that match the conditions defined by the specified predicate; otherwise, false. - - - Searches for an element that matches the conditions defined by the specified predicate, and returns the first occurrence within the entire immutable list. - The delegate that defines the conditions of the element to search for. - The first element that matches the conditions defined by the specified predicate, if found; otherwise, the default value for type T. - - - Retrieves all the elements that match the conditions defined by the specified predicate. - The delegate that defines the conditions of the elements to search for. - An immutable list that contains all the elements that match the conditions defined by the specified predicate, if found; otherwise, an empty immutable list. - - - Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the entire immutable list. - The delegate that defines the conditions of the element to search for. - The zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, ?1. - - - Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the range of elements in the immutable list that extends from the specified index to the last element. - The zero-based starting index of the search. - The delegate that defines the conditions of the element to search for. - The zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, ?1. - - - Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the range of elements in the immutable list that starts at the specified index and contains the specified number of elements. - The zero-based starting index of the search. - The number of elements in the section to search. - The delegate that defines the conditions of the element to search for. - The zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, ?1. - - - Searches for an element that matches the conditions defined by the specified predicate, and returns the last occurrence within the entire immutable list. - The delegate that defines the conditions of the element to search for. - The last element that matches the conditions defined by the specified predicate, if found; otherwise, the default value for type T. - - - Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the last occurrence within the range of elements in the immutable list that contains the specified number of elements and ends at the specified index. - The zero-based starting index of the backward search. - The number of elements in the section to search. - The delegate that defines the conditions of the element to search for. - The zero-based index of the last occurrence of an element that matches the conditions defined by match, if found; otherwise, ?1. - - - Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the last occurrence within the range of elements in the immutable list that extends from the first element to the specified index. - The zero-based starting index of the backward search. - The delegate that defines the conditions of the element to search for. - The zero-based index of the last occurrence of an element that matches the conditions defined by match, if found; otherwise, ?1. - - - Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the last occurrence within the entire immutable list. - The delegate that defines the conditions of the element to search for. - The zero-based index of the last occurrence of an element that matches the conditions defined by match, if found; otherwise, ?1. - - - Performs the specified action on each element of the immutable list. - The delegate to perform on each element of the immutable list. - - - Returns an enumerator that iterates through the immutable list. - An enumerator that can be used to iterate through the immutable list. - - - Creates a shallow copy of a range of elements in the source immutable list. - The zero-based index at which the range starts. - The number of elements in the range. - A shallow copy of a range of elements in the source immutable list. - - - Searches for the specified object and returns the zero-based index of the first occurrence within the entire immutable list. - The object to locate in the immutable list. The value can be null for reference types. - The zero-based index of the first occurrence of value within the entire immutable list, if found; otherwise, ?1. - - - Searches for the specified object and returns the zero-based index of the first occurrence within the range of elements in the list that starts at the specified index and contains the specified number of elements. - The object to locate in the list The value can be null for reference types. - The zero-based starting index of the search. 0 (zero) is valid in an empty list. - The number of elements in the section to search. - The equality comparer to use in the search. - The zero-based index of the first occurrence of item within the range of elements in the list that starts at index and contains count number of elements, if found; otherwise, –1. - - - Inserts the specified object into the immutable list at the specified index. - The zero-based index at which to insert the object. - The object to insert. - The new immutable list after the object is inserted. - - - Inserts the elements of a collection into the immutable list at the specified index. - The zero-based index at which to insert the elements. - The collection whose elements should be inserted. - The new immutable list after the elements are inserted. - - - Gets a value that indicates whether this list is empty. - true if the list is empty; otherwise, false. - - - Gets the element at the specified index of the list. - The index of the element to retrieve. - The element at the specified index. - - - Searches for the specified object and returns the zero-based index of the last occurrence within the range of elements in the list that contains the specified number of elements and ends at the specified index. - The object to locate in the list. The value can be null for reference types. - The zero-based starting index of the backward search. - The number of elements in the section to search. - The equality comparer to use in the search. - The zero-based index of the last occurrence of item within the range of elements in the list that contains count number of elements and ends at index, if found; otherwise, –1. - - - Removes the first occurrence of the specified object from this immutable list. - The object to remove. - A new list with the object removed, or this list if the specified object is not in this list. - - - Removes the first occurrence of the object that matches the specified value from this immutable list. - The value of the element to remove from the list. - The equality comparer to use in the search. - A new list with the object removed, or this list if the specified object is not in this list. - - - Removes all the elements that match the conditions defined by the specified predicate. - The delegate that defines the conditions of the elements to remove. - The new list with the elements removed. - - - Removes the element at the specified index. - The zero-based index of the element to remove. - A new list with the element removed. - - - Removes a range of elements from this immutable list. - The collection whose elements should be removed if matches are found in this list. - A new list with the elements removed. - - - Removes the specified values from this list. - The items to remove if matches are found in this list. - The equality comparer to use in the search. - A new list with the elements removed. - - - Removes a range of elements, starting from the specified index and containing the specified number of elements, from this immutable list. - The starting index to begin removal. - The number of elements to remove. - A new list with the elements removed. - - - Replaces the specified element in the immutable list with a new element. - The element to replace. - The element to replace oldValue with. - The new list with the replaced element, even if it is equal to the old element. - oldValue does not exist in the immutable list. - - - Replaces the specified element in the immutable list with a new element. - The element to replace in the list. - The element to replace oldValue with. - The comparer to use to check for equality. - A new list with the object replaced, or this list if the specified object is not in this list. - - - Reverses the order of the elements in the specified range of the immutable list. - The zero-based starting index of the range to reverse. - The number of elements in the range to reverse. - The reversed list. - - - Reverses the order of the elements in the entire immutable list. - The reversed list. - - - Replaces an element at a given position in the immutable list with the specified element. - The position in the list of the element to replace. - The element to replace the old element with. - The new list with the replaced element, even if it is equal to the old element at that position. - - - Sorts the elements in the entire immutable list using the default comparer. - The sorted list. - - - Sorts the elements in the entire immutable list using the specified comparer. - The implementation to use when comparing elements, or null to use the default comparer (). - The sorted list. - - - Sorts the elements in the entire immutable list using the specified comparer. - The delegate to use when comparing elements. - The sorted list. - - - Sorts a range of elements in the immutable list using the specified comparer. - The zero-based starting index of the range to sort. - The length of the range to sort. - The implementation to use when comparing elements, or null to use the default comparer (). - The sorted list. - - - Creates a list that has the same contents as this list and can be efficiently mutated across multiple operations using standard mutable interfaces. - The created list with the same contents as this list. - - - Determines whether every element in the immutable list matches the conditions defined by the specified predicate. - The delegate that defines the conditions to check against the elements. - true if every element in the immutable list matches the conditions defined by the specified predicate; otherwise, false. If the list has no elements, the return value is true. - - - Adds the specified item to the immutable list. - The item to add. - - - - Removes all items from the immutable list. - - - - Gets a value indicating whether the is read-only. - true if the is read-only; otherwise, false. - - - Removes the first occurrence of a specific object from the immutable list. - The object to remove. - true if item was successfully removed from the list; otherwise, false. This method also returns false if item is not found in the original list. - - - Returns an enumerator that iterates through the immutable list. - An enumerator that can be used to iterate through the list. - - - Inserts an object in the immutable list at the specified index. - The zero-based index at which item should be inserted. - The object to insert. - - - - Gets or sets the value at the specified index. - - - Thrown from getter when index is negative or not less than . - Always thrown from the setter. - - - Removes the value at the specified index. - The zero-based index of the item to remove. - - - - Copies the entire immutable list to a compatible one-dimensional array, starting at the specified array index. - The one-dimensional array that is the destination of the elements copied from immutable list. - The zero-based index in array at which copying begins. - - - See the interface. - - - - See . - - - - Returns an enumerator that iterates through the immutable list. - An enumerator that can be used to iterate through the list. - - - Adds an item to the immutable list. - The object to add to the list. - The position into which the new element was inserted, or -1 to indicate that the item was not inserted into the list. - - - - Removes all items from the immutable list. - - - - Determines whether the immutable list contains a specific value. - The object to locate in the list. - true if the object is found in the list; otherwise, false. - - - - Determines the index of a specific item in the immutable list. - The object to locate in the list. - The index of value if found in the list; otherwise, -1. - - - - Inserts an item into the immutable list at the specified index. - The zero-based index at which value should be inserted. - The object to insert into the list. - - - - Gets a value indicating whether the has a fixed size. - true if the has a fixed size; otherwise, false. - - - Gets a value indicating whether the is read-only. - true if the is read-only; otherwise, false. - - - Gets or sets the at the specified index. - The index. - The value at the specified index. - Thrown from getter when index is negative or not less than . - Always thrown from the setter. - - - Removes the first occurrence of a specific object from the immutable list. - The object to remove from the list. - - - - Removes the item at the specified index of the immutable list. - The zero-based index of the item to remove. - - - - Adds the specified value to this immutable list. - The value to add. - A new list with the element added, or this list if the element is already in the list. - - - Adds the specified values to this immutable list. - The values to add. - A new list with the elements added, or this list if the elements are already in the list. - - - Retrieves an empty list that has the same sorting and ordering semantics as this instance. - An empty list that has the same sorting and ordering semantics as this instance. - - - Inserts the specified element at the specified index in the immutable list. - The index at which to insert the value. - The element to insert. - A new immutable list that includes the specified element. - - - Inserts the specified elements at the specified index in the immutable list. - The index at which to insert the elements. - The elements to insert. - A new immutable list that includes the specified elements. - - - Removes the element with the specified value from the list. - The value of the element to remove from the list. - The comparer to use to compare elements for equality. - Returns a new with the specified element removed. - - - Removes all the elements that match the conditions defined by the specified predicate. - The delegate that defines the conditions of the elements to remove. - A new immutable list with the elements removed. - - - Removes the element at the specified index of the immutable list. - The index of the element to remove. - A new list with the element removed. - - - Removes a range of elements from this immutable list that match the items specified. - The range of items to remove from the list, if found. - The equality comparer to use to compare elements. - An immutable list with the items removed. - items or equalityComparer is null. - - - Removes the specified number of elements at the specified location from this list. - The starting index of the range of elements to remove. - The number of elements to remove. - A new list with the elements removed. - - - Replaces an element in the list with the specified element. - The element to replace. - The element to replace the old element with. - The equality comparer to use in the search. - The new list. - Thrown when the old value does not exist in the list. - - - Replaces an element in the list at a given position with the specified element. - The position in the list of the element to replace. - The element to replace the old element with. - The new list. - - - Provides a set of initialization methods for instances of the class. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - Creates an empty immutable list. - The type of items to be stored in the . - An empty . - - - Creates a new immutable list that contains the specified item. - The item to prepopulate the list with. - The type of items in the . - A new that contains the specified item. - - - Creates a new immutable list that contains the specified array of items. - An array that contains the items to prepopulate the list with. - The type of items in the . - A new immutable list that contains the specified items. - - - Creates a new immutable list builder. - The type of items stored by the collection. - The immutable collection builder. - - - Creates a new immutable list that contains the specified items. - The items to add to the list. - The type of items in the . - Returns an immutable list that contains the specified items. - - - Searches for the specified object and returns the zero-based index of the first occurrence within the range of elements in the immutable list that extends from the specified index to the last element. - The list to search. - The object to locate in the Immutable list. The value can be null for reference types. - The zero-based starting index of the search. 0 (zero) is valid in an empty list. - The type of items in the list. - The zero-based index of the first occurrence of item within the range of elements in the Immutable list that extends from index to the last element, if found; otherwise, –1. - - - Searches for the specified object and returns the zero-based index of the first occurrence within the range of elements in the immutable list that extends from the specified index to the last element. - The list to search. - The object to locate in the Immutable list. The value can be null for reference types. - The zero-based starting index of the search. 0 (zero) is valid in an empty list. - The number of elements in the section to search. - The type of items in the list. - The zero-based index of the first occurrence of item within the range of elements in the Immutable list that extends from index to the last element, if found; otherwise, –1. - - - Searches for the specified object and returns the zero-based index of the first occurrence within the list. - The list to search. - The object to locate in the list. The value can be null for reference types. - The type of items in the list. - The zero-based index of the first occurrence of item within the range of elements in the list that extends from index to the last element, if found; otherwise, –1. - - - Searches for the specified object and returns the zero-based index of the first occurrence within the list. - The list to search. - The object to locate in the Immutable list. The value can be null for reference types. - The equality comparer to use in the search. - The type of items in the list. - The zero-based index of the first occurrence of item within the range of elements in the immutable list that extends from index to the last element, if found; otherwise, –1. - - - Searches for the specified object and returns the zero-based index of the last occurrence within the entire immutable list. - The list to search. - The object to locate in the Immutable list. The value can be null for reference types. - The type of items in the list. - The zero-based index of the last occurrence of item within the entire the Immutable list, if found; otherwise, –1. - - - Searches for the specified object and returns the zero-based index of the last occurrence within the entire immutable list. - The list to search. - The object to locate in the Immutable list. The value can be null for reference types. - The equality comparer to use in the search. - The type of items in the list. - The zero-based index of the last occurrence of item within the entire the Immutable list, if found; otherwise, –1. - - - Searches for the specified object and returns the zero-based index of the last occurrence within the range of elements in the immutable list that extends from the first element to the specified index. - The list to search. - The object to locate in the Immutable list. The value can be null for reference types. - The zero-based starting index of the backward search. - The type of items in the list. - The zero-based index of the last occurrence of item within the range of elements in the Immutable list that extends from the first element to index, if found; otherwise, –1. - - - Searches for the specified object and returns the zero-based index of the last occurrence within the range of elements in the immutable list that extends from the first element to the specified index. - The list to search. - The object to locate in the Immutable list. The value can be null for reference types. - The zero-based starting index of the backward search. - The number of elements in the section to search. - The type of items in the list. - The zero-based index of the last occurrence of item within the range of elements in the Immutable list that extends from the first element to index, if found; otherwise, –1. - - - Removes the specified value from this list. - The list to search. - The value to remove. - The type of items in the list. - A new immutable list with the element removed, or this list if the element is not in this list. - - - Removes the specified values from this list. - The list to search. - The items to remove if matches are found in this list. - The type of items in the list. - A new immutable list with the elements removed. - - - Replaces the first equal element in the list with the specified element. - The list to search. - The element to replace. - The element to replace the old element with. - The type of items in the list. - The new list -- even if the value being replaced is equal to the new value for that position. - Thrown when the old value does not exist in the list. - - - Enumerates a sequence and produces an immutable list of its contents. - The sequence to enumerate. - The type of the elements in the sequence. - An immutable list that contains the items in the specified sequence. - - - Enumerates the contents of an immutable queue without allocating any memory. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - - Gets the element at the current position of the enumerator. - The element at the current position of the enumerator. - - - Advances the enumerator to the next element of the immutable queue. - true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the queue. - - - Represents an immutable queue. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - The type of elements in the queue. - - - Removes all objects from the immutable queue. - The empty immutable queue. - - - Removes the element at the beginning of the immutable queue, and returns the new queue. - The new immutable queue; never null. - - - Removes the item at the beginning of the immutable queue, and returns the new queue. - When this method returns, contains the element from the beginning of the queue. - The new immutable queue with the beginning element removed. - - - Gets an empty immutable queue. - An empty immutable queue. - - - Adds an element to the end of the immutable queue, and returns the new queue. - The element to add. - The new immutable queue. - - - Returns an enumerator that iterates through the immutable queue. - An enumerator that can be used to iterate through the queue. - - - Gets a value that indicates whether this immutable queue is empty. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - true if this queue is empty; otherwise, false. - - - Returns the element at the beginning of the immutable queue without removing it. - The element at the beginning of the queue. - - - Returns an enumerator that iterates through the collection. - An enumerator that can be used to iterate through the collection. - - - Returns an enumerator that iterates through a collection. - An object that can be used to iterate through the collection. - - - Removes all elements from the immutable queue. - The empty immutable queue. - - - Removes the element at the beginning of the immutable queue, and returns the new queue. - The new immutable queue; never null. - - - Adds an element to the end of the immutable queue, and returns the new queue. - The element to add. - The new immutable queue. - - - Provides a set of initialization methods for instances of the class. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - Creates an empty immutable queue. - The type of items to be stored in the immutable queue. - An empty immutable queue. - - - Creates a new immutable queue that contains the specified item. - The item to prepopulate the queue with. - The type of items in the immutable queue. - A new immutable queue that contains the specified item. - - - Creates a new immutable queue that contains the specified array of items. - An array that contains the items to prepopulate the queue with. - The type of items in the immutable queue. - A new immutable queue that contains the specified items. - - - Creates a new immutable queue that contains the specified items. - The items to add to the queue before immutability is applied. - The type of elements in the queue. - An immutable queue that contains the specified items. - - - Removes the item at the beginning of the immutable queue, and returns the new queue. - The queue to remove the item from. - When this method returns, contains the item from the beginning of the queue. - The type of elements in the immutable queue. - The new queue with the item removed. - - - Represents a sorted dictionary that mutates with little or no memory allocations and that can produce or build on immutable sorted dictionary instances very efficiently. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - - - Adds the specified item to the immutable sorted dictionary. - The object to add to the dictionary. - - - Adds an element that has the specified key and value to the immutable sorted dictionary. - The key of the element to add. - The value of the element to add. - - - Adds a sequence of values to the immutable sorted dictionary. - The items to add to the dictionary. - - - Removes all items from the immutable sorted dictionary. - - - Determines whether the immutable sorted dictionary contains a specific value. - The object to locate in the dictionary. - true if item is found in the dictionary; otherwise, false. - - - Determines whether the immutable sorted dictionary contains an element with the specified key. - The key to locate in the dictionary. - true if the dictionary contains an element with the key; otherwise, false. - - - Determines whether the immutable sorted dictionary contains an element with the specified value. - The value to locate in the dictionary. The value can be null for reference types. - true if the immutable sorted dictionary contains an element with the specified value; otherwise, false. - - - Gets the number of elements in this immutable sorted dictionary. - The number of elements in this dictionary. - - - Returns an enumerator that iterates through the immutable sorted dictionary. - An enumerator that can be used to iterate through the dictionary. - - - Gets the value for a given key if a matching key exists in the dictionary; otherwise the default value. - The key to search for. - The default value to return if no matching key is found in the dictionary. - The value for the key, or defaultValue if no matching key was found. - - - Gets the value for a given key if a matching key exists in the dictionary; otherwise the default value. - The key to search for. - The value for the key, or default(TValue) if no matching key was found. - - - Gets or sets the value for a specified key in the immutable sorted dictionary. - The key to retrieve the value for. - The value associated with the given key. - - - Gets or sets the key comparer. - The key comparer. - - - Gets a strongly typed, read-only collection of elements. - A strongly typed, read-only collection of elements. - - - Removes the first occurrence of a specific object from the immutable sorted dictionary. - The object to remove from the dictionary. - true if item was successfully removed from the dictionary; otherwise, false. This method also returns false if item is not found in the dictionary. - - - Removes the element with the specified key from the immutable sorted dictionary. - The key of the element to remove. - true if the element is successfully removed; otherwise, false. This method also returns false if key was not found in the original dictionary. - - - Removes any entries with keys that match those found in the specified sequence from the immutable sorted dictionary. - The keys for entries to remove from the dictionary. - - - Creates an immutable sorted dictionary based on the contents of this instance. - An immutable sorted dictionary. - - - Determines whether this dictionary contains a specified key. - The key to search for. - The matching key located in the dictionary if found, or equalkey if no match is found. - true if a match for equalKey is found; otherwise, false. - - - Gets the value associated with the specified key. - The key whose value will be retrieved. - When this method returns, contains the value associated with the specified key, if the key is found; otherwise, contains the default value for the type of the value parameter. This parameter is passed uninitialized. - true if the object that implements the dictionary contains an element with the specified key; otherwise, false. - - - Gets or sets the value comparer. - The value comparer. - - - Gets a collection that contains the values of the immutable sorted dictionary. - A collection that contains the values of the object that implements the dictionary. - - - - - - - - - - - - - - - - - - - Copies the elements of the dictionary to an array, starting at a particular array index. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - The one-dimensional array that is the destination of the elements copied from the dictionary. The array must have zero-based indexing. - The zero-based index in array at which copying begins. - - - Gets a value indicating whether access to the is synchronized (thread safe). - true if access to the is synchronized (thread safe); otherwise, false. - - - Gets an object that can be used to synchronize access to the . - An object that can be used to synchronize access to the . - - - Adds an element with the provided key and value to the dictionary object. - The key of the element to add. - The value of the element to add. - - - Determines whether the dictionary object contains an element with the specified key. - The key to locate. - true if the dictionary contains an element with the key; otherwise, false. - - - Returns an object for the dictionary. - An object for the dictionary. - - - Gets a value indicating whether the object has a fixed size. - true if the object has a fixed size; otherwise, false. - - - Gets a value indicating whether the is read-only. - true if the is read-only; otherwise, false. - - - Gets or sets the element with the specified key. - The key. - - - - Gets an containing the keys of the . - An containing the keys of the object that implements . - - - Removes the element with the specified key from the dictionary. - The key of the element to remove. - - - Gets an containing the values in the . - An containing the values in the object that implements . - - - Returns an enumerator that iterates through a collection. - An enumerator object that can be used to iterate through the collection. - - - Enumerates the contents of a binary tree. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - - - Gets the element at the current position of the enumerator. - The element at the current position of the enumerator. - - - Releases the resources used by the current instance of the class. - - - Advances the enumerator to the next element of the immutable sorted dictionary. - true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the sorted dictionary. - - - Sets the enumerator to its initial position, which is before the first element in the immutable sorted dictionary. - - - The current element. - - - - Represents an immutable sorted dictionary. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - The type of the key contained in the dictionary. - The type of the value contained in the dictionary. - - - Adds an element with the specified key and value to the immutable sorted dictionary. - The key of the entry to add. - The value of entry to add. - A new immutable sorted dictionary that contains the additional key/value pair. - The given key already exists in the dictionary but has a different value. - - - Adds the specific key/value pairs to the immutable sorted dictionary. - The key/value pairs to add. - A new immutable dictionary that contains the additional key/value pairs. - One of the given keys already exists in the dictionary but has a different value. - - - Retrieves an empty immutable sorted dictionary that has the same ordering and key/value comparison rules as this dictionary instance. - An empty dictionary with equivalent ordering and key/value comparison rules. - - - Determines whether this immutable sorted dictionary contains the specified key/value pair. - The key/value pair to locate. - true if the specified key/value pair is found in the dictionary; otherwise, false. - - - Determines whether this immutable sorted map contains the specified key. - The key to locate. - true if the immutable dictionary contains the specified key; otherwise, false. - - - Determines whether the immutable sorted dictionary contains an element with the specified value. - The value to locate. The value can be null for reference types. - true if the dictionary contains an element with the specified value; otherwise, false. - - - Gets the number of key/value pairs in the immutable sorted dictionary. - The number of key/value pairs in the dictionary. - - - Gets an empty immutable sorted dictionary. - - - - Returns an enumerator that iterates through the immutable sorted dictionary. - An enumerator that can be used to iterate through the dictionary. - - - Gets a value that indicates whether this instance of the immutable sorted dictionary is empty. - true if this instance is empty; otherwise, false. - - - Gets the TValue associated with the specified key. - The key to retrieve the value for. - The value associated with the specified key. If no results are found, the operation throws an exception. - - - Gets the key comparer for the immutable sorted dictionary. - The key comparer for the dictionary. - - - Gets the keys in the immutable sorted dictionary. - The keys in the immutable dictionary. - - - Removes the element with the specified value from the immutable sorted dictionary. - The value of the element to remove. - A new immutable dictionary with the specified element removed; or this instance if the specified value cannot be found in the dictionary. - - - Removes the elements with the specified keys from the immutable sorted dictionary. - The keys of the elements to remove. - A new immutable dictionary with the specified keys removed; or this instance if the specified keys cannot be found in the dictionary. - - - Sets the specified key and value in the immutable sorted dictionary, possibly overwriting an existing value for the given key. - The key of the entry to add. - The key value to set. - A new immutable sorted dictionary that contains the specified key/value pair. - - - Sets the specified key/value pairs in the immutable sorted dictionary, possibly overwriting existing values for the keys. - The key/value pairs to set in the dictionary. If any of the keys already exist in the dictionary, this method will overwrite their previous values. - An immutable dictionary that contains the specified key/value pairs. - - - Creates an immutable sorted dictionary with the same contents as this dictionary that can be efficiently mutated across multiple operations by using standard mutable interfaces. - A collection with the same contents as this dictionary. - - - Determines whether this dictionary contains a specified key. - The key to search for. - The matching key located in the dictionary if found, or equalkey if no match is found. - true if a match for equalKey is found; otherwise, false. - - - Gets the value associated with the specified key. - The key whose value will be retrieved. - When this method returns, contains the value associated with the specified key, if the key is found; otherwise, contains the default value for the type of the value parameter. - true if the dictionary contains an element with the specified key; otherwise, false. - - - Gets the value comparer used to determine whether values are equal. - The value comparer used to determine whether values are equal. - - - Gets the values in the immutable sorted dictionary. - The values in the dictionary. - - - Gets an instance of the immutable sorted dictionary that uses the specified key comparer. - The key comparer to use. - An instance of the immutable dictionary that uses the given comparer. - - - Gets an instance of the immutable sorted dictionary that uses the specified key and value comparers. - The key comparer to use. - The value comparer to use. - An instance of the immutable dictionary that uses the given comparers. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Copies the elements of the dictionary to an array, starting at a particular array index. - The one-dimensional array that is the destination of the elements copied from the dictionary. The array must have zero-based indexing. - The zero-based index in array at which copying begins. - - - Gets a value indicating whether access to the is synchronized (thread safe). - true if access to the is synchronized (thread safe); otherwise, false. - - - Gets an object that can be used to synchronize access to the . - An object that can be used to synchronize access to the . - - - Adds an element with the provided key and value to the dictionary object. - The object to use as the key of the element to add. - The object to use as the value of the element to add. - - - Clears this instance. - The dictionary object is read-only. - - - Determines whether the immutable dictionary object contains an element with the specified key. - The key to locate in the dictionary object. - true if the dictionary contains an element with the key; otherwise, false. - - - Returns an object for the immutable dictionary object. - An enumerator object for the dictionary object. - - - Gets a value indicating whether the object has a fixed size. - true if the object has a fixed size; otherwise, false. - - - Gets a value indicating whether the is read-only. - true if the is read-only; otherwise, false. - - - Gets or sets the element with the specified key. - The key. - - - - Gets an containing the keys of the . - An containing the keys of the object that implements . - - - Removes the element with the specified key from the immutable dictionary object. - The key of the element to remove. - - - Gets an containing the values in the . - An containing the values in the object that implements . - - - Returns an enumerator that iterates through a collection. - An enumerator object that can be used to iterate through the collection. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Provides a set of initialization methods for instances of the class. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - Creates an empty immutable sorted dictionary. - The type of keys stored by the dictionary. - The type of values stored by the dictionary. - An empty immutable sorted dictionary. - - - Creates an empty immutable sorted dictionary that uses the specified key comparer. - The implementation to use to determine the equality of keys in the dictionary. - The type of keys stored by the dictionary. - The type of values stored by the dictionary. - An empty immutable sorted dictionary. - - - Creates an empty immutable sorted dictionary that uses the specified key and value comparers. - The implementation to use to determine the equality of keys in the dictionary. - The implementation to use to determine the equality of values in the dictonary. - The type of keys stored by the dictionary. - The type of values stored by the dictionary. - An empty immutable sorted dictionary. - - - Creates a new immutable sorted dictionary builder. - The type of keys stored by the dictionary. - The type of values stored by the dictionary. - The immutable collection builder. - - - Creates a new immutable sorted dictionary builder. - The key comparer. - The type of keys stored by the dictionary. - The type of values stored by the dictionary. - The immutable collection builder. - - - Creates a new immutable sorted dictionary builder. - The key comparer. - The value comparer. - The type of keys stored by the dictionary. - The type of values stored by the dictionary. - The immutable collection builder. - - - Creates an immutable sorted dictionary that contains the specified items and uses the default comparer. - The items to add to the sorted dictionary before it’s immutable. - The type of keys stored in the dictionary. - The type of values stored in the dictionary. - An immutable sorted dictionary that contains the specified items. - - - Creates a new immutable sorted dictionary from the specified range of items with the specified key comparer. - The comparer implementation to use to evaluate keys for equality and sorting. - The items to add to the sorted dictionary. - The type of keys stored in the dictionary. - The type of values stored in the dictionary. - The new immutable sorted dictionary that contains the specified items and uses the specified key comparer. - - - Creates a new immutable sorted dictionary from the specified range of items with the specified key and value comparers. - The comparer implementation to use to compare keys for equality and sorting. - The comparer implementation to use to compare values for equality and sorting. - The items to add to the sorted dictionary before it’s immutable. - The type of keys stored in the dictionary. - The type of values stored in the dictionary. - An immutable sorted dictionary that contains the specified items and uses the specified comparers. - - - Enumerates a sequence of key/value pairs and produces an immutable sorted dictionary of its contents. - The sequence of key/value pairs to enumerate. - The type of the keys in the dictionary. - The type of the values in the dictionary. - An immutable sorted dictionary that contains the key/value pairs in the specified sequence. - - - Enumerates a sequence of key/value pairs and produces an immutable dictionary of its contents by using the specified key comparer. - The sequence of key/value pairs to enumerate. - The key comparer to use when building the immutable dictionary. - The type of the keys in the dictionary. - The type of the values in the dictionary. - An immutable sorted dictionary that contains the key/value pairs in the specified sequence. - - - Enumerates a sequence of key/value pairs and produces an immutable sorted dictionary of its contents by using the specified key and value comparers. - The sequence of key/value pairs to enumerate. - The key comparer to use when building the immutable dictionary. - The value comparer to use for the immutable dictionary. - The type of the keys in the dictionary. - The type of the values in the dictionary. - An immutable sorted dictionary that contains the key/value pairs in the specified sequence. - - - Enumerates and transforms a sequence, and produces an immutable sorted dictionary of its contents. - The sequence to enumerate to generate the dictionary. - The function that will produce the key for the dictionary from each sequence element. - The function that will produce the value for the dictionary from each sequence element. - The type of the elements in the sequence. - The type of the keys in the resulting dictionary. - The type of the values in the resulting dictionary. - An immutable sorted dictionary that contains the items in the specified sequence. - - - Enumerates and transforms a sequence, and produces an immutable sorted dictionary of its contents by using the specified key comparer. - The sequence to enumerate to generate the dictionary. - The function that will produce the key for the dictionary from each sequence element. - The function that will produce the value for the dictionary from each sequence element. - The key comparer to use for the dictionary. - The type of the elements in the sequence. - The type of the keys in the resulting dictionary. - The type of the values in the resulting dictionary. - An immutable dictionary that contains the items in the specified sequence. - - - Enumerates and transforms a sequence, and produces an immutable sorted dictionary of its contents by using the specified key and value comparers. - The sequence to enumerate to generate the dictionary. - The function that will produce the key for the dictionary from each sequence element. - The function that will produce the value for the dictionary from each sequence element. - The key comparer to use for the dictionary. - The value comparer to use for the dictionary. - The type of the elements in the sequence. - The type of the keys in the resulting dictionary. - The type of the values in the resulting dictionary. - An immutable sorted dictionary that contains the items in the specified sequence. - - - Represents a sorted set that enables changes with little or no memory allocations, and efficiently manipulates or builds immutable sorted sets. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - - Adds an element to the current set and returns a value to indicate whether the element was successfully added. - The element to add to the set. - true if the element is added to the set; false if the element is already in the set - - - Removes all elements from this set. - - - Determines whether the set contains the specified object. - The object to locate in the set. - true if item is found in the set; otherwise, false. - - - Gets the number of elements in the immutable sorted set. - The number of elements in this set. - - - Removes the specified set of items from the current set. - The collection of items to remove from the set. - - - Returns an enumerator that iterates through the set. - A enumerator that can be used to iterate through the set. - - - Modifies the current set so that it contains only elements that are also in a specified collection. - The collection to compare to the current set. - - - Determines whether the current set is a proper (strict) subset of a specified collection. - The collection to compare to the current set. - true if the current set is a proper subset of other; otherwise, false. - - - Determines whether the current set is a proper (strict) superset of a specified collection. - The collection to compare to the current set. - true if the current set is a proper superset of other; otherwise, false. - - - Determines whether the current set is a subset of a specified collection. - The collection is compare to the current set. - true if the current set is a subset of other; otherwise, false. - - - Determines whether the current set is a superset of a specified collection. - The collection to compare to the current set. - true if the current set is a superset of other; otherwise, false. - - - Gets the element of the set at the given index. - The 0-based index of the element in the set to return. - The element at the given position. - - - Gets or sets the object that is used to determine equality for the values in the immutable sorted set. - The comparer that is used to determine equality for the values in the set. - - - Gets the maximum value in the immutable sorted set, as defined by the comparer. - The maximum value in the set. - - - Gets the minimum value in the immutable sorted set, as defined by the comparer. - The minimum value in the set. - - - Determines whether the current set overlaps with the specified collection. - The collection to compare to the current set. - true if the current set and other share at least one common element; otherwise, false. - - - Removes the first occurrence of the specified object from the set. - The object to remove from the set. - true if item was removed from the set; false if item was not found in the set. - - - Returns an enumerator that iterates over the immutable sorted set in reverse order. - An enumerator that iterates over the set in reverse order. - - - Determines whether the current set and the specified collection contain the same elements. - The collection to compare to the current set. - true if the current set is equal to other; otherwise, false. - - - Modifies the current set so that it contains only elements that are present either in the current set or in the specified collection, but not both. - The collection to compare to the current set. - - - Creates an immutable sorted set based on the contents of this instance. - An immutable set. - - - Modifies the current set so that it contains all elements that are present in both the current set and in the specified collection. - The collection to compare to the current state. - - - Adds an element to the current set and returns a value to indicate whether the element was successfully added. - The element to add to the set. - - - Copies the elements of the collection to an array, starting at a particular array index. - The one-dimensional array that is the destination of the elements copied from collection. The array must have zero-based indexing. - The zero-based index in array at which copying begins. - - - Gets a value indicating whether this instance is read-only. - Always false. - - - Returns an enumerator that iterates through the collection. - A enumerator that can be used to iterate through the collection. - - - Copies the elements of the set to an array, starting at a particular array index. - The one-dimensional array that is the destination of the elements copied from the set. The array must have zero-based indexing. - The zero-based index in array at which copying begins. - - - Gets a value indicating whether access to the is synchronized (thread safe). - true if access to the is synchronized (thread safe); otherwise, false. - - - Gets an object that can be used to synchronize access to the . - An object that can be used to synchronize access to the . - - - Returns an enumerator that iterates through the collection. - A enumerator that can be used to iterate through the collection. - - - Enumerates the contents of a binary tree. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - - Gets the element at the current position of the enumerator. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - The element at the current position of the enumerator. - - - Releases the resources used by the current instance of the class. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - Advances the enumerator to the next element of the immutable sorted set. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the sorted set. - - - Sets the enumerator to its initial position, which is before the first element in the immutable sorted set. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - The current element. - - - - Represents an immutable sorted set implementation. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - The type of elements in the set. - - - Adds the specified value to this immutable sorted set. - The value to add. - A new set with the element added, or this set if the element is already in this set. - - - Removes all elements from the immutable sorted set. - An empty set with the elements removed. - - - Determines whether this immutable sorted set contains the specified value. - The value to check for. - true if the set contains the specified value; otherwise, false. - - - Gets the number of elements in the immutable sorted set. - The number of elements in the immutable sorted set. - - - Gets an empty immutable sorted set. - - - - Removes a specified set of items from this immutable sorted set. - The items to remove from this set. - A new set with the items removed; or the original set if none of the items were in the set. - - - Returns an enumerator that iterates through the immutable sorted set. - An enumerator that can be used to iterate through the set. - - - Gets the position within this immutable sorted set that the specified value appears in. - The value whose position is being sought. - The index of the specified item in the sorted set, if item is found. If item is not found and is less than one or more elements in this set, this method returns a negative number that is the bitwise complement of the index of the first element that is larger than value. If item is not found and is greater than any of the elements in the set, this method returns a negative number that is the bitwise complement of the index of the last element plus 1. - - - Creates an immutable sorted set that contains elements that exist both in this set and in the specified set. - The set to intersect with this one. - A new immutable sorted set that contains any elements that exist in both sets. - - - Gets a value that indicates whether this immutable sorted set is empty. - true if this set is empty; otherwise, false. - - - Determines whether the current immutable sorted set is a proper (strict) subset of the specified collection. - The collection to compare to the current set. - true if the current set is a proper subset of other; otherwise, false. - - - Determines whether the current immutable sorted set is a proper superset of a specified collection. - The collection to compare to the current set. - true if the current set is a proper superset of other; otherwise, false. - - - Determines whether the current immutable sorted set is a subset of a specified collection. - The collection to compare to the current set. - true if the current set is a subset of other; otherwise, false. - - - Determines whether the current immutable sorted set is a superset of a specified collection. - The collection to compare to the current set. - true if the current set is a superset of other; otherwise, false. - - - Gets the element of the immutable sorted set at the given index. - The index of the element to retrieve from the sorted set. - The element at the given index. - - - Gets the comparer used to sort keys in the immutable sorted set. - The comparer used to sort keys. - - - Gets the maximum value in the immutable sorted set, as defined by the comparer. - The maximum value in the set. - - - Gets the minimum value in the immutable sorted set, as defined by the comparer. - The minimum value in the set. - - - Determines whether the current immutable sorted set and a specified collection share common elements. - The collection to compare to the current set. - true if the current set and other share at least one common element; otherwise, false. - - - Removes the specified value from this immutable sorted set. - The element to remove. - A new immutable sorted set with the element removed, or this set if the element was not found in the set. - - - Returns an that iterates over this immutable sorted set in reverse order. - An enumerator that iterates over the immutable sorted set in reverse order. - - - Determines whether the current immutable sorted set and the specified collection contain the same elements. - The collection to compare to the current set. - true if the sets are equal; otherwise, false. - - - Creates an immutable sorted set that contains elements that exist either in this set or in a given sequence, but not both. - The other sequence of items. - The new immutable sorted set. - - - Creates a collection that has the same contents as this immutable sorted set that can be efficiently manipulated by using standard mutable interfaces. - The sorted set builder. - - - Searches the set for a given value and returns the equal value it finds, if any. - The value to search for. - The value from the set that the search found, or the original value if the search yielded no match. - A value indicating whether the search was successful. - - - Adds a given set of items to this immutable sorted set. - The items to add. - The new set with the items added; or the original set if all the items were already in the set. - - - Returns the immutable sorted set that has the specified key comparer. - The comparer to check for. - The immutable sorted set that has the specified key comparer. - - - Adds the specified value to the collection. - The value to add. - - - Removes all the items from the collection. - - - Copies the elements of the collection to an array, starting at a particular array index. - The one-dimensional array that is the destination of the elements copied from collection. The array must have zero-based indexing. - The zero-based index in array at which copying begins. - - - See the interface. - - - - Removes the first occurrence of a specific object from the collection. - The object to remove from the collection. - true if item was successfully removed from the collection; otherwise, false. - - - Returns an enumerator that iterates through the collection. - An enumerator that can be used to iterate through the collection. - - - Inserts an item in the set at the specified index.. - The zero-based index at which item should be inserted. - The object to insert into the set. - - - See the interface. - - - - - Removes the item at the specified index. - The zero-based index of the item to remove. - - - Adds an element to the current set and returns a value to indicate if the element was successfully added. - The element to add to the set. - true if the element is added to the set; false if the element is already in the set. - - - Removes all elements in the specified collection from the current set. - The collection of items to remove from the set. - - - Modifies the current set so that it contains only elements that are also in a specified collection - The collection to compare to the current set. - - - Modifies the current set so that it contains only elements that are present either in the current set or in the specified collection, but not both. - The collection to compare to the current set. - - - Modifies the current set so that it contains all elements that are present in either the current set or the specified collection. - The collection to compare to the current set. - - - Copies the elements of the set to an array, starting at a particular array index. - The one-dimensional array that is the destination of the elements copied from the set. The array must have zero-based indexing. - The zero-based index in array at which copying begins. - - - See the interface. - - - - See . - - - - Returns an enumerator that iterates through a collection. - An enumerator object that can be used to iterate through the collection. - - - Adds an item to the set. - The object to add to the set. - The position into which the new element was inserted, or -1 to indicate that the item was not inserted into the collection. - The set is read-only or has a fixed size. - - - Removes all items from the set. - - - Determines whether the set contains a specific value. - The object to locate in the set. - true if the object is found in the set; otherwise, false. - - - Determines the index of a specific item in the set. - The object to locate in the set. - The index of value if found in the list; otherwise, -1. - - - Inserts an item into the set at the specified index. - The zero-based index at which value should be inserted. - The object to insert into the set. - The set is read-only or has a fixed size. - - - Gets a value indicating whether the has a fixed size. - true if the has a fixed size; otherwise, false. - - - Gets a value indicating whether the is read-only. - true if the is read-only; otherwise, false. - - - Gets or sets the at the specified index. - The index. - The . - - - - Removes the first occurrence of a specific object from the set. - The object to remove from the set. - The set is read-only or has a fixed size. - - - Removes the item at the specified index of the set. - The zero-based index of the item to remove. - The set is read-only or has a fixed size. - - - Adds the specified element to this immutable set. - The element to add. - A new set with the element added, or this set if the element is already in the set. - - - Retrieves an empty immutable set that has the same sorting and ordering semantics as this instance. - An empty set that has the same sorting and ordering semantics as this instance. - - - Removes the elements in the specified collection from the current immutable set. - The items to remove from this set. - The new set with the items removed; or the original set if none of the items were in the set. - - - Creates an immutable set that contains elements that exist in both this set and the specified set. - The collection to compare to the current set. - A new immutable set that contains any elements that exist in both sets. - - - Removes the specified element from this immutable set. - The element to remove. - A new set with the specified element removed, or the current set if the element cannot be found in the set. - - - Creates an immutable set that contains only elements that are present either in the current set or in the specified collection, but not both. - The collection to compare to the current set. - A new set that contains the elements that are present only in the current set or in the specified collection, but not both. - - - Creates a new immutable set that contains all elements that are present in either the current set or in the specified collection. - The collection to add elements from. - A new immutable set with the items added; or the original set if all the items were already in the set. - - - Provides a set of initialization methods for instances of the class. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - Creates an empty immutable sorted set. - The type of items to be stored in the immutable set. - An empty immutable sorted set. - - - Creates an empty immutable sorted set that uses the specified comparer. - The implementation to use when comparing items in the set. - The type of items in the immutable set. - An empty immutable set. - - - Creates a new immutable sorted set that contains the specified item. - The item to prepopulate the set with. - The type of items in the immutable set. - A new immutable set that contains the specified item. - - - Creates a new immutable sorted set that contains the specified array of items. - An array that contains the items to prepopulate the set with. - The type of items in the immutable set. - A new immutable set that contains the specified items. - - - Creates a new immutable sorted set that contains the specified item and uses the specified comparer. - The implementation to use when comparing items in the set. - The item to prepopulate the set with. - The type of items stored in the immutable set. - A new immutable set that contains the specified item. - - - Creates a new immutable sorted set that contains the specified array of items and uses the specified comparer. - The implementation to use when comparing items in the set. - An array that contains the items to prepopulate the set with. - The type of items in the immutable set. - A new immutable set that contains the specified items. - - - Returns a collection that can be used to build an immutable sorted set. - The type of items stored by the collection. - The immutable collection builder. - - - Returns a collection that can be used to build an immutable sorted set. - The comparer used to compare items in the set for equality. - The type of items stored by the collection. - The immutable collection. - - - Creates a new immutable collection that contains the specified items. - The items to add to the set with before it’s immutable. - The type of items stored by the collection. - The new immutable set that contains the specified items. - - - Creates a new immutable collection that contains the specified items. - The comparer to use to compare elements in this set. - The items to add to the set before it’s immutable. - The type of items stored by the collection. - The new immutable set that contains the specified items. - - - Enumerates a sequence and produces an immutable sorted set of its contents. - The sequence to enumerate. - The type of the elements in the sequence. - An immutable sorted set that contains the items in the specified sequence. - - - Enumerates a sequence, produces an immutable sorted set of its contents, and uses the specified comparer. - The sequence to enumerate. - The comparer to use for initializing and adding members to the sorted set. - The type of the elements in the sequence. - An immutable sorted set that contains the items in the specified sequence. - - - Enumerates the contents of an immutable stack without allocating any memory. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - - Gets the element at the current position of the enumerator. - The element at the current position of the enumerator. - - - Advances the enumerator to the next element of the immutable stack. - true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the stack. - - - Represents an immutable stack. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - The type of element on the stack. - - - Removes all objects from the immutable stack. - An empty immutable stack. - - - Gets an empty immutable stack. - An empty immutable stack. - - - Returns an enumerator that iterates through the immutable stack. - An enumerator that can be used to iterate through the stack. - - - Gets a value that indicates whether this instance of the immutable stack is empty. - true if this instance is empty; otherwise, false. - - - Returns the object at the top of the stack without removing it. - The object at the top of the stack. - - - Removes the element at the top of the immutable stack and returns the stack after the removal. - A stack; never null. - - - Removes the specified element from the immutable stack and returns the stack after the removal. - The value to remove from the stack. - A stack; never null. - - - Inserts an object at the top of the immutable stack and returns the new stack. - The object to push onto the stack. - The new stack. - - - Returns an enumerator that iterates through the collection. - An enumerator that can be used to iterate through the collection. - - - Returns an enumerator that iterates through a collection. - An object that can be used to iterate through the collection. - - - Removes all elements from the immutable stack. - The empty immutable stack. - - - Removes the element at the top of the immutable stack and returns the new stack. - The new stack; never null. - - - Inserts an element at the top of the immutable stack and returns the new stack. - The element to push onto the stack. - The new stack. - - - Provides a set of initialization methods for instances of the class. - NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - Creates an empty immutable stack. - The type of items to be stored in the immutable stack. - An empty immutable stack. - - - Creates a new immutable stack that contains the specified item. - The item to prepopulate the stack with. - The type of items in the immutable stack. - A new immutable collection that contains the specified item. - - - Creates a new immutable stack that contains the specified array of items. - An array that contains the items to prepopulate the stack with. - The type of items in the immutable stack. - A new immutable stack that contains the specified items. - - - Creates a new immutable stack that contains the specified items. - The items to add to the stack before it’s immutable. - The type of items in the stack. - An immutable stack that contains the specified items. - - - Removes the specified item from an immutable stack. - The stack to modify. - The item to remove from the stack. - The type of items contained in the stack. - A stack; never null. - - - LINQ extension method overrides that offer greater efficiency for than the standard LINQ methods -NuGet package: System.Collections.Immutable (about immutable collections and how to install) - - - Applies a function to a sequence of elements in a cumulative way. - The collection to apply the function to. - A function to be invoked on each element, in a cumulative way. - The type of element contained by the collection. - The final value after the cumulative function has been applied to all elements. - - - Applies a function to a sequence of elements in a cumulative way. - The collection to apply the function to. - The initial accumulator value. - A function to be invoked on each element, in a cumulative way. - The type of the accumulated value. - The type of element contained by the collection. - The final accumulator value. - - - Applies a function to a sequence of elements in a cumulative way. - The collection to apply the function to. - The initial accumulator value. - A function to be invoked on each element, in a cumulative way. - - The type of the accumulated value. - The type of result returned by the result selector. - The type of element contained by the collection. - The final accumulator value. - - - Gets a value indicating whether all elements in this array match a given condition. - The array to check for matches. - The predicate. - The type of element contained by the collection. - true if every element of the source sequence passes the test in the specified predicate; otherwise, false. - - - Gets a value indicating whether the array contains any elements. - The array to check for elements. - The type of element contained by the collection. - true if the array contains an elements; otherwise, false. - - - Returns a value indicating whether this collection contains any elements. - The builder to check for matches. - The type of elements in the array. - true if the array builder contains any elements; otherwise, false. - - - Gets a value indicating whether the array contains any elements that match a specified condition. - The array to check for elements. - The delegate that defines the condition to match to an element. - The type of element contained by the collection. - true if an element matches the specified condition; otherwise, false. - - - Returns the element at a specified index in the array. - The array to find an element in. - The index for the element to retrieve. - The type of element contained by the collection. - The item at the specified index. - - - Returns the element at a specified index in a sequence or a default value if the index is out of range. - The array to find an element in. - The index for the element to retrieve. - The type of element contained by the collection. - The item at the specified index, or the default value if the index is not found. - - - Returns the first element in an array. - The array to get an item from. - The type of element contained by the collection. - The first item in the array. - If the array is empty. - - - Returns the first element in the collection. - The builder to retrieve an item from. - The type of items in the array. - The first item in the list. - If the array is empty. - - - Returns the first element in a sequence that satisfies a specified condition. - The array to get an item from. - The delegate that defines the conditions of the element to search for. - The type of element contained by the collection. - The first item in the list if it meets the condition specified by predicate. - If the array is empty. - - - Returns the first element of a sequence, or a default value if the sequence contains no elements. - The array to retrieve items from. - The type of element contained by the collection. - The first item in the list, if found; otherwise the default value for the item type. - - - Returns the first element in the collection, or the default value if the collection is empty. - The builder to retrieve an element from. - The type of item in the builder. - The first item in the list, if found; otherwise the default value for the item type. - - - Returns the first element of the sequence that satisfies a condition or a default value if no such element is found. - The array to retrieve elments from. - The delegate that defines the conditions of the element to search for. - The type of element contained by the collection. - The first item in the list, if found; otherwise the default value for the item type. - - - Returns the last element in the collection. - The builder to retrieve elements from. - The type of item in the builder. - The last element in the builder. - Thrown if the collection is empty. - - - Returns the last element of a sequence that satisfies a specified condition. - The array to retrieve elements from. - The delegate that defines the conditions of the element to retrieve. - The type of element contained by the collection. - The last element of the array that satisfies the predicate condition. - Thrown if the collection is empty. - - - Returns the last element of the array. - The array to retrieve items from. - The type of element contained by the array. - The last element in the array. - Thrown if the collection is empty. - - - Returns the last element of a sequence, or a default value if the sequence contains no elements. - The array to retrieve items from. - The type of element contained by the collection. - The last element of a sequence, or a default value if the sequence contains no elements. - - - Returns the last element in the collection, or the default value if the collection is empty. - The builder to retrieve an element from. - The type of item in the builder. - The last element of a sequence, or a default value if the sequence contains no elements. - - - Returns the last element of a sequence that satisfies a condition or a default value if no such element is found. - The array to retrieve an element from. - The delegate that defines the conditions of the element to search for. - The type of element contained by the collection. - The last element of a sequence, or a default value if the sequence contains no elements. - - - Projects each element of a sequence into a new form. - The immutable array to select items from. - A transform function to apply to each element. - The type of element contained by the collection. - The type of the result element. - An whose elements are the result of invoking the transform function on each element of source. - - - Projects each element of a sequence to an , flattens the resulting sequences into one sequence, and invokes a result selector function on each element therein. - The immutable array. - A transform function to apply to each element of the input sequence. - A transform function to apply to each element of the intermediate sequence. - The type of the elements of immutableArray. - The type of the intermediate elements collected by collectionSelector. - The type of the elements of the resulting sequence. - An whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of immutableArray and then mapping each of those sequence elements and their corresponding source element to a result element. - - - Determines whether two sequences are equal according to an equality comparer. - The array to use for comparison. - The items to use for comparison. - The comparer to use to check for equality. - The type of element in the compared array. - The type of element contained by the collection. - true to indicate the sequences are equal; otherwise, false. - - - Determines whether two sequences are equal according to an equality comparer. - The array to use for comparison. - The items to use for comparison. - The comparer to use to check for equality. - The type of element in the compared array. - The type of element contained by the collection. - true to indicate the sequences are equal; otherwise, false. - - - Determines whether two sequences are equal according to an equality comparer. - The array to use for comparison. - The items to use for comparison. - The comparer to use to check for equality. - The type of element in the compared array. - The type of element contained by the collection. - true to indicate the sequences are equal; otherwise, false. - - - Returns the only element of a sequence, and throws an exception if there is not exactly one element in the sequence. - The array to retrieve the element from. - The type of element contained by the collection. - The element in the sequence. - - - Returns the only element of a sequence that satisfies a specified condition, and throws an exception if more than one such element exists. - - - The type of element contained by the collection. - Returns . - - - Returns the only element of the array, or a default value if the sequence is empty; this method throws an exception if there is more than one element in the sequence. - - The type of element contained by the collection. - The element in the array, or the default value if the array is empty. - - - Returns the only element of a sequence that satisfies a specified condition or a default value if no such element exists; this method throws an exception if more than one element satisfies the condition. - The array to get the element from. - The condition the element must satisfy. - The type of element contained by the collection. - The element if it satisfies the specified condition; otherwise the default element. - - - Copies the contents of this array to a mutable array. - - The type of element contained by the collection. - The newly instantiated array. - - - Creates a dictionary based on the contents of this array. - The array to create a dictionary from. - The key selector. - The type of the key. - The type of element contained by the collection. - The newly initialized dictionary. - - - Creates a dictionary based on the contents of this array. - The array to create a dictionary from. - The key selector. - The comparer to initialize the dictionary with. - The type of the key. - The type of element contained by the collection. - The newly initialized dictionary. - - - Creates a dictionary based on the contents of this array. - The array to create a dictionary from. - The key selector. - The element selector. - The comparer to initialize the dictionary with. - The type of the key. - The type of the element. - The type of element contained by the collection. - The newly initialized dictionary. - - - Creates a dictionary based on the contents of this array. - The array to create a dictionary from. - The key selector. - The element selector. - The type of the key. - The type of the element. - The type of element contained by the collection. - The newly initialized dictionary. - - - Filters a sequence of values based on a predicate. - The array to filter. - The condition to use for filtering the array content. - The type of element contained by the collection. - Returns that contains elements that meet the condition. - - - \ No newline at end of file diff --git a/W/Debug_Folder/System.Memory.dll b/W/Debug_Folder/System.Memory.dll deleted file mode 100644 index bdfc501e9..000000000 Binary files a/W/Debug_Folder/System.Memory.dll and /dev/null differ diff --git a/W/Debug_Folder/System.Memory.xml b/W/Debug_Folder/System.Memory.xml deleted file mode 100644 index 4d12fd71e..000000000 --- a/W/Debug_Folder/System.Memory.xml +++ /dev/null @@ -1,355 +0,0 @@ - - - System.Memory - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/W/Debug_Folder/System.Numerics.Vectors.dll b/W/Debug_Folder/System.Numerics.Vectors.dll deleted file mode 100644 index ce46d5be8..000000000 Binary files a/W/Debug_Folder/System.Numerics.Vectors.dll and /dev/null differ diff --git a/W/Debug_Folder/System.Numerics.Vectors.xml b/W/Debug_Folder/System.Numerics.Vectors.xml deleted file mode 100644 index 51297939a..000000000 --- a/W/Debug_Folder/System.Numerics.Vectors.xml +++ /dev/null @@ -1,2597 +0,0 @@ - - - - System.Numerics.Vectors - - - - Represents a 3x2 matrix. - - - Creates a 3x2 matrix from the specified components. - The value to assign to the first element in the first row. - The value to assign to the second element in the first row. - The value to assign to the first element in the second row. - The value to assign to the second element in the second row. - The value to assign to the first element in the third row. - The value to assign to the second element in the third row. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values of value1 and value2. - - - Creates a rotation matrix using the given rotation in radians. - The amount of rotation, in radians. - The rotation matrix. - - - Creates a rotation matrix using the specified rotation in radians and a center point. - The amount of rotation, in radians. - The center point. - The rotation matrix. - - - Creates a scaling matrix from the specified X and Y components. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The scaling matrix. - - - Creates a scaling matrix that scales uniformly with the specified scale with an offset from the specified center. - The uniform scale to use. - The center offset. - The scaling matrix. - - - Creates a scaling matrix that is offset by a given center point. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The center point. - The scaling matrix. - - - Creates a scaling matrix that scales uniformly with the given scale. - The uniform scale to use. - The scaling matrix. - - - Creates a scaling matrix from the specified vector scale. - The scale to use. - The scaling matrix. - - - Creates a scaling matrix from the specified vector scale with an offset from the specified center point. - The scale to use. - The center offset. - The scaling matrix. - - - Creates a skew matrix from the specified angles in radians. - The X angle, in radians. - The Y angle, in radians. - The skew matrix. - - - Creates a skew matrix from the specified angles in radians and a center point. - The X angle, in radians. - The Y angle, in radians. - The center point. - The skew matrix. - - - Creates a translation matrix from the specified 2-dimensional vector. - The translation position. - The translation matrix. - - - Creates a translation matrix from the specified X and Y components. - The X position. - The Y position. - The translation matrix. - - - Returns a value that indicates whether this instance and another 3x2 matrix are equal. - The other matrix. - true if the two matrices are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Calculates the determinant for this matrix. - The determinant. - - - Returns the hash code for this instance. - The hash code. - - - Gets the multiplicative identity matrix. - The multiplicative identify matrix. - - - Inverts the specified matrix. The return value indicates whether the operation succeeded. - The matrix to invert. - When this method returns, contains the inverted matrix if the operation succeeded. - true if matrix was converted successfully; otherwise, false. - - - Indicates whether the current matrix is the identity matrix. - true if the current matrix is the identity matrix; otherwise, false. - - - Performs a linear interpolation from one matrix to a second matrix based on a value that specifies the weighting of the second matrix. - The first matrix. - The second matrix. - The relative weighting of matrix2. - The interpolated matrix. - - - The first element of the first row. - - - - The second element of the first row. - - - - The first element of the second row. - - - - The second element of the second row. - - - - The first element of the third row. - - - - The second element of the third row. - - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values. - - - Returns a value that indicates whether the specified matrices are equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether the specified matrices are not equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this matrix. - The string representation of this matrix. - - - Gets or sets the translation component of this matrix. - The translation component of the current instance. - - - Represents a 4x4 matrix. - - - Creates a object from a specified object. - A 3x2 matrix. - - - Creates a 4x4 matrix from the specified components. - The value to assign to the first element in the first row. - The value to assign to the second element in the first row. - The value to assign to the third element in the first row. - The value to assign to the fourth element in the first row. - The value to assign to the first element in the second row. - The value to assign to the second element in the second row. - The value to assign to the third element in the second row. - The value to assign to the third element in the second row. - The value to assign to the first element in the third row. - The value to assign to the second element in the third row. - The value to assign to the third element in the third row. - The value to assign to the fourth element in the third row. - The value to assign to the first element in the fourth row. - The value to assign to the second element in the fourth row. - The value to assign to the third element in the fourth row. - The value to assign to the fourth element in the fourth row. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values of value1 and value2. - - - Creates a spherical billboard that rotates around a specified object position. - The position of the object that the billboard will rotate around. - The position of the camera. - The up vector of the camera. - The forward vector of the camera. - The created billboard. - - - Creates a cylindrical billboard that rotates around a specified axis. - The position of the object that the billboard will rotate around. - The position of the camera. - The axis to rotate the billboard around. - The forward vector of the camera. - The forward vector of the object. - The billboard matrix. - - - Creates a matrix that rotates around an arbitrary vector. - The axis to rotate around. - The angle to rotate around axis, in radians. - The rotation matrix. - - - Creates a rotation matrix from the specified Quaternion rotation value. - The source Quaternion. - The rotation matrix. - - - Creates a rotation matrix from the specified yaw, pitch, and roll. - The angle of rotation, in radians, around the Y axis. - The angle of rotation, in radians, around the X axis. - The angle of rotation, in radians, around the Z axis. - The rotation matrix. - - - Creates a view matrix. - The position of the camera. - The target towards which the camera is pointing. - The direction that is "up" from the camera's point of view. - The view matrix. - - - Creates an orthographic perspective matrix from the given view volume dimensions. - The width of the view volume. - The height of the view volume. - The minimum Z-value of the view volume. - The maximum Z-value of the view volume. - The orthographic projection matrix. - - - Creates a customized orthographic projection matrix. - The minimum X-value of the view volume. - The maximum X-value of the view volume. - The minimum Y-value of the view volume. - The maximum Y-value of the view volume. - The minimum Z-value of the view volume. - The maximum Z-value of the view volume. - The orthographic projection matrix. - - - Creates a perspective projection matrix from the given view volume dimensions. - The width of the view volume at the near view plane. - The height of the view volume at the near view plane. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a perspective projection matrix based on a field of view, aspect ratio, and near and far view plane distances. - The field of view in the y direction, in radians. - The aspect ratio, defined as view space width divided by height. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - fieldOfView is less than or equal to zero. -or- fieldOfView is greater than or equal to . nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a customized perspective projection matrix. - The minimum x-value of the view volume at the near view plane. - The maximum x-value of the view volume at the near view plane. - The minimum y-value of the view volume at the near view plane. - The maximum y-value of the view volume at the near view plane. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a matrix that reflects the coordinate system about a specified plane. - The plane about which to create a reflection. - A new matrix expressing the reflection. - - - Creates a matrix for rotating points around the X axis. - The amount, in radians, by which to rotate around the X axis. - The rotation matrix. - - - Creates a matrix for rotating points around the X axis from a center point. - The amount, in radians, by which to rotate around the X axis. - The center point. - The rotation matrix. - - - The amount, in radians, by which to rotate around the Y axis from a center point. - The amount, in radians, by which to rotate around the Y-axis. - The center point. - The rotation matrix. - - - Creates a matrix for rotating points around the Y axis. - The amount, in radians, by which to rotate around the Y-axis. - The rotation matrix. - - - Creates a matrix for rotating points around the Z axis. - The amount, in radians, by which to rotate around the Z-axis. - The rotation matrix. - - - Creates a matrix for rotating points around the Z axis from a center point. - The amount, in radians, by which to rotate around the Z-axis. - The center point. - The rotation matrix. - - - Creates a scaling matrix from the specified vector scale. - The scale to use. - The scaling matrix. - - - Creates a uniform scaling matrix that scale equally on each axis. - The uniform scaling factor. - The scaling matrix. - - - Creates a scaling matrix with a center point. - The vector that contains the amount to scale on each axis. - The center point. - The scaling matrix. - - - Creates a uniform scaling matrix that scales equally on each axis with a center point. - The uniform scaling factor. - The center point. - The scaling matrix. - - - Creates a scaling matrix from the specified X, Y, and Z components. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The value to scale by on the Z axis. - The scaling matrix. - - - Creates a scaling matrix that is offset by a given center point. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The value to scale by on the Z axis. - The center point. - The scaling matrix. - - - Creates a matrix that flattens geometry into a specified plane as if casting a shadow from a specified light source. - The direction from which the light that will cast the shadow is coming. - The plane onto which the new matrix should flatten geometry so as to cast a shadow. - A new matrix that can be used to flatten geometry onto the specified plane from the specified direction. - - - Creates a translation matrix from the specified 3-dimensional vector. - The amount to translate in each axis. - The translation matrix. - - - Creates a translation matrix from the specified X, Y, and Z components. - The amount to translate on the X axis. - The amount to translate on the Y axis. - The amount to translate on the Z axis. - The translation matrix. - - - Creates a world matrix with the specified parameters. - The position of the object. - The forward direction of the object. - The upward direction of the object. Its value is usually [0, 1, 0]. - The world matrix. - - - Attempts to extract the scale, translation, and rotation components from the given scale, rotation, or translation matrix. The return value indicates whether the operation succeeded. - The source matrix. - When this method returns, contains the scaling component of the transformation matrix if the operation succeeded. - When this method returns, contains the rotation component of the transformation matrix if the operation succeeded. - When the method returns, contains the translation component of the transformation matrix if the operation succeeded. - true if matrix was decomposed successfully; otherwise, false. - - - Returns a value that indicates whether this instance and another 4x4 matrix are equal. - The other matrix. - true if the two matrices are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Calculates the determinant of the current 4x4 matrix. - The determinant. - - - Returns the hash code for this instance. - The hash code. - - - Gets the multiplicative identity matrix. - Gets the multiplicative identity matrix. - - - Inverts the specified matrix. The return value indicates whether the operation succeeded. - The matrix to invert. - When this method returns, contains the inverted matrix if the operation succeeded. - true if matrix was converted successfully; otherwise, false. - - - Indicates whether the current matrix is the identity matrix. - true if the current matrix is the identity matrix; otherwise, false. - - - Performs a linear interpolation from one matrix to a second matrix based on a value that specifies the weighting of the second matrix. - The first matrix. - The second matrix. - The relative weighting of matrix2. - The interpolated matrix. - - - The first element of the first row. - - - - The second element of the first row. - - - - The third element of the first row. - - - - The fourth element of the first row. - - - - The first element of the second row. - - - - The second element of the second row. - - - - The third element of the second row. - - - - The fourth element of the second row. - - - - The first element of the third row. - - - - The second element of the third row. - - - - The third element of the third row. - - - - The fourth element of the third row. - - - - The first element of the fourth row. - - - - The second element of the fourth row. - - - - The third element of the fourth row. - - - - The fourth element of the fourth row. - - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values. - - - Returns a value that indicates whether the specified matrices are equal. - The first matrix to compare. - The second matrix to care - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether the specified matrices are not equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this matrix. - The string representation of this matrix. - - - Transforms the specified matrix by applying the specified Quaternion rotation. - The matrix to transform. - The rotation t apply. - The transformed matrix. - - - Gets or sets the translation component of this matrix. - The translation component of the current instance. - - - Transposes the rows and columns of a matrix. - The matrix to transpose. - The transposed matrix. - - - Represents a three-dimensional plane. - - - Creates a object from a specified four-dimensional vector. - A vector whose first three elements describe the normal vector, and whose defines the distance along that normal from the origin. - - - Creates a object from a specified normal and the distance along the normal from the origin. - The plane's normal vector. - The plane's distance from the origin along its normal vector. - - - Creates a object from the X, Y, and Z components of its normal, and its distance from the origin on that normal. - The X component of the normal. - The Y component of the normal. - The Z component of the normal. - The distance of the plane along its normal from the origin. - - - Creates a object that contains three specified points. - The first point defining the plane. - The second point defining the plane. - The third point defining the plane. - The plane containing the three points. - - - The distance of the plane along its normal from the origin. - - - - Calculates the dot product of a plane and a 4-dimensional vector. - The plane. - The four-dimensional vector. - The dot product. - - - Returns the dot product of a specified three-dimensional vector and the normal vector of this plane plus the distance () value of the plane. - The plane. - The 3-dimensional vector. - The dot product. - - - Returns the dot product of a specified three-dimensional vector and the vector of this plane. - The plane. - The three-dimensional vector. - The dot product. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns a value that indicates whether this instance and another plane object are equal. - The other plane. - true if the two planes are equal; otherwise, false. - - - Returns the hash code for this instance. - The hash code. - - - The normal vector of the plane. - - - - Creates a new object whose normal vector is the source plane's normal vector normalized. - The source plane. - The normalized plane. - - - Returns a value that indicates whether two planes are equal. - The first plane to compare. - The second plane to compare. - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether two planes are not equal. - The first plane to compare. - The second plane to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the string representation of this plane object. - A string that represents this object. - - - Transforms a normalized plane by a 4x4 matrix. - The normalized plane to transform. - The transformation matrix to apply to plane. - The transformed plane. - - - Transforms a normalized plane by a Quaternion rotation. - The normalized plane to transform. - The Quaternion rotation to apply to the plane. - A new plane that results from applying the Quaternion rotation. - - - Represents a vector that is used to encode three-dimensional physical rotations. - - - Creates a quaternion from the specified vector and rotation parts. - The vector part of the quaternion. - The rotation part of the quaternion. - - - Constructs a quaternion from the specified components. - The value to assign to the X component of the quaternion. - The value to assign to the Y component of the quaternion. - The value to assign to the Z component of the quaternion. - The value to assign to the W component of the quaternion. - - - Adds each element in one quaternion with its corresponding element in a second quaternion. - The first quaternion. - The second quaternion. - The quaternion that contains the summed values of value1 and value2. - - - Concatenates two quaternions. - The first quaternion rotation in the series. - The second quaternion rotation in the series. - A new quaternion representing the concatenation of the value1 rotation followed by the value2 rotation. - - - Returns the conjugate of a specified quaternion. - The quaternion. - A new quaternion that is the conjugate of value. - - - Creates a quaternion from a vector and an angle to rotate about the vector. - The vector to rotate around. - The angle, in radians, to rotate around the vector. - The newly created quaternion. - - - Creates a quaternion from the specified rotation matrix. - The rotation matrix. - The newly created quaternion. - - - Creates a new quaternion from the given yaw, pitch, and roll. - The yaw angle, in radians, around the Y axis. - The pitch angle, in radians, around the X axis. - The roll angle, in radians, around the Z axis. - The resulting quaternion. - - - Divides one quaternion by a second quaternion. - The dividend. - The divisor. - The quaternion that results from dividing value1 by value2. - - - Calculates the dot product of two quaternions. - The first quaternion. - The second quaternion. - The dot product. - - - Returns a value that indicates whether this instance and another quaternion are equal. - The other quaternion. - true if the two quaternions are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Gets a quaternion that represents no rotation. - A quaternion whose values are (0, 0, 0, 1). - - - Returns the inverse of a quaternion. - The quaternion. - The inverted quaternion. - - - Gets a value that indicates whether the current instance is the identity quaternion. - true if the current instance is the identity quaternion; otherwise, false. - - - Calculates the length of the quaternion. - The computed length of the quaternion. - - - Calculates the squared length of the quaternion. - The length squared of the quaternion. - - - Performs a linear interpolation between two quaternions based on a value that specifies the weighting of the second quaternion. - The first quaternion. - The second quaternion. - The relative weight of quaternion2 in the interpolation. - The interpolated quaternion. - - - Returns the quaternion that results from multiplying two quaternions together. - The first quaternion. - The second quaternion. - The product quaternion. - - - Returns the quaternion that results from scaling all the components of a specified quaternion by a scalar factor. - The source quaternion. - The scalar value. - The scaled quaternion. - - - Reverses the sign of each component of the quaternion. - The quaternion to negate. - The negated quaternion. - - - Divides each component of a specified by its length. - The quaternion to normalize. - The normalized quaternion. - - - Adds each element in one quaternion with its corresponding element in a second quaternion. - The first quaternion. - The second quaternion. - The quaternion that contains the summed values of value1 and value2. - - - Divides one quaternion by a second quaternion. - The dividend. - The divisor. - The quaternion that results from dividing value1 by value2. - - - Returns a value that indicates whether two quaternions are equal. - The first quaternion to compare. - The second quaternion to compare. - true if the two quaternions are equal; otherwise, false. - - - Returns a value that indicates whether two quaternions are not equal. - The first quaternion to compare. - The second quaternion to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the quaternion that results from scaling all the components of a specified quaternion by a scalar factor. - The source quaternion. - The scalar value. - The scaled quaternion. - - - Returns the quaternion that results from multiplying two quaternions together. - The first quaternion. - The second quaternion. - The product quaternion. - - - Subtracts each element in a second quaternion from its corresponding element in a first quaternion. - The first quaternion. - The second quaternion. - The quaternion containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Reverses the sign of each component of the quaternion. - The quaternion to negate. - The negated quaternion. - - - Interpolates between two quaternions, using spherical linear interpolation. - The first quaternion. - The second quaternion. - The relative weight of the second quaternion in the interpolation. - The interpolated quaternion. - - - Subtracts each element in a second quaternion from its corresponding element in a first quaternion. - The first quaternion. - The second quaternion. - The quaternion containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this quaternion. - The string representation of this quaternion. - - - The rotation component of the quaternion. - - - - The X value of the vector component of the quaternion. - - - - The Y value of the vector component of the quaternion. - - - - The Z value of the vector component of the quaternion. - - - - Represents a single vector of a specified numeric type that is suitable for low-level optimization of parallel algorithms. - The vector type. T can be any primitive numeric type. - - - Creates a vector whose components are of a specified type. - The numeric type that defines the type of the components in the vector. - - - Creates a vector from a specified array. - A numeric array. - values is null. - - - Creates a vector from a specified array starting at a specified index position. - A numeric array. - The starting index position from which to create the vector. - values is null. - index is less than zero. -or- The length of values minus index is less than . - - - Copies the vector instance to a specified destination array. - The array to receive a copy of the vector values. - destination is null. - The number of elements in the current vector is greater than the number of elements available in the destination array. - - - Copies the vector instance to a specified destination array starting at a specified index position. - The array to receive a copy of the vector values. - The starting index in destination at which to begin the copy operation. - destination is null. - The number of elements in the current instance is greater than the number of elements available from startIndex to the end of the destination array. - index is less than zero or greater than the last index in destination. - - - Returns the number of elements stored in the vector. - The number of elements stored in the vector. - Access to the property getter via reflection is not supported. - - - Returns a value that indicates whether this instance is equal to a specified vector. - The vector to compare with this instance. - true if the current instance and other are equal; otherwise, false. - - - Returns a value that indicates whether this instance is equal to a specified object. - The object to compare with this instance. - true if the current instance and obj are equal; otherwise, false. The method returns false if obj is null, or if obj is a vector of a different type than the current instance. - - - Returns the hash code for this instance. - The hash code. - - - Gets the element at a specified index. - The index of the element to return. - The element at index index. - index is less than zero. -or- index is greater than or equal to . - - - Returns a vector containing all ones. - A vector containing all ones. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Returns a new vector by performing a bitwise And operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise And of left and right. - - - Returns a new vector by performing a bitwise Or operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise Or of the elements in left and right. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Returns a value that indicates whether each pair of elements in two specified vectors are equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a new vector by performing a bitwise XOr operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise XOr of the elements in left and right. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Returns a value that indicates whether any single pair of elements in the specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if any element pairs in left and right are equal. false if no element pairs are equal. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar value. - The source vector. - A scalar value. - The scaled vector. - - - Multiplies a vector by the given scalar. - The scalar value. - The source vector. - The scaled vector. - - - Returns a new vector whose elements are obtained by taking the one's complement of a specified vector's elements. - The source vector. - The one's complement vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates a given vector. - The vector to negate. - The negated vector. - - - Returns the string representation of this vector using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Returns the string representation of this vector using default formatting. - The string representation of this vector. - - - Returns the string representation of this vector using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns a vector containing all zeroes. - A vector containing all zeroes. - - - Provides a collection of static convenience methods for creating, manipulating, combining, and converting generic vectors. - - - Returns a new vector whose elements are the absolute values of the given vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The absolute value vector. - - - Returns a new vector whose values are the sum of each pair of elements from two given vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The summed vector. - - - Returns a new vector by performing a bitwise And Not operation on each pair of corresponding elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned bytes. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a double-precision floating-point vector. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of 16-bit integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of long integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of signed bytes. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a single-precision floating-point vector. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned 16-bit integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned long integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Returns a new vector by performing a bitwise And operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a new vector by performing a bitwise Or operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Creates a new single-precision vector with elements selected between two specified single-precision source vectors based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The new vector with elements selected based on the mask. - - - Creates a new double-precision vector with elements selected between two specified double-precision source vectors based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The new vector with elements selected based on the mask. - - - Creates a new vector of a specified type with elements selected between two specified source vectors of the same type based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The vector type. T can be any primitive numeric type. - The new vector with elements selected based on the mask. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector whose values are the result of dividing the first vector's elements by the corresponding elements in the second vector. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The divided vector. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The dot product. - - - Returns a new integral vector whose elements signal whether the elements in two specified double-precision vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in two specified integral vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in two specified long integer vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in two specified single-precision vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector of a specified type whose elements signal whether the elements in two specified vectors of the same type are equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether each pair of elements in the given vectors is equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left and right are equal; otherwise, false. - - - Returns a value that indicates whether any single pair of elements in the given vectors is equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element pair in left and right is equal; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are greater than their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are greater than their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are greater than their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision floating-point vector are greater than their corresponding elements in a second single-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector of a specified type are greater than their corresponding elements in the second vector of the same time. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are greater than the corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left are greater than the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is greater than the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is greater than the corresponding element in right; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one vector are greater than or equal to their corresponding elements in the single-precision floating-point second vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are greater than or equal to their corresponding elements in the second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are greater than or equal to their corresponding elements in the second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one vector are greater than or equal to their corresponding elements in the second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector of a specified type are greater than or equal to their corresponding elements in the second vector of the same type. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are greater than or equal to all the corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left are greater than or equal to the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is greater than or equal to the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is greater than or equal to the corresponding element in right; otherwise, false. - - - Gets a value that indicates whether vector operations are subject to hardware acceleration through JIT intrinsic support. - true if vector operations are subject to hardware acceleration; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are less than their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are less than their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are less than their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision vector are less than their corresponding elements in a second single-precision vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector of a specified type whose elements signal whether the elements in one vector are less than their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all of the elements in the first vector are less than their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all of the elements in left are less than the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is less than the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is less than the corresponding element in right; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are less than or equal to their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are less than or equal to their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are less or equal to their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision floating-point vector are less than or equal to their corresponding elements in a second single-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector are less than or equal to their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are less than or equal to their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all of the elements in left are less than or equal to the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is less than or equal to the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is less than or equal to the corresponding element in right; otherwise, false. - - - Returns a new vector whose elements are the maximum of each pair of elements in the two given vectors. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The maximum vector. - - - Returns a new vector whose elements are the minimum of each pair of elements in the two given vectors. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The minimum vector. - - - Returns a new vector whose values are a scalar value multiplied by each of the values of a specified vector. - The scalar value. - The vector. - The vector type. T can be any primitive numeric type. - The scaled vector. - - - Returns a new vector whose values are the product of each pair of elements in two specified vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The product vector. - - - Returns a new vector whose values are the values of a specified vector each multiplied by a scalar value. - The vector. - The scalar value. - The vector type. T can be any primitive numeric type. - The scaled vector. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector whose elements are the negation of the corresponding element in the specified vector. - The source vector. - The vector type. T can be any primitive numeric type. - The negated vector. - - - Returns a new vector whose elements are obtained by taking the one's complement of a specified vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a new vector whose elements are the square roots of a specified vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The square root vector. - - - Returns a new vector whose values are the difference between the elements in the second vector and their corresponding elements in the first vector. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The difference vector. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector by performing a bitwise exclusive Or (XOr) operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Represents a vector with two single-precision floating-point values. - - - Creates a new object whose two elements have the same value. - The value to assign to both elements. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of the vector. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 2 elements are equal to one. - A vector whose two elements are equal to one (that is, it returns the vector (1,1). - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns the reflection of a vector off a surface that has the specified normal. - The source vector. - The normal of the surface being reflected off. - The reflected vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a vector by a specified 3x2 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a vector normal by the given 3x2 matrix. - The source vector. - The matrix. - The transformed vector. - - - Transforms a vector normal by the given 4x4 matrix. - The source vector. - The matrix. - The transformed vector. - - - Gets the vector (1,0). - The vector (1,0). - - - Gets the vector (0,1). - The vector (0,1). - - - The X component of the vector. - - - - The Y component of the vector. - - - - Returns a vector whose 2 elements are equal to zero. - A vector whose two elements are equal to zero (that is, it returns the vector (0,0). - - - Represents a vector with three single-precision floating-point values. - - - Creates a new object whose three elements have the same value. - The value to assign to all three elements. - - - Creates a new object from the specified object and the specified value. - The vector with two elements. - The additional value to assign to the field. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the cross product of two vectors. - The first vector. - The second vector. - The cross product. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of this vector object. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 3 elements are equal to one. - A vector whose three elements are equal to one (that is, it returns the vector (1,1,1). - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns the reflection of a vector off a surface that has the specified normal. - The source vector. - The normal of the surface being reflected off. - The reflected vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a vector normal by the given 4x4 matrix. - The source vector. - The matrix. - The transformed vector. - - - Gets the vector (1,0,0). - The vector (1,0,0). - - - Gets the vector (0,1,0). - The vector (0,1,0).. - - - Gets the vector (0,0,1). - The vector (0,0,1). - - - The X component of the vector. - - - - The Y component of the vector. - - - - The Z component of the vector. - - - - Gets a vector whose 3 elements are equal to zero. - A vector whose three elements are equal to zero (that is, it returns the vector (0,0,0). - - - Represents a vector with four single-precision floating-point values. - - - Creates a new object whose four elements have the same value. - The value to assign to all four elements. - - - Constructs a new object from the specified object and a W component. - The vector to use for the X, Y, and Z components. - The W component. - - - Creates a new object from the specified object and a Z and a W component. - The vector to use for the X and Y components. - The Z component. - The W component. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of this vector object. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 4 elements are equal to one. - Returns . - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a four-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a four-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a three-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a two-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a two-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a three-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Gets the vector (0,0,0,1). - The vector (0,0,0,1). - - - Gets the vector (1,0,0,0). - The vector (1,0,0,0). - - - Gets the vector (0,1,0,0). - The vector (0,1,0,0).. - - - Gets a vector whose 4 elements are equal to zero. - The vector (0,0,1,0). - - - The W component of the vector. - - - - The X component of the vector. - - - - The Y component of the vector. - - - - The Z component of the vector. - - - - Gets a vector whose 4 elements are equal to zero. - A vector whose four elements are equal to zero (that is, it returns the vector (0,0,0,0). - - - \ No newline at end of file diff --git a/W/Debug_Folder/System.Runtime.CompilerServices.Unsafe.dll b/W/Debug_Folder/System.Runtime.CompilerServices.Unsafe.dll deleted file mode 100644 index de9e12447..000000000 Binary files a/W/Debug_Folder/System.Runtime.CompilerServices.Unsafe.dll and /dev/null differ diff --git a/W/Debug_Folder/System.Runtime.CompilerServices.Unsafe.xml b/W/Debug_Folder/System.Runtime.CompilerServices.Unsafe.xml deleted file mode 100644 index 6a7cfcffe..000000000 --- a/W/Debug_Folder/System.Runtime.CompilerServices.Unsafe.xml +++ /dev/null @@ -1,200 +0,0 @@ - - - System.Runtime.CompilerServices.Unsafe - - - - Contains generic, low-level functionality for manipulating pointers. - - - Adds an element offset to the given reference. - The reference to add the offset to. - The offset to add. - The type of reference. - A new reference that reflects the addition of offset to pointer. - - - Adds an element offset to the given reference. - The reference to add the offset to. - The offset to add. - The type of reference. - A new reference that reflects the addition of offset to pointer. - - - Adds a byte offset to the given reference. - The reference to add the offset to. - The offset to add. - The type of reference. - A new reference that reflects the addition of byte offset to pointer. - - - Determines whether the specified references point to the same location. - The first reference to compare. - The second reference to compare. - The type of reference. - true if left and right point to the same location; otherwise, false. - - - Casts the given object to the specified type. - The object to cast. - The type which the object will be cast to. - The original object, casted to the given type. - - - Reinterprets the given reference as a reference to a value of type TTo. - The reference to reinterpret. - The type of reference to reinterpret.. - The desired type of the reference. - A reference to a value of type TTo. - - - Returns a pointer to the given by-ref parameter. - The object whose pointer is obtained. - The type of object. - A pointer to the given value. - - - Reinterprets the given location as a reference to a value of type T. - The location of the value to reference. - The type of the interpreted location. - A reference to a value of type T. - - - Determines the byte offset from origin to target from the given references. - The reference to origin. - The reference to target. - The type of reference. - Byte offset from origin to target i.e. target - origin. - - - Copies a value of type T to the given location. - The location to copy to. - A reference to the value to copy. - The type of value to copy. - - - Copies a value of type T to the given location. - The location to copy to. - A pointer to the value to copy. - The type of value to copy. - - - Copies bytes from the source address to the destination address. - The destination address to copy to. - The source address to copy from. - The number of bytes to copy. - - - Copies bytes from the source address to the destination address. - The destination address to copy to. - The source address to copy from. - The number of bytes to copy. - - - Copies bytes from the source address to the destination address -without assuming architecture dependent alignment of the addresses. - The destination address to copy to. - The source address to copy from. - The number of bytes to copy. - - - Copies bytes from the source address to the destination address -without assuming architecture dependent alignment of the addresses. - The destination address to copy to. - The source address to copy from. - The number of bytes to copy. - - - Initializes a block of memory at the given location with a given initial value. - The address of the start of the memory block to initialize. - The value to initialize the block to. - The number of bytes to initialize. - - - Initializes a block of memory at the given location with a given initial value. - The address of the start of the memory block to initialize. - The value to initialize the block to. - The number of bytes to initialize. - - - Initializes a block of memory at the given location with a given initial value -without assuming architecture dependent alignment of the address. - The address of the start of the memory block to initialize. - The value to initialize the block to. - The number of bytes to initialize. - - - Initializes a block of memory at the given location with a given initial value -without assuming architecture dependent alignment of the address. - The address of the start of the memory block to initialize. - The value to initialize the block to. - The number of bytes to initialize. - - - Reads a value of type T from the given location. - The location to read from. - The type to read. - An object of type T read from the given location. - - - Reads a value of type T from the given location -without assuming architecture dependent alignment of the addresses. - The location to read from. - The type to read. - An object of type T read from the given location. - - - Reads a value of type T from the given location -without assuming architecture dependent alignment of the addresses. - The location to read from. - The type to read. - An object of type T read from the given location. - - - Returns the size of an object of the given type parameter. - The type of object whose size is retrieved. - The size of an object of type T. - - - Subtracts an element offset from the given reference. - The reference to subtract the offset from. - The offset to subtract. - The type of reference. - A new reference that reflects the subraction of offset from pointer. - - - Subtracts an element offset from the given reference. - The reference to subtract the offset from. - The offset to subtract. - The type of reference. - A new reference that reflects the subraction of offset from pointer. - - - Subtracts a byte offset from the given reference. - The reference to subtract the offset from. - - The type of reference. - A new reference that reflects the subraction of byte offset from pointer. - - - Writes a value of type T to the given location. - The location to write to. - The value to write. - The type of value to write. - - - Writes a value of type T to the given location -without assuming architecture dependent alignment of the addresses. - The location to write to. - The value to write. - The type of value to write. - - - Writes a value of type T to the given location -without assuming architecture dependent alignment of the addresses. - The location to write to. - The value to write. - The type of value to write. - - - \ No newline at end of file diff --git a/W/Debug_Folder/System.Threading.Channels.dll b/W/Debug_Folder/System.Threading.Channels.dll deleted file mode 100644 index cdbf7901f..000000000 Binary files a/W/Debug_Folder/System.Threading.Channels.dll and /dev/null differ diff --git a/W/Debug_Folder/System.Threading.Channels.xml b/W/Debug_Folder/System.Threading.Channels.xml deleted file mode 100644 index 1e9482b3b..000000000 --- a/W/Debug_Folder/System.Threading.Channels.xml +++ /dev/null @@ -1,217 +0,0 @@ - - - - System.Threading.Channels - - - - Specifies the behavior to use when writing to a bounded channel that is already full. - - - Removes and ignores the newest item in the channel in order to make room for the item being written. - - - Removes and ignores the oldest item in the channel in order to make room for the item being written. - - - Drops the item being written. - - - Waits for space to be available in order to complete the write operation. - - - Provides options that control the behavior of bounded instances. - - - Initializes the options. - The maximum number of items the bounded channel may store. - - - Gets or sets the maximum number of items the bounded channel may store. - - - Gets or sets the behavior incurred by write operations when the channel is full. - - - Provides static methods for creating channels. - - - Creates a channel with the specified maximum capacity. - The maximum number of items the channel may store. - Specifies the type of data in the channel. - The created channel. - - - Creates a channel with the specified maximum capacity. - Options that guide the behavior of the channel. - Specifies the type of data in the channel. - The created channel. - - - Creates an unbounded channel usable by any number of readers and writers concurrently. - The type of data in the channel. - The created channel. - - - Creates an unbounded channel subject to the provided options. - Options that guide the behavior of the channel. - Specifies the type of data in the channel. - The created channel. - - - Provides a base class for channels that support reading and writing elements of type . - Specifies the type of data readable and writable in the channel. - - - Initializes an instance of the class. - - - Provides a base class for channels that support reading elements of type and writing elements of type . - Specifies the type of data that may be written to the channel. - Specifies the type of data that may be read from the channel. - - - Initializes an instance of the class. - - - Implicit cast from a to its readable half. - The being cast. - The readable half. - - - Implicit cast from a to its writable half. - The being cast. - The writable half. - - - Gets the readable half of this channel. - - - Gets the writable half of this channel. - - - Exception thrown when a channel is used after it's been closed. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The exception that is the cause of this exception. - - - Initializes a new instance of the class with serialized data. - The object that holds the serialized object data. - The contextual information about the source or destination. - - - Initializes a new instance of the class. - The message that describes the error. - - - Initializes a new instance of the class. - The message that describes the error. - The exception that is the cause of this exception. - - - Provides options that control the behavior of channel instances. - - - Initializes an instance of the class. - - - - if operations performed on a channel may synchronously invoke continuations subscribed to -notifications of pending async operations; if all continuations should be invoked asynchronously. - - - - readers from the channel guarantee that there will only ever be at most one read operation at a time; - if no such constraint is guaranteed. - - - - if writers to the channel guarantee that there will only ever be at most one write operation -at a time; if no such constraint is guaranteed. - - - Provides a base class for reading from a channel. - Specifies the type of data that may be read from the channel. - - - Initializes an instance of the class. - - - Gets a that completes when no more data will ever -be available to be read from this channel. - - - Creates an that enables reading all of the data from the channel. - The cancellation token to use to cancel the enumeration. - The created async enumerable. - - - Asynchronously reads an item from the channel. - A used to cancel the read operation. - A that represents the asynchronous read operation. - - - Attempts to read an item from the channel. - The read item, or a default value if no item could be read. - - if an item was read; otherwise, . - - - Returns a that will complete when data is available to read. - A used to cancel the wait operation. - A that will complete with a result when data is available to read - or with a result when no further data will ever be available to be read due to the channel completing successfully. - If the channel completes with an exception, the task will also complete with an exception. -. - - - Provides a base class for writing to a channel. - Specifies the type of data that may be written to the channel. - - - Initializes an instance of the class. - - - Mark the channel as being complete, meaning no more items will be written to it. - Optional Exception indicating a failure that's causing the channel to complete. - The channel has already been marked as complete. - - - Attempts to mark the channel as being completed, meaning no more data will be written to it. - An indicating the failure causing no more data to be written, or null for success. - - if this operation successfully completes the channel; otherwise, if the channel could not be marked for completion, -for example due to having already been marked as such, or due to not supporting completion. -. - - - Attempts to write the specified item to the channel. - The item to write. - - if the item was written; otherwise, . - - - Returns a that will complete when space is available to write an item. - A used to cancel the wait operation. - A that will complete with a result when space is available to write an item -or with a result when no further writing will be permitted. - - - Asynchronously writes an item to the channel. - The value to write to the channel. - A used to cancel the write operation. - A that represents the asynchronous write operation. - - - Provides options that control the behavior of unbounded instances. - - - Initializes a new instance of the class. - - - \ No newline at end of file diff --git a/W/Debug_Folder/System.Threading.Tasks.Extensions.dll b/W/Debug_Folder/System.Threading.Tasks.Extensions.dll deleted file mode 100644 index eeec92852..000000000 Binary files a/W/Debug_Folder/System.Threading.Tasks.Extensions.dll and /dev/null differ diff --git a/W/Debug_Folder/System.Threading.Tasks.Extensions.xml b/W/Debug_Folder/System.Threading.Tasks.Extensions.xml deleted file mode 100644 index 5e02a99d7..000000000 --- a/W/Debug_Folder/System.Threading.Tasks.Extensions.xml +++ /dev/null @@ -1,166 +0,0 @@ - - - System.Threading.Tasks.Extensions - - - - - - - - - - - - - - - - - - - Provides a value type that wraps a and a TResult, only one of which is used. - The result. - - - Initializes a new instance of the class using the supplied task that represents the operation. - The task. - The task argument is null. - - - Initializes a new instance of the class using the supplied result of a successful operation. - The result. - - - Retrieves a object that represents this . - The object that is wrapped in this if one exists, or a new object that represents the result. - - - Configures an awaiter for this value. - true to attempt to marshal the continuation back to the captured context; otherwise, false. - The configured awaiter. - - - Creates a method builder for use with an async method. - The created builder. - - - Determines whether the specified object is equal to the current object. - The object to compare with the current object. - true if the specified object is equal to the current object; otherwise, false. - - - Determines whether the specified object is equal to the current object. - The object to compare with the current object. - true if the specified object is equal to the current object; otherwise, false. - - - Creates an awaiter for this value. - The awaiter. - - - Returns the hash code for this instance. - The hash code for the current object. - - - Gets a value that indicates whether this object represents a canceled operation. - true if this object represents a canceled operation; otherwise, false. - - - Gets a value that indicates whether this object represents a completed operation. - true if this object represents a completed operation; otherwise, false. - - - Gets a value that indicates whether this object represents a successfully completed operation. - true if this object represents a successfully completed operation; otherwise, false. - - - Gets a value that indicates whether this object represents a failed operation. - true if this object represents a failed operation; otherwise, false. - - - Compares two values for equality. - The first value to compare. - The second value to compare. - true if the two values are equal; otherwise, false. - - - Determines whether two values are unequal. - The first value to compare. - The seconed value to compare. - true if the two values are not equal; otherwise, false. - - - Gets the result. - The result. - - - Returns a string that represents the current object. - A string that represents the current object. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/W/Debug_Folder/a.pas b/W/Debug_Folder/a.pas deleted file mode 100644 index b7d054873..000000000 --- a/W/Debug_Folder/a.pas +++ /dev/null @@ -1,38 +0,0 @@ -{$reference Microsoft.ML.Core.dll} -{$reference Microsoft.ML.Data.dll} -{$reference Microsoft.ML.KMeansClustering.dll} - -uses Microsoft.ML; -uses Microsoft.ML.Data; -uses Microsoft.ML.Trainers; -uses Microsoft.ML.Transforms; - -begin - var Context := new MLContext(); - {var loader := Context.Data.CreateTextLoader( - Arr( - new TextLoader.Column('SentimentText', DataKind.String, 1), - new TextLoader.Column('Label', DataKind.Boolean, 0) - ));} - var fullData := Context.Data.LoadFromTextFile('iris-full.txt', - Arr( - new TextLoader.Column('Label', DataKind.Single, 0), - new TextLoader.Column('SepalLength', DataKind.Single, 1), - new TextLoader.Column('SepalWidth', DataKind.Single, 2), - new TextLoader.Column('PetalLength', DataKind.Single, 3), - new TextLoader.Column('PetalWidth', DataKind.Single, 4) - ), - #9, True - ); - var trainTestData := Context.Data.TrainTestSplit(fullData, 0.2); - var trainingDataView := trainTestData.TrainSet; - var testingDataView := trainTestData.TestSet; - var dataProcessPipeline := Context.Transforms.Concatenate('Features', - 'SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth'); - - var trainer: IEstimator>; - trainer := Context.Clustering.Trainers.KMeans('Features', nil, 3); - //trainer := Context.Clustering.Trainers.KMeans('Features', nil, 3); - var trainingPipeline := dataProcessPipeline.Append(trainer); - //var trainedModel := trainingPipeline.Fit(trainingDataView); -end. \ No newline at end of file diff --git a/W/Debug_Folder/a1.pas b/W/Debug_Folder/a1.pas deleted file mode 100644 index c2fc71797..000000000 --- a/W/Debug_Folder/a1.pas +++ /dev/null @@ -1,11 +0,0 @@ -{$reference Microsoft.ML.Core.dll} -{$reference Microsoft.ML.Data.dll} -{$reference Microsoft.ML.KMeansClustering.dll} - -uses Microsoft.ML; -uses Microsoft.ML.Data; -uses Microsoft.ML.Trainers; - -begin - var trainer: IEstimator>; -end. \ No newline at end of file diff --git a/W/Debug_Folder/iris-full.txt b/W/Debug_Folder/iris-full.txt deleted file mode 100644 index 68d136a11..000000000 --- a/W/Debug_Folder/iris-full.txt +++ /dev/null @@ -1,152 +0,0 @@ -#Label Sepal length Sepal width Petal length Petal width -0 5.1 3.5 1.4 0.2 -0 4.9 3.0 1.4 0.2 -0 4.7 3.2 1.3 0.2 -0 4.6 3.1 1.5 0.2 -0 5.0 3.6 1.4 0.2 -0 5.4 3.9 1.7 0.4 -0 4.6 3.4 1.4 0.3 -0 5.0 3.4 1.5 0.2 -0 4.4 2.9 1.4 0.2 -0 4.9 3.1 1.5 0.1 -0 5.4 3.7 1.5 0.2 -0 4.8 3.4 1.6 0.2 -0 4.8 3.0 1.4 0.1 -0 4.3 3.0 1.1 0.1 -0 5.8 4.0 1.2 0.2 -0 5.7 4.4 1.5 0.4 -0 5.4 3.9 1.3 0.4 -0 5.1 3.5 1.4 0.3 -0 5.7 3.8 1.7 0.3 -0 5.1 3.8 1.5 0.3 -0 5.4 3.4 1.7 0.2 -0 5.1 3.7 1.5 0.4 -0 4.6 3.6 1.0 0.2 -0 5.1 3.3 1.7 0.5 -0 4.8 3.4 1.9 0.2 -0 5.0 3.0 1.6 0.2 -0 5.0 3.4 1.6 0.4 -0 5.2 3.5 1.5 0.2 -0 5.2 3.4 1.4 0.2 -0 4.7 3.2 1.6 0.2 -0 4.8 3.1 1.6 0.2 -0 5.4 3.4 1.5 0.4 -0 5.2 4.1 1.5 0.1 -0 5.5 4.2 1.4 0.2 -0 4.9 3.1 1.5 0.1 -0 5.0 3.2 1.2 0.2 -0 5.5 3.5 1.3 0.2 -0 4.9 3.1 1.5 0.1 -0 4.4 3.0 1.3 0.2 -0 5.1 3.4 1.5 0.2 -0 5.0 3.5 1.3 0.3 -0 4.5 2.3 1.3 0.3 -0 4.4 3.2 1.3 0.2 -0 5.0 3.5 1.6 0.6 -0 5.1 3.8 1.9 0.4 -0 4.8 3.0 1.4 0.3 -0 5.1 3.8 1.6 0.2 -0 4.6 3.2 1.4 0.2 -0 5.3 3.7 1.5 0.2 -0 5.0 3.3 1.4 0.2 -1 7.0 3.2 4.7 1.4 -1 6.4 3.2 4.5 1.5 -1 6.9 3.1 4.9 1.5 -1 5.5 2.3 4.0 1.3 -1 6.5 2.8 4.6 1.5 -1 5.7 2.8 4.5 1.3 -1 6.3 3.3 4.7 1.6 -1 4.9 2.4 3.3 1.0 -1 6.6 2.9 4.6 1.3 -1 5.2 2.7 3.9 1.4 -1 5.0 2.0 3.5 1.0 -1 5.9 3.0 4.2 1.5 -1 6.0 2.2 4.0 1.0 -1 6.1 2.9 4.7 1.4 -1 5.6 2.9 3.6 1.3 -1 6.7 3.1 4.4 1.4 -1 5.6 3.0 4.5 1.5 -1 5.8 2.7 4.1 1.0 -1 6.2 2.2 4.5 1.5 -1 5.6 2.5 3.9 1.1 -1 5.9 3.2 4.8 1.8 -1 6.1 2.8 4.0 1.3 -1 6.3 2.5 4.9 1.5 -1 6.1 2.8 4.7 1.2 -1 6.4 2.9 4.3 1.3 -1 6.6 3.0 4.4 1.4 -1 6.8 2.8 4.8 1.4 -1 6.7 3.0 5.0 1.7 -1 6.0 2.9 4.5 1.5 -1 5.7 2.6 3.5 1.0 -1 5.5 2.4 3.8 1.1 -1 5.5 2.4 3.7 1.0 -1 5.8 2.7 3.9 1.2 -1 6.0 2.7 5.1 1.6 -1 5.4 3.0 4.5 1.5 -1 6.0 3.4 4.5 1.6 -1 6.7 3.1 4.7 1.5 -1 6.3 2.3 4.4 1.3 -1 5.6 3.0 4.1 1.3 -1 5.5 2.5 4.0 1.3 -1 5.5 2.6 4.4 1.2 -1 6.1 3.0 4.6 1.4 -1 5.8 2.6 4.0 1.2 -1 5.0 2.3 3.3 1.0 -1 5.6 2.7 4.2 1.3 -1 5.7 3.0 4.2 1.2 -1 5.7 2.9 4.2 1.3 -1 6.2 2.9 4.3 1.3 -1 5.1 2.5 3.0 1.1 -1 5.7 2.8 4.1 1.3 -2 6.3 3.3 6.0 2.5 -2 5.8 2.7 5.1 1.9 -2 7.1 3.0 5.9 2.1 -2 6.3 2.9 5.6 1.8 -2 6.5 3.0 5.8 2.2 -2 7.6 3.0 6.6 2.1 -2 4.9 2.5 4.5 1.7 -2 7.3 2.9 6.3 1.8 -2 6.7 2.5 5.8 1.8 -2 7.2 3.6 6.1 2.5 -2 6.5 3.2 5.1 2.0 -2 6.4 2.7 5.3 1.9 -2 6.8 3.0 5.5 2.1 -2 5.7 2.5 5.0 2.0 -2 5.8 2.8 5.1 2.4 -2 6.4 3.2 5.3 2.3 -2 6.5 3.0 5.5 1.8 -2 7.7 3.8 6.7 2.2 -2 7.7 2.6 6.9 2.3 -2 6.0 2.2 5.0 1.5 -2 6.9 3.2 5.7 2.3 -2 5.6 2.8 4.9 2.0 -2 7.7 2.8 6.7 2.0 -2 6.3 2.7 4.9 1.8 -2 6.7 3.3 5.7 2.1 -2 7.2 3.2 6.0 1.8 -2 6.2 2.8 4.8 1.8 -2 6.1 3.0 4.9 1.8 -2 6.4 2.8 5.6 2.1 -2 7.2 3.0 5.8 1.6 -2 7.4 2.8 6.1 1.9 -2 7.9 3.8 6.4 2.0 -2 6.4 2.8 5.6 2.2 -2 6.3 2.8 5.1 1.5 -2 6.1 2.6 5.6 1.4 -2 7.7 3.0 6.1 2.3 -2 6.3 3.4 5.6 2.4 -2 6.4 3.1 5.5 1.8 -2 6.0 3.0 4.8 1.8 -2 6.9 3.1 5.4 2.1 -2 6.7 3.1 5.6 2.4 -2 6.9 3.1 5.1 2.3 -2 5.8 2.7 5.1 1.9 -2 6.8 3.2 5.9 2.3 -2 6.7 3.3 5.7 2.5 -2 6.7 3.0 5.2 2.3 -2 6.3 2.5 5.0 1.9 -2 6.5 3.0 5.2 2.0 -2 6.2 3.4 5.4 2.3 -2 5.9 3.0 5.1 1.8 - diff --git a/bin/GitIgnoreTester.pas b/bin/GitIgnoreTester.pas index 3fd45caa7..9bbdf002d 100644 --- a/bin/GitIgnoreTester.pas +++ b/bin/GitIgnoreTester.pas @@ -11,7 +11,7 @@ end); try var dir := GetEXEFileName; loop 2 do dir := System.IO.Path.GetDirectoryName(dir); - dir.Println; +// dir.Println; var index_files := new HashSet; begin diff --git a/bin/ICSharpCode.Core.xml b/bin/ICSharpCode.Core.xml new file mode 100644 index 000000000..0dc87e541 --- /dev/null +++ b/bin/ICSharpCode.Core.xml @@ -0,0 +1,1544 @@ + + + + ICSharpCode.Core + + + + + Gets the message of a custom load error. Used only when AddInAction is set to CustomError. + Settings this property to a non-null value causes Enabled to be set to false and + Action to be set to AddInAction.CustomError. + + + + + Action to execute when the application is restarted. + + + + + Gets whether the AddIn is a preinstalled component of the host application. + + + + + Exception used when loading an AddIn fails. + + + + + Argument class used for . + + + + + The caller passed to . + + + + + The codon to build. + + + + + The addin containing the codon. + + + + + The conditions applied to this item. + + + + + The addin tree node containing the sub-items. + Returns null if no sub-items exist. + + + + + Builds the sub-items. + Conditions on this node are also applied to the sub-nodes. + + + + + Represents a node in the add in tree that can produce an item. + + + + + Negates a condition + + + + + Gives back the and result of two conditions. + + + + + Gives back the or result of two conditions. + + + + + Returns the action which occurs, when this condition fails. + + + + + Represents all contributions to a Path in a single .addin file. + + + + + Gets the codons separated by the groups they were created in. + i.e. if two addins add the codons to the same path they will be in diffrent group. + if the same addin adds the codon in diffrent path elements they will be in diffrent groups. + + + + + Interface for classes that can evaluate conditions defined in the addin tree. + + + + + Default actions, when a condition is failed. + + + + + Interface for single condition or complex condition. + + + + + Returns the action which occurs, when this condition fails. + + + + + Returns true, when the condition is valid otherwise false. + + + + + Interface for classes that can build objects out of codons. + + http://en.wikipedia.org/wiki/Fraggle_Rock#Doozers + + + + Gets if the doozer handles codon conditions on its own. + If this property return false, the item is excluded when the condition is not met. + + + + + Construct the item. + + + The constructed item. + May return an object implementing for returning + multiple arguments. + + + + + Force loading the runtime assembly now. + + + + + Compares two strings. + The strings are passed through the StringParser, so it is possible to compare + SharpDevelop properties.
+ Useful if you want to run a command only when a setting is active to prevent + loading your addin if that setting isn't set. +
+ + The first string. + + + The second string. + + + The mode of the comparison: a field of the System.StringComparison enumeration. The default is + 'OrdinalIgnoreCase'. + + + <Condition name = "Compare" string = "${property:SharpDevelop.FiletypesRegisterStartup}" equals = "True"> + +
+ + + Condition evaluator that lazy-loads another condition evaluator and executes it. + + + + + Condition evaluator that compares the state of the caller/owner with a specified value. + The caller/owner has to implement . + + + + + Creates object instances by invocating a type's parameterless constructor + via System.Reflection. + + + The fully qualified type name of the class to create an instace of. + + Everywhere where objects are expected. + + Any kind of object. + + + + + Gets if the doozer handles codon conditions on its own. + If this property return false, the item is excluded when the condition is not met. + + + + + Creates file filter entries for OpenFileDialogs or SaveFileDialogs. + + + The name of the file filter entry. + + + The extensions associated with this file filter entry. + + Only in /SharpDevelop/Workbench/FileFilter + + in the format "name|extensions". + + + + + Gets if the doozer handles codon conditions on its own. + If this property return false, the item is excluded when the condition is not met. + + + + + Gets whether this descriptor matches the specified file extension. + + File extension starting with '.' + + + + Creates associations between file types or node types in the project browser and + icons in the resource service. + + + The name of a bitmap resource in the resource service. + + + This attribute is specified when a project icon association should be created. + It specifies the language of the project types that use the icon. + + + This attribute is specified when a file icon association should be created. + It specifies the semicolon-separated list of file types that use the icon. + + Only in /Workspace/Icons + + An IconDescriptor object that exposes the attributes. + + + + + Gets if the doozer handles codon conditions on its own. + If this property return false, the item is excluded when the condition is not met. + + + + + This doozer lazy-loads another doozer when it has to build an item. + It is used internally to wrap doozers specified in addins. + + + + + Gets if the doozer handles codon conditions on its own. + If this property return false, the item is excluded when the condition is not met. + + + + + Creates menu items from a location in the addin tree. + + + Label of the menu item. + + + This attribute must be one of these values: + Separator, CheckBox, Item=Command, Menu (=with subitems), + Builder (=class implementing ISubmenuBuilder). + Default: Command. + + + Only for the type "Item"/"Command". + When set to false, the command class is loaded + immediately instead of the usual lazy-loading. + + + Icon of the menu item. + + + Command class that is run when item is clicked. + + + A WPF routed command that is executed when item is clicked. + Currently, this property is supported only for WPF Menus. + Only one of the "class" and "command" attributes can be used on a menu entry. + + + Only for the type "Item"/"Command". Opens a webpage instead of running a command when + clicking the item. + + + Shortcut that activates the command (e.g. "Control|S"). + + + If "type" is "Menu", the item can have sub-menuitems. + + Any menu strip paths or context menu paths, e.g. /SharpDevelop/Workbench/MainMenu + + A MenuItemDescriptor object. + + Conditions are handled by the item, "Exclude" maps to "Visible = false", "Disable" to "Enabled = false" + + + + Gets if the doozer handles codon conditions on its own. + If this property return false, the item is excluded when the condition is not met. + + + + + Represents a menu item. These objects are created by the MenuItemDoozer and + then converted into GUI-toolkit-specific objects by the MenuService. + + + + + Creates tool bar items from a location in the addin tree. + + + Label of the tool bar item. + + + Icon of the tool bar item. + + + This attribute must be one of these values: + Separator, CheckBox, Item, ComboBox, DropDownButton + + + Only for the type "Item". When set to false, the command class is loaded + immediately instead of the usual lazy-loading. + + + Tooltip of the tool bar item. + + + Command class that is run when item is clicked; or class that manages + the ComboBox/DropDownButton. Required for everything except "Separator". + + + Shortcut that activates the command (e.g. "Control|S"). + + Any toolbar strip paths, e.g. /SharpDevelop/Workbench/ToolBar + A drop down button has menu items as sub elements. + + A ToolStrip* object, depending on the type attribute. + + Conditions are handled by the item, "Exclude" maps to "Visible = false", "Disable" to "Enabled = false" + + + + Gets if the doozer handles codon conditions on its own. + If this property return false, the item is excluded when the condition is not met. + + + + + Represents a toolbar item. These objects are created by the ToolbarItemDoozer and + then converted into GUI-toolkit-specific objects by the ToolbarService. + + + + + Static class containing the AddInTree. Contains methods for accessing tree nodes and building items. + + + + + Gets the list of loaded AddIns. + + + + + Gets a dictionary of registered doozers. + + + + + Gets a dictionary of registered condition evaluators. + + + + + Checks whether the specified path exists in the AddIn tree. + + + + + Gets the representing the specified path. + This method throws a when the + path does not exist. + + + + + Gets the representing the specified path. + + The path of the AddIn tree node + + If set to true, this method throws a + when the path does not exist. + If set to false, null is returned for non-existing paths. + + + + + Builds a single item in the addin tree. + + A path to the item in the addin tree. + The owner used to create the objects. + The path does not + exist or does not point to an item. + + + + Builds the items in the path. Ensures that all items have the type T. + Throws a if the path is not found. + + A path in the addin tree. + The owner used to create the objects. + + + + Builds the items in the path. Ensures that all items have the type T. + + A path in the addin tree. + The owner used to create the objects. + If true, throws a + if the path is not found. If false, an empty ArrayList is returned when the + path is not found. + + + + The specified AddIn is added to the collection. + If the AddIn is enabled, its doozers, condition evaluators and extension + paths are added to the AddInTree and its resources are added to the + . + + + + + The specified AddIn is removed to the collection. + This is only possible for disabled AddIns, enabled AddIns require + a restart of the application to be removed. + + Occurs when trying to remove an enabled AddIn. + + + + Loads a list of .addin files, ensuring that dependencies are satisfied. + This method is normally called by . + + + The list of .addin file names to load. + + + The list of disabled AddIn identity names. + + + + + Represents an extension path in the . + + + + + A dictionary containing the child paths. + + + + + A list of child s. + + + + + Builds the child items in this path. Ensures that all items have the type T. + + The owner used to create the objects. + Additional conditions applied to the node. + + + + Builds the child items in this path. + + The owner used to create the objects. + + + + Builds a specific child items in this path. + + + The ID of the child item to build. + + The owner used to create the objects. + Additional conditions applied to the created object + + Occurs when does not exist in this path. + + + + + Supports sorting codons using InsertBefore/InsertAfter + + + + + Is thrown when the AddInTree could not find the requested path. + + + + + Constructs a new + + + + + Constructs a new + + + + + Constructs a new + + + + + Deserializes a + + + + + Base class for exceptions thrown by the SharpDevelop core. + + + + + Converts a recursive data structure into a flat list. + + The root elements of the recursive data structure. + The function that gets the children of an element. + Iterator that enumerates the tree structure in preorder. + + + + Allows marking the end-time of feature uses. + + Implementations of this interface must be thread-safe. + + + + Allows tracking feature use. + All methods on this class are thread-safe. + + + + + Tracks an exception that has occurred. + + + + + Tracks a feature use. + + Name of the feature + Object that can be used to 'end' the feature use, if measuring time spans is desired. + + + + Tracks a feature use. + + Name of the feature + Method used to 'activate' the feature (e.g. Menu, Toolbar, Shortcut, etc.) + Object that can be used to 'end' the feature use, if measuring time spans is desired. + + + + Tracks a feature use. + + Class containing the feature + Name of the feature + Method used to 'activate' the feature (e.g. Menu, Toolbar, Shortcut, etc.) + Object that can be used to 'end' the feature use, if measuring time spans is desired. + + + + Interface for AnalyticsMonitorService. + + Implementations of this interface must be thread-safe. + + + + LoggingService implementation that logs into a TextWriter. + + + + + IMessageService implementation that writes messages to a text writer. + User input is not implemented by this service. + + + + + Interface for the MessageService. + + + + + Shows an error. + + + + + Shows an exception. + + + + + Shows a warning message. + + + + + Asks the user a Yes/No question, using "Yes" as the default button. + Returns true if yes was clicked, false if no was clicked. + + + + + Shows a custom dialog. + + The title of the dialog. + The description shown in the dialog. + + The number of the button that is the default accept button. + Use -1 if you don't want to have an accept button. + + + The number of the button that is the cancel button. + Use -1 if you don't want to have a cancel button. + + The captions of the buttons. + The number of the button that was clicked, or -1 if the dialog was closed without clicking a button. + + + + Show a message informing the user about a save error. + + + + + Show a message informing the user about a save error, + and allow him to retry/save under alternative name. + + + + + Maintains a list of services that can be shutdown in the reverse order of their initialization. + Maintains references to the core service implementations. + + + + + Gets the static ServiceManager instance. + + + + + Gets a service. Returns null if service is not found. + + + + + Gets a service. Returns null if service is not found. + + + + + Gets a service. Throws an exception if service is not found. + + + + + Gets a service. Throws an exception if service is not found. + + + + + Gets the logging service. + + + + + Gets the message service. + + + + + This service is used to summarize important information + about the state of the application when an exception occurs. + + + + + Registers a new method to be invoked to get information about the current state of the application. + + The title of the new state entry. + The method to be invoked to get the state value. + The is null. + A state getter with the specified is already registered. + + + + Determines whether a state getter with the specified title is already registered. + + The title to look for. + true, if a state getter with the specified title is already registered, otherwise false. + + + + Unregisters a state getter. + + The title of the state entry to remove. + true if the specified title was found and removed, otherwise false. + The is null. + + + + Gets a snapshot of the current application state information from all registered state getters. + + A dictionary with the titles and results of all registered state getters. + + + + Appends the current application state information from all registered state getters + to the specified . + + The to append the state information to. + + + + A delegate used to get information about the current state of the application. + + + + + Represents a directory path or filename. + The equality operator is overloaded to compare for path equality (case insensitive, normalizing paths with '..\') + + + + + Creates a FileName instance from the string. + It is valid to pass null or an empty string to this method (in that case, a null reference will be returned). + + + + + EventArgs with a file name. + + + + + A utility class related to file utilities. + + + A minimal version of FileUtility. Is used by ICSharpCode.SharpDevelop.Dom (which doesn't reference + ICSharpCode.Core) + + + + + Gets the installation root of the .NET Framework (@"C:\Windows\Microsoft.NET\Framework\") + + + + + Location of the .NET 2.0 SDK install root. + + + + + Location of the .NET 3.0 SDK (Windows SDK 6.0) install root. + + + + + Location of the Windows SDK Components in Visual Studio 2008 (.NET 3.5; Windows SDK 6.0a). + + + + + Location of the .NET 3.5 SDK (Windows SDK 6.1) install root. + + + + + Location of the .NET 3.5 SP1 SDK (Windows SDK 7.0) install root. + + + + + Location of the .NET 4.0 SDK (Windows SDK 7.1) install root. + + + + + Searches all the .net sdk bin folders and return the path of the + exe from the latest sdk. + + The EXE to search for. + The path of the executable, or null if the exe is not found. + + + + Converts a given absolute path and a given base path to a path that leads + from the base path to the absoulte path. (as a relative path) + + + + + Combines baseDirectoryPath with relPath and normalizes the resulting path. + + + + + Finds all files which are valid to the mask in the path + and all subdirectories + (if is true). + If is true, hidden files and folders are ignored. + + + + + This method checks if a path (full or relative) is valid. + + + + + Checks that a single directory name (not the full path) is valid. + + + + + Checks that a single directory name (not the full path) is valid. + + + + + Gets the normalized version of fileName. + Slashes are replaced with backslashes, backreferences "." and ".." are 'evaluated'. + + + + + Class with static methods to show message boxes. + All text displayed using the MessageService is passed to the + to replace ${res} markers. + + + + + Shows an exception error. + + + + + Shows an error using a message box. + + + + + Shows an error using a message box. + is first passed through the + , + then through , using the formatitems as arguments. + + + + + Shows an exception. + + + + + Shows an exception. + + + + + Shows an exception. + + + + + Shows a warning message. + + + + + Shows a warning message. + is first passed through the + , + then through , using the formatitems as arguments. + + + + + Asks the user a Yes/No question, using "Yes" as the default button. + Returns true if yes was clicked, false if no was clicked. + + + + + Asks the user a Yes/No question, using "Yes" as the default button. + Returns true if yes was clicked, false if no was clicked. + + + + + Shows a custom dialog. + + The title of the dialog. + The description shown in the dialog. + + The number of the button that is the default accept button. + Use -1 if you don't want to have an accept button. + + + The number of the button that is the cancel button. + Use -1 if you don't want to have a cancel button. + + The captions of the buttons. + The number of the button that was clicked, or -1 if the dialog was closed without clicking a button. + + + + Shows a custom dialog. + + The title of the dialog. + The description shown in the dialog. + The captions of the buttons. + The number of the button that was clicked. + + + + Gets/Sets the name of the product using ICSharpCode.Core. + Is used by the string parser as replacement for ${ProductName}. + + + + + Gets/Sets the default title for message boxes displayed + by the message service. + + + + + This interface flags an object beeing "mementocapable". This means that the + state of the object could be saved to an object + and set from a object from the same class. + This is used to save and restore the state of GUI objects. + + + + + Creates a new memento from the state. + + + + + Sets the state to the given memento. + + + + + Description of PropertyGroup. + + + + Needed for support of late deserialization + + + + returns the changed property object + + + + + The key of the changed property + + + + + The new value of the property + + + + + The new value of the property + + + + + Acquires an exclusive lock on the properties file so that it can be opened safely. + + + + + RegistryService. + + + + + Gets the registry value. + + Registry hive. + Registry key. + Registry value. + Registry kind. + Data. + True, if the data was found, False otherwise. + + + + Is thrown when the GlobalResource manager can't find a requested + resource. + + + + + This Class contains two ResourceManagers, which handle string and image resources + for the application. It do handle localization strings on this level. + + + + English strings (list of resource managers) + + + Neutral/English images (list of resource managers) + + + Hashtable containing the local strings from the main application. + + + Strings resource managers for the current language + + + Image resource managers for the current language + + + List of ResourceAssembly + + + + Registers string resources in the resource service. + + The base name of the resource file embedded in the assembly. + The assembly which contains the resource file. + ResourceService.RegisterStrings("TestAddin.Resources.StringResources", GetType().Assembly); + + + + Registers image resources in the resource service. + + The base name of the resource file embedded in the assembly. + The assembly which contains the resource file. + ResourceService.RegisterImages("TestAddin.Resources.BitmapResources", GetType().Assembly); + + + + Returns a string from the resource database, it handles localization + transparent for the user. + + + The string in the (localized) resource database. + + + The name of the requested resource. + + + Is thrown when the GlobalResource manager can't find a requested resource. + + + + + Is thrown when the ServiceManager cannot find a required service. + + + + + Provides properties by using Reflection on an object. + + + + + This class parses internal ${xyz} tags of #Develop. + All environment variables are avaible under the name env.[NAME] + where [NAME] represents the string under which it is avaiable in + the environment. + + + + + Expands ${xyz} style property values. + + + + + Parses an array and replaces the elements in the existing array. + + + + + Expands ${xyz} style property values. + + + + + For new code, please use the overload taking StringTagPair[]! + + + + + Evaluates a property using the StringParser. Equivalent to StringParser.Parse("${" + propertyName + "}"); + + + + + Allow special syntax to retrieve property values: + ${property:PropertyName} + ${property:PropertyName??DefaultValue} + ${property:ContainerName/PropertyName} + ${property:ContainerName/PropertyName??DefaultValue} + A container is a Properties instance stored in the PropertyService. This is + used by many AddIns to group all their properties into one container. + + + + + Abstract implementation of the interface. + + + + + Returns the owner of the command. + + + + + Invokes the command. + + + + + Invokes a callback when this class is disposed. + + + + + TextWriter that writes into System.Diagnostics.Debug + + + + + A basic command interface. A command has simply an owner which "runs" the command + and a Run method which invokes the command. + + + + + Returns the owner of the command. + + + + + Invokes the command. + + + + + Is called when the Owner property is changed. + + + + + When a doozer returns an object implementing + this interface, the method is called on the list of items + that has been built. + This interface can be used to support special doozers + that do not simply build one item but want to modify the list of items built so far. + Example use is the which uses this interface to return + multiple items instead of one. + + + + + Includes one or multiple items from another location in the addin tree. + You can use the attribute "item" (to include a single item) OR the + attribute "path" (to include all items from the target path). + + + When this attribute is used, the include doozer builds the item that is at the + addin tree location specified by this attribute. + + + When this attribute is used, the include doozer builds all items inside the + path addin tree location specified by this attribute and returns an + which includes all items in the output list. + + Everywhere + + Any object, depending on the included codon(s). + + + + + Gets if the doozer handles codon conditions on its own. + If this property return false, the item is excluded when the condition is not met. + + + + + Class for easy logging. + + + + + Stores information about the manifest of an AddIn. + + + + + Represents a versioned reference to an AddIn. Used by . + + + + Returns true when the reference is valid. + + + + Compares two versions and ignores unspecified fields (unlike Version.CompareTo) + + -1 if a < b, 0 if a == b, 1 if a > b + + + + Class that helps starting up ICSharpCode.Core. + + + Initializing ICSharpCode.Core requires initializing several static classes + and the . does this work + for you, provided you use it like this: + 1. Create a new CoreStartup instance + 2. (Optional) Set the values of the properties. + 3. Call . + 4. Add "preinstalled" AddIns using + and . + 5. (Optional) Call to support + disabling AddIns and installing external AddIns + 6. (Optional) Call to support installing + user AddIns. + 7. Call . + + + + + Sets the name used for the properties (only name, without path or extension). + Must be set before StartCoreServices() is called. + + + + + Sets the directory name used for the property service. + Must be set before StartCoreServices() is called. + Use null to use the default path "%ApplicationData%\%ApplicationName%", + where %ApplicationData% is the system setting for + "c:\documents and settings\username\application data" + and %ApplicationName% is the application name you used in the + CoreStartup constructor call. + + + + + Sets the data directory used to load resources. + Must be set before StartCoreServices() is called. + Use null to use the default path "ApplicationRootPath\data". + + + + + Creates a new CoreStartup instance. + + + The name of your application. + This is used as default title for message boxes, + default name for the configuration directory etc. + + + + + Find AddIns by searching all .addin files recursively in . + The AddIns that were found are added to the list of AddIn files to load. + + + + + Add the specified .addin file to the list of AddIn files to load. + + + + + Use the specified configuration file to store information about + disabled AddIns and external AddIns. + You have to call this method to support the . + + + The name of the file used to store the list of disabled AddIns + and the list of installed external AddIns. + A good value for this parameter would be + Path.Combine(, "AddIns.xml"). + + + + + Configures user AddIn support. + + + The AddIn installation temporary directory. + ConfigureUserAddIns will install the AddIns from this directory and + store the parameter value in . + + + The path where user AddIns are installed to. + AddIns from this directory will be loaded. + + + + + Initializes the AddIn system. + This loads the AddIns that were added to the list, + then it executes the commands + in /Workspace/Autostart. + + + + + Starts the core services. + This initializes the PropertyService and ResourceService. + + + + + Specifies the action to be taken for a specific . + + + + + Enable the . + + + + + Disable the . + + + + + Install the . + + + + + Uninstall the . + + + + + Update the . + + + + + The is disabled because it has been installed + twice (duplicate identity). + + + + + Tells that the cannot be loaded because not all dependencies are satisfied. + + + + + A custom error has occurred (e.g. the AddIn disabled itself using a condition). + + + + + Manages all actions performed on s. + An AddInManager GUI can use the methods here to install/update/uninstall + s. + + There are three types of AddIns: + - Preinstalled AddIns (added by host application) -> can only be disabled + - External AddIns -> can be added, disabled and removed + Removing external AddIns only removes the reference to the .addin file + but does not delete the AddIn. + - User AddIns -> are installed to UserAddInPath, can be installed, disabled + and uninstalled + + + + + Gets or sets the user addin path. + This is the path where user AddIns are installed to. + This property is normally initialized by . + + + + + Gets or sets the addin install temporary directory. + This is a directory used to store AddIns that should be installed on + the next start of the application. + This property is normally initialized by . + + + + + Gets or sets the full name of the configuration file. + In this file, the AddInManager stores the list of disabled AddIns + and the list of installed external AddIns. + This property is normally initialized by . + + + + + Installs the AddIns from AddInInstallTemp to the UserAddInPath. + In case of installation errors, a error message is displayed to the user + and the affected AddIn is added to the disabled list. + This method is normally called by + + + + + Uninstalls the user addin on next start. + schedules the AddIn for + deinstallation, you can unschedule it using + + + The identity of the addin to remove. + + + + Prevents a user AddIn from being uninstalled. + schedules the AddIn for + deinstallation, you can unschedule it using + + + The identity of which to abort the removal. + + + + Adds the specified external AddIns to the list of registered external + AddIns. + + + The list of AddIns to add. (use instances + created by ). + + + + + Removes the specified external AddIns from the list of registered external + AddIns. + + The list of AddIns to remove. + (use external AddIns from the collection). + + + + Marks the specified AddIns as enabled (will take effect after + next application restart). + + + + + Marks the specified AddIns as disabled (will take effect after + next application restart). + + + + + Loads a configuration file. + The 'file' from XML elements in the form "<AddIn file='full path to .addin file'>" will + be added to , the 'addin' element from + "<Disable addin='addin identity'>" will be added to , + all other XML elements are ignored. + + File names of external AddIns are added to this collection. + Identities of disabled addins are added to this collection. + + + + Saves the AddIn configuration in the format expected by + . + + List of file names of external AddIns. + List of Identities of disabled addins. + + + + Creates a string. + + + The string to return. + + + The string specified by 'text', passed through the StringParser. + + + + + Gets if the doozer handles codon conditions on its own. + If this property return false, the item is excluded when the condition is not met. + + +
+
diff --git a/bin/Lib/ABCObjects.xml b/bin/Lib/ABCObjects.xml new file mode 100644 index 000000000..d08279a25 --- /dev/null +++ b/bin/Lib/ABCObjects.xml @@ -0,0 +1,567 @@ + + + Модуль реализует векторные графические объекты с возможностью масштабирования, наложения друг на друга, +создания составных графических объектов и многократного их вложения друг в друга. +Каждый векторный графический объект перерисовывает себя при перемещении, изменении размеров +и частичном перекрытии другими объектами. + + + Контейнер графических объектов. Сам является графическим объектом + + + Создает пустой контейнер графических объектов в позиции (x,y) +Для его наполнения следует использовать метод Add. Координаты всех помещаемых +в него графических объектов пересчитываются относительно точки (x,y) + + + Создает контейнер графических объектов - копию контейнера графических объектов g + + + Добавляет в контейнер графический объект g + + + Удаляет из контейнера графический объект g + + + Отсоединяет от контейнера графический объект g. +Объект g перестает иметь владельца и продолжает отображаться на экране в той же позиции + + + Принадлежит ли точка внутренности одного из графических объектов в контейнере + + + Возвращает клон контейнера графических объектов + + + Возвращает клон контейнера графических объектов + + + Количество графических объектов в контейнере + + + Массив графических объектов в контейнере + + + Базовый класс для всех графических объектов + + + Создает графический объект размера (w,h) цвета cl с координатами левого верхнего угла (x,y) + + + Создает графический объект - копию объекта g + + + Уничтожает графический объект + + + Перемещает левый верхний угол графического объекта к точке (x,y) + + + Перемещает графический объект на вектор (a,b) + + + Перемещает графический объект на вектор, задаваемый свойствами dx,dy + + + Масштабирует графический объект в f раз (f>1 - увеличение, 0<f<1 - уменьшение) + + + Переносит графический объект на передний план + + + Переносит графический объект на задний план + + + Возвращает прямоугольник, определяющий границы графического объекта + + + Возвращает True, если точка (x,y) находится внутри графического объекта, и False в противном случае + + + Возвращает True, если изображение данного графического объекта пересекается с изображением +графического объекта g, и False в противном случае. Белый цвет считается прозрачным и не принадлежащим объекту + + + Возвращает True, если прямоугольник графического объекта пересекается прямоугольником r, и False в противном случае + + + Возвращает клон графического объекта + + + Возвращает клон графического объекта + + + Отступ графического объекта от левого края + + + Отступ графического объекта от верхнего края + + + Ширина графического объекта + + + Высота графического объекта + + + x-координата вектора перемещения объекта при вызове метода Move. +По умолчанию установлено в 0. Для неподвижных объектов может быть использовано +для хранения любой дополнительной информации, связанной с объектом + + + y-координата вектора перемещения объекта при вызове метода Move. +По умолчанию установлено в 0. Для неподвижных объектов может быть использовано +для хранения любой дополнительной информации, связанной с объектом + + + Центр графического объекта + + + Левый верхний угол графического объекта + + + Видим ли графический объект + + + Цвет графического объекта + + + Цвет шрифта графического объекта + + + Текст внутри графического объекта + + + Видимость текста внутри графического объекта + + + Масштаб текста относительно размеров графического объекта, 0<=TextScale<=1. +При TextScale=1 текст занимает всю ширину или высоту объекта. По умолчанию TextScale=0.8 + + + Имя шрифта для вывода свойства Text + + + Стиль шрифта для вывода свойства Text + + + Целое число, выводимое в центре графического объекта. Для вывода используется свойство Text + + + Вещественное число, выводимое в центре графического объекта. Для вывода используется свойство Text. +Вещественное число выводится с одним знаком после десятичной точки + + + Владелец графического объекта, ответственный также за перерисовку графического объекта внутри себя (по умолчанию nil) + + + Базовый класс для всех замкнутых графических объектов + + + Устанавливает атрибуты пера и кисти перед рисованием + + + Создает замкнутый графический объект размера (w,h) цвета cl с координатами левого верхнего угла (x,y) + + + Создает замкнутый графический объект - копию объекта g + + + Цвет границы + + + Ширина границы + + + Заполнена ли внутренность объекта (по умолчанию True) + + + Имеет ли объект границу (по умолчанию True) + + + Класс графических объектов "Прямоугольник" + + + Создает прямоугольник размера (w,h) цвета cl с координатами левого верхнего угла (x,y) + + + Создает прямоугольник - копию прямоугольника g + + + Возвращает клон прямоугольника + + + Возвращает клон прямоугольника + + + Класс графических объектов "Квадрат" + + + Создает квадрат размера w цвета cl с координатами левого верхнего угла (x,y) + + + Создает квадрат - копию квадрата g + + + Масштабирует квадрат в f раз (f>1 - увеличение, 0<f<1 - уменьшение) + + + Возвращает клон квадрата + + + Возвращает клон квадрата + + + Класс графических объектов "Эллипс" + + + Создает эллипс размера (w,h) цвета cl с координатами левого верхнего угла (x,y) + + + Создает эллипс - копию эллипса g + + + Возвращает клон эллипса + + + Возвращает клон эллипса + + + Класс графических объектов "Круг" + + + Создает круг радиуса r цвета cl с координатами центра (x,y) + + + Создает круг - копию круга g + + + Масштабирует круг в f раз (f>1 - увеличение, 0<f<1 - уменьшение) + + + Возвращает клон круга + + + Возвращает клон круга + + + Радиус круга + + + Класс графических объектов "Прямоугольник со скругленными краями" + + + Создает прямоугольник со скругленными краями размера (w,h), цветом cl, радиусом скругления r и координатами левого верхнего угла (x,y) + + + Создает прямоугольник со скругленными краями - копию прямоугольника со скругленными краями g + + + Возвращает клон прямоугольника со скругленными краями + + + Возвращает клон прямоугольника со скругленными краями + + + Радиус скругления углов + + + Класс графических объектов "Квадрат со скругленными краями" + + + Создает квадрат со скругленными краями размера w, цвета cl с радиусом скругления r и координатами левого верхнего угла (x,y) + + + Создает квадрат со скругленными краями - копию квадрата со скругленными краями g + + + Масштабирует квадрат в f раз (f>1 - увеличение, 0<f<1 - уменьшение) + + + Возвращает клон квадрата со скругленными краями + + + Возвращает клон квадрата со скругленными краями + + + Класс графических объектов "Текст" + + + Создает текстовый объект с текстом txt размера pt пунктов, цветом cl и координатами левого верхнего угла (x,y) + + + Создает текстовый объект - копию текстового объекта g + + + Возвращает клон текстового объекта + + + Возвращает клон текстового объекта + + + Размер шрифта в пунктах + + + Прозрачен ли фон текстового объекта + + + Цвет фона текстового объекта + + + Класс графических объектов "Правильный многоугольник" + + + Создает правильный многоугольник с nn вершинами, радиусом r, цветом cl и координатами центра (x,y) + + + Создает правильный многоугольник - копию правильного многоугольника g + + + Находится ли точка (x,y) внутри правильного многоугольника + + + Масштабирует правильный многоугольник в f раз (f>1 - увеличение, 0<f<1 - уменьшение) + + + Возвращает клон правильного многоугольника + + + Возвращает клон правильного многоугольника + + + Количество вершин правильного многоугольника + + + Радиус правильного многоугольника + + + Угол поворота (в градусах) + + + Класс графических объектов "Звезда" + + + Создает звезду с nn вершинами, радиусом r, внутренним радиусом r1, цветом cl и координатами центра (x,y) + + + Создает звезду - копию звезды g + + + Принадлежит ли точка внутренности объекта + + + Масштабирует звезду в f раз (f>1 - увеличение, 0<f<1 - уменьшение) + + + Возвращает клон звезды + + + Возвращает клон звезды + + + Внутренний радиус + + + Класс графических объектов "Рисунок" + + + Создает рисунок с координатами левого верхнего угла (x,y), считывая его из файла fname + + + Создает рисунок с координатами левого верхнего угла (x,y), считывая его из объекта p + + + Создает рисунок - копию рисунка g + + + Меняет изображение рисунка, считывая его из файла fname + + + Меняет изображение рисунка, считывая его из объекта p + + + Сохраняет рисунок в файл fname + + + Зеркально отображает рисунок относительно вертикальной оси + + + Зеркально отображает рисунок относительно горизонтальной оси + + + Возвращает клон рисунка + + + Возвращает клон рисунка + + + Прозрачен ли рисунок + + + Цвет, считающийся прозрачным + + + Масштаб рисунка по оси X относительно исходного изображения. При отрицательных значениях +происходит зеркальное отражение относительно вертикальной оси + + + Масштаб рисунка по оси Y относительно исходного изображения. При отрицательных значениях +происходит зеркальное отражение относительно вертикальной оси + + + Класс графических объектов "Набор рисунков" + + + Создает набор рисунков, состоящий из одного рисунка, загружая его из файла с именем fname. +После создания рисунок отображается на экране в позиции (x,y). Остальные рисунки добавляются методом Add + + + Создает набор рисунков, состоящий из одного рисунка, хранящегося в переменной p +После создания рисунок отображается на экране в позиции (x,y). Остальные рисунки добавляются методом Add + + + Создает набор рисунков из объекта p типа Picture. Объект p должен хранить +последовательность изображений одного размера, расположенных по горизонтали. +Каждое изображение считается имеющим ширину w. Если ширина рисунка в объекте p не кратна w, +то возникает исключение. После создания первый рисунок из набора отображается на экране в позиции (x,y) + + + Создает набор рисунков, загружая его из файла fname. Файл должен хранить +последовательность изображений одного размера, расположенных по горизонтали. +Каждое изображение считается имеющим ширину w. Если ширина рисунка в файле fname не кратна w, +то возникает исключение. После создания первый рисунок из набора отображается на экране в позиции (x,y) + + + Создает набор рисунков - копию набора рисунков g + + + Добавляет рисунок к набору, загружая его из файла fname. + Рисунок должен иметь те же размеры, что и все рисунки из набора + + + Меняет набор рисунков на набор, состоящий из одного рисунка, загружая его из файла с именем fname + + + Меняет набор рисунков на набор, загружая его из файла с именем fname. +Файл должен хранить последовательность изображений одного размера, +расположенных по горизонтали. Каждое изображение считается имеющим ширину w + + + Циклически переходит к следующему рисунку из набора + + + Циклически переходит к предыдующему рисунку из набора + + + Возвращает клон набора рисунков + + + Возвращает клон набора рисунков + + + Номер текущего рисунка (нумерация с 1) + + + Количество рисунков в наборе + + + Класс графических объектов "Доска" + + + Создает доску nx на ny клеток цвета cl с размером клетки (ssxx,ssyy) в позиции (x,y). + + + Создает доску - копию доски g + + + Возвращает клон доски + + + Возвращает клон доски + + + Количество клеток доски по горизонтали + + + Количество клеток доски по вертикали + + + Размер клетки по горизонтали + + + Размер клетки по вертикали + + + Класс графических объектов "Доска с объектами" + + + Создает доску с объектами nx на ny клеток цвета cl с размером клетки (ssxx,ssyy) в позиции (x,y). + + + Создает доску с объектами - копию доски g + + + Удаляет объект в клетке с координатами (x,y) + + + Меняет местами объекты в клетках с координатами (x1,y1) и (x2,y2) + + + Возвращает клон доски с объектами + + + Возвращает клон доски с объектами + + + Объект в клетке с координатами (x,y) + + + Тип элемента управления ABCObject + + + Тип массива графических объектов + + + i-тый графический объект на экране + + + Количество графических объектов на экране + + + Блокирует рисование графических объектов. Возможна лишь перерисовка +всего экрана вместе со всеми графическими объектами на нем вызовом RedrawObjects + + + Разблокирует рисование графических объектов + + + Перерисовывает все графическое окно вместе со всеми графическими объектами на нем + + + Переносит графический объект g на передний план + + + Переносит графический объект g на задний план + + + Количество графических объектов + + + Графический объект под точкой (x,y) + + + Графический объект под точкой p + + + Поменять позиции графических объектов o1 и o2 + + + Элемент управления ABCObject под точкой (x,y) + + + -- + + + Массив графических объектов + + + \ No newline at end of file diff --git a/bin/Lib/CRT.xml b/bin/Lib/CRT.xml new file mode 100644 index 000000000..f6e7029af --- /dev/null +++ b/bin/Lib/CRT.xml @@ -0,0 +1,97 @@ + + + <summary> + Модуль для работы с консолью + </summary> + + + + Задает заголовок консольного окна + + Заголовок консольного окна + + + Задает заголовок консольного окна + + Заголовок консольного окна + + + Показывает курсор если он скрыт + + + + + Скрывает курсор + + + + + Считыват нажатую клавишу + + + + + Возвращает true если была нажата клавиша. Считать символ можно спомощью функции ReadKey + + + + + Возвращает ширину экрана + + + + + Возвращает высоту экрана + + + + + Возвращает Х-координату курсора + + + + + Возвращает Y-координату курсора + + + + + Переводит курсор в координаты (x,y) + + + + + Задает размеры консольного окна + + Ширина + Высота + + + Очищает экран, заполняя его текущим цветом фона + + + + + Задает цвет фона выводимого текста + + Цвет фона + + + Задает цвет выводимого текста + + Цвет текста + + + Очищает линию на которой установлен курсор + + + + + Делает паузу на ms миллисекунд + + + + -- + + + \ No newline at end of file diff --git a/bin/Lib/GraphABC.xml b/bin/Lib/GraphABC.xml new file mode 100644 index 000000000..ebb28a911 --- /dev/null +++ b/bin/Lib/GraphABC.xml @@ -0,0 +1,915 @@ + + + Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне + + + Тип исключения GraphABC + + + Тип пера GraphABC + + + Текущее перо .NET + + + Цвет пера + + + Ширина пера + + + Стиль пера + + + Режим пера + + + X-координата текущей позиции пера + + + Y-координата текущей позиции пера + + + Режим закругленных концов линий + + + Тип кисти GraphABC + + + Текущая кисть .NET + + + Цвет кисти + + + Стиль кисти + + + Штриховка кисти + + + Цвет заднего плана штриховой кисти + + + Второй цвет градиентной кисти + + + Тип шрифта GraphABC + + + Текущий шрифт .NET + + + Цвет шрифта + + + Стиль шрифта + + + Размер шрифта в пунктах + + + Наименование шрифта + + + Устанавливает параметры системы координат + + + Устанавливает начало системы координат + + + Устанавливает масштаб системы координат + + + Устанавливает масштаб системы координат + + + Устанавливает правую систему координат (ось OY направлена вверх, ось OX - вправо) + + + Устанавливает левую систему координат (ось OY направлена вниз, ось OX - вправо) + + + X-координата начала координат относительно левого верхнего угла окна + + + Y-координата начала координат относительно левого верхнего угла окна + + + Координаты начала координат относительно левого верхнего угла окна + + + Угол поворота системы координат + + + Масштаб системы координат по оси X + + + Масштаб системы координат по оси Y + + + Масштаб системы координат по обоим осям + + + Матрица 3x3 преобразований координат + + + Очищает графическое окно белым цветом + + + Очищает графическое окно цветом c + + + Устанавливает размеры клиентской части графического окна в пикселах + + + Устанавливает отступ графического окна от левого верхнего края экрана в пикселах + + + Устанавливает положение, размеры и цвет графического окна + + + Сохраняет содержимое графического окна в файл с именем fname + + + Восстанавливает содержимое графического окна из файла с именем fname + + + Заполняет содержимое графического окна обоями из файла с именем fname + + + Закрывает графическое окно и завершает приложение + + + Сворачивает графическое окно + + + Максимизирует графическое окно + + + Возвращает графическое окно к нормальному размеру + + + Центрирует графическое окно по центру экрана + + + Возвращает центр графического окна + + + Отступ графического окна от левого края экрана в пикселах + + + Отступ графического окна от верхнего края экрана в пикселах + + + Ширина клиентской части графического окна в пикселах + + + Высота клиентской части графического окна в пикселах + + + Заголовок графического окна + + + Заголовок графического окна + + + Имеет ли графическое окно фиксированный размер + + + Тип рисунка GraphABC + + + Создает рисунок размера w на h пикселей + + + Создает рисунок из файла с именем fname + + + Создает рисунок из прямоугольника r графического окна + + + Загружает рисунок из файла с именем fname + + + Сохраняет рисунок в файл с именем fname + + + Устанавливает размер рисунка w на h пикселей + + + Возвращает True, если изображение данного рисунка пересекается с изображением рисунка p, и False в противном случае. Белый цвет считается прозрачным + + + Выводит рисунок в позиции (x,y) + + + Выводит рисунок в позиции (x,y) на поверхность рисования g + + + Выводит рисунок в позиции (x,y), масштабируя его к размеру (w,h) + + + Выводит рисунок в позиции (x,y), масштабируя его к размеру (w,h), на поверхность рисования g + + + Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y) + + + Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y) на поверхность рисования g + + + Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y), масштабируя его к размеру (w,h) + + + Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y), масштабируя его к размеру (w,h), на поверхность рисования g + + + Выводит рисунок, повернутый на угол rotateAngle, масштабируя его к размеру (w,h) + + + Копирует прямоугольник src рисунка p в прямоугольник dst текущего рисунка + + + Копирует прямоугольник src битового образа bmp в прямоугольник dst текущего рисунка + + + Зеркально отображает рисунок относительно горизонтальной оси симметрии + + + Зеркально отображает рисунок относительно вертикальной оси симметрии + + + Закрашивает пиксел (x,y) рисунка цветом c + + + Закрашивает пиксел (x,y) рисунка цветом c + + + Возвращает цвет пиксела (x,y) рисунка + + + Выводит на рисунке отрезок от точки (x1,y1) до точки (x2,y2) + + + Выводит на рисунке отрезок от точки (x1,y1) до точки (x2,y2) цветом c + + + Заполняет на рисунке внутренность окружности с центром (x,y) и радиусом r + + + Выводит на рисунке окружность с центром (x,y) и радиусом r + + + Заполняет на рисунке внутренность эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) + + + Выводит на рисунке границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) + + + Заполняет на рисунке внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) + + + Заполняет на рисунке внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) + + + Выводит на рисунке границу ы прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) + + + Выводит на рисунке заполненную окружность с центром (x,y) и радиусом r + + + Выводит на рисунке заполненный эллипс, ограниченный прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) + + + Выводит на рисунке заполненный прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2) + + + Выводит на рисунке заполненный прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев + + + Выводит на рисунке дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) + + + Заполняет на рисунке внутренность сектора окружности, ограниченного дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) + + + Выводит на рисунке сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) + + + Выводит на рисунке заполненный сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) + + + Выводит на рисунке замкнутую ломаную по точкам, координаты которых заданы в массиве points + + + Заполняет на рисунке многоугольник, координаты вершин которого заданы в массиве points + + + Выводит на рисунке заполненный многоугольник, координаты вершин которого заданы в массиве points + + + Выводит на рисунке ломаную по точкам, координаты которых заданы в массиве points + + + Выводит на рисунке кривую по точкам, координаты которых заданы в массиве points + + + Выводит на рисунке замкнутую кривую по точкам, координаты которых заданы в массиве points + + + Заполняет на рисунке замкнутую кривую по точкам, координаты которых заданы в массиве points + + + Выводит на рисунке заполненную замкнутую кривую по точкам, координаты которых заданы в массиве points + + + Выводит на рисунке строку s в прямоугольник к координатами левого верхнего угла (x,y) + + + Заливает на рисунке область одного цвета цветом c, начиная с точки (x,y). + + + Очищает рисунок белым цветом + + + Очищает рисунок цветом c + + + Ширина рисунка в пикселах + + + Высота рисунка в пикселах + + + Прозрачность рисунка; прозрачный цвет задается свойством TransparentColor + + + Прозрачный цвет рисунка. Должна быть установлена прозрачность Transparent := True + + + Тип цвета + + + Тип стиля штриховки кисти + + + Тип стиля штриховки пера + + + Тип точки + + + Закрашивает пиксел с координатами (x,y) цветом c + + + Закрашивает пиксел с координатами (x,y) цветом c + + + Возвращает цвет пиксела с координатами (x,y) + + + Устанавливает текущую позицию рисования в точку (x,y) + + + Перемещает текущую позицию рисования на вектор (dx,dy) + + + Рисует отрезок от текущей позиции до точки (x,y). Текущая позиция переносится в точку (x,y) + + + Рисует отрезок от текущей позиции до точки (x,y) цветом c. Текущая позиция переносится в точку (x,y) + + + Рисует отрезок от текущей позиции до точки, смещённой на вектор (dx,dy). Текущая позиция переносится в новую точку + + + Рисует отрезок цветом c от текущей позиции до точки, смещённой на вектор (dx,dy). Текущая позиция переносится в новую точку + + + Рисует отрезок от точки (x1,y1) до точки (x2,y2) + + + Рисует отрезок от точки p1 до точки p2 + + + Рисует отрезок от точки (x1,y1) до точки (x2,y2) цветом c + + + Рисует отрезок от точки p1 до точки p2 цветом c + + + Заполняет внутренность окружности с центром (x,y) и радиусом r + + + Рисует окружность с центром (x,y) и радиусом r + + + Заполняет внутренность эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) + + + Рисует границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) + + + Заполняет внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) + + + Заполняет внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) + + + Рисует границу прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) + + + Заполняет внутренность прямоугольника со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев + + + Рисует границу прямоугольника со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев + + + Рисует заполненную окружность с центром (x,y) и радиусом r + + + Рисует заполненный эллипс, ограниченный прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) + + + Рисует заполненный прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2) + + + Рисует заполненный прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев + + + Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) + + + Заполняет внутренность сектора окружности, ограниченного дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) + + + Рисует сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) + + + Рисует заполненный сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) + + + Возвращает точку на плоскости с координатами (x,y) + + + Рисует замкнутую ломаную по точкам, координаты которых заданы в массиве points + + + Рисует замкнутую ломаную по точкам, координаты которых заданы в массиве points + + + Заполняет многоугольник, координаты вершин которого заданы в массиве points + + + Заполняет многоугольник, координаты вершин которого заданы в массиве points + + + Рисует заполненный многоугольник, координаты вершин которого заданы в массиве points + + + Рисует заполненный многоугольник, координаты вершин которого заданы в массиве points + + + Рисует ломаную по точкам, координаты которых заданы в массиве points + + + Рисует ломаную по точкам, координаты которых заданы в массиве points + + + Рисует кривую по точкам, координаты которых заданы в массиве points + + + Рисует кривую по точкам, координаты которых заданы в массиве points + + + Рисует замкнутую кривую по точкам, координаты которых заданы в массиве points + + + Рисует замкнутую кривую по точкам, координаты которых заданы в массиве points + + + Заполняет замкнутую кривую по точкам, координаты которых заданы в массиве points + + + Заполняет замкнутую кривую по точкам, координаты которых заданы в массиве points + + + Рисует заполненную замкнутую кривую по точкам, координаты которых заданы в массиве points + + + Рисует заполненную замкнутую кривую по точкам, координаты которых заданы в массиве points + + + Выводит строку s в прямоугольник к координатами левого верхнего угла (x,y) + + + Выводит целое n в прямоугольник к координатами левого верхнего угла (x,y) + + + Выводит вещественное r в прямоугольник к координатами левого верхнего угла (x,y) + + + Выводит строку s, отцентрированную в прямоугольнике с координатами (x,y,x1,y1) + + + Выводит целое значение n, отцентрированное в прямоугольнике с координатами (x,y,x1,y1) + + + Выводит вещественное значение r, отцентрированное в прямоугольнике с координатами (x,y,x1,y1) + + + Выводит строку s, отцентрированное по точке с координатами (x,y) + + + Выводит целое n, отцентрированное по точке с координатами (x,y) + + + Выводит вещественное r, отцентрированное по точке с координатами (x,y) + + + Заливает область одного цвета цветом c, начиная с точки (x,y). + + + Возвращает цвет, который содержит красную (r), зеленую (g) и синюю (b) составляющие (r,g и b - в диапазоне от 0 до 255) + + + Возвращает цвет, который содержит красную (r), зеленую (g) и синюю (b) составляющие и прозрачность (a) (a,r,g,b - в диапазоне от 0 до 255) + + + Возвращает красный цвет с интенсивностью r (r - в диапазоне от 0 до 255) + + + Возвращает зеленый цвет с интенсивностью g (g - в диапазоне от 0 до 255) + + + Возвращает синий цвет с интенсивностью b (b - в диапазоне от 0 до 255) + + + Возвращает случайный цвет + + + Возвращает красную составляющую цвета + + + Возвращает зеленую составляющую цвета + + + Возвращает синюю составляющую цвета + + + Возвращает составляющую прозрачности цвета + + + Устанавливает цвет текущего пера + + + Возвращает цвет текущего пера + + + Устанавливает ширину текущего пера + + + Возвращает ширину текущего пера + + + Устанавливает стиль текущего пера + + + Возвращает стиль текущего пера + + + Устанавливает режим текущего пера + + + Возвращает режим текущего пера + + + Устанавливает или отменяет режим закругленных концов линий + + + Возвращает truе, если установлен режим закругленных концов линий + + + Возвращают x-координату текущей позиции рисования + + + Возвращают y-координату текущей позиции рисования + + + Устанавливает цвет текущей кисти + + + Возвращает цвет текущей кисти + + + Устанавливает цвет текущей кисти + + + Возвращает цвет текущей кисти + + + Устанавливает штриховку текущей кисти + + + Возвращает штриховку текущей кисти + + + Устанавливает цвет заднего плана текущей штриховой кисти + + + Возвращает цвет заднего плана текущей штриховой кисти + + + Устанавливает второй цвет текущей градиентной кисти + + + Возвращает второй цвет текущей градиентной кисти + + + Устанавливает размер текущего шрифта в пунктах + + + Возвращает размер текущего шрифта в пунктах + + + Устанавливает имя текущего шрифта + + + Возвращает имя текущего шрифта + + + Устанавливает цвет текущего шрифта + + + Возвращает цвет текущего шрифта + + + Устанавливает стиль текущего шрифта + + + Возвращает стиль текущего шрифта + + + Возвращает ширину строки s в пикселях при текущих настройках шрифта + + + Возвращает высоту строки s в пикселях при текущих настройках шрифта + + + Очищает графическое окно белым цветом + + + Очищает графическое окно цветом c + + + Возвращает ширину клиентской части графического окна в пикселах + + + Возвращает высоту клиентской части графического окна в пикселах + + + Возвращает отступ графического окна от левого края экрана в пикселах + + + Возвращает отступ графического окна от верхнего края экрана в пикселах + + + Возвращает центр графического окна + + + Возвращает True, если графическое окно имеет фиксированный размер, и False в противном случае + + + Устанавливает ширину клиентской части графического окна в пикселах + + + Устанавливает высоту клиентской части графического окна в пикселах + + + Устанавливает отступ графического окна от левого края экрана в пикселах + + + Устанавливает отступ графического окна от верхнего края экрана в пикселах + + + Устанавливает, имеет ли графическое окно фиксированный размер + + + Устанавливает размеры клиентской части графического окна в пикселах + + + Устанавливает отступ графического окна от левого верхнего края экрана в пикселах + + + Возвращает ширину графического компонента в пикселах (по умолчанию совпадает с WindowWidth) + + + Возвращает высоту графического компонента в пикселах (по умолчанию совпадает с WindowHeight) + + + Возвращает отступ графического компонента от левого края окна в пикселах + + + Возвращает отступ графического компонента от верхнего края окна в пикселах + + + Возвращает заголовок графического окна + + + Возвращает заголовок графического окна + + + Устанавливает заголовок графического окна + + + Устанавливает заголовок графического окна + + + Устанавливает ширину и высоту клиентской части графического окна в пикселах + + + Сохраняет содержимое графического окна в файл с именем fname + + + Восстанавливает содержимое графического окна из файла с именем fname + + + Заполняет содержимое графического окна обоями из файла с именем fname + + + Закрывает графическое окно и завершает приложение + + + Возвращает ширину экрана в пикселях + + + Возвращает высоту экрана в пикселях + + + Центрирует графическое окно по центру экрана + + + Максимизирует графическое окно + + + Сворачивает графическое окно + + + Возвращает графическое окно к нормальному размеру + + + Перерисовывает содержимое графического окна. Вызывается в паре с LockDrawing + + + -- + + + Блокирует рисование на графическом окне. Перерисовка графического окна выполняется с помощью Redraw + + + Снимает блокировку рисования на графическом окне и осуществляет его перерисовку + + + Устанавливает режим сглаживания + + + Включает режим сглаживания + + + Выключает режим сглаживания + + + Возвращает True, если режим сглаживания установлен + + + Блокирует прорисовку графики. Вызывается для синхронизации + + + Разблокирует прорисовку графики. Вызывается для синхронизации + + + Устанавливает начало координат в точку (x0,y0) + + + Устанавливает масштаб системы координат + + + Устанавливает поворот системы координат + + + Возвращает прямоугольник, заданный координатами противоположных вершин + + + Возвращает прямоугольник клиентской части главного окна + + + Коэффициент масштабирования экрана + + + Размер экрана в пикселах + + + Рисует график функции f, заданной на отрезке [a,b] по оси абсцисс и на отрезке [min,max] по оси ординат, в прямоугольнике, задаваемом координатами x1,y1,x2,y2, + + + Рисует график функции f, заданной на отрезке [a,b] по оси абсцисс и на отрезке [min,max] по оси ординат, в прямоугольнике r + + + Рисует график функции f, заданной на отрезке [a,b] по оси абсцисс и на отрезке [min,max] по оси ординат, на полное графическое окно + + + Рисует график функции f, заданной на отрезке [a,b], в прямоугольнике, задаваемом координатами x1,y1,x2,y2, + + + Рисует график функции f, заданной на отрезке [a,b], в прямоугольнике r + + + Рисует график функции f, заданной на отрезке [-5,5], в прямоугольнике r + + + Рисует график функции f, заданной на отрезке [a,b], на полное графическое окно + + + Рисует график функции f, заданной на отрезке [-5,5], на полное графическое окно + + + Выводит растровое изображение из файла с именем fname в позицию x,y + + + Выводит растровое изображение из файла с именем fname в позицию x,y, масштабируя его к размеру w на h + + + Выводит растровое изображение из файла с именем fname в позицию x,y, масштабируя его с коэффициентом Scale + + + Инициализирует графическое окно. Используется для внутренних целей + + + Создает рисунок размера w на h пикселов и записывает его в переменную p + + + Возвращает окно графического приложения + + + Возвращает главную форму графического приложения + + + Возвращает графический компонент + + + Возвращает текущее перо + + + Возвращает текущую кисть + + + Возвращает текущий шрифт + + + Возвращает систему координат GraphABC + + + Строка статуса + + + Устанавливает консольный ввод-вывод + + + Устанавливает ввод-вывод через графическое окно (по умолчанию) + + + -- + + + Событие нажатия на кнопку мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши + + + Событие отжатия кнопки мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 1, если отжата левая кнопка мыши, и 2, если отжата правая кнопка мыши + + + Событие перемещения мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 0, если кнопка мыши не нажата, 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши + + + Событие нажатия клавиши + + + Событие отжатия клавиши + + + Событие нажатия символьной клавиши + + + Событие изменения размера графического окна + + + Событие закрытия графического окна + + + Процедурная переменная перерисовки графического окна. Если равна nil, то используется стандартная перерисовка + + + Следует ли рисовать во внеэкранном буфере + + + \ No newline at end of file diff --git a/bin/Lib/PABCSystem.xml b/bin/Lib/PABCSystem.xml new file mode 100644 index 000000000..6bb762c4d --- /dev/null +++ b/bin/Lib/PABCSystem.xml @@ -0,0 +1,4322 @@ + + + Стандартный модуль + !! System unit + + + Интерфейс подсистемы ввода/вывода + + + Стандартная подсистема ввода-вывода + + + Тип текстового файла + + + Возвращает значение типа integer, введенное из текстового файла + + + Возвращает значение типа real, введенное из текстового файла + + + Возвращает значение типа char, введенное из текстового файла + + + Возвращает значение типа string, введенное из текстового файла, без перехода на следующую строку + + + Возвращает значение типа boolean, введенное из текстового файла + + + Возвращает слово, введенное из текстового файла + + + Возвращает значение типа integer, введенное из текстового файла, и переходит на следующую строку + + + Возвращает значение типа real, введенное из текстового файла, и переходит на следующую строку + + + Возвращает значение типа char, введенное из текстового файла, и переходит на следующую строку + + + Возвращает значение типа string, введенное из текстового файла, и переходит на следующую строку + + + Возвращает значение типа boolean, введенное из текстового файла, и переходит на следующую строку + + + Переходит в файле на следующую строку + + + Записывает в текстовый файл значения + + + Записывает в текстовый файл значения и переходит на следующую строку + + + Записывает в текстовый файл значения, разделяя их пробелами + + + Записывает в текстовый файл значения, разделяя их пробелами, и переходит на следующую строку + + + Возвращает True, если достигнут конец файла, и False в противном случае + + + Возвращает True, если достигнут конец строки, и False в противном случае + + + Закрывает файл + + + Пропускает пробельные символы, после чего возвращает True, если достигнут конец файла + + + Пропускает пробельные символы, после чего возвращает True, если достигнут конец строки в файле + + + Записывает содержимое буфера файла на диск + + + Удаляет файл + + + Переименовывает файл, давая ему имя newname + + + Возвращает имя файла + + + Возвращает полное имя файла + + + Возвращает в виде строки содержимое файла от текущего положения до конца + + + Открывает текстовый файл на чтение в кодировке Windows + + + Открывает текстовый файл на чтение в указанной кодировке + + + Открывает текстовый файл на запись в кодировке Windows + + + Открывает текстовый файл на запись в указанной кодировке + + + Открывает текстовый файл на дополнение в кодировке Windows + + + Открывает текстовый файл на дополнение в указанной кодировке + + + Возвращает последовательность строк открытого текстового файла + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + Закрывает файл + + + Усекает двоичный файл, отбрасывая все элементы с позиции файлового указателя + + + Возвращает True, если достигнут конец файла + + + Удаляет файл + + + Переименовывает файл, давая ему имя newname + + + - f.Write(a,b,...) + Выводит значения a,b,... в двоичный файл + + + Открывает существующий двоичный файл на чтение и запись. Устанавливает файловый указатель на начало файла + + + Открывает двоичный файл на чтение и запись. Если файл не существовал, он создаётся, если существовал, он обнуляется + + + Возвращает имя файла + + + Возвращает полное имя файла + + + -- + + + Возвращает количество элементов в типизированном файле + + + Устанавливает текущую позицию файлового указателя в типизированном файле на элемент с номером n + + + Возвращает или устанавливает текущую позицию файлового указателя в типизированном файле + + + -- + + + Открывает существующий бестиповой файл на чтение и запись в указанной кодировке + + + Открывает существующий бестиповой файл на чтение и запись в указанной кодировке. Если файл не существовал, он создаётся, если существовал, он обнуляется + + + Возвращает количество байт в бестиповом файле + + + Устанавливает текущую позицию файлового указателя в бестиповом файле на байт с номером n + + + Записывает данные из байтового массива в бестиповой файл + + + Считывает указанное количество байтов из бестипового файла в байтовый массив + + + Считывает целое из бестипового файла + + + Считывает логическое из бестипового файла + + + Считывает байт из бестипового файла + + + Считывает символ из бестипового файла + + + Считывает вещественное из бестипового файла + + + Считывает строку из бестипового файла + + + Сериализует объект в файл (объект должен иметь атрибут [Serializable]) + + + Десериализует объект из файла + + + Возвращает или устанавливает текущую позицию файлового указателя в бестиповом файле + + + Тип диапазона целых + + + Возвращает True если диапазон пуст + + + Тип диапазона символов + + + Возвращает True если диапазон пуст + + + Тип диапазона вещественных + + + Возвращает True если диапазон пуст + + + Тип для представления индекса + + + Базовый класс для исключений, бросаемых при создании инстанции generic-типа + + + Бросается если тип непригоден для указателей + + + Бросается если тип непригоден для типизированных файлов + + + Бросается если тип непригоден для бинарных файлов + + + -- + + + -- + + + -- + + + Класс атрибута форматирования текста + + + -- + + + Базовый тип объектов + + + Базовый тип исключений + + + double = real + + + longint = integer + + + cardinal = longword + + + Представляет 128-битное вещественное число + !! Represents a decimal number + + + Представляет произвольно большое целое число + + + Представляет дату и время + + + Представляет комплексное число + + + Представляет кортеж + + + Представляет изменяемую строку символов + + + Тип кодировки символов + + + Класс, управляющий консольным окном и консольным вводом-выводом + + + Класс, управляющий сборкой мусора + + + Представляет действие без параметров + + + Представляет функцию с одним параметром целого типа, возвращающую целое + + + Представляет функцию с одним параметром вещественного типа, возвращающую вещественное + + + Представляет функцию с одним параметром строкового типа, возвращающую строку + + + Представляет регулярное выражение + + + Представляет результаты из отдельного совпадения регулярного выражения + + + Представляет метод, вызываемый при обнаружении совпадения в Regex.Replace + + + Представляет набор успешных совпадений регулярного выражения + + + Представляет параметры регулярного выражения + + + Представляет результаты из одной группы при выполнении Regex.Match + + + Представляет результаты из набора групп при выполнении Regex.Match + + + Предоставляет методы для точного измерения затраченного времени + + + Преобразует значение одного базового типа к другому базовому типу + + + Указывает на возможность сериализации класса + + + Указывает, что поле сериализуемого класса не должно быть сериализовано + + + Представляет тип короткой строки фиксированной длины 255 символов + + + Тип текстового файла + + + - procedure Read(a,b,...); + Вводит значения a,b,... с клавиатуры + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + - procedure Readln(a,b,...); + Вводит значения a,b,... с клавиатуры и осуществляет переход на следующую строку + + + - function TryRead(var x: число): boolean; + Вводит числовое значение x с клавиатуры. Возвращает False если при вводе произошла ошибка + + + - function TryRead(var x: число; message: string): boolean; + Выводит приглашение к вводу и вводит числовое значение x с клавиатуры. Возвращает False если при вводе произошла ошибка + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + Вводит логическое значение x с клавиатуры. Возвращает False если при вводе произошла ошибка + + + Возвращает значение типа integer, введенное с клавиатуры + + + Возвращает значение типа int64, введенное с клавиатуры + + + Возвращает значение типа real, введенное с клавиатуры + + + Возвращает значение типа char, введенное с клавиатуры + + + Возвращает значение типа string, введенное с клавиатуры + + + Возвращает значение типа boolean, введенное с клавиатуры + + + Возвращает значение типа BigInteger, введенное с клавиатуры + + + Возвращает следующую лексему + + + Возвращает значение типа integer, введенное с клавиатуры, и переходит на следующую строку ввода + + + Возвращает значение типа int64, введенное с клавиатуры, и переходит на следующую строку ввода + + + Возвращает значение типа real, введенное с клавиатуры, и переходит на следующую строку ввода + + + Возвращает значение типа char, введенное с клавиатуры, и переходит на следующую строку ввода + + + Возвращает значение типа string, введенное с клавиатуры, и переходит на следующую строку ввода + + + Возвращает значение типа boolean, введенное с клавиатуры, и переходит на следующую строку ввода + + + Возвращает значение типа BigInteger, введенное с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из двух значений типа integer, введенных с клавиатуры + + + Возвращает кортеж из двух значений типа real, введенных с клавиатуры + + + Возвращает кортеж из двух значений типа char, введенных с клавиатуры + + + Возвращает кортеж из двух значений типа string, введенных с клавиатуры + + + Возвращает кортеж из двух значений типа integer, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из двух значений типа real, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из двух значений типа char, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из двух значений типа string, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из трёх значений типа integer, введенных с клавиатуры + + + Возвращает кортеж из трёх значений типа real, введенных с клавиатуры + + + Возвращает кортеж из трёх значений типа char, введенных с клавиатуры + + + Возвращает кортеж из трёх значений типа string, введенных с клавиатуры + + + Возвращает кортеж из трёх значений типа integer, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из трёх значений типа real, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из трёх значений типа char, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из трёх значений типа string, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из четырёх значений типа integer, введенных с клавиатуры + + + Возвращает кортеж из четырёх значений типа real, введенных с клавиатуры + + + Возвращает кортеж из четырёх значений типа char, введенных с клавиатуры + + + Возвращает кортеж из четырёх значений типа string, введенных с клавиатуры + + + Возвращает кортеж из четырёх значений типа integer, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из четырёх значений типа real, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из четырёх значений типа char, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из четырёх значений типа string, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из двух значений типа integer, введенных с клавиатуры + + + Возвращает кортеж из двух значений типа real, введенных с клавиатуры + + + Возвращает кортеж из двух значений типа char, введенных с клавиатуры + + + Возвращает кортеж из двух значений типа string, введенных с клавиатуры + + + Возвращает кортеж из двух значений типа integer, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из двух значений типа real, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из двух значений типа char, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из двух значений типа string, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из трёх значений типа integer, введенных с клавиатуры + + + Возвращает кортеж из трёх значений типа real, введенных с клавиатуры + + + Возвращает кортеж из трёх значений типа char, введенных с клавиатуры + + + Возвращает кортеж из трёх значений типа string, введенных с клавиатуры + + + Возвращает кортеж из трёх значений типа integer, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из трёх значений типа real, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из трёх значений типа char, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из трёх значений типа string, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из четырёх значений типа integer, введенных с клавиатуры + + + Возвращает кортеж из четырёх значений типа real, введенных с клавиатуры + + + Возвращает кортеж из четырёх значений типа char, введенных с клавиатуры + + + Возвращает кортеж из четырёх значений типа string, введенных с клавиатуры + + + Возвращает кортеж из четырёх значений типа integer, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из четырёх значений типа real, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из четырёх значений типа char, введенных с клавиатуры, и переходит на следующую строку ввода + + + Возвращает кортеж из четырёх значений типа string, введенных с клавиатуры, и переходит на следующую строку ввода + + + Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры + + + Выводит приглашение к вводу и возвращает значение типа int64, введенное с клавиатуры + + + Выводит приглашение к вводу и возвращает значение типа real, введенное с клавиатуры + + + Выводит приглашение к вводу и возвращает значение типа char, введенное с клавиатуры + + + Выводит приглашение к вводу и возвращает значение типа string, введенное с клавиатуры + + + Выводит приглашение к вводу и возвращает значение типа boolean, введенное с клавиатуры + + + Выводит приглашение к вводу и возвращает значение типа BigInteger, введенное с клавиатуры + + + Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры, +и осуществляет переход на следующую строку ввода + + + Выводит приглашение к вводу и возвращает значение типа int64, введенное с клавиатуры, +и осуществляет переход на следующую строку ввода + + + Выводит приглашение к вводу и возвращает значение типа real, введенное с клавиатуры, +и осуществляет переход на следующую строку ввода + + + Выводит приглашение к вводу и возвращает значение типа char, введенное с клавиатуры, +и осуществляет переход на следующую строку ввода + + + Выводит приглашение к вводу и возвращает значение типа string, введенное с клавиатуры, +и осуществляет переход на следующую строку ввода + + + Выводит приглашение к вводу и возвращает значение типа boolean, введенное с клавиатуры, +и осуществляет переход на следующую строку ввода + + + Выводит приглашение к вводу и возвращает значение типа BigInteger, введенное с клавиатуры, +и осуществляет переход на следующую строку ввода + + + -- + + + -- + + + - procedure Read(f: файл; a,b,...); + Вводит значения a,b,... из файла f + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + - procedure Readln(f: Text; a,b,...); + Вводит значения a,b,... из текстового файла f и осуществляет переход на следующую строку + + + -- + + + Возвращает значение типа integer, введенное из текстового файла f + + + Возвращает значение типа int64, введенное из текстового файла f + + + Возвращает значение типа real, введенное из текстового файла f + + + Возвращает значение типа char, введенное из текстового файла f + + + Возвращает значение типа string, введенное из текстового файла f + + + Возвращает значение типа boolean, введенное из текстового файла f + + + Возвращает следующую лексему из текстового файла f + + + Возвращает значение типа integer, введенное из текстового файла f, +и осуществляет переход на следующую строку + + + Возвращает значение типа int64, введенное из текстового файла f, +и осуществляет переход на следующую строку + + + Возвращает значение типа real, введенное из текстового файла f, +и осуществляет переход на следующую строку + + + Возвращает значение типа char, введенное из текстового файла f, +и осуществляет переход на следующую строку + + + Возвращает значение типа string, введенное из текстового файла f, +и осуществляет переход на следующую строку + + + Возвращает значение типа boolean, введенное из текстового файла f, +и осуществляет переход на следующую строку + + + - procedure Write(a,b,...); + Выводит значения a,b,... на экран + + + -- + + + -- + + + -- + + + - procedure Writeln(a,b,...); + Выводит значения a,b,... на экран и осуществляет переход на новую строку +!!- Writeln(a,b,...) + Writes a,b,... to standart output stream and appends newline + + + -- + + + -- + + + -- + + + - procedure Write(f: файл; a,b,...); + Выводит значения a,b,... в файл f + + + -- + + + -- + + + - procedure Writeln(f: Text; a,b,...); + Выводит значения a,b,... в текстовый файл f и осуществляет переход на новую строку + + + -- + + + -- + + + Выводит значения args согласно форматной строке formatstr + + + Выводит значения args согласно форматной строке formatstr и осуществляет переход на новую строку + + + Выводит значения args в текстовый файл f согласно форматной строке formatstr + + + Выводит значения args в текстовый файл f согласно форматной строке formatstr +и осуществляет переход на новую строку + + + - procedure Print(a,b,...); + Выводит значения a,b,... на экран, после каждого значения выводит пробел + + + -- + + + -- + + + - procedure Print(f: Text; a,b,...); + Выводит значения a,b,... в текстовый файл f, после каждого значения выводит пробел + + + - procedure Println(a,b,...); + Выводит значения a,b,... на экран, после каждого значения выводит пробел и переходит на новую строку + + + - procedure Println(f: Text; a,b,...); + Выводит значения a,b,... в текстовый файл f, после каждого значения выводит пробел и переходит на новую строку + + + Сериализует объект в файл (объект должен иметь атрибут [Serializable]) + + + Десериализует объект из файла + + + - procedure Assign(f: файл; fileName: string); + Связывает файловую переменную с файлом на диске + + + - procedure AssignFile(f: файл; fileName: string); + Связывает файловую переменную с файлом на диске + + + - procedure Close(f: файл); + Закрывает файл + + + - procedure CloseFile(f: файл); + Закрывает файл + + + - function Eof(f: файл): boolean; + Возвращает True, если достигнут конец файла + + + - procedure Erase(f: файл); + Удаляет файл, связанный с файловой переменной + + + - procedure Rename(f: файл; newname: string); + Переименовывает файл, связаный с файловой переменной, давая ему имя newname. + + + -- + + + -- + + + -- + + + -- + + + Открывает текстовый файл на чтение в кодировке Windows + + + Открывает текстовый файл на чтение в указанной кодировке + + + Связывает файловую переменную f с именем файла fileName и открывает текстовый файл на чтение в кодировке Windows + + + Связывает файловую переменную f с именем файла fileName и открывает текстовый файл на чтение в указанной кодировке + + + Открывает текстовый файл на запись в кодировке Windows. +Если файл существовал - он обнуляется, если нет - создается пустой + + + Открывает текстовый файл на запись в указанной кодировке. +Если файл существовал - он обнуляется, если нет - создается пустой + + + Связывает файловую переменную с именем файла fileName и открывает текстовый файл f на запись в кодировке Windows. +Если файл существовал - он обнуляется, если нет - создается пустой + + + Связывает файловую переменную f с именем файла fileName и открывает текстовый файл f на запись в указанной кодировке. +Если файл существовал - он обнуляется, если нет - создается пустой + + + Открывает текстовый файл на дополнение в кодировке Windows + + + Открывает текстовый файл на дополнение в указанной кодировке + + + Связывает файловую переменную f с именем файла fileName и открывает текстовый файл на дополнение в кодировке Windows + + + Связывает файловую переменную f с именем файла fileName и открывает текстовый файл на дополнение в указанной кодировке + + + Возвращает текстовый файл с именем fileName, открытый на чтение в кодировке Windows + + + Возвращает текстовый файл с именем fileName, открытый на чтение в указанной кодировке + + + Возвращает текстовый файл с именем fileName, открытый на запись в кодировке Windows + + + Возвращает текстовый файл с именем fileName, открытый на запись в указанной кодировке + + + Возвращает текстовый файл с именем fileName, открытый на дополнение в кодировке Windows + + + Возвращает текстовый файл с именем fileName, открытый на дополнение в указанной кодировке + + + -- + + + Возвращает True, если в файле достигнут конец строки + + + Пропускает пробельные символы, после чего возвращает True, если достигнут конец файла + + + Пропускает пробельные символы, после чего возвращает True, если в файле достигнут конец строки + + + Записывает содержимое буфера файла на диск + + + -- + + + -- + + + -- + + + Открывает файл, считывает из него строки в кодировке Windows и закрывает файл. В каждый момент в памяти хранится только текущая строка + + + Открывает файл, считывает из него строки в указаной кодировке и закрывает файл. В каждый момент в памяти хранится только текущая строка + + + Открывает файл, считывает из него строки в кодировке Windows в виде массива строк, после чего закрывает файл + + + Открывает файл, считывает из него строки в указаной кодировке в виде массива строк, после чего закрывает файл + + + Открывает файл, считывает его содержимое в кодировке Windows в виде строки, после чего закрывает файл + + + Открывает файл, считывает его содержимое в указаной кодировке в виде строки, после чего закрывает файл + + + Создает новый файл, записывает в него строки из последовательности в кодировке Windows, после чего закрывает файл + + + Создает новый файл, записывает в него строки из последовательности в указанной кодировке, после чего закрывает файл + + + Создает новый файл, записывает в него строки из массива в кодировке Windows, после чего закрывает файл + + + Создает новый файл, записывает в него строки из массива в указанной кодировке, после чего закрывает файл + + + Создает новый файл, записывает в него строку в кодировке Windows, после чего закрывает файл + + + Создает новый файл, записывает в него строку в указанной кодировке, после чего закрывает файл + + + - procedure Reset(f: двоичный файл); + Открывает двоичный файл на чтение и запись. +Двоичный файл - это либо типизированный файл file of T, либо бестиповой файл file + + + - procedure Reset(f: двоичный файл; fileName: string); + Связывает файловую переменную f с файлом name на диске и открывает двоичный файл на чтение и запись. +Двоичный файл - это либо типизированный файл file of T, либо бестиповой файл file + + + - procedure Rewrite(f: двоичный файл); + Открывает двоичный файл на чтение и запись, при этом обнуляя его содержимое. Если файл существовал, он обнуляется. +Двоичный файл - это либо типизированный файл file of T, либо бестиповой файл file + + + - procedure Rewrite(f: двоичный файл; fileName: string); + Связывает файловую переменную f с файлом fileName на диске и открывает двоичный файл на чтение и запись, при этом обнуляя его содержимое. +Двоичный файл - это либо типизированный файл file of T, либо бестиповой файл file + + + - procedure Reset(f: двоичный файл; en: Encoding); + Открывает двоичный файл на чтение и запись в заданной кодировке. +Двоичный файл - это либо типизированный файл file of T, либо бестиповой файл file + + + - procedure Reset(f: двоичный файл; fileName: string; en: Encoding); + Связывает файловую переменную f с файлом fileName на диске и открывает двоичный файл на чтение и запись в заданной кодировке. +Двоичный файл - это либо типизированный файл file of T, либо бестиповой файл file + + + - procedure Rewrite(f: двоичный файл; en: Encoding); + Открывает двоичный файл на чтение и запись в заданной кодировке, при этом обнуляя его содержимое. Если файл существовал, он обнуляется. +Двоичный файл - это либо типизированный файл file of T, либо бестиповой файл file + + + - procedure Rewrite(f: двоичный файл; fileName: string; en: Encoding); + Связывает файловую переменную f с файлом fileName на диске и открывает двоичный файл на чтение и запись в заданной кодировке, при этом обнуляя его содержимое. +Двоичный файл - это либо типизированный файл file of T, либо бестиповой файл file + + + - procedure Truncate(f: двоичный файл); + Усекает двоичный файл, отбрасывая все элементы с позиции файлового указателя. +Двоичный файл - это либо типизированный файл file of T, либо бестиповой файл file + + + -- + + + -- + + + -- + + + -- + + + - function FilePos(f: двоичный файл): int64; + Возвращает текущую позицию файлового указателя в двоичном файле + + + - function FileSize(f: двоичный файл): int64; + Возвращает количество элементов в двоичном файле + + + - procedure Seek(f: двоичный файл; n: int64); + Устанавливает текущую позицию файлового указателя в двоичном файле на элемент с данным номером + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + Возвращает версию PascalABC.NET + + + Возвращает количество параметров командной строки + + + Возвращает i-тый параметр командной строки + + + Возвращает текущий каталог + + + Меняет текущий каталог + + + Создает каталог + + + Удаляет каталог + + + Создает каталог. Возвращает True, если каталог успешно создан + + + Удаляет файл. Если файл не может быть удален, то возвращает False + + + Возвращает текущий каталог + + + Удаляет каталог. Возвращает True, если каталог успешно удален + + + Переименовывает файл fileName, давая ему новое имя newfileName. Возвращает True, если файл успешно переименован + + + Устанавливает текущий каталог. Возвращает True, если каталог успешно удален + + + Изменяет расширение файла с именем fileName на newExt + + + Возвращает True, если файл с именем fileName существует + + + - procedure Assert(cond: boolean); + Выводит в специальном окне стек вызовов подпрограмм если условие не выполняется + + + - procedure Assert(cond: boolean; message: string); + Выводит в специальном окне диагностическое сообщение и стек вызовов подпрограмм если условие не выполняется + + + Возвращает свободное место в байтах на диске с именем diskname + + + Возвращает размер в байтах на диске с именем diskname + + + Возвращает свободное место в байтах на диске disk. disk=0 - текущий диск, disk=1 - диск A: , disk=2 - диск B: и т.д. + + + Возвращает размер в байтах на диске disk. disk=0 - текущий диск, disk=1 - диск A: , disk=2 - диск B: и т.д. + + + Возвращает количество миллисекунд с момента начала работы программы + + + Возвращает количество миллисекунд с момента последнего вызова Milliseconds или MillisecondsDelta или начала программы + + + Завершает работу программы + + + Завершает работу программы, возвращая код ошибки exitCode + + + Делает паузу на ms миллисекунд + + + Возващает имя запущенного .exe-файла + + + Преобразует указатель к строковому представлению + + + Для типа System.Type возвращает имя типа объекта + + + Возвращает имя типа объекта + + + Запускает программу или документ с именем fileName + + + Запускает программу или документ с именем fileName и параметрами командной строки args + + + Запускает программу или документ с именем fileName + + + Запускает программу или документ с именем fileName и параметрами командной строки args + + + Возвращает последовательность имен файлов по заданному пути, соответствующих шаблону поиска + + + Возвращает последовательность имен файлов по заданному пути, соответствующих шаблону поиска, включая подкаталоги + + + Возвращает последовательность имен каталогов по заданному пути + + + Возвращает последовательность имен каталогов по заданному пути, включая подкаталоги + + + Выделяет имя файла из полного имени файла fileName + + + Выделяет расширение из полного имени файла fileName + + + Выделяет путь из полного имени файла fileName + + + Выделяет имя диска и путь из полного имени файла fileName + + + Выделяет путь из полного имени файла fileName + + + Возвращает полное имя файла fileName + + + -function Sign(x: число): integer; + Возвращает -1, 0 или +1 в зависимости от знака числа x + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -function Abs(x: число): число; + Возвращает модуль числа x + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + Возвращает синус угла x, измеряемого в радианах + + + Возвращает гиперболический синус угла x, измеряемого в радианах + + + Возвращает косинус угла x, измеряемого в радианах + !! Returns the cosine of number x + + + Возвращает гиперболический косинус угла x, измеряемого в радианах + + + Возвращает тангенс угла x, измеряемого в радианах + + + Возвращает гиперболический тангенс угла x, измеряемого в радианах + + + Возвращает угол в радианах, синус которого равен x, -1<=x<=1 + + + Возвращает угол в радианах, косинус которого равен x, -1<=x<=1 + + + Возвращает угол в радианах, тангенс которого равен x + + + Возвращает экспоненту числа x + + + Возвращает натуральный логарифм числа x + + + Возвращает натуральный логарифм числа x + + + Возвращает логарифм числа x по основанию 2 + + + Возвращает десятичный логарифм числа x + + + Возвращает логарифм числа x по основанию base + + + Возвращает квадратный корень числа x + + + -function Sqr(x: число): число; + Возвращает квадрат числа x + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + Возвращает x в степени y + + + Возвращает x в целой степени n + + + Возвращает x в степени y + + + Возвращает x, округленное до ближайшего целого. Если вещественное находится посередине между двумя целыми, +то округление осуществляется к ближайшему четному (банковское округление): Round(2.5)=2, Round(3.5)=4 + + + Возвращает x, округленное до ближайшего вещественного с digits знаками после десятичной точки + + + Возвращает x, округленное до ближайшего длинного целого + + + Возвращает целую часть вещественного числа x + + + Возвращает целую часть вещественного числа x как длинное целое + + + Возвращает целую часть числа x + + + Возвращает дробную часть числа x + + + Возвращает наибольшее целое <= x + + + Возвращает наименьшее целое >= x + + + Переводит радианы в градусы + + + Переводит градусы в радианы + + + Инициализирует датчик псевдослучайных чисел + + + Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности + + + Возвращает случайное целое в диапазоне от 0 до maxValue-1 + + + Возвращает случайное вещественное в диапазоне [0,maxValue) + + + Возвращает случайное целое в диапазоне от a до b + + + Возвращает случайное вещественное в диапазоне [a,b) + + + Возвращает случайное вещественное в диапазоне [a,b] c количеством значащих цифр после точки, равным digits + + + Возвращает случайный символ в диапазоне от a до b + + + Возвращает случайное целое в диапазоне + + + Возвращает случайное вещественное в диапазоне + + + Возвращает случайный символ в диапазоне + + + Возвращает случайное вещественное в диапазоне [0..1) + + + Возвращает кортеж из двух случайных целых в диапазоне от 0 до maxValue-1 + + + Возвращает кортеж из двух случайных вещественных в диапазоне [0,maxValue) + + + Возвращает кортеж из двух случайных целых в диапазоне от a до b + + + Возвращает кортеж из двух случайных символов в диапазоне от a до b + + + Возвращает кортеж из двух случайных вещественных в диапазоне [a,b) + + + Возвращает кортеж из двух случайных целых в диапазоне + + + Возвращает кортеж из двух случайных символов в диапазоне + + + Возвращает кортеж из двух случайных вещественных в диапазоне + + + Возвращает кортеж из двух случайных вещественных в диапазоне [0..1) + + + Возвращает кортеж из трех случайных целых в диапазоне от 0 до maxValue-1 + + + Возвращает кортеж из трех случайных вещественных в диапазоне [0,maxValue) + + + Возвращает кортеж из трех случайных целых в диапазоне от a до b + + + Возвращает кортеж из трех случайных символов в диапазоне от a до b + + + Возвращает кортеж из трех случайных вещественных в диапазоне [a,b) + + + Возвращает кортеж из трех случайных целых в диапазоне + + + Возвращает кортеж из трех случайных символов в диапазоне + + + Возвращает кортеж из трех случайных вещественных в диапазоне + + + Возвращает кортеж из трех случайных вещественных в диапазоне [0..1) + + + -function Max(a: число, b: число): число; + Возвращает максимальное из чисел a,b + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -function Min(a: число, b: число): число; + Возвращает минимальное из чисел a,b + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -function Min(a,b,...: T): T; + Возвращает минимальное из a,b,... + + + -- + + + -- + + + -- + + + -- + + + -function Max(a,b,...: T): T; + Возвращает максимальное из a,b,... + + + -- + + + -- + + + -- + + + -- + + + -function Odd(i: целое): boolean; + Возвращает True, если i нечетно, и False в противном случае + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + Конструирует комплексное число с вещественной частью re и мнимой частью im + + + Конструирует комплексное число по полярным координатам + + + Возвращает квадратный корень из комплексного числа + + + Возвращает модуль комплексного числа + + + Возвращает комплексно сопряженное число + + + Возвращает косинус комплексного числа + + + Возвращает экспоненту комплексного числа + + + Возвращает натуральный логарифм комплексного числа + + + Возвращает натуральный логарифм комплексного числа + + + Возвращает десятичный логарифм комплексного числа + + + Возвращает степень комплексного числа + + + Возвращает синус комплексного числа + + + - procedure Include(var s: set of T; element: T); +Добавляет элемент element во множество s + + + - procedure Exclude(var s: set of T; element: T); +Удаляет элемент element из множества s + + + Увеличивает код символа c на 1 + + + Увеличивает код символа c на n + + + Уменьшает код символа c на 1 + + + Уменьшает код символа c на n + + + Возвращает предшествующий x символ + + + Возвращает следующий за x символ + + + Преобразует код в символ в кодировке Windows + + + Преобразует символ в код в кодировке Windows + + + Преобразует код в символ в кодировке Unicode + + + Преобразует символ в код в кодировке Unicode + + + Преобразует код в символ в кодировке Unicode + + + Преобразует символ в код в кодировке Unicode + + + Преобразует символ в верхний регистр + + + Преобразует символ в нижний регистр + + + Преобразует символ в верхний регистр + + + Преобразует символ в нижний регистр + + + -procedure Str(i: целое; var s: string); + Преобразует целое значение i к строковому представлению и записывает результат в s + + + -- + + + -- + + + -- + + + Преобразует вещественное значение r к строковому представлению и записывает результат в s + + + Преобразует вещественное значение r к строковому представлению и записывает результат в s + + + -- + + + Возвращает позицию подстроки subs в строке s. Если не найдена, возвращает 0 + + + Возвращает позицию подстроки subs в строке s начиная с позиции from. Если не найдена, возвращает 0 + + + Возвращает позицию последнего вхождения подстроки subs в строке s. Если не найдена, возвращает 0 + + + Возвращает позицию последнего вхождения подстроки subs в строке s начиная с позиции from. Если не найдена, возвращает 0 + + + Возвращает длину строки + + + Устанавливает длину строки s равной n + + + -- + + + Вставляет подстроку subs в строку s с позиции index + + + -- + + + Удаляет из строки s count символов с позиции index + + + Возвращает подстроку строки s длины count с позиции index + + + -function Concat(s1,s2,...): string; + Возвращает строку, являющуюся результатом слияния строк s1,s2,... + + + Возвращает строку, являющуюся результатом слияния строк s1 и s2 + + + Возвращает строку в нижнем регистре + + + Возвращает строку в верхнем регистре + + + Возвращает строку, состоящую из count символов ch + + + Возвращает инвертированную строку + + + Возвращает инвертированную строку в диапазоне длины length начиная с индекса index + + + Сравнивает строки. Возвращает значение < 0 если s1<s2, > 0 если s1>s2 и = 0 если s1=s2 + + + Возвращает первые count символов строки s + + + Возвращает последние count символов строки s + + + Возвращает строку с удаленными начальными и конечными пробелами + + + Возвращает строку с удаленными начальными пробелами + + + Возвращает строку с удаленными конечными пробелами + + + Преобразует строковое представление целого числа к числовому значению + + + Преобразует строковое представление целого числа к числовому значению + + + Преобразует строковое представление вещественного числа к числовому значению + + + Преобразует строковое представление вещественного числа к числовому значению + + + Преобразует строковое представление s целого числа к числовому значению и записывает его в value. +При невозможности преобразования возвращается False + + + Преобразует строковое представление s целого числа к числовому значению и записывает его в value. +При невозможности преобразования возвращается False + + + Преобразует строковое представление s вещественного числа к числовому значению и записывает его в value. +При невозможности преобразования возвращается False + + + Преобразует строковое представление s вещественного числа к числовому значению и записывает его в value. +При невозможности преобразования возвращается False + + + Преобразует строковое представление s вещественного числа к числовому значению и записывает его в value. +При невозможности преобразования возвращается False + + + Преобразует строковое представление s вещественного числа к числовому значению и записывает его в value. +При невозможности преобразования возвращается False + + + Считывает целое из строки начиная с позиции from и устанавливает from за считанным значением + + + Считывает вещественное из строки начиная с позиции from и устанавливает from за считанным значением + + + Считывает из строки последовательность символов до пробельного символа начиная с позиции from и устанавливает from за считанным значением + + + Возвращает True если достигнут конец строки или в строке остались только пробельные символы и False в противном случае + + + Считывает целое из строки начиная с позиции from и устанавливает from за считанным значением. +Возвращает True если считывание удачно и False в противном случае + + + Считывает вещественное из строки начиная с позиции from и устанавливает from за считанным значением. +Возвращает True если считывание удачно и False в противном случае + + + -procedure Val(s: string; var value: число; var err: integer); + Преобразует строковое представление s целого или вещественного числа к числовому значению и записывает его в переменную value. +Если преобразование успешно, то err=0, иначе err>0 + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + Преобразует целое число к строковому представлению + + + Преобразует целое число к строковому представлению + + + Преобразует вещественное число к строковому представлению + + + Возвращает отформатированную строку, построенную по форматной строке и списку форматируемых параметров + + + Увеличивает значение переменной i на 1 + + + Увеличивает значение переменной i на n + + + Уменьшает значение переменной i на 1 + + + Уменьшает значение переменной i на n + + + -procedure Inc(var e: перечислимый тип); + Увеличивает значение перечислимого типа на 1 + + + -procedure Inc(var e: перечислимый тип; n: integer); + Увеличивает значение перечислимого типа на n + + + -procedure Dec(var e: перечислимый тип); + Уменьшает значение перечислимого типа на 1 + + + -procedure Dec(var e: перечислимый тип; n: integer); + Уменьшает значение перечислимого типа на n + + + -- + + + -- + + + -function Ord(a: целое): целое; + Возвращает порядковый номер значения a + + + -function Ord(a: перечислимый тип): integer; + Возвращает порядковый номер значения a + + + -- + + + -- + + + -- + + + -function Succ(x: целое): целое; + Возвращает следующее за x значение + + + -function Succ(x: перечислимый тип): перечислимый тип; + Возвращает следующее за x значение + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -function Pred(x: целое): целое; + Возвращает предшествующее x значение + + + -function Pred(x: перечислимый тип): перечислимый тип; + Возвращает предшествующее x значение + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + Меняет местами значения двух переменных + + + Возвращает True, если достигнут конец строки + + + Возвращает True, если достигнут конец потока ввода + + + Пропускает пробельные символы, после чего возвращает True, если достигнут конец потока ввода + + + Пропускает пробельные символы, после чего возвращает True, если достигнут конец строки + + + Возвращает аргумены командой строки, с которыми была запущена программа + + + - function Low(a: array of T): integer; + Возвращает 0 + + + - function High(a: array of T): integer; + Возвращает верхнюю границу динамического массива + + + - function Length(a: array of T): integer; + Возвращает длину динамического массива + + + - function Length(a: array of T; dim: integer): integer; + Возвращает длину динамического массива по размерности dim + + + - function Copy(a: array of T): array of T; + Создаёт копию динамического массива + + + Сортирует динамический массив по возрастанию + + + Сортирует динамический массив по критерию сортировки, задаваемому функцией сравнения cmp + + + Сортирует динамический массив по критерию сортировки, задаваемому функцией сравнения less + + + Сортирует динамический массив по ключу + + + Сортирует список по возрастанию + + + Сортирует список по критерию сортировки, задаваемому функцией сравнения cmp + + + Сортирует список по критерию сортировки, задаваемому функцией сравнения less + + + Сортирует список по возрастанию по ключу + + + Сортирует динамический массив по убыванию + + + Сортирует динамический массив по убыванию по ключу + + + Сортирует список по убыванию + + + Сортирует список по убыванию по ключу + + + Изменяет порядок элементов в динамическом массиве на противоположный + + + Изменяет порядок элементов на противоположный в диапазоне динамического массива длины count, начиная с индекса index + + + Изменяет порядок элементов в списке на противоположный + + + Изменяет порядок элементов на противоположный в диапазоне списка длины count, начиная с индекса index + + + Изменяет порядок символов в строке на противоположный + + + Изменяет порядок символов в части строки длины count на противоположный, начиная с индекса index + + + Перемешивает динамический массив случайным образом + + + Возвращает, совпадают ли массивы + + + Сравнивает матрицы на равенство + + + Перемешивает список случайным образом + + + Возвращает следующую перестановку в массиве + + + Возвращает последовательность целых от a до b + + + Возвращает последовательность целых от a до b с шагом step + + + Возвращает последовательность длинных целых от a до b + + + Возвращает последовательность длинных целых от a до b с шагом step + + + Возвращает последовательность символов от c1 до c2 + + + Возвращает последовательность символов от c1 до c2 с шагом step + + + Возвращает последовательность вещественных в точках разбиения отрезка [a,b] на n равных частей + + + Возвращает последовательность указанных элементов + + + Возвращает последовательность из n случайных целых элементов + + + Возвращает последовательность из n случайных целых элементов + + + Возвращает последовательность из n случайных вещественных элементов + + + Возвращает последовательность из count элементов, заполненных значениями f(i) + + + Возвращает последовательность из count элементов, заполненных значениями f(i), начиная с i=from + + + Возвращает последовательность из count элементов, начинающуюся с first, с функцией next перехода от предыдущего к следующему + + + Возвращает последовательность из count элементов, начинающуюся с first и second, +с функцией next перехода от двух предыдущих к следующему + + + Возвращает последовательность элементов с начальным значением first, +функцией next перехода от предыдущего к следующему и условием pred продолжения последовательности + + + Возвращает последовательность элементов, начинающуюся с first и second, +с функцией next перехода от двух предыдущих к следующему и условием pred продолжения последовательности + + + Возвращает последовательность из count элементов x + + + Возвращает бесконечную рекуррентную последовательность элементов, задаваемую начальным элементом first и функцией next + + + Возвращает последовательность из n целых, введенных с клавиатуры + + + Возвращает последовательность из n вещественных, введенных с клавиатуры + + + Возвращает последовательность из n строк, введенных с клавиатуры + + + Выводит приглашение к вводу и возвращает последовательность из n целых, введенных с клавиатуры + + + Выводит приглашение к вводу и возвращает последовательность из n вещественных, введенных с клавиатуры + + + Выводит приглашение к вводу и возвращает последовательность из n строк, введенных с клавиатуры + + + Возвращает последовательность целых, вводимых с клавиатуры пока выполняется определенное условие + + + Возвращает последовательность вещественных, вводимых с клавиатуры пока выполняется определенное условие + + + Возвращает последовательность строк, вводимых с клавиатуры пока выполняется определенное условие + + + Выводит приглашение к вводу и возвращает последовательность целых, вводимых с клавиатуры пока выполняется определенное условие + + + Выводит приглашение к вводу и возвращает последовательность вещественных, вводимых с клавиатуры пока выполняется определенное условие + + + Выводит приглашение к вводу и возвращает последовательность строк, вводимых с клавиатуры пока выполняется определенное условие + + + Возвращает массив, заполненный указанными значениями + + + Возвращает массив, заполненный значениями из последовательнсти + + + Возвращает массив, заполненный диапазоном значений + + + Возвращает массив, заполненный диапазоном значений + + + Возвращает массив размера n, заполненный случайными целыми значениями + + + Возвращает массив размера n, заполненный случайными целыми значениями в диапазоне от a до b + + + Возвращает массив размера n, заполненный случайными целыми значениями + + + Возвращает массив размера n, заполненный случайными вещественными значениями в диапазоне от a до b + + + Возвращает массив размера n, заполненный случайными вещественными значениями + + + Возвращает массив из count элементов, заполненных значениями gen(i) + + + Возвращает массив из count элементов, заполненных значениями gen(i), начиная с i=from + + + Возвращает массив из count элементов, начинающихся с first, с функцией next перехода от предыдущего к следующему + + + Возвращает массив из count элементов, начинающихся с first и second, с функцией next перехода от двух предыдущих к следующему + + + Возвращает массив из count элементов x + + + Возвращает массив из n целых, введенных с клавиатуры + + + Возвращает массив из n целых int64, введенных с клавиатуры + + + Возвращает массив из n вещественных, введенных с клавиатуры + + + Возвращает массив из n строк, введенных с клавиатуры + + + -- + + + -- + + + -- + + + Выводит приглашение к вводу и возвращает массив из n целых, введенных с клавиатуры + + + Выводит приглашение к вводу и возвращает массив из n вещественных, введенных с клавиатуры + + + Выводит приглашение к вводу и возвращает массив из n строк, введенных с клавиатуры + + + Возвращает двумерный массив размера m x n, заполненный указанными значениями по строкам + + + Возвращает двумерный массив, заполненный значениями из одномерных массивов + + + Генерирует двумерный массив по массиву массивов строк + + + Генерирует двумерный массив по последовательности массивов строк + + + Генерирует двумерный массив по последовательности последовательностей строк + + + Генерирует двумерный массив по строкам из последовательности + + + Генерирует двумерный массив по массиву массивов столбцов + + + Генерирует двумерный массив по последовательности массивов столбцов + + + Генерирует двумерный массив по последовательности последовательностей столбцов + + + Генерирует двумерный массив по столбцам из последовательности + + + Возвращает матрицу m на n целых, введенных с клавиатуры + + + Возвращает матрицу m на n вещественных, введенных с клавиатуры + + + Возвращает двумерный массив размера m x n, заполненный случайными целыми значениями + + + Возвращает двумерный массив размера m x n, заполненный случайными целыми значениями + + + Возвращает двумерный массив размера m x n, заполненный случайными вещественными значениями + + + Возвращает двумерный массив размера m x n, заполненный элементами gen(i,j) + + + Возвращает двумерный массив размера m x n, заполненный элементами x + + + Транспонирует двумерный массив + + + - function Rec(x1: T1, x2: T2,...): (T1,T2,...); + Возвращает кортеж из элементов разных типов + + + -- + + + -- + + + -- + + + -- + + + -- + + + Возвращает список, заполненный указанными значениями + + + Возвращает список, заполненный значениями из последовательности + + + Возвращает список, заполненный диапазоном значений + + + Возвращает список, заполненный диапазоном значений + + + Возвращает список, заполненный указанными целыми значениями + + + Возвращает список, заполненный указанными целыми значениями + + + Возвращает двусвязный список, заполненный указанными значениями + + + Возвращает двусвязный список, заполненный значениями из последовательности + + + Возвращает двусвязный список, заполненный диапазоном значений + + + Возвращает двусвязный список, заполненный диапазоном значений + + + Возвращает множество на базе хеш таблицы, заполненное указанными значениями + + + Возвращает множество на базе хеш таблицы, заполненное значениями из последовательности + + + Возвращает множество на базе хеш таблицы, заполненное диапазоном значений + + + Возвращает множество на базе хеш таблицы, заполненное заполненный диапазоном значений + + + Возвращает множество на базе хеш таблицы, заполненное целыми значениями + + + Возвращает множество на базе хеш таблицы, заполненное строковыми значениями + + + Возвращает множество на базе бинарного дерева поиска, заполненное указанными значениями + + + Возвращает множество на базе бинарного дерева поиска, заполненное значениями из последовательности + + + Возвращает множество на базе бинарного дерева поиска, заполненное диапазоном значений + + + Возвращает множество на базе бинарного дерева поиска, заполненное диапазоном значений + + + Возвращает множество на базе бинарного дерева поиска, заполненное целыми значениями + + + Возвращает множество на базе бинарного дерева поиска, заполненное строковыми значениями + + + Возвращает словарь пар элементов (ключ, значение) + + + Возвращает словарь пар элементов (ключ, значение) + + + Возвращает словарь пар элементов (ключ, значение), построенный на значениях последовательности + + + Возвращает пару элементов (ключ, значение) + + + Возвращает словарь пар элементов (строка, строка) + + + Возвращает словарь пар элементов (строка, целое) + + + Возвращает словарь пар элементов (целое, целое) + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + Проверяет возможность использования указателей на тип T + + + Проверяет возможность записи типа T в файл + + + Проверяет возможность создания file of T + + + Определяет специальные типы + + + Возвращает объект класса в зависимости от значения kind + + + Вычисление размера типа на этапе выполнения + + + Возвращает строку для вывода в write + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + Содержит аргумены командой строки, с которыми была запущена программа + + + Стандартный текстовый файл для вывода. Связывается процедурой Assign с файлом на диске, после чего весь вывод на консоль перенаправляется в этот файл + + + Стандартный текстовый файл для ввода. Связывается процедурой Assign с файлом на диске, после чего весь ввод с консоли перенаправляется из этого файла + + + Стандартный текстовый файл ошибок. Связывается процедурой Assign с файлом на диске, после чего весь вывод с использованием ErrOutput перенаправляется в этот файл + + + Определяет текущую систему ввода-вывода + + + Принимает значение True, если приложение имеет консольное окно + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + Максимальное значение типа shortint + + + Максимальное значение типа byte + + + Максимальное значение типа smallint + + + Максимальное значение типа word + + + Максимальное значение типа longword + + + Максимальное значение типа int64 + + + Максимальное значение типа uint64 + + + Максимальное значение типа double + + + Минимальное положительное значение типа double + + + Максимальное значение типа real + + + Минимальное положительное значение типа real + + + Максимальное значение типа single + + + Минимальное положительное значение типа single + + + Максимальное значение типа integer + + + Константа Pi + !! Pi constant + + + Константа E + !! E constant + + + Константа перехода на новую строку + !! The newline string defined for this environment. + + + Константа - символы-разделители слов + !! symbols - word delimiters + + + Объединяет два массива + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + Возвращает бесконечную рекуррентную последовательность элементов, задаваемую начальным элементом first и функцией next + + + Возвращает бесконечную рекуррентную последовательность элементов, задаваемую начальными элементами first, second и функцией next + + + Возвращает бесконечную рекуррентную последовательность элементов, задаваемую начальными элементами first, second и функцией next + + + -- + + + -- + + + -- + + + Возвращает бесконечную последовательность целых от текущего значения с шагом 1 + + + Возвращает бесконечную последовательность целых от текущего значения с шагом 1 + + + Возвращает бесконечную последовательность целых от текущего значения с шагом step + + + Возвращает бесконечную последовательность целых от текущего значения с шагом step + + + Возвращает бесконечную последовательность вещественных от текущего значения с шагом step + + + Возвращает бесконечную последовательность вещественных от текущего значения с шагом step + + + -- + + + -- + + + Повторяет последовательность бесконечное число раз + + + Повторяет последовательность бесконечное число раз + + + Выводит значение на экран, после чего выводит пробел + + + Выводит значение на экран, после чего выводит пробел + + + Выводит значение на экран, после чего выводит пробел + + + Выводит значение на экран, после чего выводит пробел + + + Выводит значение на экран, после чего выводит пробел + + + Выводит значение на экран, после чего выводит пробел + + + Выводит значение на экран, после чего выводит пробел + + + Выводит значение на экран и переходит на новую строку + + + Выводит значение на экран и переходит на новую строку + + + Выводит значение на экран и переходит на новую строку + + + Выводит значение на экран и переходит на новую строку + + + Выводит значение на экран и переходит на новую строку + + + Выводит значение на экран и переходит на новую строку + + + Выводит значение на экран и переходит на новую строку + + + Выводит последовательность на экран, используя delim в качестве разделителя + + + Выводит последовательность на экран, используя пробел в качестве разделителя + + + Выводит последовательность на экран, используя delim в качестве разделителя, и переходит на новую строку + + + Выводит последовательность на экран, используя пробел качестве разделителя, и переходит на новую строку + + + Выводит последовательность строк в файл + + + Выводит последовательность, каждый элемент выводится на новой строке + + + Выводит последовательность, каждый элемент отображается с помощью функции map и выводится на новой строке + + + Преобразует элементы последовательности в строковое представление, после чего объединяет их в строку, используя delim в качестве разделителя + + + -- + + + Преобразует элементы последовательности в строковое представление, после чего объединяет их в строку, используя пробел в качестве разделителя + + + -- + + + Применяет действие к каждому элементу последовательности + + + Применяет действие к каждому элементу последовательности, зависящее от номера элемента + + + Возвращает произведение элементов последовательности + + + Возвращает произведение элементов последовательности + + + Возвращает произведение элементов последовательности, спроектированных на числовое значение + + + Возвращает произведение элементов последовательности, спроектированных на числовое значение + + + Возвращает произведение элементов последовательности, спроектированных на числовое значение + + + Возвращает последовательность частичных сумм элементов последовательности + + + Возвращает последовательность частичных сумм элементов последовательности + + + Возвращает последовательность частичных сумм элементов последовательности + + + Возвращает последовательность частичных сумм элементов последовательности + + + Возвращает последовательность частичных сумм элементов последовательности + + + Возвращает последовательность частичных сумм элементов последовательности + + + Возвращает сумму элементов последовательности + + + Возвращает среднее элементов последовательности + + + Возвращает произведение элементов последовательности + + + Возвращает отсортированную по возрастанию последовательность + + + Возвращает отсортированную по убыванию последовательность + + + Возвращает отсортированную по возрастанию последовательность + + + Возвращает отсортированную по убыванию последовательность + + + Возвращает множество HashSet по данной последовательности + + + Возвращает множество SortedSet по данной последовательности + + + Возвращает LinkedList по данной последовательности + + + Возвращает первый элемент последовательности с минимальным значением ключа + + + Возвращает первый элемент последовательности с максимальным значением ключа + + + Возвращает последний элемент последовательности с минимальным значением ключа + + + Возвращает последний элемент последовательности с максимальным значением ключа + + + Возвращает последние count элементов последовательности + + + Возвращает последовательность без последних count элементов + + + Возвращает декартово произведение последовательностей в виде последовательности пар + + + Возвращает декартово произведение последовательностей в виде последовательности пар + + + Возвращает декартово произведение последовательностей, проектируя каждую пару на значение + + + Возвращает декартово произведение последовательностей, проектируя каждую пару на значение + + + Разбивает последовательность на две в позиции ind. Реализуется двухпроходным алгоритмом + + + Разделяет последовательность на две по заданному условию. Реализуется двухпроходным алгоритмом + + + Разделяет последовательность на две по заданному условию, в котором участвует индекс. Реализуется двухпроходным алгоритмом + + + Объединяет две последовательности в последовательность двухэлементных кортежей + + + Объединяет три последовательности в последовательность трехэлементных кортежей + + + Объединяет четыре последовательности в последовательность четырехэлементных кортежей + + + Разъединяет последовательность двухэлементных кортежей на две последовательности. Реализуется двухпроходным алгоритмом + + + Разъединяет последовательность трехэлементных кортежей на три последовательности. Реализуется многопроходным алгоритмом + + + Разъединяет последовательность четырехэлементных кортежей на четыре последовательности. Реализуется многопроходным алгоритмом + + + Чередует элементы двух последовательностей + + + Чередует элементы трех последовательностей + + + Чередует элементы четырех последовательностей + + + Нумерует последовательность с единицы + + + Нумерует последовательность с единицы + + + Нумерует последовательность с номера from + + + Нумерует последовательность с номера from + + + Табулирует функцию последовательностью + + + Превращает последовательность в последовательность пар соседних элементов + + + Превращает последовательность в последовательность пар соседних элементов + + + Превращает последовательность в последовательность n-ок соседних элементов + + + Превращает последовательность в последовательность n-ок соседних элементов + + + Превращает последовательность в последовательность пар соседних элементов, применяет func к каждой паре полученных элементов и получает новую последовательность + + + Превращает последовательность в последовательность пар соседних элементов, применяет func к каждой паре полученных элементов и получает новую последовательность + + + Разбивает последовательность на серии длины size + + + Разбивает последовательность на серии длины size + + + Разбивает последовательность на серии длины size и применяет проекцию к каждой серии + + + -- + + + Возвращает срез последовательности от номера from с шагом step > 0 + + + Возвращает срез последовательности от номера from с шагом step > 0 длины не более count + + + -- + + + -- + + + -- + + + -- + + + Возвращает последовательность разностей соседних элементов исходной последовательности + + + Возвращает последовательность разностей соседних элементов исходной последовательности + + + Возвращает последовательность разностей соседних элементов исходной последовательности + + + Возвращает последовательность разностей соседних элементов исходной последовательности + + + Возвращает последовательность разностей соседних элементов исходной последовательности + + + Возвращает последовательность разностей соседних элементов исходной последовательности + + + Возвращает последовательность разностей соседних элементов исходной последовательности + + + Возвращает последовательность разностей соседних элементов исходной последовательности + + + Возвращает последовательность разностей соседних элементов исходной последовательности. В качестве функции разности используется func + + + Возвращает последовательность разностей соседних элементов исходной последовательности. В качестве функции разности используется func + + + Возвращает последовательность разностей соседних элементов исходной последовательности. В качестве функции разности используется func + + + Возвращает последовательность разностей соседних элементов исходной последовательности. В качестве функции разности используется func + + + Группирует одинаковые подряд идущие элементы, получая последовательность массивов + + + Группирует одинаковые подряд идущие элементы, получая последовательность массивов + + + Возвращает количество элементов, равных указанному значению + + + Возвращает случайный элемент списка + + + Возвращает последовательность индексов списка + + + Возвращает последовательность индексов элементов списка, удовлетворяющих условию + + + Возвращает последовательность индексов элементов списка, удовлетворяющих условию + + + Возвращает последовательность индексов элементов списка, удовлетворяющих условию + + + Возвращает последовательность индексов элементов списка, удовлетворяющих условию + + + Перемешивает элементы списка случайным образом + + + Находит первую пару подряд идущих одинаковых элементов и возвращает индекс первого элемента пары. Если не найден, возвращается -1 + + + Находит первую пару подряд идущих одинаковых элементов, используя функцию сравнения eq, и возвращает индекс первого элемента пары. Если не найден, возвращается -1 + + + Возвращает индекс первого минимального элемента начиная с позиции index + + + Возвращает индекс первого максимального элемента начиная с позиции index + + + Возвращает индекс последнего минимального элемента в диапазоне [0,index-1] + + + Возвращает индекс последнего минимального элемента + + + Возвращает индекс последнего минимального элемента в диапазоне [0,index-1] + + + Возвращает индекс последнего максимального элемента + + + Заменяет в массиве все вхождения одного значения на другое + Заменяет в списке все вхождения одного значения на другое + + + Преобразует элементы массива или списка по заданному правилу + + + Преобразует элементы массива или списка по заданному правилу + + + Заполняет элементы списка указанным значением + + + Заполняет элементы списка значениями, вычисляемыми по некоторому правилу + + + -- + + + -- + + + -- + + + Возвращает срез списка от индекса from с шагом step + + + Возвращает срез списка от индекса from с шагом step длины не более count + + + Удаляет последний элемент. Если элементов нет, генерирует исключение + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + Количество строк в двумерном массиве + + + Количество столбцов в двумерном массиве + + + Количество столбцов в двумерном массиве + + + Есть ли элемент в матрице + + + Равны ли матрицы + + + Вывод двумерного массива, w - ширина поля вывода + + + Вывод двумерного вещественного массива по формату :w:f + + + Вывод двумерного массива и переход на следующую строку, w - ширина поля вывода + + + Вывод двумерного вещественного массива по формату :w:f и переход на следующую строку + + + k-тая строка двумерного массива + + + k-тый столбец двумерного массива + + + k-тая строка двумерного массива как последовательность + + + k-тая строка двумерного массива как последовательность + + + k-тый столбец двумерного массива как последовательность + + + k-тый столбец двумерного массива как последовательность + + + Возвращает массив строк двумерного массива + + + Возвращает массив столбцов двумерного массива + + + Возвращает последовательность строк двумерного массива + + + Возвращает последовательность строк двумерного массива + + + Возвращает последовательность столбцов двумерного массива + + + Возвращает последовательность столбцов двумерного массива + + + Меняет местами две строки двумерного массива с номерами k1 и k2 + + + Меняет местами два столбца двумерного массива с номерами k1 и k2 + + + Меняет строку k двумерного массива на другую строку + + + Меняет строку k двумерного массива на другую строку + + + Меняет столбец k двумерного массива на другой столбец + + + Меняет столбец k двумерного массива на другой столбец + + + Возвращает по заданному двумерному массиву последовательность (a[i,j],i,j) + + + Возвращает по заданному двумерному массиву последовательность (a[i,j],i,j) + + + Возвращает по заданному двумерному массиву последовательность индексов элементов, удовлетворяющих заданному условию + + + Возвращает по заданному двумерному массиву последовательность индексов элементов, удовлетворяющих заданному условию + + + Возвращает по заданному двумерному массиву последовательность индексов элементов, удовлетворяющих заданному условию + + + Возвращает по заданному двумерному массиву последовательность индексов элементов, удовлетворяющих заданному условию + + + Возвращает по заданному двумерному массиву последовательность его элементов по строкам + + + Возвращает по заданному двумерному массиву последовательность его элементов по строкам + + + Возвращает по заданному двумерному массиву последовательность его элементов по столбцам + + + Возвращает по заданному двумерному массиву последовательность его элементов по столбцам + + + Преобразует элементы двумерного массива и возвращает преобразованный массив + + + Преобразует элементы двумерного массива и возвращает преобразованный массив + + + Преобразует элементы двумерного массива по заданному правилу + + + Преобразует элементы двумерного массива по заданному правилу + + + Заполняет элементы двумерного массива значениями, вычисляемыми по некоторому правилу + + + Заполняет элементы двумерного массива случайными значениями в диапазоне от a до b + + + Заполняет элементы двумерного массива случайными значениями в диапазоне от a до b + + + Применяет действие к каждому элементу двумерного массива + + + Применяет действие к каждому элементу двумерного массива + + + Возвращает срез двумерного массива. RowIndex и ColIndex задают срезаемые строки и столбцы + + + Возвращает срез двумерного массива между строками FromRow, ToRow и столбцами FromCol, ToCol + + + Возвращает, совпадают ли массивы + + + Заполняет массив случайными значениями в диапазоне от a до b + + + Заполняет массив случайными значениями в диапазоне от a до b + + + Возвращает случайный элемент массива + + + Перемешивает элементы массива случайным образом + + + Возвращает минимальный элемент + + + Возвращает максимальный элемент + + + Возвращает минимальный элемент + + + Возвращает минимальный элемент + + + Возвращает максимальный элемент + + + Возвращает максимальный элемент + + + Возвращает индекс первого минимального элемента начиная с позиции index + + + Возвращает индекс первого максимального элемента начиная с позиции index + + + Возвращает индекс последнего минимального элемента в диапазоне [0,index-1] + + + Возвращает индекс последнего минимального элемента + + + Возвращает индекс последнего минимального элемента в диапазоне [0,index-1] + + + Возвращает индекс последнего максимального элемента + + + Заполняет элементы массива указанным значением + + + Заполняет элементы массива значениями, вычисляемыми по некоторому правилу + + + Преобразует элементы массива по заданному правилу + + + Преобразует элементы массива по заданному правилу + + + Выполняет бинарный поиск в отсортированном массиве + + + Преобразует элементы массива и возвращает преобразованный массив + + + Преобразует элементы массива и возвращает преобразованный массив + + + Выполняет поиск первого элемента в массиве, удовлетворяющего предикату. Если не найден, возвращается нулевое значение соответствующего типа + + + Выполняет поиск индекса первого элемента в массиве, удовлетворяющего предикату. Если не найден, возвращается -1 + + + Выполняет поиск индекса первого элемента в массиве, удовлетворяющего предикату, начиная с индекса start. Если не найден, возвращается -1 + + + Возвращает в виде массива все элементы, удовлетворяющие предикату + + + Выполняет поиск последнего элемента в массиве, удовлетворяющего предикату. Если не найден, возвращается нулевое значение соответствующего типа + + + Выполняет поиск индекса последнего элемента в массиве, удовлетворяющего предикату. Если не найден, возвращается -1 + + + Выполняет поиск индекса последнего элемента в массиве, удовлетворяющего предикату, в диапазоне индексов от 0 до start. Если не найден, возвращается -1 + + + Возвращает индекс первого вхождения элемента или -1 если элемент не найден + + + Возвращает индекс первого вхождения элемента начиная с индекса start или -1 если элемент не найден + + + Возвращает индекс последнего вхождения элемента или -1 если элемент не найден + + + Возвращает индекс последнего вхождения элемента начиная с индекса start или -1 если элемент не найден + + + Сортирует массив по возрастанию + + + Сортирует массив по убыванию + + + Сортирует массив по возрастанию, используя cmp в качестве функции сравнения элементов + + + Сортирует массив по возрастанию по ключу + + + Сортирует массив по убыванию по ключу + + + Возвращает индекс последнего элемента массива + + + Возвращает индекс первого элемента массива + + + Возвращает последовательность индексов одномерного массива + + + Возвращает последовательность индексов элементов одномерного массива, удовлетворяющих условию + + + Возвращает последовательность индексов элементов одномерного массива, удовлетворяющих условию + + + Возвращает последовательность индексов элементов одномерного массива, удовлетворяющих условию + + + Возвращает последовательность индексов элементов одномерного массива, удовлетворяющих условию + + + Возвращает все сочетания по m элементов + + + Возвращает все сочетания по m элементов + + + Возвращает все сочетания по m элементов + + + Возвращает все перестановки множества элементов, заданного массивом + + + Возвращает все перестановки множества элементов, заданного массивом + + + Возвращает все перестановки множества элементов, заданного последовательностью + + + Возвращает все частичные перестановки из n элементов по m + + + Возвращает все частичные перестановки из n элементов по m + + + Возвращает n-тую декартову степень множества элементов, заданного массивом + + + Возвращает n-тую декартову степень множества элементов, заданного массивом + + + Возвращает n-тую декартову степень множества элементов, заданного последовательностью + + + -(расширение sequence of T) function Cartesian<T, T1>(b: sequence of T1): sequence of (T, T1); + Возвращает декартово произведение последовательностей в виде последовательности пар + + + -- + + + Возвращает все перестановки букв в строке в виде последовательности строк + + + Возвращает все частичные перестановки букв строки по m символов в виде последовательности строк + + + -(расширение sequence of T) function Cartesian<T, T1>(b: sequence of T1): sequence of (T, T1); + Возвращает n-тую декартову степень множества символов, заданного строкой + + + Возвращает n-тую декартову степень множества символов, заданного строкой + + + Возвращает все сочетания по m элементов + + + -- + + + -- + + + Возвращает срез массива от индекса from с шагом step + + + Возвращает срез массива от индекса from с шагом step длины не более count + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + Возвращает True если целое делится на указанное значение + + + Возвращает True если целое не делится на указанное значение + + + Возвращает True если целое делится на одно из значений + + + Возвращает True если целое делится на все значения + + + Возвращает квадратный корень числа + + + Возвращает квадрат числа + + + Возвращает True если значение находится между двумя другими + + + Возвращает True если значение находится между двумя другими + + + Возвращает, является ли целое четным + + + Возвращает, является ли целое нечетным + + + Возвращает последовательность чисел от 1 до данного + + + Генерирует последовательность целых от текущего значения до n + + + Генерирует последовательность целых от текущего значения до n в убывающем порядке + + + Возвращает последовательность целых 0,1,...n-1 + + + Возвращает число, ограниченное диапазоном от bottom до top включительно + + + Возвращает число, ограниченное величиной top сверху + + + Возвращает число, ограниченное величиной bottom снизу + + + Возвращает квадратный корень числа + + + Возвращает True если значение находится между двумя другими + + + Возвращает True если значение находится между двумя другими + + + Возвращает квадратный корень числа + + + Возвращает квадрат числа + + + Возвращает число, округленное до ближайшего целого + + + Возвращает x, округленное до ближайшего вещественного с digits знаками после десятичной точки + + + Возвращает число, округленное до ближайшего длинного целого + + + Возвращает целую часть вещественного числа + + + Возвращает целую часть вещественного числа как длинное целое + + + Возвращает наибольшее целое, меньшее или равное вещественному числу + + + Возвращает наменьшее целое, большее или равное вещественному числу + + + Возвращает вещественное, отформатированное к строке с frac цифрами после десятичной точки + + + Возвращает число, ограниченное диапазоном от bottom до top включительно + + + Возвращает число, ограниченное величиной top сверху + + + Возвращает число, ограниченное величиной bottom снизу + + + Возвращает True если значение находится между двумя другими + + + Возвращает True если значение находится между двумя другими + + + Предыдущий символ + + + Следующий символ + + + Код символа в кодировке Unicode + + + Является ли символ цифрой + + + Является ли символ буквой + + + Принадлежит ли символ к категории букв нижнего регистра + + + Принадлежит ли символ к категории букв верхнего регистра + + + Преобразует символ в цифру + + + Преобразует символ в нижний регистр + + + Преобразует символ в верхний регистр + + + Заменяет count вхождений подстроки oldStr на подстроку newStr в исходной строке + + + Возвращает True если значение находится между двумя другими + + + Возвращает True если значение находится между двумя другими + + + Считывает целое из строки начиная с позиции from и устанавливает from за считанным значением + + + Считывает вещественное из строки начиная с позиции from и устанавливает from за считанным значением + + + Считывает слово из строки начиная с позиции from и устанавливает from за считанным значением + + + Преобразует строку в целое + + + Преобразует строку в BigInteger + + + Преобразует строку в вещественное + + + Преобразует строку в целое и записывает его в value. +При невозможности преобразования возвращается False + + + Преобразует строку в вещественное и записывает его в value. +При невозможности преобразования возвращается False + + + Возвращает True если строку можно преобразовать в вещественное + + + Возвращает True если строку можно преобразовать в целое + + + Преобразует строку в целое +При невозможности преобразования возвращается defaultvalue + + + Преобразует строку в вещественное +При невозможности преобразования возвращается defaultvalue + + + Преобразует строку в массив слов + + + Преобразует строку в массив слов, используя в качестве разделителей символы из строки delims + + + Преобразует строку в массив целых + + + Считывает из строки массив из N целых + + + Преобразует строку в массив вещественных + + + Возвращает инверсию строки + + + Заменяет в указанной строке все вхождения регулярного выражения указанной строкой замены и возвращает преобразованную строку + + + Заменяет в указанной строке все вхождения регулярного выражения указанным преобразованием замены и возвращает преобразованную строку + + + Ищет в указанной строке все вхождения регулярного выражения и возвращает их в виде последовательности элементов типа Match + + + Ищет в указанной строке первое вхождение регулярного выражения и возвращает его в виде строки + + + Ищет в указанной строке все вхождения регулярного выражения и возвращает их в виде последовательности строк + + + Удовлетворяет ли строка регулярному выражению + + + Удаляет в строке все вхождения указанных строк + + + Возвращает подстроку, полученную вырезанием из строки length самых правых символов + + + Возвращает подстроку, полученную вырезанием из строки length самых левых символов + + + Возвращает последовательность индексов вхождений подстроки в основную строку +Параметр overlay определяет, разрешены ли перекрытия вхождений подстрок + + + -- + + + -- + + + Возвращает срез строки от индекса from с шагом step + + + Возвращает срез строки от индекса from с шагом step длины не более count + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + Суперпозиция функций + + + Возвращает комплексно сопряженное значение + + + Возвращает в словаре значение, связанное с указанным ключом, а если такого ключа нет, то значение по умолчанию + + + Возвращает словарь, сопоставляющий ключу группы количество элементов с данным ключом + + + Возвращает частотный словарь объектов последовательности + + + Возвращает словарь, сопоставляющий ключу группы результат групповой операции + + + Возвращает словарь, сопоставляющий элементам последовательности определённые значения + + + Операция удаления из словаря пары с указанным значением ключа + + + Добавляет поле к кортежу + + + Добавляет поле к кортежу + + + Добавляет поле к кортежу + + + Добавляет поле к кортежу + + + Добавляет поле к кортежу + + + Выводит кортеж + + + Выводит кортеж + + + Выводит кортеж + + + Выводит кортеж + + + Выводит кортеж + + + Выводит кортеж + + + Выводит кортеж и переходит на новую строку + + + Выводит кортеж и переходит на новую строку + + + Выводит кортеж и переходит на новую строку + + + Выводит кортеж и переходит на новую строку + + + Выводит кортеж и переходит на новую строку + + + Выводит кортеж и переходит на новую строку + + + Преобразует кортеж элементов одного типа в массив + + + Преобразует кортеж элементов одного типа в массив + + + Преобразует кортеж элементов одного типа в массив + + + Преобразует кортеж элементов одного типа в массив + + + Преобразует кортеж элементов одного типа в массив + + + Преобразует кортеж элементов одного типа в массив + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + -- + + + \ No newline at end of file