From e1c5977e0d1d9282ee080ff58bbda9f7dfab3d07 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Mon, 16 Nov 2020 11:16:49 +0000 Subject: [PATCH] LazStats: Adding original source, part 6. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7885 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../lazstats/source_orig/mainunit.lfm | 948 ++ .../lazstats/source_orig/mainunit.lrs | 299 + .../lazstats/source_orig/mainunit.pas | 1485 +++ .../lazstats/source_orig/mannwhituunit.lfm | 274 + .../lazstats/source_orig/mannwhituunit.lrs | 232 + .../lazstats/source_orig/mannwhituunit.pas | 326 + .../lazstats/source_orig/matchitemunit.lfm | 368 + .../lazstats/source_orig/matchitemunit.lrs | 94 + .../lazstats/source_orig/matchitemunit.pas | 430 + .../lazstats/source_orig/matmanunit.lfm | 539 ++ .../lazstats/source_orig/matmanunit.lrs | 154 + .../lazstats/source_orig/matmanunit.pas | 8103 +++++++++++++++++ .../lazstats/source_orig/matrixlib.pas | 2385 +++++ .../lazstats/source_orig/mcitemunit.lfm | 313 + .../lazstats/source_orig/mcitemunit.lrs | 83 + .../lazstats/source_orig/mcitemunit.pas | 381 + .../lazstats/source_orig/medianpolishunit.lfm | 416 + .../lazstats/source_orig/medianpolishunit.lrs | 347 + .../lazstats/source_orig/medianpolishunit.pas | 926 ++ .../lazstats/source_orig/moveavgunit.lfm | 100 + .../lazstats/source_orig/moveavgunit.lrs | 27 + .../lazstats/source_orig/moveavgunit.pas | 129 + .../lazstats/source_orig/multgenunit.lfm | 129 + .../lazstats/source_orig/multgenunit.lrs | 37 + .../lazstats/source_orig/multgenunit.pas | 452 + .../lazstats/source_orig/multxvsyunit.lfm | 433 + .../lazstats/source_orig/multxvsyunit.lrs | 350 + .../lazstats/source_orig/multxvsyunit.pas | 426 + .../lazstats/source_orig/normalityunit.lfm | 311 + .../lazstats/source_orig/normalityunit.lrs | 156 + .../lazstats/source_orig/normalityunit.pas | 330 + .../lazstats/source_orig/onecaseanovaunit.lfm | 621 ++ .../lazstats/source_orig/onecaseanovaunit.lrs | 477 + .../lazstats/source_orig/onecaseanovaunit.pas | 1913 ++++ .../lazstats/source_orig/onesampunit.lfm | 163 + .../lazstats/source_orig/onesampunit.lrs | 44 + .../lazstats/source_orig/onesampunit.pas | 226 + .../lazstats/source_orig/optionsunit.lfm | 147 + .../lazstats/source_orig/optionsunit.lrs | 50 + .../lazstats/source_orig/optionsunit.pas | 194 + .../lazstats/source_orig/outputunit.lfm | 125 + .../lazstats/source_orig/outputunit.lrs | 31 + .../lazstats/source_orig/outputunit.pas | 132 + .../lazstats/source_orig/partialsunit.lfm | 392 + .../lazstats/source_orig/partialsunit.lrs | 341 + .../lazstats/source_orig/partialsunit.pas | 374 + .../lazstats/source_orig/pathunit.lfm | 461 + .../lazstats/source_orig/pathunit.lrs | 358 + .../lazstats/source_orig/pathunit.pas | 777 ++ .../lazstats/source_orig/pchartunit.lfm | 155 + .../lazstats/source_orig/pchartunit.lrs | 43 + .../lazstats/source_orig/pchartunit.pas | 291 + .../lazstats/source_orig/pcurvesunit.lfm | 153 + .../lazstats/source_orig/pcurvesunit.lrs | 38 + .../lazstats/source_orig/pcurvesunit.pas | 225 + .../lazstats/source_orig/plotxyunit.lfm | 343 + .../lazstats/source_orig/plotxyunit.lrs | 247 + .../lazstats/source_orig/plotxyunit.pas | 692 ++ .../lazstats/source_orig/pointsunit.lfm | 56 + .../lazstats/source_orig/pointsunit.lrs | 17 + .../lazstats/source_orig/pointsunit.pas | 211 + .../lazstats/source_orig/polydifunit.lfm | 482 + .../lazstats/source_orig/polydifunit.lrs | 278 + .../lazstats/source_orig/polydifunit.pas | 584 ++ .../lazstats/source_orig/polynomialunit.lfm | 55 + .../lazstats/source_orig/polynomialunit.lrs | 17 + .../lazstats/source_orig/polynomialunit.pas | 50 + .../lazstats/source_orig/presentvalueunit.lfm | 167 + .../lazstats/source_orig/presentvalueunit.lrs | 50 + .../lazstats/source_orig/presentvalueunit.pas | 99 + .../lazstats/source_orig/probchisqrunit.lfm | 96 + .../lazstats/source_orig/probchisqrunit.lrs | 26 + .../lazstats/source_orig/probchisqrunit.pas | 65 + .../lazstats/source_orig/probsmallerzunit.lfm | 80 + .../lazstats/source_orig/probsmallerzunit.lrs | 22 + .../lazstats/source_orig/probsmallerzunit.pas | 60 + .../lazstats/source_orig/probzunit.lfm | 80 + .../lazstats/source_orig/probzunit.lrs | 22 + .../lazstats/source_orig/probzunit.pas | 60 + .../lazstats/source_orig/project1.lrs | 5222 +++++++++++ 80 files changed, 37795 insertions(+) create mode 100644 applications/lazstats/source_orig/mainunit.lfm create mode 100644 applications/lazstats/source_orig/mainunit.lrs create mode 100644 applications/lazstats/source_orig/mainunit.pas create mode 100644 applications/lazstats/source_orig/mannwhituunit.lfm create mode 100644 applications/lazstats/source_orig/mannwhituunit.lrs create mode 100644 applications/lazstats/source_orig/mannwhituunit.pas create mode 100644 applications/lazstats/source_orig/matchitemunit.lfm create mode 100644 applications/lazstats/source_orig/matchitemunit.lrs create mode 100644 applications/lazstats/source_orig/matchitemunit.pas create mode 100644 applications/lazstats/source_orig/matmanunit.lfm create mode 100644 applications/lazstats/source_orig/matmanunit.lrs create mode 100644 applications/lazstats/source_orig/matmanunit.pas create mode 100644 applications/lazstats/source_orig/matrixlib.pas create mode 100644 applications/lazstats/source_orig/mcitemunit.lfm create mode 100644 applications/lazstats/source_orig/mcitemunit.lrs create mode 100644 applications/lazstats/source_orig/mcitemunit.pas create mode 100644 applications/lazstats/source_orig/medianpolishunit.lfm create mode 100644 applications/lazstats/source_orig/medianpolishunit.lrs create mode 100644 applications/lazstats/source_orig/medianpolishunit.pas create mode 100644 applications/lazstats/source_orig/moveavgunit.lfm create mode 100644 applications/lazstats/source_orig/moveavgunit.lrs create mode 100644 applications/lazstats/source_orig/moveavgunit.pas create mode 100644 applications/lazstats/source_orig/multgenunit.lfm create mode 100644 applications/lazstats/source_orig/multgenunit.lrs create mode 100644 applications/lazstats/source_orig/multgenunit.pas create mode 100644 applications/lazstats/source_orig/multxvsyunit.lfm create mode 100644 applications/lazstats/source_orig/multxvsyunit.lrs create mode 100644 applications/lazstats/source_orig/multxvsyunit.pas create mode 100644 applications/lazstats/source_orig/normalityunit.lfm create mode 100644 applications/lazstats/source_orig/normalityunit.lrs create mode 100644 applications/lazstats/source_orig/normalityunit.pas create mode 100644 applications/lazstats/source_orig/onecaseanovaunit.lfm create mode 100644 applications/lazstats/source_orig/onecaseanovaunit.lrs create mode 100644 applications/lazstats/source_orig/onecaseanovaunit.pas create mode 100644 applications/lazstats/source_orig/onesampunit.lfm create mode 100644 applications/lazstats/source_orig/onesampunit.lrs create mode 100644 applications/lazstats/source_orig/onesampunit.pas create mode 100644 applications/lazstats/source_orig/optionsunit.lfm create mode 100644 applications/lazstats/source_orig/optionsunit.lrs create mode 100644 applications/lazstats/source_orig/optionsunit.pas create mode 100644 applications/lazstats/source_orig/outputunit.lfm create mode 100644 applications/lazstats/source_orig/outputunit.lrs create mode 100644 applications/lazstats/source_orig/outputunit.pas create mode 100644 applications/lazstats/source_orig/partialsunit.lfm create mode 100644 applications/lazstats/source_orig/partialsunit.lrs create mode 100644 applications/lazstats/source_orig/partialsunit.pas create mode 100644 applications/lazstats/source_orig/pathunit.lfm create mode 100644 applications/lazstats/source_orig/pathunit.lrs create mode 100644 applications/lazstats/source_orig/pathunit.pas create mode 100644 applications/lazstats/source_orig/pchartunit.lfm create mode 100644 applications/lazstats/source_orig/pchartunit.lrs create mode 100644 applications/lazstats/source_orig/pchartunit.pas create mode 100644 applications/lazstats/source_orig/pcurvesunit.lfm create mode 100644 applications/lazstats/source_orig/pcurvesunit.lrs create mode 100644 applications/lazstats/source_orig/pcurvesunit.pas create mode 100644 applications/lazstats/source_orig/plotxyunit.lfm create mode 100644 applications/lazstats/source_orig/plotxyunit.lrs create mode 100644 applications/lazstats/source_orig/plotxyunit.pas create mode 100644 applications/lazstats/source_orig/pointsunit.lfm create mode 100644 applications/lazstats/source_orig/pointsunit.lrs create mode 100644 applications/lazstats/source_orig/pointsunit.pas create mode 100644 applications/lazstats/source_orig/polydifunit.lfm create mode 100644 applications/lazstats/source_orig/polydifunit.lrs create mode 100644 applications/lazstats/source_orig/polydifunit.pas create mode 100644 applications/lazstats/source_orig/polynomialunit.lfm create mode 100644 applications/lazstats/source_orig/polynomialunit.lrs create mode 100644 applications/lazstats/source_orig/polynomialunit.pas create mode 100644 applications/lazstats/source_orig/presentvalueunit.lfm create mode 100644 applications/lazstats/source_orig/presentvalueunit.lrs create mode 100644 applications/lazstats/source_orig/presentvalueunit.pas create mode 100644 applications/lazstats/source_orig/probchisqrunit.lfm create mode 100644 applications/lazstats/source_orig/probchisqrunit.lrs create mode 100644 applications/lazstats/source_orig/probchisqrunit.pas create mode 100644 applications/lazstats/source_orig/probsmallerzunit.lfm create mode 100644 applications/lazstats/source_orig/probsmallerzunit.lrs create mode 100644 applications/lazstats/source_orig/probsmallerzunit.pas create mode 100644 applications/lazstats/source_orig/probzunit.lfm create mode 100644 applications/lazstats/source_orig/probzunit.lrs create mode 100644 applications/lazstats/source_orig/probzunit.pas create mode 100644 applications/lazstats/source_orig/project1.lrs diff --git a/applications/lazstats/source_orig/mainunit.lfm b/applications/lazstats/source_orig/mainunit.lfm new file mode 100644 index 000000000..3e9bd8654 --- /dev/null +++ b/applications/lazstats/source_orig/mainunit.lfm @@ -0,0 +1,948 @@ +object OS3MainFrm: TOS3MainFrm + Left = 43 + Height = 519 + Top = 133 + Width = 723 + Caption = 'LazStats Sept. 5, 2013' + ClientHeight = 499 + ClientWidth = 723 + Font.CharSet = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Courier New' + Font.Pitch = fpFixed + Font.Quality = fqDraft + Menu = MainMenu1 + OnClick = FormClick + OnShow = FormShow + LCLVersion = '0.9.30.4' + object Panel1: TPanel + Left = 0 + Height = 35 + Top = 0 + Width = 723 + Align = alTop + ClientHeight = 35 + ClientWidth = 723 + TabOrder = 0 + object Label1: TLabel + Left = 15 + Height = 15 + Top = 9 + Width = 64 + Caption = 'No. Cases' + ParentColor = False + end + object Label2: TLabel + Left = 138 + Height = 15 + Top = 9 + Width = 92 + Caption = 'No. Variables' + ParentColor = False + end + object Label3: TLabel + Left = 297 + Height = 15 + Top = 10 + Width = 92 + Caption = 'Current File:' + ParentColor = False + end + object NoCasesEdit: TEdit + Left = 88 + Height = 22 + Top = 6 + Width = 40 + TabStop = False + TabOrder = 0 + Text = 'NoCasesEdit' + end + object NoVarsEdit: TEdit + Left = 240 + Height = 22 + Top = 3 + Width = 48 + TabStop = False + TabOrder = 1 + Text = 'NoVarsEdit' + end + object FileNameEdit: TEdit + Left = 392 + Height = 22 + Top = 8 + Width = 305 + TabStop = False + TabOrder = 2 + Text = 'FileNameEdit' + end + end + object Panel2: TPanel + Left = 0 + Height = 41 + Top = 458 + Width = 723 + Align = alBottom + ClientHeight = 41 + ClientWidth = 723 + TabOrder = 1 + object Label4: TLabel + Left = 11 + Height = 15 + Top = 15 + Width = 29 + Caption = 'Row:' + ParentColor = False + end + object Label5: TLabel + Left = 129 + Height = 15 + Top = 15 + Width = 50 + Caption = 'Column:' + ParentColor = False + end + object Label6: TLabel + Left = 257 + Height = 15 + Top = 11 + Width = 92 + Caption = 'Filter Status' + ParentColor = False + end + object RowEdit: TEdit + Left = 41 + Height = 22 + Top = 8 + Width = 73 + TabStop = False + TabOrder = 0 + Text = 'RowEdit' + end + object ColEdit: TEdit + Left = 177 + Height = 22 + Top = 8 + Width = 65 + TabStop = False + TabOrder = 1 + Text = 'ColEdit' + end + object FilterEdit: TEdit + Left = 352 + Height = 22 + Top = 8 + Width = 231 + TabStop = False + TabOrder = 2 + Text = 'FilterEdit' + end + end + object DataGrid: TStringGrid + Left = 0 + Height = 423 + Top = 35 + Width = 723 + Align = alClient + AutoEdit = False + ColCount = 2 + DefaultColWidth = 80 + Options = [goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goColSizing, goEditing, goTabs, goSmoothScroll] + RowCount = 2 + TabOrder = 2 + TabStop = False + TitleFont.CharSet = ANSI_CHARSET + TitleFont.Color = clBlack + TitleFont.Height = -11 + TitleFont.Name = 'Courier New' + TitleFont.Pitch = fpFixed + TitleFont.Quality = fqDraft + OnClick = DataGridClick + OnKeyDown = DataGridKeyDown + OnKeyPress = DataGridKeyPress + end + object MainMenu1: TMainMenu + left = 16 + top = 360 + object MenuItem1: TMenuItem + Caption = 'FILES' + object SaveFileBtn: TMenuItem + Caption = 'Save File (.LAZ)' + OnClick = SaveFileBtnClick + end + object OpenFileBtn: TMenuItem + Caption = 'Open File (.LAZ)' + OnClick = OpenFileBtnClick + end + object NewFileBtn: TMenuItem + Caption = 'New File' + OnClick = NewFileBtnClick + end + object CloseFileBtn: TMenuItem + Caption = 'Close File' + OnClick = CloseFileBtnClick + end + object MenuItem12: TMenuItem + Caption = '-----------------------' + end + object MenuItem13: TMenuItem + Caption = 'Import File of Type' + object TabFileInBtn: TMenuItem + Caption = 'TAB Separated' + OnClick = TabFileInBtnClick + end + object CSVFileIn: TMenuItem + Caption = 'Comma Separated' + OnClick = CSVFileInClick + end + object SSVFileIn: TMenuItem + Caption = 'Space Separated' + OnClick = SSVFileInClick + end + end + object TabFileOut: TMenuItem + Caption = 'Export File of Type' + object MenuItem20: TMenuItem + Caption = 'Tab Separated' + OnClick = MenuItem20Click + end + object CSVFileOut: TMenuItem + Caption = 'Comma Separated' + OnClick = CSVFileOutClick + end + object SSVFileOut: TMenuItem + Caption = 'Space Separated' + OnClick = SSVFileOutClick + end + end + object MenuItem15: TMenuItem + Caption = '---------------------' + end + object MenuItem16: TMenuItem + Caption = 'Exit' + OnClick = MenuItem16Click + end + end + object MenuItem2: TMenuItem + Caption = 'Variables' + object DefineVar: TMenuItem + Caption = 'Define' + OnClick = DefineVarClick + end + object PrintDefs: TMenuItem + Caption = 'Print Definitions' + OnClick = PrintDefsClick + end + object Transform: TMenuItem + Caption = 'Transform Variables' + OnClick = TransformClick + end + object Recode: TMenuItem + Caption = 'Recode Variables' + OnClick = RecodeClick + end + object Equation: TMenuItem + Caption = 'Equation Editor' + OnClick = EquationClick + end + end + object MenuItem3: TMenuItem + Caption = 'Tools' + object FormatGrid: TMenuItem + Caption = 'Format Grid Cells' + OnClick = FormatGridClick + end + object SortCases: TMenuItem + Caption = 'Sort Cases' + OnClick = SortCasesClick + end + object PrintGrid: TMenuItem + Caption = 'Print Grid File' + OnClick = PrintGridClick + end + object MenuItem28: TMenuItem + Caption = 'Show Output Form' + OnClick = MenuItem28Click + end + object SelectCases: TMenuItem + Caption = 'Select Cases' + OnClick = SelectCasesClick + end + object LoadSubFile: TMenuItem + Caption = 'Load a Sub File' + end + object MenuItem30: TMenuItem + Caption = 'Swap Rows and Columns of Grid' + OnClick = MenuItem30Click + end + object SwapDecType: TMenuItem + Caption = 'Change English to European or Vice Versa' + OnClick = SwapDecTypeClick + end + object StrToIntegers: TMenuItem + Caption = 'Convert strings to integer codes' + OnClick = StrToIntegersClick + end + object smooth: TMenuItem + Caption = 'Smooth Data in a Variable' + OnClick = smoothClick + end + object Calculater: TMenuItem + Caption = 'Calculator' + OnClick = CalculaterClick + end + object JPEGView: TMenuItem + Caption = 'JPEG Image Viewer' + OnClick = JPEGViewClick + end + end + object MenuItem4: TMenuItem + Caption = 'Edit' + object blockcopy: TMenuItem + Caption = 'Copy a Block of Cells' + OnClick = blockcopyClick + end + object BlockPaste: TMenuItem + Caption = 'Paste a Block of Cells' + OnClick = BlockPasteClick + end + object BlockCut: TMenuItem + Caption = 'Cut a Block of Cells' + Visible = False + end + object InsNewCol: TMenuItem + Caption = 'Insert New Column Before Current One' + OnClick = InsNewColClick + end + object CopyCol: TMenuItem + Caption = 'Copy Column' + OnClick = CopyColClick + end + object CutCol: TMenuItem + Caption = 'Cut Column' + OnClick = CutColClick + end + object PasteCol: TMenuItem + Caption = 'Paste Column' + OnClick = PasteColClick + end + object NewRow: TMenuItem + Caption = 'Insert New Row' + OnClick = NewRowClick + end + object CopyRow: TMenuItem + Caption = 'Copy Row' + OnClick = CopyRowClick + end + object CutRow: TMenuItem + Caption = 'Cut Row' + OnClick = CutRowClick + end + object PasteRow: TMenuItem + Caption = 'Paste Row' + OnClick = PasteRowClick + end + end + object MenuItem5: TMenuItem + Caption = 'Analyses' + object MenuItem32: TMenuItem + Caption = 'Descriptive' + object Distributions: TMenuItem + Caption = 'Distribution Statistics' + OnClick = DistributionsClick + end + object FreqAnal: TMenuItem + Caption = 'Frequency Analysis' + OnClick = FreqAnalClick + end + object GrpFreq: TMenuItem + Caption = 'Plot Group Frequencies' + OnClick = GrpFreqClick + end + object CrossTabs: TMenuItem + Caption = 'Cross Tabulation' + OnClick = CrossTabsClick + end + object Breakdown: TMenuItem + Caption = 'Breakdown' + OnClick = BreakdownClick + end + object BoxPlot: TMenuItem + Caption = 'Box Plot' + OnClick = BoxPlotClick + end + object NormalityTests: TMenuItem + Caption = 'Normality Tests' + OnClick = NormalityTestsClick + end + object ThreeDRotate: TMenuItem + Caption = '3-D Variable Rotation' + OnClick = ThreeDRotateClick + end + object PlotXvsY: TMenuItem + Caption = 'Plot X vs Y' + OnClick = PlotXvsYClick + end + object BubblePlot: TMenuItem + Caption = 'Repeated Measures Bubble Plot' + OnClick = BubblePlotClick + end + object StemLeaf: TMenuItem + Caption = 'Stem and Leaf Plot' + OnClick = StemLeafClick + end + object MultXvsY: TMenuItem + Caption = 'Multiple Group X vs Y Plot' + OnClick = MultXvsYClick + end + object XvsMultY: TMenuItem + Caption = 'X versus Multiple Y Plot' + OnClick = XvsMultYClick + end + object CompareDists: TMenuItem + Caption = 'Compare Distributions' + OnClick = CompareDistsClick + end + object ResistanceLine: TMenuItem + Caption = 'Resistant Line for Bivariate Data' + OnClick = ResistanceLineClick + end + object DataSmooth: TMenuItem + Caption = 'Data Smoothing' + OnClick = DataSmoothClick + end + object homotest: TMenuItem + Caption = 'Brown-Forsythe test for homogeneity of variance' + OnClick = homotestClick + end + end + object OneSampTests: TMenuItem + Caption = 'One Sample Tests' + OnClick = OneSampTestsClick + end + object MenuItem34: TMenuItem + Caption = 'Comparisons' + object PropDiff: TMenuItem + Caption = 'Difference beween Proportions' + OnClick = PropDiffClick + end + object CorrDiff: TMenuItem + Caption = 'Difference Between Correlations' + OnClick = CorrDiffClick + end + object ttests: TMenuItem + Caption = 't-tests' + OnClick = ttestsClick + end + object Anova: TMenuItem + Caption = '1,2 or 3 Way ANOVAs' + OnClick = AnovaClick + end + object WithinAnova: TMenuItem + Caption = 'Within Subjects ANOVA' + OnClick = WithinAnovaClick + end + object AxSAnova: TMenuItem + Caption = 'A x S ANOVA' + OnClick = AxSAnovaClick + end + object ABSAnova: TMenuItem + Caption = 'A x B x S ANOVA' + OnClick = ABSAnovaClick + end + object BinA: TMenuItem + Caption = 'B Nested in A ANOVA' + OnClick = BinAClick + end + object NestedABC: TMenuItem + Caption = 'ABC ANOVA with B Nested in A' + OnClick = NestedABCClick + end + object OneCaseAnova: TMenuItem + Caption = '2 or 3 Way ANOVA with One Case Per Cell' + OnClick = OneCaseAnovaClick + end + object Ancova: TMenuItem + Caption = 'ANCOVA by Regression' + OnClick = AncovaClick + end + object GLM: TMenuItem + Caption = 'General Linear Model' + OnClick = GLMClick + end + object LatinSquares: TMenuItem + Caption = 'Latin and Greco-Latin Squares' + OnClick = LatinSquaresClick + end + end + object MenuItem35: TMenuItem + Caption = 'Correlation' + object MenuItem71: TMenuItem + Caption = 'Product-Moment' + OnClick = MenuItem71Click + end + object MenuItem72: TMenuItem + Caption = 'Partial, Semipartial' + OnClick = MenuItem72Click + end + object MenuItem73: TMenuItem + Caption = 'Autocorrelation' + OnClick = MenuItem73Click + end + object MenuItem74: TMenuItem + Caption = 'Canonical' + OnClick = MenuItem74Click + end + end + object MenuItem36: TMenuItem + Caption = 'Multiple Regression' + object LSMRitem: TMenuItem + Caption = 'Least Squares Multiple Regression' + OnClick = LSMRitemClick + end + object MenuItem75: TMenuItem + Caption = 'Forward Stepwise' + OnClick = MenuItem75Click + end + object MenuItem76: TMenuItem + Caption = 'Backward Stepwise' + OnClick = MenuItem76Click + end + object MenuItem77: TMenuItem + Caption = 'Simultaneous' + OnClick = MenuItem77Click + end + object MenuItem78: TMenuItem + Caption = 'Block Entry' + OnClick = MenuItem78Click + end + object MenuItem79: TMenuItem + Caption = 'Best Combination' + OnClick = MenuItem79Click + end + object MenuItem80: TMenuItem + Caption = 'Binary Logistic' + OnClick = MenuItem80Click + end + object MenuItem81: TMenuItem + Caption = 'Cox Proportional Hazzards Survival Regression' + OnClick = MenuItem81Click + end + object MenuItem82: TMenuItem + Caption = 'Linear Programming' + OnClick = MenuItem82Click + end + object TwoSLSReg: TMenuItem + Caption = 'Two Stage Least Squares Regression' + OnClick = TwoSLSRegClick + end + object WLSReg: TMenuItem + Caption = 'Weighted Least Squares Regression' + OnClick = WLSRegClick + end + end + object MenuItem37: TMenuItem + Caption = 'Multivariate' + object MenuItem83: TMenuItem + Caption = 'MANOVA / Discriminant Function' + OnClick = MenuItem83Click + end + object MenuItem84: TMenuItem + Caption = 'Hierarchical Analysis' + OnClick = MenuItem84Click + end + object MenuItem29: TMenuItem + Caption = 'Average Link Clustering' + OnClick = MenuItem29Click + end + object MenuItem31: TMenuItem + Caption = 'K Means Clustering' + OnClick = MenuItem31Click + end + object MenuItem33: TMenuItem + Caption = 'Single Link Clustering' + OnClick = MenuItem33Click + end + object MenuItem85: TMenuItem + Caption = 'Path Analysis' + OnClick = MenuItem85Click + end + object MenuItem86: TMenuItem + Caption = 'Factor Analysis' + OnClick = MenuItem86Click + end + object MenuItem87: TMenuItem + Caption = 'Canonical Correlation' + OnClick = MenuItem87Click + end + object MenuItem88: TMenuItem + Caption = 'General Linear Model' + OnClick = MenuItem88Click + end + object BartlettTest: TMenuItem + Caption = 'Bartlett Test of Sphericity' + OnClick = BartlettTestClick + end + object Correspondence: TMenuItem + Caption = 'Correspondence Analysis' + OnClick = CorrespondenceClick + end + object MedianPolish: TMenuItem + Caption = 'Median Polishing for a 2x2 Table' + OnClick = MedianPolishClick + end + end + object MenuItem38: TMenuItem + Caption = 'Cross-Classification' + object MenuItem89: TMenuItem + Caption = 'AxB Log Linear' + OnClick = MenuItem89Click + end + object MenuItem90: TMenuItem + Caption = 'AxBxC Log Linear' + OnClick = MenuItem90Click + end + object MenuItem91: TMenuItem + Caption = 'Log Linear Screen' + OnClick = MenuItem91Click + end + end + object MenuItem39: TMenuItem + Caption = 'Measurement Programs' + object MenuItem92: TMenuItem + Caption = 'Generate Sample Test Data' + OnClick = MenuItem92Click + end + object MenuItem93: TMenuItem + Caption = 'Classical Test Analysis' + OnClick = MenuItem93Click + end + object MenuItem94: TMenuItem + Caption = 'Rasch Test Calibration' + OnClick = MenuItem94Click + end + object MenuItem95: TMenuItem + Caption = 'Successive Interval Scaling' + OnClick = MenuItem95Click + end + object MenuItem96: TMenuItem + Caption = 'Guttman Scalogram Analysis' + OnClick = MenuItem96Click + end + object MenuItem97: TMenuItem + Caption = 'Weighted Composite Reliability' + OnClick = MenuItem97Click + end + object MenuItem98: TMenuItem + Caption = 'Kuder-Richardson #21 Reliability' + OnClick = MenuItem98Click + end + object MenuItem99: TMenuItem + Caption = 'Spearman-Brown Prophecy Reliability' + OnClick = MenuItem99Click + end + object MenuItem100: TMenuItem + Caption = 'Reliability Due to Test Variance Change' + OnClick = MenuItem100Click + end + object MenuItem101: TMenuItem + Caption = 'Differential Item Functioning' + OnClick = MenuItem101Click + end + object MenuItem102: TMenuItem + Caption = 'Polytomous DIF Analysis' + OnClick = MenuItem102Click + end + object GrdBkMnu: TMenuItem + Caption = 'Grade Book' + OnClick = GrdBkMnuClick + end + object ItemBankMenuItem: TMenuItem + Caption = 'Item Banking' + OnClick = ItemBankMenuItemClick + end + end + object MenuItem40: TMenuItem + Caption = 'Nonparametric' + object SimpChiSqr: TMenuItem + Caption = 'Simple ChiSquare for Categories' + OnClick = SimpChiSqrClick + end + object MenuItem103: TMenuItem + Caption = 'Contingency Chi Square' + OnClick = MenuItem103Click + end + object MenuItem104: TMenuItem + Caption = 'Spearman Rank Correlation' + OnClick = MenuItem104Click + end + object MenuItem105: TMenuItem + Caption = 'Mann-Whitney U Test' + OnClick = MenuItem105Click + end + object MenuItem106: TMenuItem + Caption = 'Fisher''s Exact Test' + OnClick = MenuItem106Click + end + object MenuItem107: TMenuItem + Caption = 'Kendall''s Coefficient of Concordance' + OnClick = MenuItem107Click + end + object MenuItem108: TMenuItem + Caption = 'Kruskal-Wallis One Way ANOVA' + OnClick = MenuItem108Click + end + object MenuItem109: TMenuItem + Caption = 'Matched Pairs Signed Ranks Test' + OnClick = MenuItem109Click + end + object MenuItem110: TMenuItem + Caption = 'Cochran Q Test' + OnClick = MenuItem110Click + end + object MenuItem111: TMenuItem + Caption = 'Sign Test' + OnClick = MenuItem111Click + end + object MenuItem112: TMenuItem + Caption = 'Friedman Two Way ANOVA' + OnClick = MenuItem112Click + end + object MenuItem113: TMenuItem + Caption = 'Probability of a binomial event' + OnClick = MenuItem113Click + end + object MenuItem114: TMenuItem + Caption = 'Kendall''s Tau and Parrtial Tau' + OnClick = MenuItem114Click + end + object MenuItem115: TMenuItem + Caption = 'Kaplan-Meier Survival Analysis' + OnClick = MenuItem115Click + end + object RiditAnalysis: TMenuItem + Caption = 'RIDIT Analysis' + OnClick = RiditAnalysisClick + end + object WghtedKappa: TMenuItem + Caption = 'Kappa and Weighted Kappa' + OnClick = WghtedKappaClick + end + object GenKappa: TMenuItem + Caption = 'Generalized Kappa' + OnClick = GenKappaClick + end + object RunsTest: TMenuItem + Caption = 'Runs Test for Normality' + OnClick = RunsTestClick + end + object Sens: TMenuItem + Caption = 'Sen''s Slope Analysis' + OnClick = SensClick + end + object KSTest: TMenuItem + Caption = 'Kolmogorov-Smirnov Test' + OnClick = KSTestClick + end + object SRHItem: TMenuItem + Caption = 'Scheirer-Ray-Hart 2-way ANOVA' + OnClick = SRHItemClick + end + object lifetable: TMenuItem + Caption = 'LIFE TABLE' + OnClick = lifetableClick + end + end + object MenuItem41: TMenuItem + Caption = 'Statistical Process Control' + object MenuItem116: TMenuItem + Caption = 'XBAR Chart' + OnClick = MenuItem116Click + end + object MenuItem117: TMenuItem + Caption = 'Range Chart' + OnClick = MenuItem117Click + end + object MenuItem118: TMenuItem + Caption = 'S Control Chart' + OnClick = MenuItem118Click + end + object MenuItem6: TMenuItem + Caption = 'CUMSUM Chart' + OnClick = MenuItem6Click + end + object MenuItem119: TMenuItem + Caption = 'Defect (nonconformity) c Chart' + OnClick = MenuItem119Click + end + object pcontrochart: TMenuItem + Caption = 'p Control Chart' + OnClick = pcontrochartClick + end + object MenuItem120: TMenuItem + Caption = 'Defects per Unit u Chart' + OnClick = MenuItem120Click + end + end + object MenuItem9: TMenuItem + Caption = 'Financial' + object MenuItem10: TMenuItem + Caption = 'Loan Amortization Schedule' + OnClick = MenuItem10Click + end + object MenuItem11: TMenuItem + Caption = 'Sum of years digits depreciation' + OnClick = MenuItem11Click + end + object MenuItem14: TMenuItem + Caption = 'Straight line depreciation' + OnClick = MenuItem14Click + end + object MenuItem17: TMenuItem + Caption = 'Internal rate of return' + Visible = False + end + object MenuItem18: TMenuItem + Caption = 'Present Value' + Visible = False + end + object MenuItem19: TMenuItem + Caption = 'Period Payment' + Visible = False + end + object MenuItem21: TMenuItem + Caption = 'Payment' + Visible = False + end + object MenuItem22: TMenuItem + Caption = 'No. of Periods' + Visible = False + end + object MenuItem23: TMenuItem + Caption = 'Net Present Value' + Visible = False + end + object MenuItem24: TMenuItem + Caption = 'Interest Rate' + Visible = False + end + object MenuItem25: TMenuItem + Caption = 'Interest Payment' + Visible = False + end + object MenuItem26: TMenuItem + Caption = 'Future Value' + Visible = False + end + object MenuItem27: TMenuItem + Caption = 'Double Declining Value' + OnClick = MenuItem27Click + end + end + object MatManMnu: TMenuItem + Caption = 'Matrix Manipulation' + OnClick = MatManMnuClick + end + end + object Option: TMenuItem + Caption = 'Options' + object ShowOpts: TMenuItem + Caption = 'Show Options' + OnClick = OptionClick + end + object PicView: TMenuItem + Caption = 'View Pictures' + Visible = False + end + end + object MenuItem7: TMenuItem + Caption = 'Simulations' + object ScatPlot: TMenuItem + Caption = 'Bivariate Scatter Plot' + OnClick = ScatPlotClick + end + object MultDists: TMenuItem + Caption = 'Multivariate Distribution' + OnClick = MultDistsClick + end + object TypeErrors: TMenuItem + Caption = 'Type 1 and Type 2 Error Curves' + OnClick = TypeErrorsClick + end + object Power: TMenuItem + Caption = 'Power Curves for a z test' + OnClick = PowerClick + end + object DistPlots: TMenuItem + Caption = 'Distribution Plots and Critical Values' + OnClick = DistPlotsClick + end + object SeqValues: TMenuItem + Caption = 'Generate Sequential Values' + OnClick = SeqValuesClick + end + object RandomVals: TMenuItem + Caption = 'Random Theoretical Values' + OnClick = RandomValsClick + end + object Probabilities: TMenuItem + Caption = 'Probabilities' + object probgtz: TMenuItem + Caption = 'Probability > z' + OnClick = probgtzClick + end + object Probltz: TMenuItem + Caption = 'Probability < z' + OnClick = ProbltzClick + end + object probzbetween: TMenuItem + Caption = 'Prob between 2 z values' + OnClick = probzbetweenClick + end + object inversez: TMenuItem + Caption = 'z for a given cum. Probability' + OnClick = inversezClick + end + object Chiprob: TMenuItem + Caption = 'Chisquare Probability' + OnClick = ChiprobClick + end + object tprob: TMenuItem + Caption = 'Student t probability' + OnClick = tprobClick + end + object Fprob: TMenuItem + Caption = 'F probability' + OnClick = FprobClick + end + object HypergeoProb: TMenuItem + Caption = 'Hypergeometric probability' + OnClick = HypergeoProbClick + end + end + end + object MenuItem8: TMenuItem + Caption = 'Help' + object About: TMenuItem + Caption = 'About...' + OnClick = AboutClick + end + object GridUse: TMenuItem + Caption = 'Using the Grid' + OnClick = GridUseClick + end + object HelpContents: TMenuItem + Caption = 'General Help' + OnClick = HelpContentsClick + end + end + end + object OpenDialog1: TOpenDialog + left = 80 + top = 360 + end + object SaveDialog1: TSaveDialog + left = 144 + top = 360 + end +end diff --git a/applications/lazstats/source_orig/mainunit.lrs b/applications/lazstats/source_orig/mainunit.lrs new file mode 100644 index 000000000..508249819 --- /dev/null +++ b/applications/lazstats/source_orig/mainunit.lrs @@ -0,0 +1,299 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TOS3MainFrm','FORMDATA',[ + 'TPF0'#11'TOS3MainFrm'#10'OS3MainFrm'#4'Left'#2'+'#6'Height'#3#7#2#3'Top'#3 + +#133#0#5'Width'#3#211#2#7'Caption'#6#22'LazStats Sept. 5, 2013'#12'ClientHei' + +'ght'#3#243#1#11'ClientWidth'#3#211#2#12'Font.CharSet'#7#12'ANSI_CHARSET'#10 + +'Font.Color'#7#7'clBlack'#11'Font.Height'#2#245#9'Font.Name'#6#11'Courier Ne' + +'w'#10'Font.Pitch'#7#7'fpFixed'#12'Font.Quality'#7#7'fqDraft'#4'Menu'#7#9'Ma' + +'inMenu1'#7'OnClick'#7#9'FormClick'#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6 + +#8'0.9.30.4'#0#6'TPanel'#6'Panel1'#4'Left'#2#0#6'Height'#2'#'#3'Top'#2#0#5'W' + +'idth'#3#211#2#5'Align'#7#5'alTop'#12'ClientHeight'#2'#'#11'ClientWidth'#3 + +#211#2#8'TabOrder'#2#0#0#6'TLabel'#6'Label1'#4'Left'#2#15#6'Height'#2#15#3'T' + +'op'#2#9#5'Width'#2'@'#7'Caption'#6#9'No. Cases'#11'ParentColor'#8#0#0#6'TLa' + +'bel'#6'Label2'#4'Left'#3#138#0#6'Height'#2#15#3'Top'#2#9#5'Width'#2'\'#7'Ca' + +'ption'#6#13'No. Variables'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left' + +#3')'#1#6'Height'#2#15#3'Top'#2#10#5'Width'#2'\'#7'Caption'#6#13'Current Fil' + +'e:'#11'ParentColor'#8#0#0#5'TEdit'#11'NoCasesEdit'#4'Left'#2'X'#6'Height'#2 + +#22#3'Top'#2#6#5'Width'#2'('#7'TabStop'#8#8'TabOrder'#2#0#4'Text'#6#11'NoCas' + +'esEdit'#0#0#5'TEdit'#10'NoVarsEdit'#4'Left'#3#240#0#6'Height'#2#22#3'Top'#2 + +#3#5'Width'#2'0'#7'TabStop'#8#8'TabOrder'#2#1#4'Text'#6#10'NoVarsEdit'#0#0#5 + +'TEdit'#12'FileNameEdit'#4'Left'#3#136#1#6'Height'#2#22#3'Top'#2#8#5'Width'#3 + +'1'#1#7'TabStop'#8#8'TabOrder'#2#2#4'Text'#6#12'FileNameEdit'#0#0#0#6'TPanel' + +#6'Panel2'#4'Left'#2#0#6'Height'#2')'#3'Top'#3#202#1#5'Width'#3#211#2#5'Alig' + +'n'#7#8'alBottom'#12'ClientHeight'#2')'#11'ClientWidth'#3#211#2#8'TabOrder'#2 + +#1#0#6'TLabel'#6'Label4'#4'Left'#2#11#6'Height'#2#15#3'Top'#2#15#5'Width'#2 + +#29#7'Caption'#6#4'Row:'#11'ParentColor'#8#0#0#6'TLabel'#6'Label5'#4'Left'#3 + +#129#0#6'Height'#2#15#3'Top'#2#15#5'Width'#2'2'#7'Caption'#6#7'Column:'#11'P' + +'arentColor'#8#0#0#6'TLabel'#6'Label6'#4'Left'#3#1#1#6'Height'#2#15#3'Top'#2 + +#11#5'Width'#2'\'#7'Caption'#6#13'Filter Status'#11'ParentColor'#8#0#0#5'TEd' + +'it'#7'RowEdit'#4'Left'#2')'#6'Height'#2#22#3'Top'#2#8#5'Width'#2'I'#7'TabSt' + +'op'#8#8'TabOrder'#2#0#4'Text'#6#7'RowEdit'#0#0#5'TEdit'#7'ColEdit'#4'Left'#3 + +#177#0#6'Height'#2#22#3'Top'#2#8#5'Width'#2'A'#7'TabStop'#8#8'TabOrder'#2#1#4 + +'Text'#6#7'ColEdit'#0#0#5'TEdit'#10'FilterEdit'#4'Left'#3'`'#1#6'Height'#2#22 + +#3'Top'#2#8#5'Width'#3#231#0#7'TabStop'#8#8'TabOrder'#2#2#4'Text'#6#10'Filte' + +'rEdit'#0#0#0#11'TStringGrid'#8'DataGrid'#4'Left'#2#0#6'Height'#3#167#1#3'To' + +'p'#2'#'#5'Width'#3#211#2#5'Align'#7#8'alClient'#8'AutoEdit'#8#8'ColCount'#2 + +#2#15'DefaultColWidth'#2'P'#7'Options'#11#15'goFixedHorzLine'#10'goVertLine' + +#10'goHorzLine'#13'goRangeSelect'#11'goColSizing'#9'goEditing'#6'goTabs'#14 + +'goSmoothScroll'#0#8'RowCount'#2#2#8'TabOrder'#2#2#7'TabStop'#8#17'TitleFont' + +'.CharSet'#7#12'ANSI_CHARSET'#15'TitleFont.Color'#7#7'clBlack'#16'TitleFont.' + +'Height'#2#245#14'TitleFont.Name'#6#11'Courier New'#15'TitleFont.Pitch'#7#7 + +'fpFixed'#17'TitleFont.Quality'#7#7'fqDraft'#7'OnClick'#7#13'DataGridClick'#9 + +'OnKeyDown'#7#15'DataGridKeyDown'#10'OnKeyPress'#7#16'DataGridKeyPress'#0#0#9 + +'TMainMenu'#9'MainMenu1'#4'left'#2#16#3'top'#3'h'#1#0#9'TMenuItem'#9'MenuIte' + +'m1'#7'Caption'#6#5'FILES'#0#9'TMenuItem'#11'SaveFileBtn'#7'Caption'#6#16'Sa' + +'ve File (.LAZ)'#7'OnClick'#7#16'SaveFileBtnClick'#0#0#9'TMenuItem'#11'OpenF' + +'ileBtn'#7'Caption'#6#16'Open File (.LAZ)'#7'OnClick'#7#16'OpenFileBtnClick' + +#0#0#9'TMenuItem'#10'NewFileBtn'#7'Caption'#6#8'New File'#7'OnClick'#7#15'Ne' + +'wFileBtnClick'#0#0#9'TMenuItem'#12'CloseFileBtn'#7'Caption'#6#10'Close File' + +#7'OnClick'#7#17'CloseFileBtnClick'#0#0#9'TMenuItem'#10'MenuItem12'#7'Captio' + +'n'#6#23'-----------------------'#0#0#9'TMenuItem'#10'MenuItem13'#7'Caption' + +#6#19'Import File of Type'#0#9'TMenuItem'#12'TabFileInBtn'#7'Caption'#6#13'T' + +'AB Separated'#7'OnClick'#7#17'TabFileInBtnClick'#0#0#9'TMenuItem'#9'CSVFile' + +'In'#7'Caption'#6#15'Comma Separated'#7'OnClick'#7#14'CSVFileInClick'#0#0#9 + +'TMenuItem'#9'SSVFileIn'#7'Caption'#6#15'Space Separated'#7'OnClick'#7#14'SS' + +'VFileInClick'#0#0#0#9'TMenuItem'#10'TabFileOut'#7'Caption'#6#19'Export File' + +' of Type'#0#9'TMenuItem'#10'MenuItem20'#7'Caption'#6#13'Tab Separated'#7'On' + +'Click'#7#15'MenuItem20Click'#0#0#9'TMenuItem'#10'CSVFileOut'#7'Caption'#6#15 + +'Comma Separated'#7'OnClick'#7#15'CSVFileOutClick'#0#0#9'TMenuItem'#10'SSVFi' + +'leOut'#7'Caption'#6#15'Space Separated'#7'OnClick'#7#15'SSVFileOutClick'#0#0 + +#0#9'TMenuItem'#10'MenuItem15'#7'Caption'#6#21'---------------------'#0#0#9 + +'TMenuItem'#10'MenuItem16'#7'Caption'#6#4'Exit'#7'OnClick'#7#15'MenuItem16Cl' + +'ick'#0#0#0#9'TMenuItem'#9'MenuItem2'#7'Caption'#6#9'Variables'#0#9'TMenuIte' + +'m'#9'DefineVar'#7'Caption'#6#6'Define'#7'OnClick'#7#14'DefineVarClick'#0#0#9 + +'TMenuItem'#9'PrintDefs'#7'Caption'#6#17'Print Definitions'#7'OnClick'#7#14 + +'PrintDefsClick'#0#0#9'TMenuItem'#9'Transform'#7'Caption'#6#19'Transform Var' + +'iables'#7'OnClick'#7#14'TransformClick'#0#0#9'TMenuItem'#6'Recode'#7'Captio' + ,'n'#6#16'Recode Variables'#7'OnClick'#7#11'RecodeClick'#0#0#9'TMenuItem'#8'E' + +'quation'#7'Caption'#6#15'Equation Editor'#7'OnClick'#7#13'EquationClick'#0#0 + +#0#9'TMenuItem'#9'MenuItem3'#7'Caption'#6#5'Tools'#0#9'TMenuItem'#10'FormatG' + +'rid'#7'Caption'#6#17'Format Grid Cells'#7'OnClick'#7#15'FormatGridClick'#0#0 + +#9'TMenuItem'#9'SortCases'#7'Caption'#6#10'Sort Cases'#7'OnClick'#7#14'SortC' + +'asesClick'#0#0#9'TMenuItem'#9'PrintGrid'#7'Caption'#6#15'Print Grid File'#7 + +'OnClick'#7#14'PrintGridClick'#0#0#9'TMenuItem'#10'MenuItem28'#7'Caption'#6 + +#16'Show Output Form'#7'OnClick'#7#15'MenuItem28Click'#0#0#9'TMenuItem'#11'S' + +'electCases'#7'Caption'#6#12'Select Cases'#7'OnClick'#7#16'SelectCasesClick' + +#0#0#9'TMenuItem'#11'LoadSubFile'#7'Caption'#6#15'Load a Sub File'#0#0#9'TMe' + +'nuItem'#10'MenuItem30'#7'Caption'#6#29'Swap Rows and Columns of Grid'#7'OnC' + +'lick'#7#15'MenuItem30Click'#0#0#9'TMenuItem'#11'SwapDecType'#7'Caption'#6'(' + +'Change English to European or Vice Versa'#7'OnClick'#7#16'SwapDecTypeClick' + +#0#0#9'TMenuItem'#13'StrToIntegers'#7'Caption'#6' Convert strings to integer' + +' codes'#7'OnClick'#7#18'StrToIntegersClick'#0#0#9'TMenuItem'#6'smooth'#7'Ca' + +'ption'#6#25'Smooth Data in a Variable'#7'OnClick'#7#11'smoothClick'#0#0#9'T' + +'MenuItem'#10'Calculater'#7'Caption'#6#10'Calculator'#7'OnClick'#7#15'Calcul' + +'aterClick'#0#0#9'TMenuItem'#8'JPEGView'#7'Caption'#6#17'JPEG Image Viewer'#7 + +'OnClick'#7#13'JPEGViewClick'#0#0#0#9'TMenuItem'#9'MenuItem4'#7'Caption'#6#4 + +'Edit'#0#9'TMenuItem'#9'blockcopy'#7'Caption'#6#21'Copy a Block of Cells'#7 + +'OnClick'#7#14'blockcopyClick'#0#0#9'TMenuItem'#10'BlockPaste'#7'Caption'#6 + +#22'Paste a Block of Cells'#7'OnClick'#7#15'BlockPasteClick'#0#0#9'TMenuItem' + +#8'BlockCut'#7'Caption'#6#20'Cut a Block of Cells'#7'Visible'#8#0#0#9'TMenuI' + +'tem'#9'InsNewCol'#7'Caption'#6'%Insert New Column Before Current One'#7'On' + +'Click'#7#14'InsNewColClick'#0#0#9'TMenuItem'#7'CopyCol'#7'Caption'#6#11'Cop' + +'y Column'#7'OnClick'#7#12'CopyColClick'#0#0#9'TMenuItem'#6'CutCol'#7'Captio' + +'n'#6#10'Cut Column'#7'OnClick'#7#11'CutColClick'#0#0#9'TMenuItem'#8'PasteCo' + +'l'#7'Caption'#6#12'Paste Column'#7'OnClick'#7#13'PasteColClick'#0#0#9'TMenu' + +'Item'#6'NewRow'#7'Caption'#6#15'Insert New Row'#7'OnClick'#7#11'NewRowClic' + +'k'#0#0#9'TMenuItem'#7'CopyRow'#7'Caption'#6#8'Copy Row'#7'OnClick'#7#12'Cop' + +'yRowClick'#0#0#9'TMenuItem'#6'CutRow'#7'Caption'#6#7'Cut Row'#7'OnClick'#7 + +#11'CutRowClick'#0#0#9'TMenuItem'#8'PasteRow'#7'Caption'#6#9'Paste Row'#7'On' + +'Click'#7#13'PasteRowClick'#0#0#0#9'TMenuItem'#9'MenuItem5'#7'Caption'#6#8'A' + +'nalyses'#0#9'TMenuItem'#10'MenuItem32'#7'Caption'#6#11'Descriptive'#0#9'TMe' + +'nuItem'#13'Distributions'#7'Caption'#6#23'Distribution Statistics'#7'OnClic' + +'k'#7#18'DistributionsClick'#0#0#9'TMenuItem'#8'FreqAnal'#7'Caption'#6#18'Fr' + +'equency Analysis'#7'OnClick'#7#13'FreqAnalClick'#0#0#9'TMenuItem'#7'GrpFreq' + +#7'Caption'#6#22'Plot Group Frequencies'#7'OnClick'#7#12'GrpFreqClick'#0#0#9 + +'TMenuItem'#9'CrossTabs'#7'Caption'#6#16'Cross Tabulation'#7'OnClick'#7#14'C' + +'rossTabsClick'#0#0#9'TMenuItem'#9'Breakdown'#7'Caption'#6#9'Breakdown'#7'On' + +'Click'#7#14'BreakdownClick'#0#0#9'TMenuItem'#7'BoxPlot'#7'Caption'#6#8'Box ' + +'Plot'#7'OnClick'#7#12'BoxPlotClick'#0#0#9'TMenuItem'#14'NormalityTests'#7'C' + +'aption'#6#15'Normality Tests'#7'OnClick'#7#19'NormalityTestsClick'#0#0#9'TM' + +'enuItem'#12'ThreeDRotate'#7'Caption'#6#21'3-D Variable Rotation'#7'OnClick' + +#7#17'ThreeDRotateClick'#0#0#9'TMenuItem'#8'PlotXvsY'#7'Caption'#6#11'Plot X' + +' vs Y'#7'OnClick'#7#13'PlotXvsYClick'#0#0#9'TMenuItem'#10'BubblePlot'#7'Cap' + +'tion'#6#29'Repeated Measures Bubble Plot'#7'OnClick'#7#15'BubblePlotClick'#0 + +#0#9'TMenuItem'#8'StemLeaf'#7'Caption'#6#18'Stem and Leaf Plot'#7'OnClick'#7 + +#13'StemLeafClick'#0#0#9'TMenuItem'#8'MultXvsY'#7'Caption'#6#26'Multiple Gro' + +'up X vs Y Plot'#7'OnClick'#7#13'MultXvsYClick'#0#0#9'TMenuItem'#8'XvsMultY' + +#7'Caption'#6#24'X versus Multiple Y Plot'#7'OnClick'#7#13'XvsMultYClick'#0#0 + +#9'TMenuItem'#12'CompareDists'#7'Caption'#6#21'Compare Distributions'#7'OnCl' + +'ick'#7#17'CompareDistsClick'#0#0#9'TMenuItem'#14'ResistanceLine'#7'Caption' + +#6'!Resistant Line for Bivariate Data'#7'OnClick'#7#19'ResistanceLineClick'#0 + +#0#9'TMenuItem'#10'DataSmooth'#7'Caption'#6#14'Data Smoothing'#7'OnClick'#7 + +#15'DataSmoothClick'#0#0#9'TMenuItem'#8'homotest'#7'Caption'#6'/Brown-Forsyt' + +'he test for homogeneity of variance'#7'OnClick'#7#13'homotestClick'#0#0#0#9 + +'TMenuItem'#12'OneSampTests'#7'Caption'#6#16'One Sample Tests'#7'OnClick'#7 + +#17'OneSampTestsClick'#0#0#9'TMenuItem'#10'MenuItem34'#7'Caption'#6#11'Compa' + +'risons'#0#9'TMenuItem'#8'PropDiff'#7'Caption'#6#29'Difference beween Propor' + +'tions'#7'OnClick'#7#13'PropDiffClick'#0#0#9'TMenuItem'#8'CorrDiff'#7'Captio' + +'n'#6#31'Difference Between Correlations'#7'OnClick'#7#13'CorrDiffClick'#0#0 + +#9'TMenuItem'#6'ttests'#7'Caption'#6#7't-tests'#7'OnClick'#7#11'ttestsClick' + +#0#0#9'TMenuItem'#5'Anova'#7'Caption'#6#19'1,2 or 3 Way ANOVAs'#7'OnClick'#7 + ,#10'AnovaClick'#0#0#9'TMenuItem'#11'WithinAnova'#7'Caption'#6#21'Within Subj' + +'ects ANOVA'#7'OnClick'#7#16'WithinAnovaClick'#0#0#9'TMenuItem'#8'AxSAnova'#7 + +'Caption'#6#11'A x S ANOVA'#7'OnClick'#7#13'AxSAnovaClick'#0#0#9'TMenuItem'#8 + +'ABSAnova'#7'Caption'#6#15'A x B x S ANOVA'#7'OnClick'#7#13'ABSAnovaClick'#0 + +#0#9'TMenuItem'#4'BinA'#7'Caption'#6#19'B Nested in A ANOVA'#7'OnClick'#7#9 + +'BinAClick'#0#0#9'TMenuItem'#9'NestedABC'#7'Caption'#6#28'ABC ANOVA with B N' + +'ested in A'#7'OnClick'#7#14'NestedABCClick'#0#0#9'TMenuItem'#12'OneCaseAnov' + +'a'#7'Caption'#6'''2 or 3 Way ANOVA with One Case Per Cell'#7'OnClick'#7#17 + +'OneCaseAnovaClick'#0#0#9'TMenuItem'#6'Ancova'#7'Caption'#6#20'ANCOVA by Reg' + +'ression'#7'OnClick'#7#11'AncovaClick'#0#0#9'TMenuItem'#3'GLM'#7'Caption'#6 + +#20'General Linear Model'#7'OnClick'#7#8'GLMClick'#0#0#9'TMenuItem'#12'Latin' + +'Squares'#7'Caption'#6#29'Latin and Greco-Latin Squares'#7'OnClick'#7#17'Lat' + +'inSquaresClick'#0#0#0#9'TMenuItem'#10'MenuItem35'#7'Caption'#6#11'Correlati' + +'on'#0#9'TMenuItem'#10'MenuItem71'#7'Caption'#6#14'Product-Moment'#7'OnClick' + +#7#15'MenuItem71Click'#0#0#9'TMenuItem'#10'MenuItem72'#7'Caption'#6#20'Parti' + +'al, Semipartial'#7'OnClick'#7#15'MenuItem72Click'#0#0#9'TMenuItem'#10'MenuI' + +'tem73'#7'Caption'#6#15'Autocorrelation'#7'OnClick'#7#15'MenuItem73Click'#0#0 + +#9'TMenuItem'#10'MenuItem74'#7'Caption'#6#9'Canonical'#7'OnClick'#7#15'MenuI' + +'tem74Click'#0#0#0#9'TMenuItem'#10'MenuItem36'#7'Caption'#6#19'Multiple Regr' + +'ession'#0#9'TMenuItem'#8'LSMRitem'#7'Caption'#6'!Least Squares Multiple Reg' + +'ression'#7'OnClick'#7#13'LSMRitemClick'#0#0#9'TMenuItem'#10'MenuItem75'#7'C' + +'aption'#6#16'Forward Stepwise'#7'OnClick'#7#15'MenuItem75Click'#0#0#9'TMenu' + +'Item'#10'MenuItem76'#7'Caption'#6#17'Backward Stepwise'#7'OnClick'#7#15'Men' + +'uItem76Click'#0#0#9'TMenuItem'#10'MenuItem77'#7'Caption'#6#12'Simultaneous' + +#7'OnClick'#7#15'MenuItem77Click'#0#0#9'TMenuItem'#10'MenuItem78'#7'Caption' + +#6#11'Block Entry'#7'OnClick'#7#15'MenuItem78Click'#0#0#9'TMenuItem'#10'Menu' + +'Item79'#7'Caption'#6#16'Best Combination'#7'OnClick'#7#15'MenuItem79Click'#0 + +#0#9'TMenuItem'#10'MenuItem80'#7'Caption'#6#15'Binary Logistic'#7'OnClick'#7 + +#15'MenuItem80Click'#0#0#9'TMenuItem'#10'MenuItem81'#7'Caption'#6'-Cox Propo' + +'rtional Hazzards Survival Regression'#7'OnClick'#7#15'MenuItem81Click'#0#0#9 + +'TMenuItem'#10'MenuItem82'#7'Caption'#6#18'Linear Programming'#7'OnClick'#7 + +#15'MenuItem82Click'#0#0#9'TMenuItem'#9'TwoSLSReg'#7'Caption'#6'"Two Stage L' + +'east Squares Regression'#7'OnClick'#7#14'TwoSLSRegClick'#0#0#9'TMenuItem'#6 + +'WLSReg'#7'Caption'#6'!Weighted Least Squares Regression'#7'OnClick'#7#11'WL' + +'SRegClick'#0#0#0#9'TMenuItem'#10'MenuItem37'#7'Caption'#6#12'Multivariate'#0 + +#9'TMenuItem'#10'MenuItem83'#7'Caption'#6#30'MANOVA / Discriminant Function' + +#7'OnClick'#7#15'MenuItem83Click'#0#0#9'TMenuItem'#10'MenuItem84'#7'Caption' + +#6#21'Hierarchical Analysis'#7'OnClick'#7#15'MenuItem84Click'#0#0#9'TMenuIte' + +'m'#10'MenuItem29'#7'Caption'#6#23'Average Link Clustering'#7'OnClick'#7#15 + +'MenuItem29Click'#0#0#9'TMenuItem'#10'MenuItem31'#7'Caption'#6#18'K Means Cl' + +'ustering'#7'OnClick'#7#15'MenuItem31Click'#0#0#9'TMenuItem'#10'MenuItem33'#7 + +'Caption'#6#22'Single Link Clustering'#7'OnClick'#7#15'MenuItem33Click'#0#0#9 + +'TMenuItem'#10'MenuItem85'#7'Caption'#6#13'Path Analysis'#7'OnClick'#7#15'Me' + +'nuItem85Click'#0#0#9'TMenuItem'#10'MenuItem86'#7'Caption'#6#15'Factor Analy' + +'sis'#7'OnClick'#7#15'MenuItem86Click'#0#0#9'TMenuItem'#10'MenuItem87'#7'Cap' + +'tion'#6#21'Canonical Correlation'#7'OnClick'#7#15'MenuItem87Click'#0#0#9'TM' + +'enuItem'#10'MenuItem88'#7'Caption'#6#20'General Linear Model'#7'OnClick'#7 + +#15'MenuItem88Click'#0#0#9'TMenuItem'#12'BartlettTest'#7'Caption'#6#27'Bartl' + +'ett Test of Sphericity'#7'OnClick'#7#17'BartlettTestClick'#0#0#9'TMenuItem' + +#14'Correspondence'#7'Caption'#6#23'Correspondence Analysis'#7'OnClick'#7#19 + +'CorrespondenceClick'#0#0#9'TMenuItem'#12'MedianPolish'#7'Caption'#6' Median' + +' Polishing for a 2x2 Table'#7'OnClick'#7#17'MedianPolishClick'#0#0#0#9'TMen' + +'uItem'#10'MenuItem38'#7'Caption'#6#20'Cross-Classification'#0#9'TMenuItem' + +#10'MenuItem89'#7'Caption'#6#14'AxB Log Linear'#7'OnClick'#7#15'MenuItem89Cl' + +'ick'#0#0#9'TMenuItem'#10'MenuItem90'#7'Caption'#6#16'AxBxC Log Linear'#7'On' + +'Click'#7#15'MenuItem90Click'#0#0#9'TMenuItem'#10'MenuItem91'#7'Caption'#6#17 + +'Log Linear Screen'#7'OnClick'#7#15'MenuItem91Click'#0#0#0#9'TMenuItem'#10'M' + +'enuItem39'#7'Caption'#6#20'Measurement Programs'#0#9'TMenuItem'#10'MenuItem' + +'92'#7'Caption'#6#25'Generate Sample Test Data'#7'OnClick'#7#15'MenuItem92Cl' + +'ick'#0#0#9'TMenuItem'#10'MenuItem93'#7'Caption'#6#23'Classical Test Analysi' + +'s'#7'OnClick'#7#15'MenuItem93Click'#0#0#9'TMenuItem'#10'MenuItem94'#7'Capti' + +'on'#6#22'Rasch Test Calibration'#7'OnClick'#7#15'MenuItem94Click'#0#0#9'TMe' + +'nuItem'#10'MenuItem95'#7'Caption'#6#27'Successive Interval Scaling'#7'OnCli' + +'ck'#7#15'MenuItem95Click'#0#0#9'TMenuItem'#10'MenuItem96'#7'Caption'#6#26'G' + ,'uttman Scalogram Analysis'#7'OnClick'#7#15'MenuItem96Click'#0#0#9'TMenuItem' + +#10'MenuItem97'#7'Caption'#6#30'Weighted Composite Reliability'#7'OnClick'#7 + +#15'MenuItem97Click'#0#0#9'TMenuItem'#10'MenuItem98'#7'Caption'#6' Kuder-Ric' + +'hardson #21 Reliability'#7'OnClick'#7#15'MenuItem98Click'#0#0#9'TMenuItem' + +#10'MenuItem99'#7'Caption'#6'#Spearman-Brown Prophecy Reliability'#7'OnClick' + +#7#15'MenuItem99Click'#0#0#9'TMenuItem'#11'MenuItem100'#7'Caption'#6'''Relia' + +'bility Due to Test Variance Change'#7'OnClick'#7#16'MenuItem100Click'#0#0#9 + +'TMenuItem'#11'MenuItem101'#7'Caption'#6#29'Differential Item Functioning'#7 + +'OnClick'#7#16'MenuItem101Click'#0#0#9'TMenuItem'#11'MenuItem102'#7'Caption' + +#6#23'Polytomous DIF Analysis'#7'OnClick'#7#16'MenuItem102Click'#0#0#9'TMenu' + +'Item'#8'GrdBkMnu'#7'Caption'#6#10'Grade Book'#7'OnClick'#7#13'GrdBkMnuClick' + +#0#0#9'TMenuItem'#16'ItemBankMenuItem'#7'Caption'#6#12'Item Banking'#7'OnCli' + +'ck'#7#21'ItemBankMenuItemClick'#0#0#0#9'TMenuItem'#10'MenuItem40'#7'Caption' + +#6#13'Nonparametric'#0#9'TMenuItem'#10'SimpChiSqr'#7'Caption'#6#31'Simple Ch' + +'iSquare for Categories'#7'OnClick'#7#15'SimpChiSqrClick'#0#0#9'TMenuItem'#11 + +'MenuItem103'#7'Caption'#6#22'Contingency Chi Square'#7'OnClick'#7#16'MenuIt' + +'em103Click'#0#0#9'TMenuItem'#11'MenuItem104'#7'Caption'#6#25'Spearman Rank ' + +'Correlation'#7'OnClick'#7#16'MenuItem104Click'#0#0#9'TMenuItem'#11'MenuItem' + +'105'#7'Caption'#6#19'Mann-Whitney U Test'#7'OnClick'#7#16'MenuItem105Click' + +#0#0#9'TMenuItem'#11'MenuItem106'#7'Caption'#6#19'Fisher''s Exact Test'#7'On' + +'Click'#7#16'MenuItem106Click'#0#0#9'TMenuItem'#11'MenuItem107'#7'Caption'#6 + +'$Kendall''s Coefficient of Concordance'#7'OnClick'#7#16'MenuItem107Click'#0 + +#0#9'TMenuItem'#11'MenuItem108'#7'Caption'#6#28'Kruskal-Wallis One Way ANOVA' + +#7'OnClick'#7#16'MenuItem108Click'#0#0#9'TMenuItem'#11'MenuItem109'#7'Captio' + +'n'#6#31'Matched Pairs Signed Ranks Test'#7'OnClick'#7#16'MenuItem109Click'#0 + +#0#9'TMenuItem'#11'MenuItem110'#7'Caption'#6#14'Cochran Q Test'#7'OnClick'#7 + +#16'MenuItem110Click'#0#0#9'TMenuItem'#11'MenuItem111'#7'Caption'#6#9'Sign T' + +'est'#7'OnClick'#7#16'MenuItem111Click'#0#0#9'TMenuItem'#11'MenuItem112'#7'C' + +'aption'#6#22'Friedman Two Way ANOVA'#7'OnClick'#7#16'MenuItem112Click'#0#0#9 + +'TMenuItem'#11'MenuItem113'#7'Caption'#6#31'Probability of a binomial event' + +#7'OnClick'#7#16'MenuItem113Click'#0#0#9'TMenuItem'#11'MenuItem114'#7'Captio' + +'n'#6#30'Kendall''s Tau and Parrtial Tau'#7'OnClick'#7#16'MenuItem114Click'#0 + +#0#9'TMenuItem'#11'MenuItem115'#7'Caption'#6#30'Kaplan-Meier Survival Analys' + +'is'#7'OnClick'#7#16'MenuItem115Click'#0#0#9'TMenuItem'#13'RiditAnalysis'#7 + +'Caption'#6#14'RIDIT Analysis'#7'OnClick'#7#18'RiditAnalysisClick'#0#0#9'TMe' + +'nuItem'#11'WghtedKappa'#7'Caption'#6#24'Kappa and Weighted Kappa'#7'OnClick' + +#7#16'WghtedKappaClick'#0#0#9'TMenuItem'#8'GenKappa'#7'Caption'#6#17'General' + +'ized Kappa'#7'OnClick'#7#13'GenKappaClick'#0#0#9'TMenuItem'#8'RunsTest'#7'C' + +'aption'#6#23'Runs Test for Normality'#7'OnClick'#7#13'RunsTestClick'#0#0#9 + +'TMenuItem'#4'Sens'#7'Caption'#6#20'Sen''s Slope Analysis'#7'OnClick'#7#9'Se' + +'nsClick'#0#0#9'TMenuItem'#6'KSTest'#7'Caption'#6#23'Kolmogorov-Smirnov Test' + +#7'OnClick'#7#11'KSTestClick'#0#0#9'TMenuItem'#7'SRHItem'#7'Caption'#6#29'Sc' + +'heirer-Ray-Hart 2-way ANOVA'#7'OnClick'#7#12'SRHItemClick'#0#0#9'TMenuItem' + +#9'lifetable'#7'Caption'#6#10'LIFE TABLE'#7'OnClick'#7#14'lifetableClick'#0#0 + +#0#9'TMenuItem'#10'MenuItem41'#7'Caption'#6#27'Statistical Process Control'#0 + +#9'TMenuItem'#11'MenuItem116'#7'Caption'#6#10'XBAR Chart'#7'OnClick'#7#16'Me' + +'nuItem116Click'#0#0#9'TMenuItem'#11'MenuItem117'#7'Caption'#6#11'Range Char' + +'t'#7'OnClick'#7#16'MenuItem117Click'#0#0#9'TMenuItem'#11'MenuItem118'#7'Cap' + +'tion'#6#15'S Control Chart'#7'OnClick'#7#16'MenuItem118Click'#0#0#9'TMenuIt' + +'em'#9'MenuItem6'#7'Caption'#6#12'CUMSUM Chart'#7'OnClick'#7#14'MenuItem6Cli' + +'ck'#0#0#9'TMenuItem'#11'MenuItem119'#7'Caption'#6#30'Defect (nonconformity)' + +' c Chart'#7'OnClick'#7#16'MenuItem119Click'#0#0#9'TMenuItem'#12'pcontrochar' + +'t'#7'Caption'#6#15'p Control Chart'#7'OnClick'#7#17'pcontrochartClick'#0#0#9 + +'TMenuItem'#11'MenuItem120'#7'Caption'#6#24'Defects per Unit u Chart'#7'OnCl' + +'ick'#7#16'MenuItem120Click'#0#0#0#9'TMenuItem'#9'MenuItem9'#7'Caption'#6#9 + +'Financial'#0#9'TMenuItem'#10'MenuItem10'#7'Caption'#6#26'Loan Amortization ' + +'Schedule'#7'OnClick'#7#15'MenuItem10Click'#0#0#9'TMenuItem'#10'MenuItem11'#7 + +'Caption'#6' Sum of years digits depreciation'#7'OnClick'#7#15'MenuItem11Cli' + +'ck'#0#0#9'TMenuItem'#10'MenuItem14'#7'Caption'#6#26'Straight line depreciat' + +'ion'#7'OnClick'#7#15'MenuItem14Click'#0#0#9'TMenuItem'#10'MenuItem17'#7'Cap' + +'tion'#6#23'Internal rate of return'#7'Visible'#8#0#0#9'TMenuItem'#10'MenuIt' + +'em18'#7'Caption'#6#13'Present Value'#7'Visible'#8#0#0#9'TMenuItem'#10'MenuI' + +'tem19'#7'Caption'#6#14'Period Payment'#7'Visible'#8#0#0#9'TMenuItem'#10'Men' + +'uItem21'#7'Caption'#6#7'Payment'#7'Visible'#8#0#0#9'TMenuItem'#10'MenuItem2' + ,'2'#7'Caption'#6#14'No. of Periods'#7'Visible'#8#0#0#9'TMenuItem'#10'MenuIte' + +'m23'#7'Caption'#6#17'Net Present Value'#7'Visible'#8#0#0#9'TMenuItem'#10'Me' + +'nuItem24'#7'Caption'#6#13'Interest Rate'#7'Visible'#8#0#0#9'TMenuItem'#10'M' + +'enuItem25'#7'Caption'#6#16'Interest Payment'#7'Visible'#8#0#0#9'TMenuItem' + +#10'MenuItem26'#7'Caption'#6#12'Future Value'#7'Visible'#8#0#0#9'TMenuItem' + +#10'MenuItem27'#7'Caption'#6#22'Double Declining Value'#7'OnClick'#7#15'Menu' + +'Item27Click'#0#0#0#9'TMenuItem'#9'MatManMnu'#7'Caption'#6#19'Matrix Manipul' + +'ation'#7'OnClick'#7#14'MatManMnuClick'#0#0#0#9'TMenuItem'#6'Option'#7'Capti' + +'on'#6#7'Options'#0#9'TMenuItem'#8'ShowOpts'#7'Caption'#6#12'Show Options'#7 + +'OnClick'#7#11'OptionClick'#0#0#9'TMenuItem'#7'PicView'#7'Caption'#6#13'View' + +' Pictures'#7'Visible'#8#0#0#0#9'TMenuItem'#9'MenuItem7'#7'Caption'#6#11'Sim' + +'ulations'#0#9'TMenuItem'#8'ScatPlot'#7'Caption'#6#22'Bivariate Scatter Plot' + +#7'OnClick'#7#13'ScatPlotClick'#0#0#9'TMenuItem'#9'MultDists'#7'Caption'#6#25 + +'Multivariate Distribution'#7'OnClick'#7#14'MultDistsClick'#0#0#9'TMenuItem' + +#10'TypeErrors'#7'Caption'#6#30'Type 1 and Type 2 Error Curves'#7'OnClick'#7 + +#15'TypeErrorsClick'#0#0#9'TMenuItem'#5'Power'#7'Caption'#6#25'Power Curves ' + +'for a z test'#7'OnClick'#7#10'PowerClick'#0#0#9'TMenuItem'#9'DistPlots'#7'C' + +'aption'#6'&Distribution Plots and Critical Values'#7'OnClick'#7#14'DistPlot' + +'sClick'#0#0#9'TMenuItem'#9'SeqValues'#7'Caption'#6#26'Generate Sequential V' + +'alues'#7'OnClick'#7#14'SeqValuesClick'#0#0#9'TMenuItem'#10'RandomVals'#7'Ca' + +'ption'#6#25'Random Theoretical Values'#7'OnClick'#7#15'RandomValsClick'#0#0 + +#9'TMenuItem'#13'Probabilities'#7'Caption'#6#13'Probabilities'#0#9'TMenuItem' + +#7'probgtz'#7'Caption'#6#15'Probability > z'#7'OnClick'#7#12'probgtzClick'#0 + +#0#9'TMenuItem'#7'Probltz'#7'Caption'#6#15'Probability < z'#7'OnClick'#7#12 + +'ProbltzClick'#0#0#9'TMenuItem'#12'probzbetween'#7'Caption'#6#23'Prob betwee' + +'n 2 z values'#7'OnClick'#7#17'probzbetweenClick'#0#0#9'TMenuItem'#8'inverse' + +'z'#7'Caption'#6#30'z for a given cum. Probability'#7'OnClick'#7#13'inversez' + +'Click'#0#0#9'TMenuItem'#7'Chiprob'#7'Caption'#6#21'Chisquare Probability'#7 + +'OnClick'#7#12'ChiprobClick'#0#0#9'TMenuItem'#5'tprob'#7'Caption'#6#21'Stude' + +'nt t probability'#7'OnClick'#7#10'tprobClick'#0#0#9'TMenuItem'#5'Fprob'#7'C' + +'aption'#6#13'F probability'#7'OnClick'#7#10'FprobClick'#0#0#9'TMenuItem'#12 + +'HypergeoProb'#7'Caption'#6#26'Hypergeometric probability'#7'OnClick'#7#17'H' + +'ypergeoProbClick'#0#0#0#0#9'TMenuItem'#9'MenuItem8'#7'Caption'#6#4'Help'#0#9 + +'TMenuItem'#5'About'#7'Caption'#6#8'About...'#7'OnClick'#7#10'AboutClick'#0#0 + +#9'TMenuItem'#7'GridUse'#7'Caption'#6#14'Using the Grid'#7'OnClick'#7#12'Gri' + +'dUseClick'#0#0#9'TMenuItem'#12'HelpContents'#7'Caption'#6#12'General Help'#7 + +'OnClick'#7#17'HelpContentsClick'#0#0#0#0#11'TOpenDialog'#11'OpenDialog1'#4 + +'left'#2'P'#3'top'#3'h'#1#0#0#11'TSaveDialog'#11'SaveDialog1'#4'left'#3#144#0 + +#3'top'#3'h'#1#0#0#0 +]); diff --git a/applications/lazstats/source_orig/mainunit.pas b/applications/lazstats/source_orig/mainunit.pas new file mode 100644 index 000000000..777994be4 --- /dev/null +++ b/applications/lazstats/source_orig/mainunit.pas @@ -0,0 +1,1485 @@ +unit MainUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + Menus, ExtCtrls, StdCtrls, Grids, Globals, DataProcs, DictionaryUnit; + +type + + { TOS3MainFrm } + + TOS3MainFrm = class(TForm) + ColEdit: TEdit; + FilterEdit: TEdit; + Label5: TLabel; + Label6: TLabel; + MenuItem10: TMenuItem; + MenuItem100: TMenuItem; + MenuItem101: TMenuItem; + MenuItem102: TMenuItem; + MenuItem103: TMenuItem; + MenuItem104: TMenuItem; + MenuItem105: TMenuItem; + MenuItem106: TMenuItem; + MenuItem107: TMenuItem; + MenuItem108: TMenuItem; + MenuItem109: TMenuItem; + MenuItem11: TMenuItem; + MenuItem110: TMenuItem; + MenuItem111: TMenuItem; + MenuItem112: TMenuItem; + MenuItem113: TMenuItem; + MenuItem114: TMenuItem; + MenuItem115: TMenuItem; + MenuItem116: TMenuItem; + MenuItem117: TMenuItem; + MenuItem118: TMenuItem; + MenuItem119: TMenuItem; + MenuItem120: TMenuItem; + About: TMenuItem; + CloseFileBtn: TMenuItem; + MenuItem14: TMenuItem; + MenuItem17: TMenuItem; + MenuItem18: TMenuItem; + MenuItem19: TMenuItem; + MenuItem21: TMenuItem; + MenuItem22: TMenuItem; + MenuItem23: TMenuItem; + MenuItem24: TMenuItem; + MenuItem25: TMenuItem; + MenuItem26: TMenuItem; + MenuItem27: TMenuItem; + blockcopy: TMenuItem; + BlockPaste: TMenuItem; + BlockCut: TMenuItem; + GridUse: TMenuItem; + MenuItem28: TMenuItem; + MenuItem29: TMenuItem; + MenuItem31: TMenuItem; + MenuItem33: TMenuItem; + GenKappa: TMenuItem; + CompareDists: TMenuItem; + MatManMnu: TMenuItem; + GrdBkMnu: TMenuItem; + inversez: TMenuItem; + Chiprob: TMenuItem; + Fprob: TMenuItem; + HypergeoProb: TMenuItem; + BinA: TMenuItem; + BartlettTest: TMenuItem; + GrpFreq: TMenuItem; + Correspondence: TMenuItem; + KSTest: TMenuItem; + Equation: TMenuItem; + Calculater: TMenuItem; + JPEGView: TMenuItem; + MedianPolish: TMenuItem; + DataSmooth: TMenuItem; + ItemBankMenuItem: TMenuItem; + homotest: TMenuItem; + lifetable: TMenuItem; + LSMRitem: TMenuItem; + SimpChiSqr: TMenuItem; + SRHItem: TMenuItem; + OneCaseAnova: TMenuItem; + ResistanceLine: TMenuItem; + Sens: TMenuItem; + XvsMultY: TMenuItem; + RunsTest: TMenuItem; + smooth: TMenuItem; + NestedABC: TMenuItem; + tprob: TMenuItem; + probzbetween: TMenuItem; + Probltz: TMenuItem; + probgtz: TMenuItem; + Probabilities: TMenuItem; + StrToIntegers: TMenuItem; + SwapDecType: TMenuItem; + PicView: TMenuItem; + ShowOpts: TMenuItem; + WghtedKappa: TMenuItem; + WLSReg: TMenuItem; + TwoSLSReg: TMenuItem; + RiditAnalysis: TMenuItem; + MenuItem6: TMenuItem; + MenuItem9: TMenuItem; + pcontrochart: TMenuItem; + OpenDialog1: TOpenDialog; + SaveDialog1: TSaveDialog; + HelpContents: TMenuItem; + InsNewCol: TMenuItem; + CopyCol: TMenuItem; + CutCol: TMenuItem; + PasteCol: TMenuItem; + NewRow: TMenuItem; + CopyRow: TMenuItem; + CutRow: TMenuItem; + PasteRow: TMenuItem; + MenuItem71: TMenuItem; + MenuItem72: TMenuItem; + MenuItem73: TMenuItem; + MenuItem74: TMenuItem; + MenuItem75: TMenuItem; + MenuItem76: TMenuItem; + MenuItem77: TMenuItem; + MenuItem78: TMenuItem; + MenuItem79: TMenuItem; + MenuItem80: TMenuItem; + MenuItem81: TMenuItem; + MenuItem82: TMenuItem; + MenuItem83: TMenuItem; + MenuItem84: TMenuItem; + MenuItem85: TMenuItem; + MenuItem86: TMenuItem; + MenuItem87: TMenuItem; + MenuItem88: TMenuItem; + MenuItem89: TMenuItem; + MenuItem90: TMenuItem; + MenuItem91: TMenuItem; + MenuItem92: TMenuItem; + MenuItem93: TMenuItem; + MenuItem94: TMenuItem; + MenuItem95: TMenuItem; + MenuItem96: TMenuItem; + MenuItem97: TMenuItem; + MenuItem98: TMenuItem; + MenuItem99: TMenuItem; + RowEdit: TEdit; + FileNameEdit: TEdit; + Label3: TLabel; + Label4: TLabel; + NoVarsEdit: TEdit; + Label2: TLabel; + NoCasesEdit: TEdit; + Label1: TLabel; + MainMenu1: TMainMenu; + MenuItem1: TMenuItem; + OpenFileBtn: TMenuItem; + NewFileBtn: TMenuItem; + MenuItem12: TMenuItem; + MenuItem13: TMenuItem; + TabFileOut: TMenuItem; + MenuItem15: TMenuItem; + MenuItem16: TMenuItem; + TabFileInBtn: TMenuItem; + CSVFileIn: TMenuItem; + SSVFileIn: TMenuItem; + MenuItem2: TMenuItem; + MenuItem20: TMenuItem; + CSVFileOut: TMenuItem; + SSVFileOut: TMenuItem; + DefineVar: TMenuItem; + PrintDefs: TMenuItem; + Transform: TMenuItem; + Recode: TMenuItem; + FormatGrid: TMenuItem; + SortCases: TMenuItem; + PrintGrid: TMenuItem; + MenuItem3: TMenuItem; + SelectCases: TMenuItem; + LoadSubFile: TMenuItem; + MenuItem32: TMenuItem; + OneSampTests: TMenuItem; + MenuItem34: TMenuItem; + MenuItem35: TMenuItem; + MenuItem36: TMenuItem; + MenuItem37: TMenuItem; + MenuItem38: TMenuItem; + MenuItem39: TMenuItem; + MenuItem4: TMenuItem; + MenuItem40: TMenuItem; + MenuItem41: TMenuItem; + Distributions: TMenuItem; + FreqAnal: TMenuItem; + CrossTabs: TMenuItem; + Breakdown: TMenuItem; + BoxPlot: TMenuItem; + NormalityTests: TMenuItem; + ThreeDRotate: TMenuItem; + PlotXvsY: TMenuItem; + MenuItem5: TMenuItem; + BubblePlot: TMenuItem; + StemLeaf: TMenuItem; + MultXvsY: TMenuItem; + PropDiff: TMenuItem; + CorrDiff: TMenuItem; + ttests: TMenuItem; + Anova: TMenuItem; + WithinAnova: TMenuItem; + AxSAnova: TMenuItem; + ABSAnova: TMenuItem; + Option: TMenuItem; + Ancova: TMenuItem; + GLM: TMenuItem; + LatinSquares: TMenuItem; + ScatPlot: TMenuItem; + MultDists: TMenuItem; + TypeErrors: TMenuItem; + Power: TMenuItem; + DistPlots: TMenuItem; + SeqValues: TMenuItem; + MenuItem7: TMenuItem; + RandomVals: TMenuItem; + MenuItem8: TMenuItem; + MenuItem30: TMenuItem; + SaveFileBtn: TMenuItem; + Panel1: TPanel; + Panel2: TPanel; + DataGrid: TStringGrid; + procedure AboutClick(Sender: TObject); + procedure ABSAnovaClick(Sender: TObject); + procedure AncovaClick(Sender: TObject); + procedure AnovaClick(Sender: TObject); +// procedure AvgLinkClusterClick(Sender: TObject); + procedure AxSAnovaClick(Sender: TObject); + procedure BartlettTestClick(Sender: TObject); + procedure BinAClick(Sender: TObject); + procedure blockcopyClick(Sender: TObject); + procedure BlockPasteClick(Sender: TObject); + procedure BoxPlotClick(Sender: TObject); + procedure BreakdownClick(Sender: TObject); + procedure BubblePlotClick(Sender: TObject); + procedure CalculaterClick(Sender: TObject); + procedure ChiprobClick(Sender: TObject); + procedure CloseFileBtnClick(Sender: TObject); + procedure CompareDistsClick(Sender: TObject); + procedure CopyColClick(Sender: TObject); + procedure CopyRowClick(Sender: TObject); + procedure CorrDiffClick(Sender: TObject); + procedure CorrespondenceClick(Sender: TObject); + procedure CrossTabsClick(Sender: TObject); + procedure CSVFileInClick(Sender: TObject); + procedure CSVFileOutClick(Sender: TObject); + procedure CutColClick(Sender: TObject); + procedure CutRowClick(Sender: TObject); + procedure DataGridClick(Sender: TObject); + procedure DataGridKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState + ); + procedure DataGridKeyPress(Sender: TObject; var Key: char); + procedure DataSmoothClick(Sender: TObject); + procedure DefineVarClick(Sender: TObject); + procedure DistPlotsClick(Sender: TObject); + procedure DistributionsClick(Sender: TObject); + procedure EquationClick(Sender: TObject); + procedure FormatGridClick(Sender: TObject); + procedure FormClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure FprobClick(Sender: TObject); + procedure FreqAnalClick(Sender: TObject); + procedure GenKappaClick(Sender: TObject); + procedure GLMClick(Sender: TObject); + procedure GrdBkMnuClick(Sender: TObject); + procedure GridUseClick(Sender: TObject); + procedure GrpFreqClick(Sender: TObject); + procedure HelpContentsClick(Sender: TObject); + procedure homotestClick(Sender: TObject); + procedure HypergeoProbClick(Sender: TObject); + procedure InsNewColClick(Sender: TObject); + procedure inversezClick(Sender: TObject); + procedure ItemBankMenuItemClick(Sender: TObject); + procedure JPEGViewClick(Sender: TObject); + procedure KSTestClick(Sender: TObject); + procedure LatinSquaresClick(Sender: TObject); + procedure lifetableClick(Sender: TObject); + procedure LSMRitemClick(Sender: TObject); + procedure MatManMnuClick(Sender: TObject); + procedure MedianPolishClick(Sender: TObject); + procedure MenuItem100Click(Sender: TObject); + procedure MenuItem101Click(Sender: TObject); + procedure MenuItem102Click(Sender: TObject); + procedure MenuItem103Click(Sender: TObject); + procedure MenuItem104Click(Sender: TObject); + procedure MenuItem105Click(Sender: TObject); + procedure MenuItem106Click(Sender: TObject); + procedure MenuItem107Click(Sender: TObject); + procedure MenuItem108Click(Sender: TObject); + procedure MenuItem109Click(Sender: TObject); + procedure MenuItem10Click(Sender: TObject); + procedure MenuItem110Click(Sender: TObject); + procedure MenuItem111Click(Sender: TObject); + procedure MenuItem112Click(Sender: TObject); + procedure MenuItem113Click(Sender: TObject); + procedure MenuItem114Click(Sender: TObject); + procedure MenuItem115Click(Sender: TObject); + procedure MenuItem116Click(Sender: TObject); + procedure MenuItem117Click(Sender: TObject); + procedure MenuItem118Click(Sender: TObject); + procedure MenuItem119Click(Sender: TObject); + procedure MenuItem11Click(Sender: TObject); + procedure MenuItem120Click(Sender: TObject); + procedure MenuItem14Click(Sender: TObject); + procedure MenuItem16Click(Sender: TObject); + procedure MenuItem20Click(Sender: TObject); + procedure MenuItem27Click(Sender: TObject); + procedure MenuItem28Click(Sender: TObject); + procedure MenuItem29Click(Sender: TObject); + procedure MenuItem31Click(Sender: TObject); + procedure MenuItem33Click(Sender: TObject); + procedure MenuItem6Click(Sender: TObject); + procedure MenuItem71Click(Sender: TObject); + procedure MenuItem72Click(Sender: TObject); + procedure MenuItem73Click(Sender: TObject); + procedure MenuItem74Click(Sender: TObject); + procedure MenuItem75Click(Sender: TObject); + procedure MenuItem76Click(Sender: TObject); + procedure MenuItem77Click(Sender: TObject); + procedure MenuItem78Click(Sender: TObject); + procedure MenuItem79Click(Sender: TObject); + procedure MenuItem80Click(Sender: TObject); + procedure MenuItem81Click(Sender: TObject); + procedure MenuItem82Click(Sender: TObject); + procedure MenuItem83Click(Sender: TObject); + procedure MenuItem84Click(Sender: TObject); + procedure MenuItem85Click(Sender: TObject); + procedure MenuItem86Click(Sender: TObject); + procedure MenuItem87Click(Sender: TObject); + procedure MenuItem88Click(Sender: TObject); + procedure MenuItem89Click(Sender: TObject); + procedure MenuItem90Click(Sender: TObject); + procedure MenuItem91Click(Sender: TObject); + procedure MenuItem92Click(Sender: TObject); + procedure MenuItem93Click(Sender: TObject); + procedure MenuItem94Click(Sender: TObject); + procedure MenuItem95Click(Sender: TObject); + procedure MenuItem96Click(Sender: TObject); + procedure MenuItem97Click(Sender: TObject); + procedure MenuItem98Click(Sender: TObject); + procedure MenuItem99Click(Sender: TObject); + procedure MenuItem30Click(Sender: TObject); + procedure MultDistsClick(Sender: TObject); + procedure MultXvsYClick(Sender: TObject); + procedure NestedABCClick(Sender: TObject); + procedure NewFileBtnClick(Sender: TObject); + procedure NewRowClick(Sender: TObject); + procedure NormalityTestsClick(Sender: TObject); + procedure OneCaseAnovaClick(Sender: TObject); + procedure OneSampTestsClick(Sender: TObject); + procedure OpenFileBtnClick(Sender: TObject); + procedure OptionClick(Sender: TObject); + procedure PasteColClick(Sender: TObject); + procedure PasteRowClick(Sender: TObject); + procedure pcontrochartClick(Sender: TObject); +// procedure PicViewClick(Sender: TObject); + procedure PlotXvsYClick(Sender: TObject); + procedure PowerClick(Sender: TObject); + procedure PrintDefsClick(Sender: TObject); + procedure PrintGridClick(Sender: TObject); + procedure probgtzClick(Sender: TObject); + procedure ProbltzClick(Sender: TObject); + procedure probzbetweenClick(Sender: TObject); + procedure PropDiffClick(Sender: TObject); + procedure RandomValsClick(Sender: TObject); + procedure RecodeClick(Sender: TObject); + procedure ResistanceLineClick(Sender: TObject); + procedure RiditAnalysisClick(Sender: TObject); + procedure RunsTestClick(Sender: TObject); + procedure SaveFileBtnClick(Sender: TObject); + procedure ScatPlotClick(Sender: TObject); + procedure SelectCasesClick(Sender: TObject); + procedure SensClick(Sender: TObject); + procedure SeqValuesClick(Sender: TObject); + procedure SimpChiSqrClick(Sender: TObject); + procedure smoothClick(Sender: TObject); + procedure SortCasesClick(Sender: TObject); + procedure SRHItemClick(Sender: TObject); + procedure SSVFileInClick(Sender: TObject); + procedure SSVFileOutClick(Sender: TObject); + procedure StemLeafClick(Sender: TObject); + procedure StrToIntegersClick(Sender: TObject); + procedure SwapDecTypeClick(Sender: TObject); + procedure TabFileInBtnClick(Sender: TObject); + procedure ThreeDRotateClick(Sender: TObject); + procedure tprobClick(Sender: TObject); + procedure TransformClick(Sender: TObject); + procedure ttestsClick(Sender: TObject); + procedure TwoSLSRegClick(Sender: TObject); + procedure TypeErrorsClick(Sender: TObject); + procedure WghtedKappaClick(Sender: TObject); + procedure WithinAnovaClick(Sender: TObject); + procedure WLSRegClick(Sender: TObject); + procedure XvsMultYClick(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + OS3MainFrm: TOS3MainFrm; + PrevRow : integer; + PrevCol : integer; + +implementation + +{ TOS3MainFrm } + +uses OptionsUnit, OutPutUnit, LicenseUnit, TransFrmUnit, DescriptiveUnit, +FreqUnit, CrossTabUnit, BreakDownUnit, BoxPlotUnit, NormalityUnit, Rot3DUnit, +PlotXYUnit, BubblePlotUnit, StemLeafUnit, MultXvsYUnit, OneSampUnit, +TwoCorrsUnit, TwoPropUnit, TtestUnit, BlkAnovaUnit, WithinANOVAUnit, +AxSAnovaUnit, ABRAnovaUnit, ANCOVAUNIT, LatinSqrsUnit, RMatUnit, PartialsUnit, +AutoCorUnit, CanonUnit, GLMUnit, StepFwdMRUnit, BlkMRegUnit, BackRegUnit, +BestRegUnit, SimultRegUnit, CoxRegUnit, LogRegUnit, LinProUnit, DiscrimUnit, +FactorUnit, HierarchUnit, PathUnit, LogLinScreenUnit, TwoWayLogLinUnit, +ABCLogLinUnit, TestGenUnit, TestScoreUnit, RaschUnit, SuccIntUnit, GuttmanUnit, +CompRelUnit, KR21Unit, SpBrUnit, RelChangeUnit, DIFUnit, PolyDIFUnit, +ChiSqrUnit, SpearmanUnit, MannWhitUUnit, ExactUnit, ConcordanceUnit, +KWAnovaUnit, WilcoxonUnit, CochranQUnit, SignTestUnit, FriedmanUnit, +BinomialUnit, KendallTauUnit, KaplanMeierUnit, XBarUnit, RChartUnit, +SigmaChartUnit, CUMSUMUNIT, CCHARTUNIT, PChartUnit, UChartUnit, CorSimUnit, +ErrorCurvesUnit, PCurvesUnit, DistribUnit, GenSeqUnit, GenRndValsUnit, +MultGenUnit, LoanItUnit, SumYrsDepUnit, SLDUnit, DblDeclineUnit, +RIDITUnit, TwoSLSUnit, WLSUnit, HelpUnit, SortCasesUnit, +SelectCasesUnit, GridHelpUnit, RecodeUnit, KappaUnit, AvgLinkUnit, kmeansunit, +SingleLinkUnit, GenKappaUnit, CompareDistUnit, matmanunit, gradebookunit, +ProbzUnit, ProbSmallerzUnit, TwozProbUnit, InversezUnit, ProbChiSqrUnit, +TprobUnit, FProbUnit, HyperGeoUnit, BNestAUnit, ABCNestedUnit, BartlettTestUnit, +DataSmoothUnit, GroupFreqUnit, RunsTestUnit, XvsMultYUnit, SensUnit, +CorrespondenceUnit, EquationUnit, CalculatorUnit, JPEGUnit, ResistanceLineUnit, +MedianPolishUnit, OneCaseAnovaUnit, SmoothDataUnit, SRHTestUnit, AboutUnit, +ItemBankingUnit, ANOVATESTSUnit, SimpleChiSqrUnit, LifeTableUnit, LSMRunit; + +procedure TOS3MainFrm.MenuItem16Click(Sender: TObject); +begin + OptionsFrm.SaveBtnClick(Self); + TempStream.Free; + TempVarItm.Free; + Close; +end; + +procedure TOS3MainFrm.MenuItem20Click(Sender: TObject); +begin + SaveTabFile; +end; + +procedure TOS3MainFrm.MenuItem27Click(Sender: TObject); +begin + DblDeclineFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem28Click(Sender: TObject); +begin + OutPutFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem29Click(Sender: TObject); +begin + AvgLinkFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem31Click(Sender: TObject); +begin + kmeansfrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem33Click(Sender: TObject); +begin + SingleLinkFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem6Click(Sender: TObject); +begin + CUMSUMFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem71Click(Sender: TObject); +begin + RMatFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem72Click(Sender: TObject); +begin + PartialsFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem73Click(Sender: TObject); +begin + AutocorrFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem74Click(Sender: TObject); +begin + CannonFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem75Click(Sender: TObject); +begin + StepFwdFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem76Click(Sender: TObject); +begin + BackRegFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem77Click(Sender: TObject); +begin + SimultFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem78Click(Sender: TObject); +begin + BlkMregFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem79Click(Sender: TObject); +begin + BestRegFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem80Click(Sender: TObject); +begin + LogRegFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem81Click(Sender: TObject); +begin + CoxRegFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem82Click(Sender: TObject); +begin + LinProFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem83Click(Sender: TObject); +begin + DiscrimFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem84Click(Sender: TObject); +begin + HierarchFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem85Click(Sender: TObject); +begin + PathFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem86Click(Sender: TObject); +begin + FactorFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem87Click(Sender: TObject); +begin + CannonFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem88Click(Sender: TObject); +begin + GLMFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem89Click(Sender: TObject); +begin + TwoWayLogLinFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem90Click(Sender: TObject); +begin + ABCLogLinearFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem91Click(Sender: TObject); +begin + LogLinScreenFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem92Click(Sender: TObject); +begin + TestGenFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem93Click(Sender: TObject); +begin + TestScoreFrm.Show; +end; + +procedure TOS3MainFrm.MenuItem94Click(Sender: TObject); +begin + RaschFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem95Click(Sender: TObject); +begin + SuccIntFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem96Click(Sender: TObject); +begin + GuttmanFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem97Click(Sender: TObject); +begin + CompRelFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem98Click(Sender: TObject); +begin + KR21Frm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem99Click(Sender: TObject); +begin + SpBrFrm.ShowModal; +end; + +procedure TOS3MainFrm.MultDistsClick(Sender: TObject); +begin + MultGenFrm.ShowModal; +end; + +procedure TOS3MainFrm.MultXvsYClick(Sender: TObject); +begin + MultXvsYFrm.ShowModal; +end; + +procedure TOS3MainFrm.NestedABCClick(Sender: TObject); +begin + ABCNestedForm.ShowModal; +end; + +procedure TOS3MainFrm.NewFileBtnClick(Sender: TObject); +begin + ClearGrid; +end; + +procedure TOS3MainFrm.NewRowClick(Sender: TObject); +begin + InsertRow; +end; + +procedure TOS3MainFrm.NormalityTestsClick(Sender: TObject); +begin + NormalityFrm.ShowModal; +end; + +procedure TOS3MainFrm.OneCaseAnovaClick(Sender: TObject); +begin + OneCaseAnovaForm.ShowModal; +end; + +procedure TOS3MainFrm.OneSampTestsClick(Sender: TObject); +begin + OneSampFrm.ShowModal; +end; + +procedure TOS3MainFrm.OpenFileBtnClick(Sender: TObject); +var + i : integer; + filename : string; + +begin + OpenOS2File; + filename := FileNameEdit.Text; + // move all down 1 and add new one at the top +{ for i := 8 downto 1 do + begin + MainMenu1.Items[0].Items[11].Items[i].Caption := + MainMenu1.Items[0].Items[11].Items[i-1].Caption; + MainMenu1.Items[0].Items[11].Items[i-1].Caption := ' '; + end; + MainMenu1.Items[0].Items[11].Items[0].Caption := filename;} + OptionsFrm.SaveBtnClick(Self); +end; + +procedure TOS3MainFrm.OptionClick(Sender: TObject); +begin + OptionsFrm.ShowModal; +end; + +procedure TOS3MainFrm.PasteColClick(Sender: TObject); +begin + PasteColumn; +end; + +procedure TOS3MainFrm.PasteRowClick(Sender: TObject); +begin + PasteaRow; +end; + +procedure TOS3MainFrm.pcontrochartClick(Sender: TObject); +begin + pChartFrm.ShowModal; +end; + +procedure TOS3MainFrm.PlotXvsYClick(Sender: TObject); +begin + PlotXYFrm.ShowModal; +end; + +procedure TOS3MainFrm.PowerClick(Sender: TObject); +begin + PCurvesFrm.ShowModal; +end; + +procedure TOS3MainFrm.PrintDefsClick(Sender: TObject); +begin + PrintDict; +end; + +procedure TOS3MainFrm.PrintGridClick(Sender: TObject); +begin + PrintData; +end; + +procedure TOS3MainFrm.probgtzClick(Sender: TObject); +begin + ProbzForm.ShowModal; +end; + +procedure TOS3MainFrm.ProbltzClick(Sender: TObject); +begin + ProbSmallerzForm.ShowModal; +end; + +procedure TOS3MainFrm.probzbetweenClick(Sender: TObject); +begin + TwozProbForm.ShowModal; +end; + +procedure TOS3MainFrm.PropDiffClick(Sender: TObject); +begin + TwoPropFrm.ShowModal; +end; + +procedure TOS3MainFrm.RandomValsClick(Sender: TObject); +begin + GenRndValsFrm.ShowModal; +end; + +procedure TOS3MainFrm.RecodeClick(Sender: TObject); +begin + RecodeFrm.ShowModal; +end; + +procedure TOS3MainFrm.ResistanceLineClick(Sender: TObject); +begin + ResistanceLineForm.ShowModal; +end; + +procedure TOS3MainFrm.RiditAnalysisClick(Sender: TObject); +begin + RIDITFrm.ShowModal; +end; + +procedure TOS3MainFrm.RunsTestClick(Sender: TObject); +begin + RunsTestForm.ShowModal; +end; + +procedure TOS3MainFrm.SaveFileBtnClick(Sender: TObject); +var + i : integer; + filename : string; + +begin + SaveOS2File; + filename := FileNameEdit.Text; + // move all down 1 and add new one at the top +{ for i := 8 downto 1 do + begin + MainMenu1.Items[0].Items[11].Items[i].Caption := + MainMenu1.Items[0].Items[11].Items[i-1].Caption; + MainMenu1.Items[0].Items[11].Items[i-1].Caption := ' '; + end; + MainMenu1.Items[0].Items[11].Items[0].Caption := filename;} + OptionsFrm.SaveBtnClick(Self); +end; + +procedure TOS3MainFrm.ScatPlotClick(Sender: TObject); +begin + CorSimFrm.ShowModal; +end; + +procedure TOS3MainFrm.SelectCasesClick(Sender: TObject); +begin + SelectFrm.ShowModal; +end; + +procedure TOS3MainFrm.SensClick(Sender: TObject); +begin + SensForm.ShowModal; +end; + +procedure TOS3MainFrm.SeqValuesClick(Sender: TObject); +begin + GenSeqFrm.ShowModal; +end; + +procedure TOS3MainFrm.SimpChiSqrClick(Sender: TObject); +begin + SimpleChiSqrForm.ShowModal; +end; + +procedure TOS3MainFrm.smoothClick(Sender: TObject); +begin + SmoothDataForm.ShowModal; +end; + +procedure TOS3MainFrm.SortCasesClick(Sender: TObject); +begin + SortCasesFrm.ShowModal; +end; + +procedure TOS3MainFrm.SRHItemClick(Sender: TObject); +begin + SRHTest.ShowModal; +end; + +procedure TOS3MainFrm.SSVFileInClick(Sender: TObject); +begin + OpenSpaceFile; +end; + +procedure TOS3MainFrm.SSVFileOutClick(Sender: TObject); +begin + SaveSpaceFile; +end; + +procedure TOS3MainFrm.StemLeafClick(Sender: TObject); +begin + StemLeafFrm.ShowModal; +end; + +procedure TOS3MainFrm.StrToIntegersClick(Sender: TObject); +VAR + results, prompt : boolean; + col, row : integer; +begin + col := DataGrid.Col; + DataGrid.Row := 1; + prompt := true; + results := DataProcs.StringsToInt(col,col, prompt); + OS3MainFrm.DataGrid.Col := col; + if (results = false)then DeleteCol; +end; + +procedure TOS3MainFrm.SwapDecTypeClick(Sender: TObject); +var + Dectype : integer; + i, j, k, count : integer; + cellstr : string; +begin + Dectype := OptionsFrm.FractionType; + if Dectype = 0 then // current type is English - switch to European + begin + for i := 1 to OS3MainFrm.DataGrid.RowCount-1 do + begin + for j := 1 to OS3MainFrm.DataGrid.ColCount - 1 do + begin + cellstr := OS3MainFrm.DataGrid.Cells[j,i]; + count := length(cellstr); + for k := 1 to count do + begin + if cellstr[k] = '.' then cellstr[k] := ','; + end; + OS3MainFrm.DataGrid.Cells[j,i] := cellstr; + end; + end; + end; + if Dectype = 1 then // current type is European - switch to English + begin + for i := 1 to OS3MainFrm.DataGrid.RowCount-1 do + begin + for j := 1 to OS3MainFrm.DataGrid.ColCount - 1 do + begin + cellstr := OS3MainFrm.DataGrid.Cells[j,i]; + count := length(cellstr); + for k := 1 to count do + begin + if cellstr[k] = ',' then cellstr[k] := '.'; + end; + OS3MainFrm.DataGrid.Cells[j,i] := cellstr; + end; + end; + end; + +end; + +procedure TOS3MainFrm.TabFileInBtnClick(Sender: TObject); +begin + OpenTabFile; +end; + +procedure TOS3MainFrm.ThreeDRotateClick(Sender: TObject); +begin + Rot3DFrm.ShowModal; +end; + +procedure TOS3MainFrm.tprobClick(Sender: TObject); +begin + TprobForm.ShowModal; +end; + +procedure TOS3MainFrm.TransformClick(Sender: TObject); +var + MyErrorString : string; + +begin + try + TransFrm.ShowModal; + except +// MyErrorString := 'ErrorCode: ' + IntToStr(Error) + #13#10; + MyErrorString := 'Error in showing transformations'; + MessageDlg(MyErrorString , mtError, [mbOk], 0); + end; +end; + +procedure TOS3MainFrm.ttestsClick(Sender: TObject); +begin + TtestFrm.ShowModal; +end; + +procedure TOS3MainFrm.TwoSLSRegClick(Sender: TObject); +begin + TwoSLSFrm.ShowModal; +end; + +procedure TOS3MainFrm.TypeErrorsClick(Sender: TObject); +begin + ErrorCurvesFrm.ShowModal; +end; + +procedure TOS3MainFrm.WghtedKappaClick(Sender: TObject); +begin + WeightedKappaFrm.ShowModal; +end; + +procedure TOS3MainFrm.WithinAnovaClick(Sender: TObject); +begin + WithinAnovaFrm.ShowModal; +end; + +procedure TOS3MainFrm.WLSRegClick(Sender: TObject); +begin + WLSFrm.ShowModal; +end; + +procedure TOS3MainFrm.XvsMultYClick(Sender: TObject); +begin + XvsMultYForm.ShowModal; +end; + +procedure TOS3MainFrm.DefineVarClick(Sender: TObject); +begin + DictionaryFrm.ShowModal; +end; + +procedure TOS3MainFrm.DistPlotsClick(Sender: TObject); +begin + DistribFrm.ShowModal; +end; + +procedure TOS3MainFrm.DistributionsClick(Sender: TObject); +begin + DescriptiveFrm.ShowModal; +end; + +procedure TOS3MainFrm.EquationClick(Sender: TObject); +begin + EquationForm.ShowModal; +end; + +procedure TOS3MainFrm.FormatGridClick(Sender: TObject); +begin + DataProcs.FormatGrid; +end; + +procedure TOS3MainFrm.FormClick(Sender: TObject); +begin + OptionsFrm.ShowModal; +end; + +procedure TOS3MainFrm.DataGridKeyPress(Sender: TObject; var Key: char); +var + row, col : integer; +begin + NoVarsEdit.Text := IntToStr(OS3MainFrm.DataGrid.ColCount-1); + if ord(Key) = 13 then exit; + col := OS3MainFrm.DataGrid.Col; + row :=OS3MainFrm.DataGrid.Row; + if StrToInt(NoCasesEdit.Text) < row then + begin + NoCasesEdit.Text := IntToStr(row); + NoCases := row; + end; + if OS3MainFrm.DataGrid.Cells[0,row] = '' then + begin + NoCases := row; + OS3MainFrm.DataGrid.Cells[0,row] := 'CASE ' + IntToStr(row); + end; + if NoVariables < col then + begin + NoVariables := col; + end; + if ((PrevCol <> col) or (PrevRow <> row)) then + if OS3MainFrm.DataGrid.Cells[PrevCol,PrevRow] <> '' then FormatCell(PrevCol,PrevRow); + PrevCol := col; + PrevRow := row; +end; + +procedure TOS3MainFrm.DataSmoothClick(Sender: TObject); +begin + DataSmoothingForm.ShowModal; +end; + +procedure TOS3MainFrm.DataGridKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +var + x, y, v : integer; + +begin + x :=OS3MainFrm.DataGrid.Row; + y :=OS3MainFrm.DataGrid.Col; + v := ord(Key); + + case v of + 13 : begin // return key + if y =OS3MainFrm.DataGrid.ColCount - 1 then + begin +{ OS3MainFrm.DataGrid.ColCount :=OS3MainFrm.DataGrid.ColCount + 1; + OS3MainFrm.DataGrid.Col := y + 1;} + end; + end; + 40 : begin // arrow down + if x =OS3MainFrm.DataGrid.RowCount - 1 then + begin + OS3MainFrm.DataGrid.RowCount :=OS3MainFrm.DataGrid.RowCount + 1; + OS3MainFrm.DataGrid.Cells[0,x+1] := 'CASE ' + IntToStr(x+1); + OS3MainFrm.NoCasesEdit.Text := IntToStr(x+1); + NoCases := OS3MainFrm.DataGrid.RowCount - 1; + OS3MainFrm.DataGrid.SetFocus; + end; + end; + end; + RowEdit.Text := IntToStr(OS3MainFrm.DataGrid.RowCount - 1); + ColEdit.Text := IntToStr(OS3MainFrm.DataGrid.ColCount - 1); + if ((PrevCol <> y) or (PrevRow <> x)) then + if OS3MainFrm.DataGrid.Cells[PrevCol,PrevRow] <> '' then FormatCell(PrevCol,PrevRow); +end; + +procedure TOS3MainFrm.CSVFileInClick(Sender: TObject); +begin + OpenCommaFile; +end; + +procedure TOS3MainFrm.CloseFileBtnClick(Sender: TObject); +var + i, j : integer; + +begin + for i := 0 to NoCases do + for j := 0 to NoVariables do OS3MainFrm.DataGrid.Cells[j,i] := ''; + FormShow(self); +end; + +procedure TOS3MainFrm.CompareDistsClick(Sender: TObject); +begin + CompareDistFrm.ShowModal; +end; + +procedure TOS3MainFrm.BreakdownClick(Sender: TObject); +begin + BreakDownFrm.ShowModal; +end; + +procedure TOS3MainFrm.BubblePlotClick(Sender: TObject); +begin + BubbleForm.ShowModal; +end; + +procedure TOS3MainFrm.CalculaterClick(Sender: TObject); +begin + CalculatorForm.ShowModal; +end; + +procedure TOS3MainFrm.ChiprobClick(Sender: TObject); +begin + ChiSqrProbForm.ShowModal; +end; + +procedure TOS3MainFrm.BoxPlotClick(Sender: TObject); +begin + BoxPlotFrm.ShowModal; +end; + +procedure TOS3MainFrm.AnovaClick(Sender: TObject); +begin + BlksAnovaFrm.ShowModal; +end; + +procedure TOS3MainFrm.ABSAnovaClick(Sender: TObject); +begin + ABRAnovaFrm.ShowModal; +end; + +procedure TOS3MainFrm.AboutClick(Sender: TObject); +begin + AboutBox.ShowModal; +// ShowMessage('Copyright November 1, 2011 by Bill Miller'); +end; + +procedure TOS3MainFrm.AncovaClick(Sender: TObject); +begin + ANCOVAFRM.ShowModal; +end; + +procedure TOS3MainFrm.AxSAnovaClick(Sender: TObject); +begin + AxSAnovaFrm.ShowModal; +end; + +procedure TOS3MainFrm.BartlettTestClick(Sender: TObject); +begin + BartlettTestForm.ShowModal; +end; + +procedure TOS3MainFrm.BinAClick(Sender: TObject); +begin + BNestedAForm.ShowModal; +end; + +procedure TOS3MainFrm.blockcopyClick(Sender: TObject); +begin + CopyIt; +end; + +procedure TOS3MainFrm.BlockPasteClick(Sender: TObject); +begin + PasteIt; +end; + +procedure TOS3MainFrm.CopyColClick(Sender: TObject); +begin + CopyColumn; +end; + +procedure TOS3MainFrm.CopyRowClick(Sender: TObject); +begin + CopyaRow; +end; + +procedure TOS3MainFrm.CorrDiffClick(Sender: TObject); +begin + TwoCorrsFrm.ShowModal; +end; + +procedure TOS3MainFrm.CorrespondenceClick(Sender: TObject); +begin + CorrespondenceForm.ShowModal; +end; + +procedure TOS3MainFrm.CrossTabsClick(Sender: TObject); +begin + CrossTabFrm.ShowModal; +end; + +procedure TOS3MainFrm.CSVFileOutClick(Sender: TObject); +begin + SaveCommaFile; +end; + +procedure TOS3MainFrm.CutColClick(Sender: TObject); +begin + DeleteCol; +end; + +procedure TOS3MainFrm.CutRowClick(Sender: TObject); +begin + CutaRow; +end; + +procedure TOS3MainFrm.DataGridClick(Sender: TObject); +VAR row, col : integer; +begin + row := DataGrid.Row; + col := DataGrid.Col; + RowEdit.Text := IntToStr(row); + ColEdit.Text := IntToStr(col); +end; + +procedure TOS3MainFrm.FormShow(Sender: TObject); +var i : integer; +begin + OpenStatPath := GetCurrentDir; + LoggedOn := false; + OptionsFrm.InitOptions(Self); + NoVariables := 0; // global variable for no. of variables (columns) + NoCases := 0; // global variable for no. of cases (rows) + TempStream := TMemoryStream.Create; // global variable (simulate clipboard) + TempVarItm := TMemoryStream.Create; // global var. for dictionary clips + FilterOn := false; // global variable = true when a filter variable selected + DictLoaded := false; // global variable = true when a dictionary file read + RowEdit.Text := '1'; + ColEdit.Text := '1'; + FileNameEdit.Text := 'TempFile.TAB'; + FilterEdit.Text := 'OFF'; + OS3MainFrm.DataGrid.RowCount := 2; + OS3MainFrm.DataGrid.ColCount := 2; + OS3MainFrm.DataGrid.Cells[0,0] := 'CASE/VAR.'; + OS3MainFrm.DataGrid.Cells[0,1] := 'CASE ' + IntToStr(1); + OS3MainFrm.DataGrid.Cells[1,1] := ''; + PrevRow := 1; + PrevCol := 1; + NoCasesEdit.Text := '0'; + NoVarsEdit.Text := '0'; + DictionaryFrm.DictGrid.RowCount := 0; + for i := 1 to 500 do VarDefined[i] := false; + if not LoggedOn then + begin + if LicenseFrm.ShowModal = mrCancel then Close + else LoggedOn := true; + end; + DictionaryFrm.Show; + DictionaryFrm.ReturnBtnClick(self) ; + DictionaryFrm.Hide; + NoVarsEdit.Text := IntToStr(OS3MainFrm.DataGrid.ColCount-1); + NoCasesEdit.Text := IntToStr(OS3MainFrm.DataGrid.RowCount-1); +end; + +procedure TOS3MainFrm.FprobClick(Sender: TObject); +begin + FForm.ShowModal; +end; + +procedure TOS3MainFrm.FreqAnalClick(Sender: TObject); +begin + FreqFrm.ShowModal; +end; + +procedure TOS3MainFrm.GenKappaClick(Sender: TObject); +begin + GenKappaFrm.ShowModal; +end; + +procedure TOS3MainFrm.GLMClick(Sender: TObject); +begin + GLMFrm.ShowModal; +end; + +procedure TOS3MainFrm.GrdBkMnuClick(Sender: TObject); +begin + GradebookFrm.ShowModal; +end; + +procedure TOS3MainFrm.GridUseClick(Sender: TObject); +begin + GridHelpFrm.ShowModal; +end; + +procedure TOS3MainFrm.GrpFreqClick(Sender: TObject); +begin + GroupFreqForm.ShowModal; +end; + +procedure TOS3MainFrm.HelpContentsClick(Sender: TObject); +begin + HelpFrm.ShowModal; +end; + +procedure TOS3MainFrm.homotestClick(Sender: TObject); +Var + response : string; + GroupCol, VarColumn,NoCases : integer; +begin + response := InputBox('Column no. of group codes:','Column?','1'); + GroupCol := StrToInt(response); + response := InputBox('Column no. of dependent variable:','Column','2'); + VarColumn := StrToInt(response); + NoCases := StrToInt(OS3MainFrm.NoCasesEdit.text); + HomogeneityTest(GroupCol, VarColumn, NoCases); +end; + +procedure TOS3MainFrm.HypergeoProbClick(Sender: TObject); +begin + HyperGeoForm.ShowModal; +end; + +procedure TOS3MainFrm.InsNewColClick(Sender: TObject); +begin + InsertCol; +end; + +procedure TOS3MainFrm.inversezClick(Sender: TObject); +begin + InversezForm.ShowModal; +end; + +procedure TOS3MainFrm.ItemBankMenuItemClick(Sender: TObject); +begin + ItemBankFrm.ShowModal; +end; + +procedure TOS3MainFrm.JPEGViewClick(Sender: TObject); +begin + JPEGForm.ShowModal; +end; + +procedure TOS3MainFrm.KSTestClick(Sender: TObject); +begin + CompareDistFrm.ShowModal; +end; + +procedure TOS3MainFrm.LatinSquaresClick(Sender: TObject); +begin + LatinSqrsFrm.ShowModal; +end; + +procedure TOS3MainFrm.lifetableClick(Sender: TObject); +begin + LifeTableForm.ShowModal; +end; + +procedure TOS3MainFrm.LSMRitemClick(Sender: TObject); +begin + LSMregForm.ShowModal; +end; + +procedure TOS3MainFrm.MatManMnuClick(Sender: TObject); +begin + matmanfrm.ShowModal; +end; + +procedure TOS3MainFrm.MedianPolishClick(Sender: TObject); +begin + MedianPolishForm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem100Click(Sender: TObject); +begin + RelChangeFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem101Click(Sender: TObject); +begin + DIFFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem102Click(Sender: TObject); +begin + PolyDIFFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem103Click(Sender: TObject); +begin + ChiSqrFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem104Click(Sender: TObject); +begin + SpearmanFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem105Click(Sender: TObject); +begin + MannWhitUFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem106Click(Sender: TObject); +begin + FisherFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem107Click(Sender: TObject); +begin + ConcordFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem108Click(Sender: TObject); +begin + KWAnovaFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem109Click(Sender: TObject); +begin + WilcoxonFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem10Click(Sender: TObject); +begin + LoanItFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem110Click(Sender: TObject); +begin + CochranQFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem111Click(Sender: TObject); +begin + SignTestFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem112Click(Sender: TObject); +begin + FriedmanFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem113Click(Sender: TObject); +begin + BinomialFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem114Click(Sender: TObject); +begin + KendallTauFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem115Click(Sender: TObject); +begin + KaplanMeierFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem116Click(Sender: TObject); +begin + XBarFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem117Click(Sender: TObject); +begin + RChartFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem118Click(Sender: TObject); +begin + SigmaChartFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem119Click(Sender: TObject); +begin + CChartFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem11Click(Sender: TObject); +begin + SumYrsDepFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem120Click(Sender: TObject); +begin + UChartFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem14Click(Sender: TObject); +begin + SLDepFrm.ShowModal; +end; + +procedure TOS3MainFrm.MenuItem30Click(Sender: TObject); +begin + RowColSwap; +end; + +initialization + {$I mainunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/mannwhituunit.lfm b/applications/lazstats/source_orig/mannwhituunit.lfm new file mode 100644 index 000000000..e247ce31e --- /dev/null +++ b/applications/lazstats/source_orig/mannwhituunit.lfm @@ -0,0 +1,274 @@ +object MannWhitUFrm: TMannWhitUFrm + Left = 186 + Height = 300 + Top = 102 + Width = 325 + Caption = 'Mann-Whitney U Test' + ClientHeight = 300 + ClientWidth = 325 + OnShow = FormShow + LCLVersion = '0.9.26.2' + object Label1: TLabel + Left = 7 + Height = 14 + Top = 7 + Width = 90 + Caption = 'Variables Available' + ParentColor = False + end + object Label2: TLabel + Left = 200 + Height = 14 + Top = 24 + Width = 71 + Caption = 'Group Variable' + ParentColor = False + end + object Label3: TLabel + Left = 198 + Height = 14 + Top = 119 + Width = 95 + Caption = 'Dependent Variable' + ParentColor = False + end + object VarList: TListBox + Left = 7 + Height = 267 + Top = 23 + Width = 141 + TabOrder = 0 + end + object GrpIn: TBitBtn + Left = 160 + Height = 28 + Top = 24 + Width = 31 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = GrpInClick + TabOrder = 1 + end + object GrpOut: TBitBtn + Left = 160 + Height = 28 + Top = 56 + Width = 31 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = GrpOutClick + TabOrder = 2 + end + object DepIn: TBitBtn + Left = 160 + Height = 28 + Top = 120 + Width = 31 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = DepInClick + TabOrder = 3 + end + object DepOut: TBitBtn + Left = 160 + Height = 28 + Top = 152 + Width = 31 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = DepOutClick + TabOrder = 4 + end + object GrpEdit: TEdit + Left = 200 + Height = 20 + Top = 39 + Width = 115 + TabOrder = 5 + Text = 'GrpEdit' + end + object DepEdit: TEdit + Left = 200 + Height = 20 + Top = 136 + Width = 115 + TabOrder = 6 + Text = 'Edit1' + end + object ResetBtn: TButton + Left = 161 + Height = 29 + Top = 192 + Width = 67 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 7 + end + object CancelBtn: TButton + Left = 248 + Height = 29 + Top = 192 + Width = 67 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 8 + end + object ComputeBtn: TButton + Left = 161 + Height = 29 + Top = 240 + Width = 67 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 9 + end + object ReturnBtn: TButton + Left = 248 + Height = 29 + Top = 240 + Width = 67 + Caption = 'Return' + ModalResult = 1 + TabOrder = 10 + end +end diff --git a/applications/lazstats/source_orig/mannwhituunit.lrs b/applications/lazstats/source_orig/mannwhituunit.lrs new file mode 100644 index 000000000..6d38db5e1 --- /dev/null +++ b/applications/lazstats/source_orig/mannwhituunit.lrs @@ -0,0 +1,232 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TMannWhitUFrm','FORMDATA',[ + 'TPF0'#13'TMannWhitUFrm'#12'MannWhitUFrm'#4'Left'#3#186#0#6'Height'#3','#1#3 + +'Top'#2'f'#5'Width'#3'E'#1#7'Caption'#6#19'Mann-Whitney U Test'#12'ClientHei' + +'ght'#3','#1#11'ClientWidth'#3'E'#1#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6 + +#8'0.9.26.2'#0#6'TLabel'#6'Label1'#4'Left'#2#7#6'Height'#2#14#3'Top'#2#7#5'W' + +'idth'#2'Z'#7'Caption'#6#19'Variables Available'#11'ParentColor'#8#0#0#6'TLa' + +'bel'#6'Label2'#4'Left'#3#200#0#6'Height'#2#14#3'Top'#2#24#5'Width'#2'G'#7'C' + +'aption'#6#14'Group Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Le' + +'ft'#3#198#0#6'Height'#2#14#3'Top'#2'w'#5'Width'#2'_'#7'Caption'#6#18'Depend' + +'ent Variable'#11'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4'Left'#2#7#6'He' + +'ight'#3#11#1#3'Top'#2#23#5'Width'#3#141#0#8'TabOrder'#2#0#0#0#7'TBitBtn'#5 + +'GrpIn'#4'Left'#3#160#0#6'Height'#2#28#3'Top'#2#24#5'Width'#2#31#10'Glyph.Da' + +'ta'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0 + +#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184 + +#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177 + +'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255 + +'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255 + +#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255 + +#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142 + +#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J' + +#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162 + +#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255 + +#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130 + +#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199 + +'t'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255 + +'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5' + +#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#10'GrpInClick'#8 + +'TabOrder'#2#1#0#0#7'TBitBtn'#6'GrpOut'#4'Left'#3#160#0#6'Height'#2#28#3'Top' + +#2'8'#5'Width'#2#31#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6' + +#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0 + ,#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153 + +'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V' + +#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255 + +'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5' + +#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195 + +'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255 + +#255#0'h'#199't'#201''#204#138#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255 + +#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135 + +#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#11'GrpOutClick'#8'TabOrder'#2#2#0#0#7'TBitBtn'#5'DepIn' + +#4'Left'#3#160#0#6'Height'#2#28#3'Top'#2'x'#5'Width'#2#31#10'Glyph.Data'#10 + +':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0 + +' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b' + +#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5' + +#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0 + +#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255 + +#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142 + +#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J' + +#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162 + +#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255 + +#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130 + +#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199 + +'t'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255 + +'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5' + +#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#10'DepInClick'#8 + +'TabOrder'#2#3#0#0#7'TBitBtn'#6'DepOut'#4'Left'#3#160#0#6'Height'#2#28#3'Top' + +#3#152#0#5'Width'#2#31#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0 + +'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0 + +#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G' + +#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161 + +'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131 + +#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/' + +'x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e' + +#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255 + +#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132 + +#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255 + +#255#255#0'h'#199't'#201''#204#138#255#162#216#171#255#158#214#167#255#154 + ,#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255 + +#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201 + +#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O' + +#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'Num' + +'Glyphs'#2#0#7'OnClick'#7#11'DepOutClick'#8'TabOrder'#2#4#0#0#5'TEdit'#7'Grp' + +'Edit'#4'Left'#3#200#0#6'Height'#2#20#3'Top'#2''''#5'Width'#2's'#8'TabOrder' + +#2#5#4'Text'#6#7'GrpEdit'#0#0#5'TEdit'#7'DepEdit'#4'Left'#3#200#0#6'Height'#2 + +#20#3'Top'#3#136#0#5'Width'#2's'#8'TabOrder'#2#6#4'Text'#6#5'Edit1'#0#0#7'TB' + +'utton'#8'ResetBtn'#4'Left'#3#161#0#6'Height'#2#29#3'Top'#3#192#0#5'Width'#2 + +'C'#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#7#0#0 + +#7'TButton'#9'CancelBtn'#4'Left'#3#248#0#6'Height'#2#29#3'Top'#3#192#0#5'Wid' + +'th'#2'C'#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#8#0#0#7'T' + +'Button'#10'ComputeBtn'#4'Left'#3#161#0#6'Height'#2#29#3'Top'#3#240#0#5'Widt' + +'h'#2'C'#7'Caption'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder' + +#2#9#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3#248#0#6'Height'#2#29#3'Top'#3#240 + +#0#5'Width'#2'C'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#10 + +#0#0#0 +]); diff --git a/applications/lazstats/source_orig/mannwhituunit.pas b/applications/lazstats/source_orig/mannwhituunit.pas new file mode 100644 index 000000000..d92b803a4 --- /dev/null +++ b/applications/lazstats/source_orig/mannwhituunit.pas @@ -0,0 +1,326 @@ +unit MannWhitUUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, MainUnit, OutPutUnit, FunctionslIB, + Globals, DataProcs, Math; + +type + + { TMannWhitUFrm } + + TMannWhitUFrm = class(TForm) + GrpIn: TBitBtn; + GrpOut: TBitBtn; + DepIn: TBitBtn; + DepOut: TBitBtn; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + GrpEdit: TEdit; + DepEdit: TEdit; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + VarList: TListBox; + procedure ComputeBtnClick(Sender: TObject); + procedure DepInClick(Sender: TObject); + procedure DepOutClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure GrpInClick(Sender: TObject); + procedure GrpOutClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + MannWhitUFrm: TMannWhitUFrm; + +implementation + +{ TMannWhitUFrm } + +procedure TMannWhitUFrm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + GrpEdit.Text := ''; + DepEdit.Text := ''; + GrpIn.Visible := true; + GrpOut.Visible := false; + DepIn.Visible := true; + DepOut.Visible := false; + VarList.Items.Clear; + for i := 1 to NoVariables do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); +end; + +procedure TMannWhitUFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TMannWhitUFrm.DepInClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + DepEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + DepIn.Visible := false; + DepOut.Visible := true; +end; + +procedure TMannWhitUFrm.ComputeBtnClick(Sender: TObject); +label cleanup, Check1; +var + i, j, ind_var, dep_var, min_grp, max_grp, group, total_n : integer; + NoTies, NoTieGroups, n1, n2, nogroups, largestn : integer; + NoSelected : integer; + ColNoSelected : IntDyneVec; + group_count : IntdyneVec; + Ranks, X : DblDyneMat; + RankSums : DblDyneVec; + TieSum, score, t, SumT, Avg, z, prob, U, U2, SD, Temp : double; + cellstring, outline : string; + +begin + total_n := 0; + NoTieGroups := 0; + NoSelected := 2; + SumT := 0.0; + + // Check for data + if (NoVariables < 1) then + begin + ShowMessage('ERROR! You must have grid data!'); + exit; + end; + + // allocate space + SetLength(ColNoSelected,NoVariables); + + // Get column numbers of the independent and dependent variables + ind_var := 0; + dep_var := 0; + for i := 1 to NoVariables do + begin + cellstring := GrpEdit.Text; + if (cellstring = OS3MainFrm.DataGrid.Cells[i,0]) then ind_var := i; + cellstring := DepEdit.Text; + if (cellstring = OS3MainFrm.DataGrid.Cells[i,0]) then dep_var := i; + end; + ColNoSelected[0] := ind_var; + ColNoSelected[1] := dep_var; + + //get minimum and maximum group codes + min_grp := 10000; + max_grp := -10000; + for i := 1 to NoCases do + begin + if (not GoodRecord(i,NoSelected,ColNoSelected)) then continue; + group := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[ind_var,i]))); + if (group < min_grp) then min_grp := group; + if (group > max_grp) then max_grp := group; + total_n := total_n + 1; + end; + nogroups := max_grp - min_grp + 1; + + // Initialize arrays + SetLength(RankSums,nogroups); + SetLength(Ranks,NoCases,2); + SetLength(X,NoCases,2); + SetLength(group_count,nogroups); + for i := 0 to nogroups-1 do + begin + group_count[i] := 0; + RankSums[i] := 0.0; + end; + + // Setup for printer output + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('Mann-Whitney U Test'); + OutPutFrm.RichEdit.Lines.Add('See pages 116-127 in S. Siegel: Nonparametric Statistics for the Behavioral Sciences'); + OutPutFrm.RichEdit.Lines.Add(''); + + // Get data + for i := 1 to NoCases do + begin + if (not GoodRecord(i,NoSelected,ColNoSelected)) then continue; + score := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[dep_var,i])); + group := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[ind_var,i]))); + group := group - min_grp + 1; + if (group > 2) then + begin + ShowMessage('ERROR! Group codes must be 1 and 2!'); + goto cleanup; + end; + group_count[group-1] := group_count[group-1] + 1; + X[i-1,0] := score; + X[i-1,1] := group; + end; + + //Sort all scores in ascending order + for i := 1 to total_n - 1 do + begin + for j := i + 1 to total_n do + begin + if (X[i-1,0] > X[j-1,0]) then + begin + Temp := X[i-1,0]; + X[i-1,0] := X[j-1,0]; + X[j-1,0] := Temp; + Temp := X[i-1,1]; + X[i-1,1] := X[j-1,1]; + X[j-1,1] := Temp; + end; + end; + end; + + // Store ranks + for i := 1 to total_n do + begin + Ranks[i-1,0] := i; + Ranks[i-1,1] := X[i-1,1]; + end; + + //Check for ties in ranks - replace with average rank and calculate + //T for each tie and sum of the T's + i := 1; + while i < total_n do + begin + j := i + 1; + TieSum := 0; + NoTies := 0; + while (j < total_n) do + begin + if (X[j-1,0] > X[i-1,0]) then goto Check1; + if (X[j-1,0] = X[i-1,0]) then // match + begin + TieSum := TieSum + round(Ranks[j-1,0]); + NoTies := NoTies + 1; + end; + j := j + 1; + end; +Check1: + if (NoTies > 0) then //At least one tie found + begin + TieSum := TieSum + Ranks[i-1,0]; + NoTies := NoTies + 1; + Avg := TieSum / NoTies; + for j := i to i + NoTies - 1 do Ranks[j-1,0] := Avg; + t := Power(NoTies,3) - NoTies; + SumT := SumT + t; + NoTieGroups := NoTieGroups + 1; + i := i + (NoTies - 1); + end; + i := i + 1; + end; // next i + + // Calculate sum of ranks in each group + for i := 1 to total_n do + begin + group := round(Ranks[i-1,1]); + RankSums[group-1] := RankSums[group-1] + Ranks[i-1,0]; + end; + + //Calculate U for larger and smaller groups + n1 := group_count[0]; + n2 := group_count[1]; + if (n1 > n2) then + U := (n1 * n2) + ((n1 * (n1 + 1)) / 2.0) - RankSums[0] + else + U := (n1 * n2) + ((n2 * (n2 + 1)) / 2.0) - RankSums[1]; + U2 := (n1 * n2) - U; + SD := (n1 * n2 * (n1 + n2 + 1)) / 12.0; + SD := sqrt(SD); + if (U2 > U) then z := (U2 - (n1 * n2 / 2)) / SD + else z := (U - (n1 * n2 / 2)) / SD; + prob := 1.0 - probz(z); + + //Report results + OutPutFrm.RichEdit.Lines.Add(' Score Rank Group'); + OutPutFrm.RichEdit.Lines.Add(''); + for i := 1 to total_n do + begin + outline := format('%10.2f %10.2f %10.0f', + [X[i-1,0], Ranks[i-1,0], Ranks[i-1,1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Sum of Ranks in each Group'); + OutPutFrm.RichEdit.Lines.Add('Group Sum No. in Group'); + for i := 1 to nogroups do + begin + outline := format('%3d %10.2f %5d', [i+min_grp-1, RankSums[i-1],group_count[i-1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('No. of tied rank groups = %3d',[NoTieGroups]); + OutPutFrm.RichEdit.Lines.Add(outline); + if (n1 > n2) then largestn := n1 + else largestn := n2; + if (largestn < 20) then + outline := format('Statistic U = %8.4f',[U]) + else + begin + if (U > U2) then outline := format('Statistic U = %8.4f',[U]) + else outline := format('Statistic U = %8.4f',[U2]); + end; + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('z Statistic (corrected for ties) = %8.4f, Prob. > z = %6.4f', + [z, prob]); + OutPutFrm.RichEdit.Lines.Add(outline); + if (n2 < 20) then + begin + OutPutFrm.RichEdit.Lines.Add('z test is approximate. Use tables of exact probabilities in Siegel.'); + OutPutFrm.RichEdit.Lines.Add('(Table J or K, pages 271-277)'); + end; + OutPutFrm.ShowModal; + + // Clean up the heap +cleanup: + group_count := nil; + X := nil; + Ranks := nil; + RankSums := nil; + ColNoSelected := nil; +end; + +procedure TMannWhitUFrm.DepOutClick(Sender: TObject); +begin + VarList.Items.Add(DepEdit.Text); + DepEdit.Text := ''; + DepIn.Visible := true; + DepOut.Visible := false; +end; + +procedure TMannWhitUFrm.GrpInClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + GrpEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + GrpIn.Visible := false; + GrpOut.Visible := true; +end; + +procedure TMannWhitUFrm.GrpOutClick(Sender: TObject); +begin + VarList.Items.Add(GrpEdit.Text); + GrpEdit.Text := ''; + GrpIn.Visible := true; + GrpOut.Visible := false; +end; + +initialization + {$I mannwhituunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/matchitemunit.lfm b/applications/lazstats/source_orig/matchitemunit.lfm new file mode 100644 index 000000000..59f73e6e3 --- /dev/null +++ b/applications/lazstats/source_orig/matchitemunit.lfm @@ -0,0 +1,368 @@ +object MatchItemForm: TMatchItemForm + Left = 195 + Height = 596 + Top = 118 + Width = 773 + Caption = 'Matching Item Create or Edit Form' + ClientHeight = 596 + ClientWidth = 773 + OnShow = FormShow + LCLVersion = '0.9.30.4' + object jpeglabel: TLabel + Left = 19 + Height = 16 + Top = 399 + Width = 225 + Caption = 'jpeg photo to display prior to item (if any):' + ParentColor = False + end + object jpegnameEdit: TEdit + Left = 249 + Height = 23 + Top = 392 + Width = 372 + TabOrder = 0 + Text = 'jpegnameEdit' + end + object jpegBrowseBtn: TButton + Left = 16 + Height = 30 + Top = 437 + Width = 118 + Caption = 'Browse jpeg Images' + OnClick = jpegBrowseBtnClick + TabOrder = 1 + end + object SelectImageBtn: TButton + Left = 19 + Height = 26 + Top = 508 + Width = 112 + Caption = 'Select Shown Image' + OnClick = SelectImageBtnClick + TabOrder = 2 + end + object ItemSaveBtn: TButton + Left = 376 + Height = 33 + Top = 436 + Width = 111 + Caption = 'Save this item' + OnClick = ItemSaveBtnClick + TabOrder = 3 + end + object PreviousBtn: TButton + Left = 507 + Height = 32 + Top = 437 + Width = 110 + Caption = 'Show Previous Item' + OnClick = PreviousBtnClick + TabOrder = 4 + end + object ShowNextBtn: TButton + Left = 378 + Height = 30 + Top = 492 + Width = 109 + Caption = 'Show Next Item' + OnClick = ShowNextBtnClick + TabOrder = 5 + end + object StartNewBtn: TButton + Left = 507 + Height = 30 + Top = 492 + Width = 111 + Caption = 'Start a new item' + OnClick = StartNewBtnClick + TabOrder = 6 + end + object ReturnBtn: TButton + Left = 441 + Height = 30 + Top = 556 + Width = 111 + Caption = 'Return' + OnClick = ReturnBtnClick + TabOrder = 7 + end + object Image1: TImage + Left = 151 + Height = 154 + Top = 432 + Width = 214 + end + object Memo1: TMemo + Left = 96 + Height = 93 + Top = 3 + Width = 616 + Lines.Strings = ( + 'Directions: To create a Matching item, you will need to enter the number of an item code which contains' + 'both a major code and a minor code. It is suggested you print all item codes from the options menu on the' + 'main procedure page of the item banking program. You can however, browse the Matchin items from this ' + 'form.' + 'After you have selected an item code number, enter the item stem in the space provided. Your item can also' + 'include a jpeg picture prior to the presentation of the item on a test. To find the image, click the jpeg browse' + 'button until you see the image you wish to include. When that item is shown, click the Select button to save' + 'the name of the image file.' + '' + ) + ScrollBars = ssVertical + TabOrder = 8 + end + object Label1: TLabel + Left = 7 + Height = 16 + Top = 364 + Width = 396 + Caption = 'The Item number in the Right-Hand list that matches the Left-Hand List is: ' + ParentColor = False + end + object AnswerEdit: TEdit + Left = 407 + Height = 23 + Top = 357 + Width = 36 + TabOrder = 9 + Text = 'AnswerEdit' + end + object Label2: TLabel + Left = 41 + Height = 16 + Top = 105 + Width = 76 + Caption = 'Left-Hand List' + ParentColor = False + end + object Label3: TLabel + Left = 480 + Height = 16 + Top = 105 + Width = 84 + Caption = 'Right-Hand List' + ParentColor = False + end + object Label4: TLabel + Left = 9 + Height = 16 + Top = 130 + Width = 15 + Caption = 'A. ' + ParentColor = False + end + object Label5: TLabel + Left = 7 + Height = 16 + Top = 168 + Width = 14 + Caption = 'B. ' + ParentColor = False + end + object Label6: TLabel + Left = 8 + Height = 16 + Top = 209 + Width = 15 + Caption = 'C. ' + ParentColor = False + end + object Label7: TLabel + Left = 7 + Height = 16 + Top = 250 + Width = 15 + Caption = 'D. ' + ParentColor = False + end + object Label8: TLabel + Left = 8 + Height = 16 + Top = 289 + Width = 13 + Caption = 'E. ' + ParentColor = False + end + object Label9: TLabel + Left = 375 + Height = 16 + Top = 130 + Width = 13 + Caption = '1. ' + ParentColor = False + end + object Label10: TLabel + Left = 376 + Height = 16 + Top = 168 + Width = 13 + Caption = '2. ' + ParentColor = False + end + object Label11: TLabel + Left = 375 + Height = 16 + Top = 209 + Width = 13 + Caption = '3. ' + ParentColor = False + end + object Label12: TLabel + Left = 376 + Height = 16 + Top = 250 + Width = 13 + Caption = '4. ' + ParentColor = False + end + object Label13: TLabel + Left = 376 + Height = 16 + Top = 289 + Width = 13 + Caption = '5. ' + ParentColor = False + end + object Left1Edit: TEdit + Left = 25 + Height = 23 + Top = 123 + Width = 322 + TabOrder = 10 + Text = 'Left1Edit' + end + object Left5Edit: TEdit + Left = 25 + Height = 23 + Top = 288 + Width = 322 + TabOrder = 11 + Text = 'Edit1' + end + object Left4Edit: TEdit + Left = 25 + Height = 23 + Top = 240 + Width = 322 + TabOrder = 12 + Text = 'Edit1' + end + object Left3Edit: TEdit + Left = 25 + Height = 23 + Top = 200 + Width = 322 + TabOrder = 13 + Text = 'Edit1' + end + object Right1Edit: TEdit + Left = 400 + Height = 23 + Top = 123 + Width = 322 + TabOrder = 14 + Text = 'Edit1' + end + object Right5Edit: TEdit + Left = 400 + Height = 23 + Top = 282 + Width = 322 + TabOrder = 15 + Text = 'Edit1' + end + object Right4Edit: TEdit + Left = 400 + Height = 23 + Top = 240 + Width = 322 + TabOrder = 16 + Text = 'Edit1' + end + object Right3Edit: TEdit + Left = 400 + Height = 23 + Top = 200 + Width = 322 + TabOrder = 17 + Text = 'Edit1' + end + object Right2Edit: TEdit + Left = 400 + Height = 23 + Top = 161 + Width = 322 + TabOrder = 18 + Text = 'Edit1' + end + object Left2Edit: TEdit + Left = 25 + Height = 23 + Top = 161 + Width = 322 + TabOrder = 19 + Text = 'Edit1' + end + object TFItemNoLabel: TLabel + Left = 9 + Height = 16 + Top = 331 + Width = 75 + Caption = 'Item Number:' + ParentColor = False + end + object ItemNoEdit: TEdit + Left = 112 + Height = 23 + Top = 324 + Width = 44 + TabOrder = 20 + Text = '1' + end + object ItemCodeLabel: TLabel + Left = 178 + Height = 16 + Top = 331 + Width = 93 + Caption = 'Item Major Code:' + ParentColor = False + end + object MajorCodeEdit: TEdit + Left = 282 + Height = 23 + Top = 324 + Width = 41 + TabOrder = 21 + Text = '1' + end + object MinorCodeLabel: TLabel + Left = 338 + Height = 16 + Top = 329 + Width = 94 + Caption = 'Item Minor Code:' + ParentColor = False + end + object MinorCodeEdit: TEdit + Left = 442 + Height = 23 + Top = 324 + Width = 45 + TabOrder = 22 + Text = '0' + end + object CodeBrowseBtn: TButton + Left = 508 + Height = 28 + Top = 320 + Width = 106 + Caption = 'Browse Items' + OnClick = CodeBrowseBtnClick + TabOrder = 23 + end + object OpenPictureDialog1: TOpenPictureDialog + left = 686 + top = 464 + end +end diff --git a/applications/lazstats/source_orig/matchitemunit.lrs b/applications/lazstats/source_orig/matchitemunit.lrs new file mode 100644 index 000000000..2da669b31 --- /dev/null +++ b/applications/lazstats/source_orig/matchitemunit.lrs @@ -0,0 +1,94 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TMatchItemForm','FORMDATA',[ + 'TPF0'#14'TMatchItemForm'#13'MatchItemForm'#4'Left'#3#195#0#6'Height'#3'T'#2#3 + +'Top'#2'v'#5'Width'#3#5#3#7'Caption'#6'!Matching Item Create or Edit Form'#12 + +'ClientHeight'#3'T'#2#11'ClientWidth'#3#5#3#6'OnShow'#7#8'FormShow'#10'LCLVe' + +'rsion'#6#8'0.9.30.4'#0#6'TLabel'#9'jpeglabel'#4'Left'#2#19#6'Height'#2#16#3 + +'Top'#3#143#1#5'Width'#3#225#0#7'Caption'#6'-jpeg photo to display prior to ' + +'item (if any):'#11'ParentColor'#8#0#0#5'TEdit'#12'jpegnameEdit'#4'Left'#3 + +#249#0#6'Height'#2#23#3'Top'#3#136#1#5'Width'#3't'#1#8'TabOrder'#2#0#4'Text' + +#6#12'jpegnameEdit'#0#0#7'TButton'#13'jpegBrowseBtn'#4'Left'#2#16#6'Height'#2 + +#30#3'Top'#3#181#1#5'Width'#2'v'#7'Caption'#6#18'Browse jpeg Images'#7'OnCli' + +'ck'#7#18'jpegBrowseBtnClick'#8'TabOrder'#2#1#0#0#7'TButton'#14'SelectImageB' + +'tn'#4'Left'#2#19#6'Height'#2#26#3'Top'#3#252#1#5'Width'#2'p'#7'Caption'#6#18 + +'Select Shown Image'#7'OnClick'#7#19'SelectImageBtnClick'#8'TabOrder'#2#2#0#0 + +#7'TButton'#11'ItemSaveBtn'#4'Left'#3'x'#1#6'Height'#2'!'#3'Top'#3#180#1#5'W' + +'idth'#2'o'#7'Caption'#6#14'Save this item'#7'OnClick'#7#16'ItemSaveBtnClick' + +#8'TabOrder'#2#3#0#0#7'TButton'#11'PreviousBtn'#4'Left'#3#251#1#6'Height'#2 + +' '#3'Top'#3#181#1#5'Width'#2'n'#7'Caption'#6#18'Show Previous Item'#7'OnCli' + +'ck'#7#16'PreviousBtnClick'#8'TabOrder'#2#4#0#0#7'TButton'#11'ShowNextBtn'#4 + +'Left'#3'z'#1#6'Height'#2#30#3'Top'#3#236#1#5'Width'#2'm'#7'Caption'#6#14'Sh' + +'ow Next Item'#7'OnClick'#7#16'ShowNextBtnClick'#8'TabOrder'#2#5#0#0#7'TButt' + +'on'#11'StartNewBtn'#4'Left'#3#251#1#6'Height'#2#30#3'Top'#3#236#1#5'Width'#2 + +'o'#7'Caption'#6#16'Start a new item'#7'OnClick'#7#16'StartNewBtnClick'#8'Ta' + +'bOrder'#2#6#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3#185#1#6'Height'#2#30#3'To' + +'p'#3','#2#5'Width'#2'o'#7'Caption'#6#6'Return'#7'OnClick'#7#14'ReturnBtnCli' + +'ck'#8'TabOrder'#2#7#0#0#6'TImage'#6'Image1'#4'Left'#3#151#0#6'Height'#3#154 + +#0#3'Top'#3#176#1#5'Width'#3#214#0#0#0#5'TMemo'#5'Memo1'#4'Left'#2'`'#6'Heig' + +'ht'#2']'#3'Top'#2#3#5'Width'#3'h'#2#13'Lines.Strings'#1#6'hDirections: To ' + +'create a Matching item, you will need to enter the number of an item code w' + +'hich contains'#6'jboth a major code and a minor code. It is suggested you ' + +'print all item codes from the options menu on the'#6'gmain procedure page o' + +'f the item banking program. You can however, browse the Matchin items fro' + +'m this '#6#5'form.'#6'kAfter you have selected an item code number, enter t' + +'he item stem in the space provided. Your item can also'#6'qinclude a jpeg ' + +'picture prior to the presentation of the item on a test. To find the image' + +', click the jpeg browse'#6'mbutton until you see the image you wish to incl' + +'ude. When that item is shown, click the Select button to save'#6#27'the na' + +'me of the image file.'#6#0#0#10'ScrollBars'#7#10'ssVertical'#8'TabOrder'#2#8 + +#0#0#6'TLabel'#6'Label1'#4'Left'#2#7#6'Height'#2#16#3'Top'#3'l'#1#5'Width'#3 + +#140#1#7'Caption'#6'KThe Item number in the Right-Hand list that matches the' + +' Left-Hand List is: '#11'ParentColor'#8#0#0#5'TEdit'#10'AnswerEdit'#4'Left' + +#3#151#1#6'Height'#2#23#3'Top'#3'e'#1#5'Width'#2'$'#8'TabOrder'#2#9#4'Text'#6 + +#10'AnswerEdit'#0#0#6'TLabel'#6'Label2'#4'Left'#2')'#6'Height'#2#16#3'Top'#2 + +'i'#5'Width'#2'L'#7'Caption'#6#14'Left-Hand List'#11'ParentColor'#8#0#0#6'TL' + +'abel'#6'Label3'#4'Left'#3#224#1#6'Height'#2#16#3'Top'#2'i'#5'Width'#2'T'#7 + +'Caption'#6#15'Right-Hand List'#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4 + +'Left'#2#9#6'Height'#2#16#3'Top'#3#130#0#5'Width'#2#15#7'Caption'#6#3'A. '#11 + +'ParentColor'#8#0#0#6'TLabel'#6'Label5'#4'Left'#2#7#6'Height'#2#16#3'Top'#3 + +#168#0#5'Width'#2#14#7'Caption'#6#3'B. '#11'ParentColor'#8#0#0#6'TLabel'#6'L' + +'abel6'#4'Left'#2#8#6'Height'#2#16#3'Top'#3#209#0#5'Width'#2#15#7'Caption'#6 + +#3'C. '#11'ParentColor'#8#0#0#6'TLabel'#6'Label7'#4'Left'#2#7#6'Height'#2#16 + +#3'Top'#3#250#0#5'Width'#2#15#7'Caption'#6#3'D. '#11'ParentColor'#8#0#0#6'TL' + +'abel'#6'Label8'#4'Left'#2#8#6'Height'#2#16#3'Top'#3'!'#1#5'Width'#2#13#7'Ca' + +'ption'#6#3'E. '#11'ParentColor'#8#0#0#6'TLabel'#6'Label9'#4'Left'#3'w'#1#6 + +'Height'#2#16#3'Top'#3#130#0#5'Width'#2#13#7'Caption'#6#3'1. '#11'ParentColo' + +'r'#8#0#0#6'TLabel'#7'Label10'#4'Left'#3'x'#1#6'Height'#2#16#3'Top'#3#168#0#5 + +'Width'#2#13#7'Caption'#6#3'2. '#11'ParentColor'#8#0#0#6'TLabel'#7'Label11'#4 + +'Left'#3'w'#1#6'Height'#2#16#3'Top'#3#209#0#5'Width'#2#13#7'Caption'#6#3'3. ' + +#11'ParentColor'#8#0#0#6'TLabel'#7'Label12'#4'Left'#3'x'#1#6'Height'#2#16#3 + +'Top'#3#250#0#5'Width'#2#13#7'Caption'#6#3'4. '#11'ParentColor'#8#0#0#6'TLab' + +'el'#7'Label13'#4'Left'#3'x'#1#6'Height'#2#16#3'Top'#3'!'#1#5'Width'#2#13#7 + +'Caption'#6#3'5. '#11'ParentColor'#8#0#0#5'TEdit'#9'Left1Edit'#4'Left'#2#25#6 + +'Height'#2#23#3'Top'#2'{'#5'Width'#3'B'#1#8'TabOrder'#2#10#4'Text'#6#9'Left1' + +'Edit'#0#0#5'TEdit'#9'Left5Edit'#4'Left'#2#25#6'Height'#2#23#3'Top'#3' '#1#5 + +'Width'#3'B'#1#8'TabOrder'#2#11#4'Text'#6#5'Edit1'#0#0#5'TEdit'#9'Left4Edit' + +#4'Left'#2#25#6'Height'#2#23#3'Top'#3#240#0#5'Width'#3'B'#1#8'TabOrder'#2#12 + ,#4'Text'#6#5'Edit1'#0#0#5'TEdit'#9'Left3Edit'#4'Left'#2#25#6'Height'#2#23#3 + +'Top'#3#200#0#5'Width'#3'B'#1#8'TabOrder'#2#13#4'Text'#6#5'Edit1'#0#0#5'TEdi' + +'t'#10'Right1Edit'#4'Left'#3#144#1#6'Height'#2#23#3'Top'#2'{'#5'Width'#3'B'#1 + +#8'TabOrder'#2#14#4'Text'#6#5'Edit1'#0#0#5'TEdit'#10'Right5Edit'#4'Left'#3 + +#144#1#6'Height'#2#23#3'Top'#3#26#1#5'Width'#3'B'#1#8'TabOrder'#2#15#4'Text' + +#6#5'Edit1'#0#0#5'TEdit'#10'Right4Edit'#4'Left'#3#144#1#6'Height'#2#23#3'Top' + +#3#240#0#5'Width'#3'B'#1#8'TabOrder'#2#16#4'Text'#6#5'Edit1'#0#0#5'TEdit'#10 + +'Right3Edit'#4'Left'#3#144#1#6'Height'#2#23#3'Top'#3#200#0#5'Width'#3'B'#1#8 + +'TabOrder'#2#17#4'Text'#6#5'Edit1'#0#0#5'TEdit'#10'Right2Edit'#4'Left'#3#144 + +#1#6'Height'#2#23#3'Top'#3#161#0#5'Width'#3'B'#1#8'TabOrder'#2#18#4'Text'#6#5 + +'Edit1'#0#0#5'TEdit'#9'Left2Edit'#4'Left'#2#25#6'Height'#2#23#3'Top'#3#161#0 + +#5'Width'#3'B'#1#8'TabOrder'#2#19#4'Text'#6#5'Edit1'#0#0#6'TLabel'#13'TFItem' + +'NoLabel'#4'Left'#2#9#6'Height'#2#16#3'Top'#3'K'#1#5'Width'#2'K'#7'Caption'#6 + +#12'Item Number:'#11'ParentColor'#8#0#0#5'TEdit'#10'ItemNoEdit'#4'Left'#2'p' + +#6'Height'#2#23#3'Top'#3'D'#1#5'Width'#2','#8'TabOrder'#2#20#4'Text'#6#1'1'#0 + +#0#6'TLabel'#13'ItemCodeLabel'#4'Left'#3#178#0#6'Height'#2#16#3'Top'#3'K'#1#5 + +'Width'#2']'#7'Caption'#6#16'Item Major Code:'#11'ParentColor'#8#0#0#5'TEdit' + +#13'MajorCodeEdit'#4'Left'#3#26#1#6'Height'#2#23#3'Top'#3'D'#1#5'Width'#2')' + +#8'TabOrder'#2#21#4'Text'#6#1'1'#0#0#6'TLabel'#14'MinorCodeLabel'#4'Left'#3 + +'R'#1#6'Height'#2#16#3'Top'#3'I'#1#5'Width'#2'^'#7'Caption'#6#16'Item Minor ' + +'Code:'#11'ParentColor'#8#0#0#5'TEdit'#13'MinorCodeEdit'#4'Left'#3#186#1#6'H' + +'eight'#2#23#3'Top'#3'D'#1#5'Width'#2'-'#8'TabOrder'#2#22#4'Text'#6#1'0'#0#0 + +#7'TButton'#13'CodeBrowseBtn'#4'Left'#3#252#1#6'Height'#2#28#3'Top'#3'@'#1#5 + +'Width'#2'j'#7'Caption'#6#12'Browse Items'#7'OnClick'#7#18'CodeBrowseBtnClic' + +'k'#8'TabOrder'#2#23#0#0#18'TOpenPictureDialog'#18'OpenPictureDialog1'#4'lef' + +'t'#3#174#2#3'top'#3#208#1#0#0#0 +]); diff --git a/applications/lazstats/source_orig/matchitemunit.pas b/applications/lazstats/source_orig/matchitemunit.pas new file mode 100644 index 000000000..d67fb286e --- /dev/null +++ b/applications/lazstats/source_orig/matchitemunit.pas @@ -0,0 +1,430 @@ +unit MatchItemUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, ExtCtrls, ExtDlgs, outputunit; + +type + + { TMatchItemForm } + + TMatchItemForm = class(TForm) + AnswerEdit: TEdit; + CodeBrowseBtn: TButton; + ItemCodeLabel: TLabel; + Left1Edit: TEdit; + Left2Edit: TEdit; + Left5Edit: TEdit; + Left4Edit: TEdit; + Left3Edit: TEdit; + MajorCodeEdit: TEdit; + MinorCodeEdit: TEdit; + MinorCodeLabel: TLabel; + Right1Edit: TEdit; + Right5Edit: TEdit; + Right4Edit: TEdit; + Right3Edit: TEdit; + Right2Edit: TEdit; + Image1: TImage; + ItemSaveBtn: TButton; + jpegBrowseBtn: TButton; + jpeglabel: TLabel; + jpegnameEdit: TEdit; + Label1: TLabel; + Label10: TLabel; + Label11: TLabel; + Label12: TLabel; + Label13: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + Label5: TLabel; + Label6: TLabel; + Label7: TLabel; + Label8: TLabel; + Label9: TLabel; + Memo1: TMemo; + OpenPictureDialog1: TOpenPictureDialog; + PreviousBtn: TButton; + ReturnBtn: TButton; + SelectImageBtn: TButton; + ShowNextBtn: TButton; + StartNewBtn: TButton; + ItemNoEdit: TEdit; + TFItemNoLabel: TLabel; + procedure CodeBrowseBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure ItemSaveBtnClick(Sender: TObject); + procedure jpegBrowseBtnClick(Sender: TObject); + procedure PreviousBtnClick(Sender: TObject); + procedure ReturnBtnClick(Sender: TObject); + procedure SelectImageBtnClick(Sender: TObject); + procedure ShowNextBtnClick(Sender: TObject); + procedure StartNewBtnClick(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + MatchItemForm: TMatchItemForm; + +implementation +uses ItemBankingUnit; + +{ TMatchItemForm } + +procedure TMatchItemForm.jpegBrowseBtnClick(Sender: TObject); +VAR + JPEG : TJPEGImage; +begin + OpenPictureDialog1.Options := OpenPictureDialog1.Options+[ofFileMustExist]; + if not OpenPictureDialog1.Execute then exit; + try + JPEG := TJPEGImage.Create; + try + JPEG.LoadFromFile(OpenPictureDialog1.FileName); + Image1.Picture.Assign(JPEG); + finally + JPEG.Free; + end; + except + on E: Exception do begin + MessageDlg('Error','Error: '+E.Message,mtError,[mbOk],0); + end; + end; + Image1.Proportional := true; +end; + +procedure TMatchItemForm.PreviousBtnClick(Sender: TObject); +Var + response : string; + itemno : integer; + JPEG : TJPEGImage; + noleft, noright : integer; +begin + response := InputBox('Code Number:','Number:','1'); + itemno := StrToInt(response); + if itemno <= ItemBankFrm.BankInfo.NMatchItems then + begin + Image1.Canvas.Clear; + ItemNoEdit.Text := IntToStr(ItemBankFrm.MatchInfo[itemno].ItemNumber); + MajorCodeEdit.Text := IntToStr(ItemBankFrm.MatchInfo[itemno].majorcode); + MinorCodeEdit.Text := IntToStr(ItemBankFrm.MatchInfo[itemno].minorcode); + noleft := ItemBankFrm.MatchInfo[itemno].NLeft; + noright := ItemBankFrm.MatchInfo[itemno].NRight; + if noleft > 0 then Left1Edit.Text := ItemBankFrm.MatchInfo[itemno].Left1; + if noleft > 1 then Left2Edit.Text := ItemBankFrm.MatchInfo[itemno].Left2; + if noleft > 2 then Left3Edit.Text := ItemBankFrm.MatchInfo[itemno].Left3; + if noleft > 3 then Left4Edit.Text := ItemBankFrm.MatchInfo[itemno].Left4; + if noleft > 4 then Left5Edit.Text := ItemBankFrm.MatchInfo[itemno].Left5; + if noright > 0 then Right1Edit.Text := ItemBankFrm.MatchInfo[itemno].Right1; + if noright > 1 then Right2Edit.Text := ItemBankFrm.MatchInfo[itemno].Right2; + if noright > 2 then Right3Edit.Text := ItemBankFrm.MatchInfo[itemno].Right3; + if noright > 3 then Right4Edit.Text := ItemBankFrm.MatchInfo[itemno].Right4; + if noright > 4 then Right5Edit.Text := ItemBankFrm.MatchInfo[itemno].Right5; + AnswerEdit.Text := ItemBankFrm.MatchInfo[itemno].CorrectChoice; + jpegnameEdit.Text := ItemBankFrm.MatchInfo[itemno].PicName; + if jpegnameEdit.Text <> 'none' then + begin + JPEG := TJPEGImage.Create; + try + JPEG.LoadFromFile(jpegnameEdit.Text); + Image1.Picture.Assign(JPEG); + finally + JPEG.Free; + Image1.Proportional := true; + end; + end; + end; +end; + +procedure TMatchItemForm.ReturnBtnClick(Sender: TObject); +begin + MatchItemForm.Hide; + Close; +end; + +procedure TMatchItemForm.ItemSaveBtnClick(Sender: TObject); +var + currentno : integer; + count : integer; + noleft, noright : integer; + i : integer; +begin + count := ItemBankFrm.BankInfo.NMatchItems; + currentno := StrToInt(ItemNoEdit.Text); + noleft := 0; + if Left1Edit.Text <> '' then noleft := noleft + 1; + if Left2Edit.Text <> '' then noleft := noleft + 1; + if Left3Edit.Text <> '' then noleft := noleft + 1; + if Left4Edit.Text <> '' then noleft := noleft + 1; + if Left5Edit.Text <> '' then noleft := noleft + 1; + noright := 0; + if Right1Edit.Text <> '' then noright := noright + 1; + if Right2Edit.Text <> '' then noright := noright + 1; + if Right3Edit.Text <> '' then noright := noright + 1; + if Right4Edit.Text <> '' then noright := noright + 1; + if Right5Edit.Text <> '' then noright := noright + 1; + if currentno > count then + begin + ItemBankFrm.BankInfo.NMatchItems := currentno; + ItemBankFrm.NEssayText.Text := IntToStr(currentno); + end; + ItemBankFrm.MatchInfo[currentno].ItemNumber := currentno; + ItemBankFrm.MatchInfo[currentno].majorcode := StrToInt(MajorCodeEdit.Text); + ItemBankFrm.MatchInfo[currentno].minorcode := StrToInt(MinorCodeEdit.Text); + ItemBankFrm.MatchInfo[currentno].NLeft := noleft; + ItemBankFrm.MatchInfo[currentno].NRight := noright; + if noleft > 0 then ItemBankFrm.MatchInfo[currentno].Left1 := Left1Edit.Text; + if noleft > 1 then ItemBankFrm.MatchInfo[currentno].Left2 := Left2Edit.Text; + if noleft > 2 then ItemBankFrm.MatchInfo[currentno].Left3 := Left3Edit.Text; + if noleft > 3 then ItemBankFrm.MatchInfo[currentno].Left4 := Left4Edit.Text; + if noleft > 4 then ItemBankFrm.MatchInfo[currentno].Left5 := Left5Edit.Text; + if noright > 0 then ItemBankFrm.MatchInfo[currentno].Right1 := Right1Edit.Text; + if noright > 1 then ItemBankFrm.MatchInfo[currentno].Right2 := Right2Edit.Text; + if noright > 2 then ItemBankFrm.MatchInfo[currentno].Right3 := Right3Edit.Text; + if noright > 3 then ItemBankFrm.MatchInfo[currentno].Right4 := Right4Edit.Text; + if noright > 4 then ItemBankFrm.MatchInfo[currentno].Right5 := Right5Edit.Text; + ItemBankFrm.MatchInfo[currentno].CorrectChoice := AnswerEdit.Text[1]; + ItemBankFrm.MatchInfo[currentno].PicName := jpegnameEdit.Text; +end; + +procedure TMatchItemForm.FormShow(Sender: TObject); +Var + nitems : integer; + noleft, noright : integer; + JPEG : TJPEGImage; +begin + Image1.Canvas.Clear; + Left1Edit.Text := ''; + Left2Edit.Text := ''; + Left3Edit.Text := ''; + Left4Edit.Text := ''; + Left5Edit.Text := ''; + Right1Edit.Text := ''; + Right2Edit.Text := ''; + Right3Edit.Text := ''; + Right3Edit.Text := ''; + Right5Edit.Text := ''; + AnswerEdit.Text := ''; + + if ItemBankFrm.BankInfo.NMatchItems > 0 then + begin + nitems := ItemBankFrm.BankInfo.NMatchItems; + ItemNoEdit.Text := '1'; //IntToStr(ItemBankFrm.TFItemInfo[1].ItemNumber); + MajorCodeEdit.Text := IntToStr(ItemBankFrm.MatchInfo[1].majorcode) ; + MinorCodeEdit.Text := IntToStr(ItemBankFrm.MatchInfo[1].minorcode); + noleft := ItemBankFrm.MatchInfo[1].NLeft; + if noleft > 0 then Left1Edit.Text := ItemBankFrm.MatchInfo[1].Left1 ; + if noleft > 1 then Left2Edit.Text := ItemBankFrm.MatchInfo[1].Left2 ; + if noleft > 2 then Left3Edit.Text := ItemBankFrm.MatchInfo[1].Left3 ; + if noleft > 3 then Left4Edit.Text := ItemBankFrm.MatchInfo[1].Left4 ; + if noleft > 4 then Left5Edit.Text := ItemBankFrm.MatchInfo[1].Left5 ; + noright := ItemBankFrm.MatchInfo[1].NRight; + if noright > 0 then Right1Edit.Text := ItemBankFrm.MatchInfo[1].Right1 ; + if noright > 1 then Right2Edit.Text := ItemBankFrm.MatchInfo[1].Right2 ; + if noright > 2 then Right3Edit.Text := ItemBankFrm.MatchInfo[1].Right3 ; + if noright > 3 then Right4Edit.Text := ItemBankFrm.MatchInfo[1].Right4 ; + if noright > 4 then Right5Edit.Text := ItemBankFrm.MatchInfo[1].Right5 ; + AnswerEdit.Text := ItemBankFrm.MatchInfo[1].CorrectChoice; + jpegnameEdit.Text := ItemBankFrm.MatchInfo[1].PicName; + if jpegnameEdit.Text <> 'none' then + begin + JPEG := TJPEGImage.Create; + try + JPEG.LoadFromFile(jpegnameEdit.Text); + Image1.Picture.Assign(JPEG); + finally + JPEG.Free; + Image1.Proportional := true; + end; + end; + end else + begin + ItemNoEdit.Text := '1'; + MajorCodeEdit.Text := '1'; + MinorCodeEdit.Text := '0'; + Left1Edit.Text := ''; + Left2Edit.Text := ''; + Left3Edit.Text := ''; + Left4Edit.Text := ''; + Left5Edit.Text := ''; + Right1Edit.Text := ''; + Right2Edit.Text := ''; + Right3Edit.Text := ''; + Right3Edit.Text := ''; + Right5Edit.Text := ''; + AnswerEdit.Text := ''; + jpegnameEdit.Text := 'none'; + Image1.Canvas.Clear; + end; +end; + +procedure TMatchItemForm.CodeBrowseBtnClick(Sender: TObject); +var + count : integer; + i : integer; + outline : string; + noleft, noright : integer; +begin + OutPutFrm.RichEdit.Clear; + count := ItemBankFrm.BankInfo.NMatchItems ; + OutPutFrm.RichEdit.Lines.Add('Current Items'); + OutPutFrm.RichEdit.Lines.Add(''); + + for i := 1 to count do + begin + noleft := ItemBankFrm.MatchInfo[i].NLeft; + noright := ItemBankFrm.MatchInfo[i].NRight; + outline := format('Item number %3d',[ItemBankFrm.MatchInfo[i].itemnumber]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Major Code %3d',[ItemBankFrm.MatchInfo[i].majorcode]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Minor Code %3d',[ItemBankFrm.MatchInfo[i].minorcode]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('No. Left items = %3d, No. Right items = %3d', + [ItemBankFrm.MatchInfo[i].NLeft,ItemBankFrm.MatchInfo[i].NRight]); + OutPutFrm.RichEdit.Lines.Add(outline); + if noleft > 0 then + begin + outline := format('Left Item 1 %s',[ItemBankFrm.MatchInfo[i].Left1]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + if noright > 0 then + begin + outline := format(' Right Item 1 %s',[ItemBankFrm.MatchInfo[i].Right1]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + if noleft > 1 then + begin + outline := format('Left Item 2 %s',[ItemBankFrm.MatchInfo[i].Left2]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + if noright > 1 then + begin + outline := format(' Right Item 2 %s',[ItemBankFrm.MatchInfo[i].Right2]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + if noleft > 2 then + begin + outline := format('Left Item 3 %s',[ItemBankFrm.MatchInfo[i].Left3]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + if noright > 2 then + begin + outline := format(' Right Item 3 %s',[ItemBankFrm.MatchInfo[i].Right3]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + if noleft > 3 then + begin + outline := format('Left Item 4 %s',[ItemBankFrm.MatchInfo[i].Left4]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + if noright > 3 then + begin + outline := format(' Right Item 4 %s',[ItemBankFrm.MatchInfo[i].Right4]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + if noleft > 4 then + begin + outline := format('Left Item 5 %s',[ItemBankFrm.MatchInfo[i].Left5]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + if noright > 4 then + begin + outline := format(' Right Item 5 %s',[ItemBankFrm.MatchInfo[i].Right5]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + outline := format('Correct Choice %s',[ItemBankFrm.MatchInfo[i].CorrectChoice]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Graphic Image %s',[ItemBankFrm.MatchInfo[i].PicName]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + end; + OutPutFrm.ShowModal; +end; + +procedure TMatchItemForm.SelectImageBtnClick(Sender: TObject); +begin + jpegnameEdit.Text := OpenPictureDialog1.FileName; +end; + +procedure TMatchItemForm.ShowNextBtnClick(Sender: TObject); +var + count : integer; + itemno : integer; + JPEG : TJPEGImage; + noleft, noright : integer; +begin + itemno := StrToInt(ItemNoEdit.Text) + 1; + count := ItemBankFrm.BankInfo.NMatchItems; + if count <= itemno then + begin + Image1.Canvas.Clear; + ItemNoEdit.Text := IntToStr(ItemBankFrm.MatchInfo[itemno].ItemNumber); + MajorCodeEdit.Text := IntToStr(ItemBankFrm.MatchInfo[itemno].majorcode) ; + MinorCodeEdit.Text := IntToStr(ItemBankFrm.MatchInfo[itemno].minorcode); + noleft := ItemBankFrm.MatchInfo[itemno].NLeft; + noright := ItemBankFrm.MatchInfo[itemno].NRight; + if noleft > 0 then Left1Edit.Text := ItemBankFrm.MatchInfo[itemno].Left1 ; + if noleft > 1 then Left2Edit.Text := ItemBankFrm.MatchInfo[itemno].Left2; + if noleft > 2 then Left3Edit.Text := ItemBankFrm.MatchInfo[itemno].Left3; + if noleft > 3 then Left4Edit.Text := ItemBankFrm.MatchInfo[itemno].Left4; + if noleft > 4 then Left5Edit.Text := ItemBankFrm.MatchInfo[itemno].Left5; + if noright > 0 then Right1Edit.Text := ItemBankFrm.MatchInfo[itemno].Right1; + if noright > 1 then Right2Edit.Text := ItemBankFrm.MatchInfo[itemno].Right2; + if noright > 2 then Right3Edit.Text := ItemBankFrm.MatchInfo[itemno].Right3; + if noright > 3 then Right4Edit.Text := ItemBankFrm.MatchInfo[itemno].Right4; + if noright > 4 then Right5Edit.Text := ItemBankFrm.MatchInfo[itemno].Right5; + AnswerEdit.Text := ItemBankFrm.MatchInfo[itemno].CorrectChoice; + jpegnameEdit.Text := ItemBankFrm.MatchInfo[itemno].PicName; + if jpegnameEdit.Text <> 'none' then + begin + JPEG := TJPEGImage.Create; + try + JPEG.LoadFromFile(jpegnameEdit.Text); + Image1.Picture.Assign(JPEG); + finally + JPEG.Free; + Image1.Proportional := true; + end; + end; + end; +end; + +procedure TMatchItemForm.StartNewBtnClick(Sender: TObject); +var + currentno : integer; + +begin + Image1.Canvas.Clear; + currentno := ItemBankFrm.BankInfo.NMatchItems + 1; + ItemNoEdit.Text := IntToStr(currentno); + currentno := StrToInt(MinorCodeEdit.Text); + MinorCodeEdit.Text := IntToStr(currentno + 1); + Left1Edit.Text := ''; + Left2Edit.Text := ''; + Left3Edit.Text := ''; + Left4Edit.Text := ''; + Left5Edit.Text := ''; + Right1Edit.Text := ''; + Right2Edit.Text := ''; + Right3Edit.Text := ''; + Right4Edit.Text := ''; + Right5Edit.Text := ''; + AnswerEdit.Text := ''; + jpegnameEdit.Text := 'none'; + Image1.Canvas.Clear; +end; + +initialization + {$I matchitemunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/matmanunit.lfm b/applications/lazstats/source_orig/matmanunit.lfm new file mode 100644 index 000000000..eb5ba3227 --- /dev/null +++ b/applications/lazstats/source_orig/matmanunit.lfm @@ -0,0 +1,539 @@ +object matmanfrm: Tmatmanfrm + Left = 16 + Height = 575 + Top = 93 + Width = 943 + Caption = 'Matrix Manipulation' + ClientHeight = 556 + ClientWidth = 943 + Menu = MainMenu1 + OnShow = FormShow + LCLVersion = '0.9.28.2' + object Label1: TLabel + Left = 808 + Height = 14 + Top = 131 + Width = 37 + Caption = 'SCRIPT' + ParentColor = False + end + object Label2: TLabel + Left = 5 + Height = 14 + Top = 8 + Width = 100 + Caption = 'Current Active Grid: ' + ParentColor = False + end + object Label3: TLabel + Left = 14 + Height = 14 + Top = 33 + Width = 7 + Caption = '1' + ParentColor = False + end + object Label4: TLabel + Left = 368 + Height = 14 + Top = 33 + Width = 7 + Caption = '3' + ParentColor = False + end + object Label5: TLabel + Left = 16 + Height = 14 + Top = 273 + Width = 7 + Caption = '2' + ParentColor = False + end + object Label6: TLabel + Left = 369 + Height = 14 + Top = 279 + Width = 7 + Caption = '4' + ParentColor = False + end + object MatricesBox: TComboBox + Left = 737 + Height = 21 + Top = 1 + Width = 188 + ItemHeight = 13 + ItemIndex = 0 + Items.Strings = ( + 'MATRICES' + ) + OnClick = MatricesBoxClick + TabOrder = 0 + Text = 'MATRICES' + end + object ColVecsBox: TComboBox + Left = 737 + Height = 21 + Top = 32 + Width = 188 + ItemHeight = 13 + ItemIndex = 0 + Items.Strings = ( + 'COLUMN VECTORS' + ) + OnClick = ColVecsBoxClick + TabOrder = 1 + Text = 'COLUMN VECTORS' + end + object RowVecsBox: TComboBox + Left = 736 + Height = 21 + Top = 66 + Width = 189 + ItemHeight = 13 + ItemIndex = 0 + Items.Strings = ( + 'ROW VECTORS' + ) + OnClick = RowVecsBoxClick + TabOrder = 2 + Text = 'ROW VECTORS' + end + object ScalarsBox: TComboBox + Left = 737 + Height = 21 + Top = 96 + Width = 187 + ItemHeight = 13 + ItemIndex = 0 + Items.Strings = ( + 'SCALARS' + ) + OnClick = ScalarsBoxClick + TabOrder = 3 + Text = 'SCALARS' + end + object ScriptList: TListBox + Left = 736 + Height = 348 + Top = 153 + Width = 188 + ItemHeight = 0 + OnClick = ScriptListClick + TabOrder = 4 + end + object GridNoEdit: TEdit + Left = 121 + Height = 21 + Top = 1 + Width = 37 + TabOrder = 5 + Text = 'GridNoEdit' + end + object MatOneEdit: TEdit + Left = 48 + Height = 21 + Top = 34 + Width = 304 + TabOrder = 6 + Text = 'MatOneEdit' + end + object Grid1: TStringGrid + Left = 9 + Height = 203 + Top = 64 + Width = 343 + Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goEditing, goSmoothScroll] + TabOrder = 7 + OnClick = Grid1Click + OnKeyPress = Grid1KeyPress + OnMouseDown = Grid1MouseDown + end + object MatTwoEdit: TEdit + Left = 48 + Height = 21 + Top = 276 + Width = 307 + TabOrder = 8 + Text = 'MatTwoEdit' + end + object Grid2: TStringGrid + Left = 10 + Height = 199 + Top = 303 + Width = 342 + Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goEditing, goSmoothScroll] + TabOrder = 9 + OnClick = Grid2Click + OnKeyPress = Grid2KeyPress + OnMouseDown = Grid2MouseDown + end + object MatThreeEdit: TEdit + Left = 402 + Height = 21 + Top = 32 + Width = 319 + TabOrder = 10 + Text = 'MatThreeEdit' + end + object Grid3: TStringGrid + Left = 368 + Height = 200 + Top = 64 + Width = 352 + Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goEditing, goSmoothScroll] + TabOrder = 11 + OnClick = Grid3Click + OnKeyPress = Grid3KeyPress + OnMouseDown = Grid3MouseDown + end + object MatFourEdit: TEdit + Left = 402 + Height = 21 + Top = 276 + Width = 320 + TabOrder = 12 + Text = 'MatFourEdit' + end + object Grid4: TStringGrid + Left = 370 + Height = 196 + Top = 306 + Width = 350 + Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goEditing, goSmoothScroll] + TabOrder = 13 + OnClick = Grid4Click + OnKeyPress = Grid4KeyPress + OnMouseDown = Grid4MouseDown + end + object Op1Edit: TEdit + Left = 25 + Height = 21 + Top = 520 + Width = 186 + TabOrder = 14 + Text = 'Op1Edit' + end + object Op2Edit: TEdit + Left = 224 + Height = 21 + Top = 520 + Width = 186 + TabOrder = 15 + Text = 'Edit1' + end + object Op3Edit: TEdit + Left = 424 + Height = 21 + Top = 520 + Width = 186 + TabOrder = 16 + Text = 'Edit1' + end + object Op4Edit: TEdit + Left = 624 + Height = 21 + Top = 520 + Width = 186 + TabOrder = 17 + Text = 'Edit1' + end + object MainMenu1: TMainMenu + left = 696 + object FilesMenu: TMenuItem + Caption = 'Files' + object keyBdmnu: TMenuItem + Caption = 'Keyboard Input' + object MatInmnu: TMenuItem + Caption = 'Matrix' + OnClick = MatInmnuClick + end + object VecInmnu: TMenuItem + Caption = 'Vector' + OnClick = VecInmnuClick + end + object ScalarInmnu: TMenuItem + Caption = 'Scalar' + OnClick = ScalarInmnuClick + end + end + object MainGridMnu: TMenuItem + Caption = 'Read Data from Main Form Grid' + OnClick = MainGridMnuClick + end + object MenuItem1: TMenuItem + Caption = '-----------------' + end + object OpenFileMnu: TMenuItem + Caption = 'Open File' + OnClick = OpenFileMnuClick + end + object SaveFileMnu: TMenuItem + Caption = 'Save File' + OnClick = SaveFileMnuClick + end + object PrintFileMnu: TMenuItem + Caption = 'Print File' + OnClick = PrintFileMnuClick + end + object MenuItem2: TMenuItem + Caption = '-------------------' + end + object ImportFileMnu: TMenuItem + Caption = 'Import a file' + object TabFileInmnu: TMenuItem + Caption = 'Tab File' + end + object SpaceFileInMnu: TMenuItem + Caption = 'Space File' + end + object CommaFileInMnu: TMenuItem + Caption = 'Comma File' + end + end + object ExportFileMnu: TMenuItem + Caption = 'Export a file' + object TabFileOutMnu: TMenuItem + Caption = 'Tab File' + end + object SpaceFileOutMnu: TMenuItem + Caption = 'Space File' + end + object CommaFileOutMnu: TMenuItem + Caption = 'Comma File' + end + end + object ScriptFileInMnu: TMenuItem + Caption = 'Open a Script File' + OnClick = ScriptFileInMnuClick + end + object ScriptSaveMnu: TMenuItem + Caption = 'Save a Script File' + OnClick = ScriptSaveMnuClick + end + object ResetMnu: TMenuItem + Caption = 'Reset All' + OnClick = ResetMnuClick + end + object ExitMnu: TMenuItem + Caption = 'EXIT' + OnClick = ExitMnuClick + end + end + object MatOpsMnu: TMenuItem + Caption = 'Matrix Operations' + object IdentMnu: TMenuItem + Caption = 'Create an Indentity Matrix' + OnClick = IdentMnuClick + end + object RowAugMnu: TMenuItem + Caption = 'Row Augment' + OnClick = RowAugMnuClick + end + object ColAugMnu: TMenuItem + Caption = 'Column Augment' + OnClick = ColAugMnuClick + end + object RowDelMnu: TMenuItem + Caption = 'Delete a Row' + OnClick = RowDelMnuClick + end + object RowInstMnu: TMenuItem + Caption = 'Insert a Row' + OnClick = RowInstMnuClick + end + object ColDelMnu: TMenuItem + Caption = 'Delete a Column' + OnClick = ColDelMnuClick + end + object ColInstMnu: TMenuItem + Caption = 'Insert a Column' + OnClick = ColInstMnuClick + end + object ExtractColVecMnu: TMenuItem + Caption = 'Extract a Column Vector' + OnClick = ExtractColVecMnuClick + end + object SVDInvMnu: TMenuItem + Caption = 'SVD Inverse' + OnClick = SVDInvMnuClick + end + object TriDiagMnu: TMenuItem + Caption = 'Tridiagonalize' + OnClick = TriDiagMnuClick + end + object ULDecompMnu: TMenuItem + Caption = 'Upper-lower Decomposition' + OnClick = ULDecompMnuClick + end + object Diagtovecmnu: TMenuItem + Caption = 'Diagonal to Vector' + OnClick = DiagtovecmnuClick + end + object Vec2DiagMnu: TMenuItem + Caption = 'Vector to Diagonal' + OnClick = Vec2DiagMnuClick + end + object DetermMnu: TMenuItem + Caption = 'Determinant' + OnClick = DetermMnuClick + end + object NormRowsMnu: TMenuItem + Caption = 'Normalize Rows' + OnClick = NormRowsMnuClick + end + object NormColsMnu: TMenuItem + Caption = 'Normalize Columns' + OnClick = NormColsMnuClick + end + object PreMultMnu: TMenuItem + Caption = 'Premultiply by' + object PrebyRowVmnu: TMenuItem + Caption = 'Row Vector' + OnClick = PrebyRowVmnuClick + end + object PreMatMnu: TMenuItem + Caption = 'Matrix' + OnClick = PreMatMnuClick + end + object PreScalarMnu: TMenuItem + Caption = 'Scalar' + OnClick = PreScalarMnuClick + end + end + object PostMultMnu: TMenuItem + Caption = 'Post Multiply by' + object PostColVMnu: TMenuItem + Caption = 'Column Vector' + OnClick = PostColVMnuClick + end + object PostMatMnu: TMenuItem + Caption = 'Matrix' + OnClick = PostMatMnuClick + end + object PostScalarMnu: TMenuItem + Caption = 'Scalar' + end + end + object EigenMnu: TMenuItem + Caption = 'Eigenvalues and Vectors' + OnClick = EigenMnuClick + end + object TransMnu: TMenuItem + Caption = 'Transpose' + OnClick = TransMnuClick + end + object TraceMnu: TMenuItem + Caption = 'Trace' + OnClick = TraceMnuClick + end + object MatSumMnu: TMenuItem + Caption = 'Matrix A + Matrix B' + OnClick = MatSumMnuClick + end + object MatSubMnu: TMenuItem + Caption = 'Matrix A - Matrix B' + OnClick = MatSubMnuClick + end + object MatPrintMnu: TMenuItem + Caption = 'Print' + OnClick = MatPrintMnuClick + end + end + object VecOpsMnu: TMenuItem + Caption = 'Vector Operations' + object VecTransMnu: TMenuItem + Caption = 'Transpose' + OnClick = VecTransMnuClick + end + object VecXscalarMnu: TMenuItem + Caption = 'Times a Scalar' + OnClick = VecXscalarMnuClick + end + object VecSqrtMnu: TMenuItem + Caption = 'Square Root of Elements' + OnClick = VecSqrtMnuClick + end + object VecRecipMnu: TMenuItem + Caption = 'Reciprocal of Elements' + OnClick = VecRecipMnuClick + end + object VecPrintMnu: TMenuItem + Caption = 'Print' + OnClick = VecPrintMnuClick + end + object RowxColVecMnu: TMenuItem + Caption = 'Row Vec. x Col. Vec.' + OnClick = RowxColVecMnuClick + end + object ColxRowVecMnu: TMenuItem + Caption = 'Col. Vec. x Row Vec.' + OnClick = ColxRowVecMnuClick + end + end + object ScalarOpsMnu: TMenuItem + Caption = 'Scalar Operations' + object ScalSqrtMnu: TMenuItem + Caption = 'Square Root' + OnClick = ScalSqrtMnuClick + end + object ScalRecipMnu: TMenuItem + Caption = 'Reciprocal' + OnClick = ScalRecipMnuClick + end + object ScalxScalMnu: TMenuItem + Caption = 'Scalar x Scalar' + OnClick = ScalxScalMnuClick + end + object PrintScalMnu: TMenuItem + Caption = 'Print' + OnClick = PrintScalMnuClick + end + end + object ScriptOptMnu: TMenuItem + Caption = 'Script Operations' + object ScriptPrintMnu: TMenuItem + Caption = 'Print' + OnClick = ScriptPrintMnuClick + end + object ScriptClearMnu: TMenuItem + Caption = 'Clear' + OnClick = ScriptClearMnuClick + end + object ScriptEditMnu: TMenuItem + Caption = 'Edit' + OnClick = ScriptEditMnuClick + end + object ScriptLoadMnu: TMenuItem + Caption = 'Load' + OnClick = ScriptLoadMnuClick + end + object ScrSavMnu: TMenuItem + Caption = 'Save' + OnClick = ScrSavMnuClick + end + object ScrExeMnu: TMenuItem + Caption = 'Execute' + OnClick = ScrExeMnuClick + end + object ScriptOpsMnu: TMenuItem + Caption = 'Options' + OnClick = ScriptOpsMnuClick + end + end + object HelpMnu: TMenuItem + Caption = 'Help' + object AboutMnu: TMenuItem + Caption = 'About' + OnClick = AboutMnuClick + end + end + end + object SaveDialog1: TSaveDialog + left = 506 + top = 1 + end + object OpenDialog1: TOpenDialog + left = 553 + end +end diff --git a/applications/lazstats/source_orig/matmanunit.lrs b/applications/lazstats/source_orig/matmanunit.lrs new file mode 100644 index 000000000..a2335f939 --- /dev/null +++ b/applications/lazstats/source_orig/matmanunit.lrs @@ -0,0 +1,154 @@ +LazarusResources.Add('Tmatmanfrm','FORMDATA',[ + 'TPF0'#10'Tmatmanfrm'#9'matmanfrm'#4'Left'#2#16#6'Height'#3'?'#2#3'Top'#2']'#5 + +'Width'#3#175#3#7'Caption'#6#19'Matrix Manipulation'#12'ClientHeight'#3','#2 + +#11'ClientWidth'#3#175#3#4'Menu'#7#9'MainMenu1'#6'OnShow'#7#8'FormShow'#10'L' + +'CLVersion'#6#8'0.9.28.2'#0#6'TLabel'#6'Label1'#4'Left'#3'('#3#6'Height'#2#14 + +#3'Top'#3#131#0#5'Width'#2'%'#7'Caption'#6#6'SCRIPT'#11'ParentColor'#8#0#0#6 + +'TLabel'#6'Label2'#4'Left'#2#5#6'Height'#2#14#3'Top'#2#8#5'Width'#2'd'#7'Cap' + +'tion'#6#21'Current Active Grid: '#11'ParentColor'#8#0#0#6'TLabel'#6'Label3' + +#4'Left'#2#14#6'Height'#2#14#3'Top'#2'!'#5'Width'#2#7#7'Caption'#6#1'1'#11'P' + +'arentColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#3'p'#1#6'Height'#2#14#3'Top'#2 + +'!'#5'Width'#2#7#7'Caption'#6#1'3'#11'ParentColor'#8#0#0#6'TLabel'#6'Label5' + +#4'Left'#2#16#6'Height'#2#14#3'Top'#3#17#1#5'Width'#2#7#7'Caption'#6#1'2'#11 + +'ParentColor'#8#0#0#6'TLabel'#6'Label6'#4'Left'#3'q'#1#6'Height'#2#14#3'Top' + +#3#23#1#5'Width'#2#7#7'Caption'#6#1'4'#11'ParentColor'#8#0#0#9'TComboBox'#11 + +'MatricesBox'#4'Left'#3#225#2#6'Height'#2#21#3'Top'#2#1#5'Width'#3#188#0#10 + +'ItemHeight'#2#13#9'ItemIndex'#2#0#13'Items.Strings'#1#6#8'MATRICES'#0#7'OnC' + +'lick'#7#16'MatricesBoxClick'#8'TabOrder'#2#0#4'Text'#6#8'MATRICES'#0#0#9'TC' + +'omboBox'#10'ColVecsBox'#4'Left'#3#225#2#6'Height'#2#21#3'Top'#2' '#5'Width' + +#3#188#0#10'ItemHeight'#2#13#9'ItemIndex'#2#0#13'Items.Strings'#1#6#14'COLUM' + +'N VECTORS'#0#7'OnClick'#7#15'ColVecsBoxClick'#8'TabOrder'#2#1#4'Text'#6#14 + +'COLUMN VECTORS'#0#0#9'TComboBox'#10'RowVecsBox'#4'Left'#3#224#2#6'Height'#2 + +#21#3'Top'#2'B'#5'Width'#3#189#0#10'ItemHeight'#2#13#9'ItemIndex'#2#0#13'Ite' + +'ms.Strings'#1#6#11'ROW VECTORS'#0#7'OnClick'#7#15'RowVecsBoxClick'#8'TabOrd' + +'er'#2#2#4'Text'#6#11'ROW VECTORS'#0#0#9'TComboBox'#10'ScalarsBox'#4'Left'#3 + +#225#2#6'Height'#2#21#3'Top'#2'`'#5'Width'#3#187#0#10'ItemHeight'#2#13#9'Ite' + +'mIndex'#2#0#13'Items.Strings'#1#6#7'SCALARS'#0#7'OnClick'#7#15'ScalarsBoxCl' + +'ick'#8'TabOrder'#2#3#4'Text'#6#7'SCALARS'#0#0#8'TListBox'#10'ScriptList'#4 + +'Left'#3#224#2#6'Height'#3'\'#1#3'Top'#3#153#0#5'Width'#3#188#0#10'ItemHeigh' + +'t'#2#0#7'OnClick'#7#15'ScriptListClick'#8'TabOrder'#2#4#0#0#5'TEdit'#10'Gri' + +'dNoEdit'#4'Left'#2'y'#6'Height'#2#21#3'Top'#2#1#5'Width'#2'%'#8'TabOrder'#2 + +#5#4'Text'#6#10'GridNoEdit'#0#0#5'TEdit'#10'MatOneEdit'#4'Left'#2'0'#6'Heigh' + +'t'#2#21#3'Top'#2'"'#5'Width'#3'0'#1#8'TabOrder'#2#6#4'Text'#6#10'MatOneEdit' + +#0#0#11'TStringGrid'#5'Grid1'#4'Left'#2#9#6'Height'#3#203#0#3'Top'#2'@'#5'Wi' + +'dth'#3'W'#1#7'Options'#11#15'goFixedVertLine'#15'goFixedHorzLine'#10'goVert' + +'Line'#10'goHorzLine'#13'goRangeSelect'#9'goEditing'#14'goSmoothScroll'#0#8 + +'TabOrder'#2#7#7'OnClick'#7#10'Grid1Click'#10'OnKeyPress'#7#13'Grid1KeyPress' + +#11'OnMouseDown'#7#14'Grid1MouseDown'#0#0#5'TEdit'#10'MatTwoEdit'#4'Left'#2 + +'0'#6'Height'#2#21#3'Top'#3#20#1#5'Width'#3'3'#1#8'TabOrder'#2#8#4'Text'#6#10 + +'MatTwoEdit'#0#0#11'TStringGrid'#5'Grid2'#4'Left'#2#10#6'Height'#3#199#0#3'T' + +'op'#3'/'#1#5'Width'#3'V'#1#7'Options'#11#15'goFixedVertLine'#15'goFixedHorz' + +'Line'#10'goVertLine'#10'goHorzLine'#13'goRangeSelect'#9'goEditing'#14'goSmo' + +'othScroll'#0#8'TabOrder'#2#9#7'OnClick'#7#10'Grid2Click'#10'OnKeyPress'#7#13 + +'Grid2KeyPress'#11'OnMouseDown'#7#14'Grid2MouseDown'#0#0#5'TEdit'#12'MatThre' + +'eEdit'#4'Left'#3#146#1#6'Height'#2#21#3'Top'#2' '#5'Width'#3'?'#1#8'TabOrde' + +'r'#2#10#4'Text'#6#12'MatThreeEdit'#0#0#11'TStringGrid'#5'Grid3'#4'Left'#3'p' + +#1#6'Height'#3#200#0#3'Top'#2'@'#5'Width'#3'`'#1#7'Options'#11#15'goFixedVer' + +'tLine'#15'goFixedHorzLine'#10'goVertLine'#10'goHorzLine'#13'goRangeSelect'#9 + +'goEditing'#14'goSmoothScroll'#0#8'TabOrder'#2#11#7'OnClick'#7#10'Grid3Click' + +#10'OnKeyPress'#7#13'Grid3KeyPress'#11'OnMouseDown'#7#14'Grid3MouseDown'#0#0 + +#5'TEdit'#11'MatFourEdit'#4'Left'#3#146#1#6'Height'#2#21#3'Top'#3#20#1#5'Wid' + +'th'#3'@'#1#8'TabOrder'#2#12#4'Text'#6#11'MatFourEdit'#0#0#11'TStringGrid'#5 + +'Grid4'#4'Left'#3'r'#1#6'Height'#3#196#0#3'Top'#3'2'#1#5'Width'#3'^'#1#7'Opt' + +'ions'#11#15'goFixedVertLine'#15'goFixedHorzLine'#10'goVertLine'#10'goHorzLi' + +'ne'#13'goRangeSelect'#9'goEditing'#14'goSmoothScroll'#0#8'TabOrder'#2#13#7 + +'OnClick'#7#10'Grid4Click'#10'OnKeyPress'#7#13'Grid4KeyPress'#11'OnMouseDown' + +#7#14'Grid4MouseDown'#0#0#5'TEdit'#7'Op1Edit'#4'Left'#2#25#6'Height'#2#21#3 + +'Top'#3#8#2#5'Width'#3#186#0#8'TabOrder'#2#14#4'Text'#6#7'Op1Edit'#0#0#5'TEd' + +'it'#7'Op2Edit'#4'Left'#3#224#0#6'Height'#2#21#3'Top'#3#8#2#5'Width'#3#186#0 + +#8'TabOrder'#2#15#4'Text'#6#5'Edit1'#0#0#5'TEdit'#7'Op3Edit'#4'Left'#3#168#1 + +#6'Height'#2#21#3'Top'#3#8#2#5'Width'#3#186#0#8'TabOrder'#2#16#4'Text'#6#5'E' + +'dit1'#0#0#5'TEdit'#7'Op4Edit'#4'Left'#3'p'#2#6'Height'#2#21#3'Top'#3#8#2#5 + +'Width'#3#186#0#8'TabOrder'#2#17#4'Text'#6#5'Edit1'#0#0#9'TMainMenu'#9'MainM' + +'enu1'#4'left'#3#184#2#0#9'TMenuItem'#9'FilesMenu'#7'Caption'#6#5'Files'#0#9 + +'TMenuItem'#8'keyBdmnu'#7'Caption'#6#14'Keyboard Input'#0#9'TMenuItem'#8'Mat' + +'Inmnu'#7'Caption'#6#6'Matrix'#7'OnClick'#7#13'MatInmnuClick'#0#0#9'TMenuIte' + ,'m'#8'VecInmnu'#7'Caption'#6#6'Vector'#7'OnClick'#7#13'VecInmnuClick'#0#0#9 + +'TMenuItem'#11'ScalarInmnu'#7'Caption'#6#6'Scalar'#7'OnClick'#7#16'ScalarInm' + +'nuClick'#0#0#0#9'TMenuItem'#11'MainGridMnu'#7'Caption'#6#29'Read Data from ' + +'Main Form Grid'#7'OnClick'#7#16'MainGridMnuClick'#0#0#9'TMenuItem'#9'MenuIt' + +'em1'#7'Caption'#6#17'-----------------'#0#0#9'TMenuItem'#11'OpenFileMnu'#7 + +'Caption'#6#9'Open File'#7'OnClick'#7#16'OpenFileMnuClick'#0#0#9'TMenuItem' + +#11'SaveFileMnu'#7'Caption'#6#9'Save File'#7'OnClick'#7#16'SaveFileMnuClick' + +#0#0#9'TMenuItem'#12'PrintFileMnu'#7'Caption'#6#10'Print File'#7'OnClick'#7 + +#17'PrintFileMnuClick'#0#0#9'TMenuItem'#9'MenuItem2'#7'Caption'#6#19'-------' + +'------------'#0#0#9'TMenuItem'#13'ImportFileMnu'#7'Caption'#6#13'Import a f' + +'ile'#0#9'TMenuItem'#12'TabFileInmnu'#7'Caption'#6#8'Tab File'#0#0#9'TMenuIt' + +'em'#14'SpaceFileInMnu'#7'Caption'#6#10'Space File'#0#0#9'TMenuItem'#14'Comm' + +'aFileInMnu'#7'Caption'#6#10'Comma File'#0#0#0#9'TMenuItem'#13'ExportFileMnu' + +#7'Caption'#6#13'Export a file'#0#9'TMenuItem'#13'TabFileOutMnu'#7'Caption'#6 + +#8'Tab File'#0#0#9'TMenuItem'#15'SpaceFileOutMnu'#7'Caption'#6#10'Space File' + +#0#0#9'TMenuItem'#15'CommaFileOutMnu'#7'Caption'#6#10'Comma File'#0#0#0#9'TM' + +'enuItem'#15'ScriptFileInMnu'#7'Caption'#6#18'Open a Script File'#7'OnClick' + +#7#20'ScriptFileInMnuClick'#0#0#9'TMenuItem'#13'ScriptSaveMnu'#7'Caption'#6 + +#18'Save a Script File'#7'OnClick'#7#18'ScriptSaveMnuClick'#0#0#9'TMenuItem' + +#8'ResetMnu'#7'Caption'#6#9'Reset All'#7'OnClick'#7#13'ResetMnuClick'#0#0#9 + +'TMenuItem'#7'ExitMnu'#7'Caption'#6#4'EXIT'#7'OnClick'#7#12'ExitMnuClick'#0#0 + +#0#9'TMenuItem'#9'MatOpsMnu'#7'Caption'#6#17'Matrix Operations'#0#9'TMenuIte' + +'m'#8'IdentMnu'#7'Caption'#6#26'Create an Indentity Matrix'#7'OnClick'#7#13 + +'IdentMnuClick'#0#0#9'TMenuItem'#9'RowAugMnu'#7'Caption'#6#11'Row Augment'#7 + +'OnClick'#7#14'RowAugMnuClick'#0#0#9'TMenuItem'#9'ColAugMnu'#7'Caption'#6#14 + +'Column Augment'#7'OnClick'#7#14'ColAugMnuClick'#0#0#9'TMenuItem'#9'RowDelMn' + +'u'#7'Caption'#6#12'Delete a Row'#7'OnClick'#7#14'RowDelMnuClick'#0#0#9'TMen' + +'uItem'#10'RowInstMnu'#7'Caption'#6#12'Insert a Row'#7'OnClick'#7#15'RowInst' + +'MnuClick'#0#0#9'TMenuItem'#9'ColDelMnu'#7'Caption'#6#15'Delete a Column'#7 + +'OnClick'#7#14'ColDelMnuClick'#0#0#9'TMenuItem'#10'ColInstMnu'#7'Caption'#6 + +#15'Insert a Column'#7'OnClick'#7#15'ColInstMnuClick'#0#0#9'TMenuItem'#16'Ex' + +'tractColVecMnu'#7'Caption'#6#23'Extract a Column Vector'#7'OnClick'#7#21'Ex' + +'tractColVecMnuClick'#0#0#9'TMenuItem'#9'SVDInvMnu'#7'Caption'#6#11'SVD Inve' + +'rse'#7'OnClick'#7#14'SVDInvMnuClick'#0#0#9'TMenuItem'#10'TriDiagMnu'#7'Capt' + +'ion'#6#14'Tridiagonalize'#7'OnClick'#7#15'TriDiagMnuClick'#0#0#9'TMenuItem' + +#11'ULDecompMnu'#7'Caption'#6#25'Upper-lower Decomposition'#7'OnClick'#7#16 + +'ULDecompMnuClick'#0#0#9'TMenuItem'#12'Diagtovecmnu'#7'Caption'#6#18'Diagona' + +'l to Vector'#7'OnClick'#7#17'DiagtovecmnuClick'#0#0#9'TMenuItem'#11'Vec2Dia' + +'gMnu'#7'Caption'#6#18'Vector to Diagonal'#7'OnClick'#7#16'Vec2DiagMnuClick' + +#0#0#9'TMenuItem'#9'DetermMnu'#7'Caption'#6#11'Determinant'#7'OnClick'#7#14 + +'DetermMnuClick'#0#0#9'TMenuItem'#11'NormRowsMnu'#7'Caption'#6#14'Normalize ' + +'Rows'#7'OnClick'#7#16'NormRowsMnuClick'#0#0#9'TMenuItem'#11'NormColsMnu'#7 + +'Caption'#6#17'Normalize Columns'#7'OnClick'#7#16'NormColsMnuClick'#0#0#9'TM' + +'enuItem'#10'PreMultMnu'#7'Caption'#6#14'Premultiply by'#0#9'TMenuItem'#12'P' + +'rebyRowVmnu'#7'Caption'#6#10'Row Vector'#7'OnClick'#7#17'PrebyRowVmnuClick' + +#0#0#9'TMenuItem'#9'PreMatMnu'#7'Caption'#6#6'Matrix'#7'OnClick'#7#14'PreMat' + +'MnuClick'#0#0#9'TMenuItem'#12'PreScalarMnu'#7'Caption'#6#6'Scalar'#7'OnClic' + +'k'#7#17'PreScalarMnuClick'#0#0#0#9'TMenuItem'#11'PostMultMnu'#7'Caption'#6 + +#16'Post Multiply by'#0#9'TMenuItem'#11'PostColVMnu'#7'Caption'#6#13'Column ' + +'Vector'#7'OnClick'#7#16'PostColVMnuClick'#0#0#9'TMenuItem'#10'PostMatMnu'#7 + +'Caption'#6#6'Matrix'#7'OnClick'#7#15'PostMatMnuClick'#0#0#9'TMenuItem'#13'P' + +'ostScalarMnu'#7'Caption'#6#6'Scalar'#0#0#0#9'TMenuItem'#8'EigenMnu'#7'Capti' + +'on'#6#23'Eigenvalues and Vectors'#7'OnClick'#7#13'EigenMnuClick'#0#0#9'TMen' + +'uItem'#8'TransMnu'#7'Caption'#6#9'Transpose'#7'OnClick'#7#13'TransMnuClick' + +#0#0#9'TMenuItem'#8'TraceMnu'#7'Caption'#6#5'Trace'#7'OnClick'#7#13'TraceMnu' + +'Click'#0#0#9'TMenuItem'#9'MatSumMnu'#7'Caption'#6#19'Matrix A + Matrix B'#7 + +'OnClick'#7#14'MatSumMnuClick'#0#0#9'TMenuItem'#9'MatSubMnu'#7'Caption'#6#19 + +'Matrix A - Matrix B'#7'OnClick'#7#14'MatSubMnuClick'#0#0#9'TMenuItem'#11'Ma' + +'tPrintMnu'#7'Caption'#6#5'Print'#7'OnClick'#7#16'MatPrintMnuClick'#0#0#0#9 + +'TMenuItem'#9'VecOpsMnu'#7'Caption'#6#17'Vector Operations'#0#9'TMenuItem'#11 + +'VecTransMnu'#7'Caption'#6#9'Transpose'#7'OnClick'#7#16'VecTransMnuClick'#0#0 + +#9'TMenuItem'#13'VecXscalarMnu'#7'Caption'#6#14'Times a Scalar'#7'OnClick'#7 + +#18'VecXscalarMnuClick'#0#0#9'TMenuItem'#10'VecSqrtMnu'#7'Caption'#6#23'Squa' + +'re Root of Elements'#7'OnClick'#7#15'VecSqrtMnuClick'#0#0#9'TMenuItem'#11'V' + ,'ecRecipMnu'#7'Caption'#6#22'Reciprocal of Elements'#7'OnClick'#7#16'VecReci' + +'pMnuClick'#0#0#9'TMenuItem'#11'VecPrintMnu'#7'Caption'#6#5'Print'#7'OnClick' + +#7#16'VecPrintMnuClick'#0#0#9'TMenuItem'#13'RowxColVecMnu'#7'Caption'#6#20'R' + +'ow Vec. x Col. Vec.'#7'OnClick'#7#18'RowxColVecMnuClick'#0#0#9'TMenuItem'#13 + +'ColxRowVecMnu'#7'Caption'#6#20'Col. Vec. x Row Vec.'#7'OnClick'#7#18'ColxRo' + +'wVecMnuClick'#0#0#0#9'TMenuItem'#12'ScalarOpsMnu'#7'Caption'#6#17'Scalar Op' + +'erations'#0#9'TMenuItem'#11'ScalSqrtMnu'#7'Caption'#6#11'Square Root'#7'OnC' + +'lick'#7#16'ScalSqrtMnuClick'#0#0#9'TMenuItem'#12'ScalRecipMnu'#7'Caption'#6 + +#10'Reciprocal'#7'OnClick'#7#17'ScalRecipMnuClick'#0#0#9'TMenuItem'#12'Scalx' + +'ScalMnu'#7'Caption'#6#15'Scalar x Scalar'#7'OnClick'#7#17'ScalxScalMnuClick' + +#0#0#9'TMenuItem'#12'PrintScalMnu'#7'Caption'#6#5'Print'#7'OnClick'#7#17'Pri' + +'ntScalMnuClick'#0#0#0#9'TMenuItem'#12'ScriptOptMnu'#7'Caption'#6#17'Script ' + +'Operations'#0#9'TMenuItem'#14'ScriptPrintMnu'#7'Caption'#6#5'Print'#7'OnCli' + +'ck'#7#19'ScriptPrintMnuClick'#0#0#9'TMenuItem'#14'ScriptClearMnu'#7'Caption' + +#6#5'Clear'#7'OnClick'#7#19'ScriptClearMnuClick'#0#0#9'TMenuItem'#13'ScriptE' + +'ditMnu'#7'Caption'#6#4'Edit'#7'OnClick'#7#18'ScriptEditMnuClick'#0#0#9'TMen' + +'uItem'#13'ScriptLoadMnu'#7'Caption'#6#4'Load'#7'OnClick'#7#18'ScriptLoadMnu' + +'Click'#0#0#9'TMenuItem'#9'ScrSavMnu'#7'Caption'#6#4'Save'#7'OnClick'#7#14'S' + +'crSavMnuClick'#0#0#9'TMenuItem'#9'ScrExeMnu'#7'Caption'#6#7'Execute'#7'OnCl' + +'ick'#7#14'ScrExeMnuClick'#0#0#9'TMenuItem'#12'ScriptOpsMnu'#7'Caption'#6#7 + +'Options'#7'OnClick'#7#17'ScriptOpsMnuClick'#0#0#0#9'TMenuItem'#7'HelpMnu'#7 + +'Caption'#6#4'Help'#0#9'TMenuItem'#8'AboutMnu'#7'Caption'#6#5'About'#7'OnCli' + +'ck'#7#13'AboutMnuClick'#0#0#0#0#11'TSaveDialog'#11'SaveDialog1'#4'left'#3 + +#250#1#3'top'#2#1#0#0#11'TOpenDialog'#11'OpenDialog1'#4'left'#3')'#2#0#0#0 +]); diff --git a/applications/lazstats/source_orig/matmanunit.pas b/applications/lazstats/source_orig/matmanunit.pas new file mode 100644 index 000000000..7aceb36aa --- /dev/null +++ b/applications/lazstats/source_orig/matmanunit.pas @@ -0,0 +1,8103 @@ +unit matmanunit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + Menus, StdCtrls, Grids, scripteditorunit, rootmethodunit, scriptoptsunit, + colinsertunit, rowinsertunit, outputunit, OptionsUnit; + +type + DynMat = array of array of double; + DynVec = array of double; + DynIntVec = array of integer; + Dynstrarray = array of string; + Scaler = double; + ObjectNames = array of string; + +type + + { Tmatmanfrm } + + Tmatmanfrm = class(TForm) + ColVecsBox: TComboBox; + Label3: TLabel; + Label4: TLabel; + Label5: TLabel; + Label6: TLabel; + keyBdmnu: TMenuItem; + MatInmnu: TMenuItem; + MenuItem1: TMenuItem; + MenuItem2: TMenuItem; + ImportFileMnu: TMenuItem; + CommaFileInMnu: TMenuItem; + ExportFileMnu: TMenuItem; + CommaFileOutMnu: TMenuItem; + ExitMnu: TMenuItem; + IdentMnu: TMenuItem; + ColAugMnu: TMenuItem; + ColDelMnu: TMenuItem; + ColInstMnu: TMenuItem; + ExtractColVecMnu: TMenuItem; + Diagtovecmnu: TMenuItem; + DetermMnu: TMenuItem; + EigenMnu: TMenuItem; + MatSumMnu: TMenuItem; + MatSubMnu: TMenuItem; + MatPrintMnu: TMenuItem; + ColxRowVecMnu: TMenuItem; + AboutMnu: TMenuItem; + MainGridMnu: TMenuItem; + OpenDialog1: TOpenDialog; + SaveDialog1: TSaveDialog; + ScriptOpsMnu: TMenuItem; + ScrExeMnu: TMenuItem; + ScrSavMnu: TMenuItem; + ScriptLoadMnu: TMenuItem; + ScriptEditMnu: TMenuItem; + ScriptClearMnu: TMenuItem; + ScriptPrintMnu: TMenuItem; + PrintScalMnu: TMenuItem; + ScalxScalMnu: TMenuItem; + ScalRecipMnu: TMenuItem; + ScalSqrtMnu: TMenuItem; + RowxColVecMnu: TMenuItem; + VecPrintMnu: TMenuItem; + VecRecipMnu: TMenuItem; + VecSqrtMnu: TMenuItem; + VecXscalarMnu: TMenuItem; + VecTransMnu: TMenuItem; + TraceMnu: TMenuItem; + TransMnu: TMenuItem; + PostScalarMnu: TMenuItem; + PostMatMnu: TMenuItem; + PostColVMnu: TMenuItem; + PostMultMnu: TMenuItem; + PreScalarMnu: TMenuItem; + PreMatMnu: TMenuItem; + PrebyRowVmnu: TMenuItem; + PreMultMnu: TMenuItem; + NormColsMnu: TMenuItem; + NormRowsMnu: TMenuItem; + Vec2DiagMnu: TMenuItem; + ULDecompMnu: TMenuItem; + TriDiagMnu: TMenuItem; + SVDInvMnu: TMenuItem; + RowInstMnu: TMenuItem; + RowDelMnu: TMenuItem; + RowAugMnu: TMenuItem; + ResetMnu: TMenuItem; + ScriptSaveMnu: TMenuItem; + ScriptFileInMnu: TMenuItem; + SpaceFileOutMnu: TMenuItem; + TabFileOutMnu: TMenuItem; + SpaceFileInMnu: TMenuItem; + TabFileInmnu: TMenuItem; + PrintFileMnu: TMenuItem; + SaveFileMnu: TMenuItem; + OpenFileMnu: TMenuItem; + ScalarInmnu: TMenuItem; + VecInmnu: TMenuItem; + Op1Edit: TEdit; + Op2Edit: TEdit; + Op3Edit: TEdit; + Op4Edit: TEdit; + MatFourEdit: TEdit; + MatThreeEdit: TEdit; + MatTwoEdit: TEdit; + MatOneEdit: TEdit; + GridNoEdit: TEdit; + Label1: TLabel; + Label2: TLabel; + ScriptList: TListBox; + ScalarsBox: TComboBox; + RowVecsBox: TComboBox; + MatricesBox: TComboBox; + MainMenu1: TMainMenu; + FilesMenu: TMenuItem; + MatOpsMnu: TMenuItem; + HelpMnu: TMenuItem; + ScriptOptMnu: TMenuItem; + ScalarOpsMnu: TMenuItem; + Grid1: TStringGrid; + Grid2: TStringGrid; + Grid3: TStringGrid; + Grid4: TStringGrid; + VecOpsMnu: TMenuItem; + procedure AboutMnuClick(Sender: TObject); + procedure ColAugMnuClick(Sender: TObject); + procedure ColDelMnuClick(Sender: TObject); + procedure ColInstMnuClick(Sender: TObject); + procedure ColVecsBoxClick(Sender: TObject); + procedure ColxRowVecMnuClick(Sender: TObject); + procedure DetermMnuClick(Sender: TObject); + procedure DiagtovecmnuClick(Sender: TObject); + procedure EigenMnuClick(Sender: TObject); + procedure ExitMnuClick(Sender: TObject); + procedure ExtractColVecMnuClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure Grid1Click(Sender: TObject); + procedure Grid1KeyPress(Sender: TObject; var Key: char); + procedure Grid1MouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure Grid2Click(Sender: TObject); + procedure Grid2KeyPress(Sender: TObject; var Key: char); + procedure Grid2MouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure Grid3Click(Sender: TObject); + procedure Grid3KeyPress(Sender: TObject; var Key: char); + procedure Grid3MouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure Grid4Click(Sender: TObject); + procedure Grid4KeyPress(Sender: TObject; var Key: char); + procedure Grid4MouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure IdentMnuClick(Sender: TObject); + procedure MainGridMnuClick(Sender: TObject); + procedure MatInmnuClick(Sender: TObject); + procedure MatPrintMnuClick(Sender: TObject); + procedure MatricesBoxClick(Sender: TObject); + procedure MatSubMnuClick(Sender: TObject); + procedure MatSumMnuClick(Sender: TObject); + procedure NormColsMnuClick(Sender: TObject); + procedure NormRowsMnuClick(Sender: TObject); + procedure OpenFileMnuClick(Sender: TObject); + procedure PostColVMnuClick(Sender: TObject); + procedure PostMatMnuClick(Sender: TObject); + procedure PrebyRowVmnuClick(Sender: TObject); + procedure PreMatMnuClick(Sender: TObject); + procedure PreScalarMnuClick(Sender: TObject); + procedure PrintFileMnuClick(Sender: TObject); + procedure PrintScalMnuClick(Sender: TObject); + procedure ResetMnuClick(Sender: TObject); + procedure RowAugMnuClick(Sender: TObject); + procedure RowDelMnuClick(Sender: TObject); + procedure RowInstMnuClick(Sender: TObject); + procedure RowVecsBoxClick(Sender: TObject); + procedure RowxColVecMnuClick(Sender: TObject); + procedure SaveFileMnuClick(Sender: TObject); + procedure ScalarInmnuClick(Sender: TObject); + procedure ScalarsBoxClick(Sender: TObject); + procedure ScalRecipMnuClick(Sender: TObject); + procedure ScalSqrtMnuClick(Sender: TObject); + procedure ScalxScalMnuClick(Sender: TObject); + procedure ScrExeMnuClick(Sender: TObject); + procedure ScriptClearMnuClick(Sender: TObject); + procedure ScriptEditMnuClick(Sender: TObject); + procedure ScriptFileInMnuClick(Sender: TObject); + procedure ScriptListClick(Sender: TObject); + procedure ScriptLoadMnuClick(Sender: TObject); + procedure ScriptOpsMnuClick(Sender: TObject); + procedure ScriptPrintMnuClick(Sender: TObject); + procedure ScriptSaveMnuClick(Sender: TObject); + procedure ScrSavMnuClick(Sender: TObject); + procedure SVDInvMnuClick(Sender: TObject); + procedure TraceMnuClick(Sender: TObject); + procedure TransMnuClick(Sender: TObject); + procedure TriDiagMnuClick(Sender: TObject); + procedure ULDecompMnuClick(Sender: TObject); + procedure Vec2DiagMnuClick(Sender: TObject); + procedure VecInmnuClick(Sender: TObject); + procedure VecPrintMnuClick(Sender: TObject); + procedure VecRecipMnuClick(Sender: TObject); + procedure VecSqrtMnuClick(Sender: TObject); + procedure VecTransMnuClick(Sender: TObject); + procedure VecXscalarMnuClick(Sender: TObject); + private + { private declarations } + procedure GetFile(Sender: TObject); + procedure GetGridData(gridno : integer); + FUNCTION sign(a,b: double): double; + FUNCTION max(a,b: double): double; + PROCEDURE matinv(a, vtimesw, v, w: DynMat; n: integer); + procedure ResetGrids(Sender : TObject); + function DuplicateMat(str : string): boolean; + function DuplicateColVec(str : string): boolean; + function DuplicateRowVec(str : string): boolean; + function DuplicateScaler(str : string): boolean; + procedure tred2(VAR a: DynMat; n: integer; VAR d,e: DynVec); + procedure ludcmp(VAR a: DynMat; n: integer; VAR indx: DynIntVec; VAR d: double); + procedure DynMatPrint(VAR xmat : DynMat ; rows, cols : integer; + VAR title : string; VAR ColHeadings : Dynstrarray); + procedure ComboAdd(FileName : String); + procedure tqli(VAR d : DynVec; VAR e : DynVec; n : integer; VAR z : DynMat); + procedure xtqli(VAR a : DynMat; NP : integer; VAR d : DynVec; VAR f : DynVec; VAR e : DynVec); + function SEVS(nv, nf : integer; C : double; VAR r : DynMat; VAR v : DynMat; VAR e : DynVec; VAR p : DynVec; nd : integer) : integer; + procedure nonsymroots(VAR a : DynMat; nv : integer; VAR nf : integer; c : double; VAR v : DynMat; VAR e : DynVec; VAR x : DynVec; VAR t : double; VAR ev : double); + procedure OPRINC(S : DynVec; M, IA : integer; VAR EVAL : DynVec; VAR EVEC : DynMat; VAR COMP : DynMat; VAR VARPCNT : DynVec; VAR CL : DynVec; VAR CU : DynVec; VAR IER : integer); + procedure EHOUSS(VAR A : DynVec; N : integer; VAR D : DynVec; VAR E : DynVec; VAR E2 : DynVec); + function DSIGN(X, Y : double) : double; + FUNCTION isign(a,b : integer): integer; + procedure EQRT2S(VAR D : DynVec; VAR E : DynVec; N : integer; VAR Z : DynMat; VAR IZ : integer; VAR IER : integer); + procedure EHOBKS(VAR A : DynVec; N, M1, M2 : integer; VAR Z : DynMat; IZ : integer); + procedure UERTST(IER : integer; aNAME : string); + procedure Roots(VAR RMat : DynMat; NITEMS : integer; VAR EIGENVAL : DynVec; + VAR EIGENVEC : DynMat); + procedure SymMatRoots(A : DynMat; M : integer; VAR E : DynVec; VAR V : DynMat); + function OpParse(VAR Operation : string; OpStr : string; + VAR Op1 : string; VAR Op2 : string; VAR Op3 : string; + VAR Opergrid : integer; VAR Op1grid : integer; + VAR Op2grid : integer; VAR Op3grid : integer) : integer; + procedure OperExec; + + private + Opstr, Operation, Op1, Op2, Op3 : string; + Opergrid, Op1grid, Op2grid, Op3grid : integer; + ScriptName : string; + + public + { public declarations } + CurrentObjType : integer; + CurrentObjName : string; + MatCount : integer; + ColVecCount : integer; + RowVecCount : integer; + ScaCount : integer; + Matrix1 : DynMat; + Matrix2 : DynMat; + Matrix3 : DynMat; + Matrix4 : DynMat; + ScriptOp : boolean; + LastScript : integer; + LastGridNo : integer; + CurrentGrid : integer; + Rows1, Rows2, Rows3, Rows4 : integer; + Cols1, Cols2, Cols3, Cols4 : integer; + Rows, Cols : integer; + Saved : boolean; + + end; + +var + matmanfrm: Tmatmanfrm; + +implementation +uses MainUnit; + +{ Tmatmanfrm } + +procedure Tmatmanfrm.FormShow(Sender: TObject); +var + count, index : integer; + filename, matext, cvecext, rvecext, scaext, extstr : string; + scriptopts : TextFile; + checked : integer; + cdir : string; +begin + ResetGrids(Self); + matext := '.MAT'; + cvecext := '.CVE'; + rvecext := '.RVE'; + scaext := '.SCA'; + cdir := OptionsFrm.FilePathEdit.Text; + scripteditorfrm.FileListBox1.Directory := cdir; + scripteditorfrm.FileListBox1.Update; + count := scripteditorfrm.FileListBox1.Items.Count; + for index := 0 to count-1 do + begin + filename := scripteditorfrm.FileListBox1.Items.Strings[index]; + filename := ExtractFileName(filename); + extstr := copy(filename,Length(filename)-3,4); + if extstr = matext then MatricesBox.Items.Add(filename); + if extstr = cvecext then ColVecsBox.Items.Add(filename); + if extstr = rvecext then RowVecsBox.Items.Add(filename); + if extstr = scaext then ScalarsBox.Items.Add(filename); + end; + if FileExists('Options.SCR') then + begin + AssignFile(scriptopts, 'Options.SCR'); + Reset(scriptopts); + Readln(scriptopts,checked); + if checked = 1 then scriptoptsfrm.CheckGroup1.Checked[0] := true; + Readln(scriptopts,checked); + if checked = 1 then scriptoptsfrm.CheckGroup1.Checked[1] := true; + CloseFile(scriptopts); + end; +end; + +procedure Tmatmanfrm.Grid1Click(Sender: TObject); +begin + CurrentGrid := 1; + CurrentObjName := MatOneEdit.Text; + GridNoEdit.Text := IntToStr(1); + if ((Rows1 > 2) and (Cols1 > 2)) then CurrentObjType := 1; + if ((Rows1 > 2) and (Cols1 = 2)) then CurrentObjType := 2; + if ((Rows1 = 2) and (Cols1 > 2)) then CurrentObjType := 3; + if ((Rows1 = 2) and (Cols1 = 2)) then CurrentObjType := 4; +end; + +procedure Tmatmanfrm.Grid1KeyPress(Sender: TObject; var Key: char); +var + instr : string; + +begin + if Ord(Key) = 13 then // return pressed + begin + if ((Grid1.Row = Rows) and (Grid1.Col = Cols)) then + begin + instr := InputBox('SAVE','Save object?','Yes'); + if instr = 'Yes' then SaveFileMnuClick(Self); + end; + end; +end; + +procedure Tmatmanfrm.Grid1MouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +var i, j : integer; + +begin + if Button = mbRight then // reset the grid + begin + for i := 1 to rows1 do + for j := 1 to cols1 do + Grid1.Cells[j,i] := ''; + Grid1.RowCount := 5; + Grid1.ColCount := 5; + for i := 1 to 4 do Grid1.Cells[i,0] := 'Col.' + IntToStr(i); + for i := 1 to 4 do Grid1.Cells[0,i] := 'Row' + IntToStr(i); + rows1 := 4; + cols1 := 4; + Grid1.RowCount := 5; + Grid1.ColCount := 5; + MatOneEdit.Text := ''; + end; +end; + +procedure Tmatmanfrm.Grid2Click(Sender: TObject); +begin + CurrentGrid := 2; + CurrentObjName := MatTwoEdit.Text; + GridNoEdit.Text := IntToStr(2); + if ((Rows2 > 2) and (Cols2 > 2)) then CurrentObjType := 1; + if ((Rows2 > 2) and (Cols2 = 2)) then CurrentObjType := 2; + if ((Rows2 = 2) and (Cols2 > 2)) then CurrentObjType := 3; + if ((Rows2 = 2) and (Cols2 = 2)) then CurrentObjType := 4; +end; + +procedure Tmatmanfrm.Grid2KeyPress(Sender: TObject; var Key: char); +var + instr : string; + +begin + CurrentGrid := 2; + if Ord(Key) = 13 then // return pressed + begin + if ((Grid2.Row = Rows) and (Grid2.Col = Cols)) then + begin + instr := InputBox('SAVE','Save object?','Yes'); + if instr = 'Yes' then SaveFileMnuClick(Self); + end; + end; +end; + +procedure Tmatmanfrm.Grid2MouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +var i, j : integer; + +begin + if Button = mbRight then // reset the grid + begin + for i := 1 to rows2 do + for j := 1 to cols2 do + Grid2.Cells[j,i] := ''; + Grid2.RowCount := 5; + Grid2.ColCount := 5; + for i := 1 to 4 do Grid2.Cells[i,0] := 'Col.' + IntToStr(i); + for i := 1 to 4 do Grid2.Cells[0,i] := 'Row' + IntToStr(i); + rows2 := 4; + cols2 := 4; + Grid2.RowCount := 5; + Grid2.ColCount := 5; + MatTwoEdit.Text := ''; + end; +end; + +procedure Tmatmanfrm.Grid3Click(Sender: TObject); +begin + CurrentGrid := 3; + CurrentObjName := MatThreeEdit.Text; + GridNoEdit.Text := IntToStr(3); + if ((Rows3 > 2) and (Cols3 > 2)) then CurrentObjType := 1; + if ((Rows3 > 2) and (Cols3 = 2)) then CurrentObjType := 2; + if ((Rows3 = 2) and (Cols3 > 2)) then CurrentObjType := 3; + if ((Rows3 = 2) and (Cols3 = 2)) then CurrentObjType := 4; +end; + +procedure Tmatmanfrm.Grid3KeyPress(Sender: TObject; var Key: char); +var + instr : string; + +begin + CurrentGrid := 3; + if Ord(Key) = 13 then // return pressed + begin + if ((Grid3.Row = Rows) and (Grid3.Col = Cols)) then + begin + instr := InputBox('SAVE','Save object?','Yes'); + if instr = 'Yes' then SaveFileMnuClick(Self); + end; + end; +end; + +procedure Tmatmanfrm.Grid3MouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +var i, j : integer; + +begin + if Button = mbRight then // reset the grid + begin + for i := 1 to rows3 do + for j := 1 to cols3 do + Grid3.Cells[j,i] := ''; + Grid3.RowCount := 5; + Grid3.ColCount := 5; + for i := 1 to 4 do Grid3.Cells[i,0] := 'Col.' + IntToStr(i); + for i := 1 to 4 do Grid3.Cells[0,i] := 'Row' + IntToStr(i); + rows3 := 4; + cols3 := 4; + Grid3.RowCount := 5; + Grid3.ColCount := 5; + MatThreeEdit.Text := ''; + end; +end; + +procedure Tmatmanfrm.Grid4Click(Sender: TObject); +begin + CurrentGrid := 4; + CurrentObjName := MatFourEdit.Text; + GridNoEdit.Text := IntToStr(4); + if ((Rows4 > 2) and (Cols4 > 2)) then CurrentObjType := 1; + if ((Rows4 > 2) and (Cols4 = 2)) then CurrentObjType := 2; + if ((Rows4 = 2) and (Cols4 > 2)) then CurrentObjType := 3; + if ((Rows4 = 2) and (Cols4 = 2)) then CurrentObjType := 4; +end; + +procedure Tmatmanfrm.Grid4KeyPress(Sender: TObject; var Key: char); +var + instr : string; + +begin + CurrentGrid := 4; + if Ord(Key) = 13 then // return pressed + begin + if ((Grid4.Row = Rows) and (Grid4.Col = Cols)) then + begin + instr := InputBox('SAVE','Save object?','Yes'); + if instr = 'Yes' then SaveFileMnuClick(Self); + end; + end; +end; + +procedure Tmatmanfrm.Grid4MouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +var i, j : integer; + +begin + if Button = mbRight then // reset the grid + begin + for i := 1 to rows4 do + for j := 1 to cols4 do + Grid4.Cells[j,i] := ''; + Grid4.RowCount := 5; + Grid4.ColCount := 5; + for i := 1 to 4 do Grid4.Cells[i,0] := 'Col.' + IntToStr(i); + for i := 1 to 4 do Grid4.Cells[0,i] := 'Row' + IntToStr(i); + rows4 := 4; + cols4 := 4; + Grid4.RowCount := 5; + Grid4.ColCount := 5; + MatFourEdit.Text := ''; + end; +end; + +procedure Tmatmanfrm.IdentMnuClick(Sender: TObject); +var + info, prmptstr, newstring : string; + i, j, nsize, gridno : integer; + wasclicked : boolean; +begin + prmptstr := 'Enter the number of rows and columns:'; + info := InputBox('MATRIX SIZE',prmptstr,'4'); + nsize := StrToInt(info); + if nsize <= 0 then exit; + prmptstr := 'Place the matrix in grid:'; + info := InputBox('GRID NO.',prmptstr,IntToStr(CurrentGrid)); + gridno := StrToInt(info); + case gridno of + 1 : begin + Grid1.RowCount := nsize + 1; + Grid1.ColCount := nsize + 1; + for i := 1 to nsize do + begin + for j := 1 to nsize do + begin + if i <> j then Grid1.Cells[i,j] := FloatToStr(0.0) + else Grid1.Cells[i,j] := FloatToStr(1.0); + Grid1.Cells[j,0] := 'Col.' + IntToStr(j); + end; + Grid1.Cells[0,i] := 'Row ' + IntToStr(i); + end; + Rows1 := nsize; + Cols1 := nsize; + end; + 2 : begin + Grid2.RowCount := nsize + 1; + Grid2.ColCount := nsize + 1; + for i := 1 to nsize do + begin + for j := 1 to nsize do + begin + if i <> j then Grid2.Cells[i,j] := FloatToStr(0.0) + else Grid2.Cells[i,j] := FloatToStr(1.0); + Grid2.Cells[j,0] := 'Col.' + IntToStr(j); + end; + Grid2.Cells[0,i] := 'Row ' + IntToStr(i); + end; + Rows2 := nsize; + Cols2 := nsize; + end; + 3 : begin + Grid3.RowCount := nsize + 1; + Grid3.ColCount := nsize + 1; + for i := 1 to nsize do + begin + for j := 1 to nsize do + begin + if i <> j then Grid3.Cells[i,j] := FloatToStr(0.0) + else Grid3.Cells[i,j] := FloatToStr(1.0); + Grid3.Cells[j,0] := 'Col.' + IntToStr(j); + end; + Grid3.Cells[0,i] := 'Row ' + IntToStr(i); + end; + Rows3 := nsize; + Cols3 := nsize; + end; + 4 : begin + Grid4.RowCount := nsize + 1; + Grid4.ColCount := nsize + 1; + for i := 1 to nsize do + begin + for j := 1 to nsize do + begin + if i <> j then Grid4.Cells[i,j] := FloatToStr(0.0) + else Grid4.Cells[i,j] := FloatToStr(1.0); + Grid4.Cells[j,0] := 'Col.' + IntToStr(j); + end; + Grid4.Cells[0,i] := 'Row ' + IntToStr(i); + end; + Rows4 := nsize; + Cols4 := nsize; + end; + end; + CurrentGrid := gridno; + CurrentObjType := 1; + CurrentObjName := 'IDMAT'; + Op1Edit.Text := Operation; + Op2Edit.Text := 'IDMAT'; + if scriptop = false then + begin + prmptstr := 'Save identity matrix as '; + newstring := 'IDMAT'; + wasclicked := InputQuery('MATRIX NAME',prmptstr,newstring); + if wasclicked then info := newstring else info := 'IDMAT'; + CurrentObjName := info; + Op2Edit.Text := info; + opstr := IntToStr(gridno) + '-IDMAT:'; + opstr := opstr + IntToStr(gridno) + '-' + Op2Edit.Text; + ScriptList.Items.Add(opstr); + if wasclicked then SaveFileMnuClick(Self); + ComboAdd(CurrentObjName); + end; + case gridno of + 1 : MatOneEdit.Text := Op2Edit.Text; + 2 : MatTwoEdit.Text := Op2Edit.Text; + 3 : MatThreeEdit.Text := Op2Edit.Text; + 4 : MatFourEdit.Text := Op2Edit.Text; + end; +end; + +procedure Tmatmanfrm.MainGridMnuClick(Sender: TObject); +VAR + mrows,mcols,i,j : integer; + titlestr, instr : string; + FName : string; +begin + mrows := OS3MainFrm.DataGrid.RowCount; + mcols := OS3MainFrm.DataGrid.ColCount; + titlestr := OS3MainFrm.FileNameEdit.Text; + instr := InputBox('GRID?','Which grid no. (1-4):','1'); + CurrentGrid := StrToInt(instr); + if ((CurrentGrid < 1) or (CurrentGrid > 4)) then CurrentGrid := 1; + GridNoEdit.Text := IntToStr(CurrentGrid); + CurrentObjName := 'MainGridData.MAT'; //titlestr; + Rows := mrows-1; + Cols := mcols-1; + case CurrentGrid of + 1 : begin + Rows1 := Rows; + Cols1 := Cols; + MatOneEdit.Text := CurrentObjName; + Grid1.RowCount := Rows1+1; + Grid1.ColCount := Cols1+1; + for i := 0 to Rows1 do + for j := 0 to Cols1 do + Grid1.Cells[j,i] := ''; + for i := 1 to Cols1 do Grid1.Cells[i,0] := 'Col.'+ IntToStr(i); + for i := 1 to Rows1 do Grid1.Cells[0,i] := 'Row' + IntToStr(i); + for i := 1 to Rows1 do + for j := 1 to Cols1 do + Grid1.Cells[j,i] := OS3MainFrm.DataGrid.Cells[j,i]; + end; + 2 : begin + Rows2 := Rows; + Cols2 := Cols; + MatTwoEdit.Text := CurrentObjName; + Grid2.RowCount := Rows2+1; + Grid2.ColCount := Cols2+1; + for i := 0 to Rows2 do + for j := 0 to Cols2 do + Grid2.Cells[j,i] := ''; + for i := 1 to Cols2 do Grid2.Cells[i,0] := 'Col.'+ IntToStr(i); + for i := 1 to Rows2 do Grid2.Cells[0,i] := 'Row' + IntToStr(i); + for i := 1 to Rows2 do + for j := 1 to Cols2 do + Grid2.Cells[j,i] := OS3MainFrm.DataGrid.Cells[j,i]; + end; + 3 : begin + Rows3 := Rows; + Cols3 := Cols; + MatThreeEdit.Text := CurrentObjName; + Grid3.RowCount := Rows3+1; + Grid3.ColCount := Cols3+1; + for i := 0 to Rows3 do + for j := 0 to Cols3 do + Grid3.Cells[j,i] := ''; + for i := 1 to Cols3 do Grid3.Cells[i,0] := 'Col.'+ IntToStr(i); + for i := 1 to Rows3 do Grid3.Cells[0,i] := 'Row' + IntToStr(i); + for i := 1 to Rows3 do + for j := 1 to Cols3 do + Grid3.Cells[j,i] := OS3MainFrm.DataGrid.Cells[j,i]; + end; + 4 : begin + Rows4 := Rows; + Cols4 := Cols; + MatFourEdit.Text := CurrentObjName; + Grid4.RowCount := Rows4+1; + Grid4.ColCount := Cols4+1; + for i := 0 to Rows4 do + for j := 0 to Cols4 do + Grid4.Cells[j,i] := ''; + for i := 1 to Cols4 do Grid4.Cells[i,0] := 'Col.'+ IntToStr(i); + for i := 1 to Rows4 do Grid4.Cells[0,i] := 'Row' + IntToStr(i); + for i := 1 to Rows4 do + for j := 1 to Cols4 do + Grid4.Cells[j,i] := OS3MainFrm.DataGrid.Cells[j,i]; + end; + end; // case + CurrentObjType := 1; + MatCount := MatCount + 1; + Op1Edit.Text := 'KeyMatInput'; + Op2Edit.Text := CurrentObjName; + Op3Edit.Text := ''; + FName := ExtractFileName(CurrentObjName); + SaveFileMnuClick(self); + ComboAdd(FName); + case CurrentGrid of + 1 : Grid1.SetFocus; + 2 : Grid2.SetFocus; + 3 : Grid3.SetFocus; + 4 : Grid4.SetFocus; + end; +end; + +procedure Tmatmanfrm.MatInmnuClick(Sender: TObject); +var + instr : string; + i, j : integer; + +begin + instr := InputBox('GRID?','Which grid no. (1-4):','1'); + CurrentGrid := StrToInt(instr); + if ((CurrentGrid < 1) or (CurrentGrid > 4)) then CurrentGrid := 1; + GridNoEdit.Text := IntToStr(CurrentGrid); + instr := InputBox('NAME','Object name:','AMatrix'); + CurrentObjName := instr; + instr := InputBox('ROWS','No. of Rows = ','3'); + Rows := StrToInt(instr); + instr := InputBox('COLS','No. of Columns = ','3'); + Cols := StrToInt(instr); + case CurrentGrid of + 1 : begin + Rows1 := Rows; + Cols1 := Cols; + MatOneEdit.Text := CurrentObjName; + Grid1.RowCount := Rows1 + 1; + Grid1.ColCount := Cols1 + 1; + for i := 0 to Rows1 do + for j := 0 to Cols1 do + Grid1.Cells[j,i] := ''; + for i := 1 to Cols1 do Grid1.Cells[i,0] := 'Col.'+ IntToStr(i); + for i := 1 to Rows1 do Grid1.Cells[0,i] := 'Row' + IntToStr(i); + end; + 2 : begin + Rows2 := Rows; + Cols2 := Cols; + MatTwoEdit.Text := CurrentObjName; + Grid2.RowCount := Rows2 + 1; + Grid2.ColCount := Cols2 + 1; + for i := 0 to Rows2 do + for j := 0 to Cols2 do + Grid2.Cells[j,i] := ''; + for i := 1 to Cols2 do Grid2.Cells[i,0] := 'Col.'+ IntToStr(i); + for i := 1 to Rows2 do Grid2.Cells[0,i] := 'Row' + IntToStr(i); + end; + 3 : begin + Rows3 := Rows; + Cols3 := Cols; + MatThreeEdit.Text := CurrentObjName; + Grid3.RowCount := Rows3 + 1; + Grid3.ColCount := Cols3 + 1; + for i := 0 to Rows3 do + for j := 0 to Cols3 do + Grid3.Cells[j,i] := ''; + for i := 1 to Cols3 do Grid3.Cells[i,0] := 'Col.'+ IntToStr(i); + for i := 1 to Rows3 do Grid3.Cells[0,i] := 'Row' + IntToStr(i); + end; + 4 : begin + Rows4 := Rows; + Cols4 := Cols; + MatFourEdit.Text := CurrentObjName; + Grid4.RowCount := Rows4 + 1; + Grid4.ColCount := Cols4 + 1; + for i := 0 to Rows4 do + for j := 0 to Cols4 do + Grid4.Cells[j,i] := ''; + for i := 1 to Cols4 do Grid4.Cells[i,0] := 'Col.'+ IntToStr(i); + for i := 1 to Rows4 do Grid4.Cells[0,i] := 'Row' + IntToStr(i); + end; + end; // case + CurrentObjType := 1; + MatCount := MatCount + 1; + Op1Edit.Text := 'KeyMatInput'; + Op2Edit.Text := CurrentObjName; + Op3Edit.Text := ''; + case CurrentGrid of + 1 : Grid1.SetFocus; + 2 : Grid2.SetFocus; + 3 : Grid3.SetFocus; + 4 : Grid4.SetFocus; + end; +end; + +procedure Tmatmanfrm.MatPrintMnuClick(Sender: TObject); +var + Matrix : DynMat; + ColHeadings : DynStrarray; + i, j : integer; + nrows, ncols : integer; + title : string; + +begin + OutPutFrm.RichEdit.Clear; + case currentgrid of + 1 : begin + SetLength(Matrix,Rows1,Cols1); + SetLength(ColHeadings,Cols1); + nrows := rows1; + ncols := cols1; + for i := 0 to rows1-1 do + for j := 0 to cols1-1 do + Matrix[i,j] := StrToFloat(Grid1.Cells[j+1,i+1]); + for i := 1 to Cols1 do ColHeadings[i-1] := Grid1.Cells[i,0]; + title := MatOneEdit.Text; + end; + 2 : begin + SetLength(Matrix,Rows2,Cols2); + SetLength(ColHeadings,Cols2); + nrows := rows2; + ncols := cols2; + for i := 0 to rows2-1 do + for j := 0 to cols2-1 do + Matrix[i,j] := StrToFloat(Grid2.Cells[j+1,i+1]); + for i := 1 to Cols2 do ColHeadings[i-1] := Grid2.Cells[i,0]; + title := MatTwoEdit.Text; + end; + 3 : begin + SetLength(Matrix,Rows3,Cols3); + SetLength(ColHeadings,Cols3); + nrows := rows3; + ncols := cols3; + for i := 0 to rows3-1 do + for j := 0 to cols3-1 do + Matrix[i,j] := StrToFloat(Grid3.Cells[j+1,i+1]); + for i := 1 to Cols3 do ColHeadings[i-1] := Grid3.Cells[i,0]; + title := MatThreeEdit.Text; + end; + 4 : begin + SetLength(Matrix,Rows4,Cols4); + SetLength(ColHeadings,Cols4); + nrows := rows4; + ncols := cols4; + for i := 0 to rows4-1 do + for j := 0 to cols4-1 do + Matrix[i,j] := StrToFloat(Grid4.Cells[j+1,i+1]); + for i := 1 to Cols4 do ColHeadings[i-1] := Grid4.Cells[i,0]; + title := MatFourEdit.Text; + end; + end; + title := title + format(' From Grid Number %d',[currentgrid]); + DynMatPrint(Matrix,nrows,ncols,title,ColHeadings); + OutPutFrm.ShowModal; + ColHeadings := nil; + Matrix := nil; +end; + +procedure Tmatmanfrm.MatricesBoxClick(Sender: TObject); +var + matstr : string; + answer : string; + indexno : integer; + gridno : integer; + +begin + indexno := MatricesBox.ItemIndex; + if indexno < 0 then exit; + matstr := MatricesBox.Items.Strings[indexno]; + answer := InputBox('PLACEMENT','Place in which Grid?','1'); + gridno := StrToInt(answer); + if ((gridno < 1) or (gridno > 4)) then + begin + ShowMessage('Error - Grid number must be between 1 and 4.'); + exit; + end; + CurrentGrid := gridno; + CurrentObjType := 1; + CurrentObjName := matstr; + OpenDialog1.FileName := matstr; + GetFile(Self); + MatricesBox.Text := 'MATRICES'; + MatricesBox.ItemIndex := -1; +end; + +procedure Tmatmanfrm.MatSubMnuClick(Sender: TObject); +// Subtraction of two matrices +var + i, j : integer; + precols, postcols, prerows, postrows : integer; + info : string; + pregrid, postgrid, resultgrid : integer; + prmptstr : string; + premat, postmat, prodmat : DynMat; + clickedok : boolean; + defaultstr : string; + +begin + if ScriptOp = false then + begin + prmptstr := 'The first matrix is in '; + info := inputbox('GRID A',prmptstr,IntToStr(CurrentGrid)); + if info = '' then exit; + pregrid := StrToInt(info); + prmptstr := 'The second matrix is in '; + info := InputBox('GRID B',prmptstr,IntToStr(CurrentGrid)); + if info = '' then exit; + postgrid := StrToInt(info); + info := inputbox('RESULTS INTO','Place results in grid :','3'); + if info = '' then exit; + resultgrid := StrToInt(info); + end + else begin // executing the script + pregrid := 1; + postgrid := 2; + resultgrid := 3; + end; + case pregrid of + 1 : begin + precols := Cols1; + prerows := Rows1; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid1.Cells[j+1,i+1]); + Op2Edit.Text := ExtractFileName(MatOneEdit.Text); + end; + 2 : begin + precols := Cols2; + prerows := Rows2; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid2.Cells[j+1,i+1]); + Op2Edit.Text := ExtractFileName(MatTwoEdit.Text); + end; + 3 : begin + precols := Cols3; + prerows := Rows3; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid3.Cells[j+1,i+1]); + Op2Edit.Text := ExtractFileName(MatThreeEdit.Text); + end; + 4 : begin + precols := Cols4; + prerows := Rows4; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid4.Cells[j+1,i+1]); + Op2Edit.Text := ExtractFileName(MatFourEdit.Text); + end; + end; + case postgrid of + 1 : begin + postcols := Cols1; + postrows := Rows1; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid1.Cells[j+1,i+1]); + Op3Edit.Text := ExtractFileName(MatOneEdit.Text); + end; + 2 : begin + postcols := Cols2; + postrows := Rows2; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid2.Cells[j+1,i+1]); + Op3Edit.Text := ExtractFileName(MatTwoEdit.Text); + end; + 3 : begin + postcols := Cols3; + postrows := Rows3; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid3.Cells[j+1,i+1]); + Op3Edit.Text := ExtractFileName(MatThreeEdit.Text); + end; + 4 : begin + postcols := Cols4; + postrows := Rows4; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid4.Cells[j+1,i+1]); + Op3Edit.Text := ExtractFileName(MatFourEdit.Text); + end; + end; + SetLength(prodmat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + prodmat[i,j] := premat[i,j] - postmat[i,j]; + case resultgrid of + 1 : begin + Grid1.RowCount := prerows+1; + Grid1.ColCount := precols+1; + Rows1 := prerows; + Cols1 := precols; + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + Grid1.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + MatOneEdit.Text := 'MatrixDiff'; + Op4Edit.Text := MatOneEdit.Text; + for i := 1 to Rows1 do Grid1.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols1 do Grid1.Cells[i,0] := 'Col.' + IntToStr(i); + end; + 2 : begin + Grid2.RowCount := prerows+1; + Grid2.ColCount := precols+1; + Rows2 := prerows; + Cols2 := precols; + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + Grid2.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + MatTwoEdit.Text := 'MatrixDiff'; + Op4Edit.Text := MatTwoEdit.Text; + for i := 1 to Rows2 do Grid2.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols2 do Grid2.Cells[i,0] := 'Col.' + IntToStr(i); + end; + 3 : begin + Grid3.RowCount := prerows+1; + Grid3.ColCount := precols+1; + Rows3 := prerows; + Cols3 := precols; + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + Grid3.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + MatThreeEdit.Text := 'MatrixDiff'; + Op4Edit.Text := MatThreeEdit.Text; + for i := 1 to Rows3 do Grid3.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols3 do Grid3.Cells[i,0] := 'Col.' + IntToStr(i); + end; + 4 : begin + Grid4.RowCount := prerows+1; + Grid4.ColCount := precols+1; + Rows4 := prerows; + Cols4 := precols; + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + Grid4.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + MatFourEdit.Text := 'MatrixDiff'; + Op4Edit.Text := MatFourEdit.Text; + for i := 1 to Rows4 do Grid4.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols4 do Grid4.Cells[i,0] := 'Col.' + IntToStr(i); + end; + end; + Op1Edit.Text := 'MatMinusMat'; + opstr := IntToStr(CurrentGrid) + '-' + 'MatMinusMat:'+ IntToStr(pregrid) + '-' + Op2Edit.Text; + opstr := opstr + ':' + IntToStr(postgrid) + '-' + Op3Edit.Text; + if ScriptOp = false then + begin + prmptstr := 'Save difference as: '; + defaultstr := 'MatMinusMat'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'MatMinusMat'; + if Length(info) > 0 then + begin + Op4Edit.Text := info; + end + else begin + Op4Edit.Text := 'MatMinusMat'; + info := 'MatMinusMat'; + end; + opstr := opstr + ':' + IntToStr(resultgrid) + '-' + Op4Edit.Text; + ScriptList.Items.Add(opstr); + CurrentObjName := info; + CurrentObjType := 1; + CurrentGrid := resultgrid; + ComboAdd(CurrentObjName); + if clickedok then SaveFileMnuClick(Self); + case resultgrid of + 1 : MatOneEdit.Text := info; + 2 : MatTwoEdit.Text := info; + 3 : MatThreeEdit.Text := info; + 4 : MatFourEdit.Text := info; + end; + end; + // deallocate memory + prodmat := nil; + postmat := nil; + premat := nil; +end; + +procedure Tmatmanfrm.MatSumMnuClick(Sender: TObject); +// Addition of two matrices +var + i, j : integer; + precols, postcols, prerows, postrows : integer; + info : string; + pregrid, postgrid, resultgrid : integer; + prmptstr : string; + premat, postmat, prodmat : DynMat; + clickedok : boolean; + defaultstr : string; + +begin + if ScriptOp = false then + begin + prmptstr := 'The First Matrix in grid: '; + info := InputBox('MATRIX A',prmptstr,IntToStr(CurrentGrid)); + if info = '' then exit; + pregrid := StrToInt(info); + prmptstr := 'The second Matrix is in grid: '; + info := inputbox('MATRIX B',prmptstr,IntToStr(CurrentGrid)); + if info = '' then exit; + postgrid := StrToInt(info); + info := inputbox('RESULTS INTO','Place results in grid :','3'); + if info = '' then exit; + resultgrid := StrToInt(info); + end + else begin // executing the script + pregrid := 1; + postgrid := 2; + resultgrid := 3; + end; + case pregrid of + 1 : begin + precols := Cols1; + prerows := Rows1; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid1.Cells[j+1,i+1]); + Op2Edit.Text := ExtractFileName(MatOneEdit.Text); + end; + 2 : begin + precols := Cols2; + prerows := Rows2; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid2.Cells[j+1,i+1]); + Op2Edit.Text := ExtractFileName(MatTwoEdit.Text); + end; + 3 : begin + precols := Cols3; + prerows := Rows3; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid3.Cells[j+1,i+1]); + Op2Edit.Text := ExtractFileName(MatThreeEdit.Text); + end; + 4 : begin + precols := Cols4; + prerows := Rows4; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid4.Cells[j+1,i+1]); + Op2Edit.Text := ExtractFileName(MatFourEdit.Text); + end; + end; + case postgrid of + 1 : begin + postcols := Cols1; + postrows := Rows1; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid1.Cells[j+1,i+1]); + Op3Edit.Text := ExtractFileName(MatOneEdit.Text); + end; + 2 : begin + postcols := Cols2; + postrows := Rows2; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid2.Cells[j+1,i+1]); + Op3Edit.Text := ExtractFileName(MatTwoEdit.Text); + end; + 3 : begin + postcols := Cols3; + postrows := Rows3; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid3.Cells[j+1,i+1]); + Op3Edit.Text := ExtractFileName(MatThreeEdit.Text); + end; + 4 : begin + postcols := Cols4; + postrows := Rows4; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid4.Cells[j+1,i+1]); + Op3Edit.Text := ExtractFileName(MatFourEdit.Text); + end; + end; + SetLength(prodmat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + prodmat[i,j] := premat[i,j] + postmat[i,j]; + case resultgrid of + 1 : begin + Grid1.RowCount := prerows+1; + Grid1.ColCount := postcols+1; + Rows1 := prerows; + Cols1 := precols; + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + Grid1.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to Rows1 do Grid1.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols1 do Grid1.Cells[i,0] := 'Col.' + IntToStr(i); + MatOneEdit.Text := 'MatrixSum'; + Op4Edit.Text := MatOneEdit.Text; + end; + 2 : begin + Grid2.RowCount := prerows+1; + Grid2.ColCount := postcols+1; + Rows2 := prerows; + Cols2 := precols; + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + Grid2.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to Rows2 do Grid2.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols2 do Grid2.Cells[i,0] := 'Col.' + IntToStr(i); + MatTwoEdit.Text := 'MatrixSum'; + Op4Edit.Text := MatTwoEdit.Text; + end; + 3 : begin + Grid3.RowCount := prerows+1; + Grid3.ColCount := postcols+1; + Rows3 := prerows; + Cols3 := precols; + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + Grid3.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to Rows3 do Grid3.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols3 do Grid3.Cells[i,0] := 'Col.' + IntToStr(i); + MatThreeEdit.Text := 'MatrixSum'; + Op4Edit.Text := MatThreeEdit.Text; + end; + 4 : begin + Grid4.RowCount := prerows+1; + Grid4.ColCount := postcols+1; + Rows4 := prerows; + Cols4 := precols; + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + Grid4.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to Rows4 do Grid4.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols4 do Grid4.Cells[i,0] := 'Col.' + IntToStr(i); + MatFourEdit.Text := 'MatrixSum'; + Op4Edit.Text := MatFourEdit.Text; + end; + end; + Op1Edit.Text := 'MatPlusMat'; + opstr := IntToStr(CurrentGrid) + '-'; + opstr := opstr + 'MatPlusMat:'+ IntToStr(pregrid) + '-' + Op2Edit.Text; + opstr := opstr + ':' + IntToStr(postgrid) + '-' + Op3Edit.Text; + if ScriptOp = false then + begin + prmptstr := 'Save sum as: '; + defaultstr := 'MatPlusMat'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'MatPlusMat'; + if Length(info) > 0 then + begin + Op4Edit.Text := info; + end + else begin + Op4Edit.Text := 'MatPlusMat'; + info := 'MatPlusMat'; + end; + opstr := opstr + ':' + IntToStr(resultgrid) + '-' + Op4Edit.Text; + ScriptList.Items.Add(opstr); + CurrentObjName := info; + CurrentObjType := 1; + CurrentGrid := resultgrid; + ComboAdd(CurrentObjName); + if clickedok then SaveFileMnuClick(Self); + case resultgrid of + 1 : MatOneEdit.Text := info; + 2 : MatTwoEdit.Text := info; + 3 : MatThreeEdit.Text := info; + 4 : MatFourEdit.Text := info; + end; + end; + // deallocate memory + prodmat := nil; + postmat := nil; + premat := nil; +end; + +procedure Tmatmanfrm.NormColsMnuClick(Sender: TObject); +var + i, j : integer; + sum : double; + prmptstr, info : string; + clickedok : boolean; + defaultstr : string; +begin + case CurrentGrid of + 1 : for j := 1 to Grid1.ColCount - 1 do + begin + sum := 0.0; + for i := 1 to Grid1.RowCount - 1 do + begin + sum := sum + sqr(StrToFloat(Grid1.Cells[j,i])); + end; + sum := sqrt(sum); + for i := 1 to Grid1.RowCount - 1 do + begin + Grid1.Cells[j,i] := FloatToStr(StrToFloat(Grid1.Cells[j,i]) / sum); + end; + Op2Edit.Text := MatOneEdit.Text; + end; + 2 : for j := 1 to Grid2.ColCount - 1 do + begin + sum := 0.0; + for i := 1 to Grid2.RowCount - 1 do + begin + sum := sum + sqr(StrToFloat(Grid2.Cells[j,i])); + end; + sum := sqrt(sum); + for i := 1 to Grid2.RowCount - 1 do + begin + Grid2.Cells[j,i] := FloatToStr(StrToFloat(Grid2.Cells[j,i]) / sum); + end; + Op2Edit.Text := MatTwoEdit.Text; + end; + 3 : for j := 1 to Grid3.ColCount - 1 do + begin + sum := 0.0; + for i := 1 to Grid3.RowCount - 1 do + begin + sum := sum + sqr(StrToFloat(Grid3.Cells[j,i])); + end; + sum := sqrt(sum); + for i := 1 to Grid3.RowCount - 1 do + begin + Grid3.Cells[j,i] := FloatToStr(StrToFloat(Grid3.Cells[j,i]) / sum); + end; + Op2Edit.Text := MatThreeEdit.Text; + end; + 4 : for j := 1 to Grid4.ColCount - 1 do + begin + sum := 0.0; + for i := 1 to Grid4.RowCount - 1 do + begin + sum := sum + sqr(StrToFloat(Grid4.Cells[j,i])); + end; + sum := sqrt(sum); + for i := 1 to Grid4.RowCount - 1 do + begin + Grid4.Cells[j,i] := FloatToStr(StrToFloat(Grid4.Cells[j,i]) / sum); + end; + Op2Edit.Text := MatFourEdit.Text; + end; + end; + + if ScriptOp = false then + begin + prmptstr := 'Save normalized vectors matrix as: '; + defaultstr := 'normalvectors'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'normalvectors'; + if Length(info) > 0 then + begin + Op3Edit.Text := ':' + IntToStr(CurrentGrid) + '-' + info; + end + else begin + Op3Edit.Text := 'normalvectors'; + info := 'normalvecs'; + end; + case CurrentGrid of + 1 : MatOneEdit.Text := info; + 2 : MatTwoEdit.Text := info; + 3 : MatThreeEdit.Text := info; + 4 : MatFourEdit.Text := info; + end; + opstr := IntToStr(CurrentGrid) + '-'; + Op2Edit.Text := ExtractFileName(Op2Edit.Text); + opstr := opstr + 'NormalizeCols:' + Op2Edit.Text; + opstr := opstr + ':' + IntToStr(CurrentGrid) + '-' + Op3Edit.Text; + ScriptList.Items.Add(opstr); + CurrentObjName := info; + CurrentObjType := 1; + ComboAdd(CurrentObjName); + if clickedok then SaveFileMnuClick(Self); + end; +end; + +procedure Tmatmanfrm.NormRowsMnuClick(Sender: TObject); +var + i, j : integer; + sum : double; + prmptstr, info : string; + defaultstr : string; + clickedok : boolean; +begin + case CurrentGrid of + 1 : for i := 1 to Grid1.RowCount - 1 do + begin + sum := 0.0; + for j := 1 to Grid1.ColCount - 1 do + begin + sum := sum + sqr(StrToFloat(Grid1.Cells[j,i])); + end; + sum := sqrt(sum); + for j := 1 to Grid1.ColCount - 1 do + begin + Grid1.Cells[j,i] := FloatToStr(StrToFloat(Grid1.Cells[j,i]) / sum); + end; + Op2Edit.Text := MatOneEdit.Text; + end; + 2 : for i := 1 to Grid2.RowCount - 1 do + begin + sum := 0.0; + for j := 1 to Grid2.ColCount - 1 do + begin + sum := sum + sqr(StrToFloat(Grid2.Cells[j,i])); + end; + sum := sqrt(sum); + for j := 1 to Grid2.ColCount - 1 do + begin + Grid2.Cells[j,i] := FloatToStr(StrToFloat(Grid2.Cells[j,i]) / sum); + end; + Op2Edit.Text := MatTwoEdit.Text; + end; + 3 : for i := 1 to Grid3.RowCount - 1 do + begin + sum := 0.0; + for j := 1 to Grid3.ColCount - 1 do + begin + sum := sum + sqr(StrToFloat(Grid3.Cells[j,i])); + end; + sum := sqrt(sum); + for j := 1 to Grid3.ColCount - 1 do + begin + Grid3.Cells[j,i] := FloatToStr(StrToFloat(Grid3.Cells[j,i]) / sum); + end; + Op2Edit.Text := MatThreeEdit.Text; + end; + 4 : for i := 1 to Grid4.RowCount - 1 do + begin + sum := 0.0; + for j := 1 to Grid4.ColCount - 1 do + begin + sum := sum + sqr(StrToFloat(Grid4.Cells[j,i])); + end; + sum := sqrt(sum); + for j := 1 to Grid4.ColCount - 1 do + begin + Grid4.Cells[j,i] := FloatToStr(StrToFloat(Grid4.Cells[j,i]) / sum); + end; + Op2Edit.Text := MatFourEdit.Text; + end; + end; + if ScriptOp = false then + begin + prmptstr := 'Save normalized rows matrix as: '; + defaultstr := 'RowNormMat'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'RowNormMat'; + if Length(info) > 0 then + begin + Op3Edit.Text := info; + end + else begin + Op3Edit.Text := 'RowNormMat'; + info := 'RowNormMat'; + end; + opstr := IntToStr(CurrentGrid) + '-'; + opstr := opstr + 'NormalizeRows:' + IntToStr(CurrentGrid) + '-' + Op2Edit.Text; + opstr := opstr + ':' + IntToStr(CurrentGrid) + '-' + Op3Edit.Text; + ScriptList.Items.Add(opstr); + CurrentObjName := info; + CurrentObjType := 1; + ComboAdd(CurrentObjName); + if clickedok then SaveFileMnuClick(Self); + case CurrentGrid of + 1 : MatOneEdit.Text := info; + 2 : MatTwoEdit.Text := info; + 3 : MatThreeEdit.Text := info; + 4 : MatFourEdit.Text := info; + end; + end; +end; + +procedure Tmatmanfrm.OpenFileMnuClick(Sender: TObject); +begin + OpenDialog1.Filter := 'Matrix (*.mat)|*.MAT|Col.Vector (*.CVE)|*.CVE|RowVector (*.RVE)|*.RVE|Scaler (*.scl)|*.SCA|All (*.*)|*.*'; + OpenDialog1.FilterIndex := CurrentObjType; + case CurrentObjType of + 1 : OpenDialog1.DefaultExt := '.MAT'; + 2 : OpenDialog1.DefaultExt := '.CVE'; + 3 : OpenDialog1.DefaultExt := '.RVE'; + 4 : OpenDialog1.DefaultExt := '.SCA'; + else OpenDialog1.DefaultExt := '.MAT'; + end; + GridNoEdit.Text := IntToStr(CurrentGrid); + GetGridData(CurrentGrid); +end; + +procedure Tmatmanfrm.PostColVMnuClick(Sender: TObject); +// postmultiplication of a matrix by a column vector +var + i, j, k : integer; + precols, postcols, prerows, postrows : integer; + info : string; + pregrid, postgrid, resultgrid : integer; + prmptstr : string; + premat, postmat, prodmat : DynMat; + clickedok : boolean; + defaultstr : string; + +begin + if ScriptOp = false then + begin + prmptstr := 'Multiply the pre-matrix in grid '; + info := InputBox('PRE MATRIX',prmptstr,IntToStr(CurrentGrid)); + if info = '' then exit; + pregrid := StrToInt(info); + prmptstr := 'By the post-vector in grid '; + info := inputbox('POST VECTOR',prmptstr,IntToStr(CurrentGrid)); + if info = '' then exit; + postgrid := StrToInt(info); + info := inputbox('RESULTS INTO','Place results in grid :','3'); + if info = '' then exit; + resultgrid := StrToInt(info); + end + else begin // executing the script + pregrid := 1; + postgrid := 2; + resultgrid := 3; + end; + case pregrid of + 1 : begin + precols := Cols1; + prerows := Rows1; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid1.Cells[j+1,i+1]); + Op2Edit.Text := MatOneEdit.Text; + end; + 2 : begin + precols := Cols2; + prerows := Rows2; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid2.Cells[j+1,i+1]); + Op2Edit.Text := MatTwoEdit.Text; + end; + 3 : begin + precols := Cols3; + prerows := Rows3; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid3.Cells[j+1,i+1]); + Op2Edit.Text := MatThreeEdit.Text; + end; + 4 : begin + precols := Cols4; + prerows := Rows4; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid4.Cells[j+1,i+1]); + Op2Edit.Text := MatFourEdit.Text; + end; + end; + case postgrid of + 1 : begin + postcols := Cols1; + postrows := Rows1; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid1.Cells[j+1,i+1]); + Op3Edit.Text := MatOneEdit.Text; + end; + 2 : begin + postcols := Cols2; + postrows := Rows2; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid2.Cells[j+1,i+1]); + Op3Edit.Text := MatTwoEdit.Text; + end; + 3 : begin + postcols := Cols3; + postrows := Rows3; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid3.Cells[j+1,i+1]); + Op3Edit.Text := MatThreeEdit.Text; + end; + 4 : begin + postcols := Cols4; + postrows := Rows4; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid4.Cells[j+1,i+1]); + Op3Edit.Text := MatFourEdit.Text; + end; + end; + SetLength(prodmat,prerows,postcols); + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + for k := 0 to precols-1 do + prodmat[i,j] := prodmat[i,j] + (premat[i,k]*postmat[k,j]); + case resultgrid of + 1 : begin + Grid1.RowCount := prerows+1; + Grid1.ColCount := postcols+1; + Rows1 := prerows; + Cols1 := postcols; + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + Grid1.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + end; + 2 : begin + Grid2.RowCount := prerows+1; + Grid2.ColCount := postcols+1; + Rows2 := prerows; + Cols2 := postcols; + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + Grid2.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + end; + 3 : begin + Grid3.RowCount := prerows+1; + Grid3.ColCount := postcols+1; + Rows3 := prerows; + Cols3 := postcols; + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + Grid3.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + end; + 4 : begin + Grid4.RowCount := prerows+1; + Grid4.ColCount := postcols+1; + Rows4 := prerows; + Cols4 := postcols; + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + Grid4.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + end; + end; + Op1Edit.Text := 'PreMatxPostVec'; + if ScriptOp = false then + begin + prmptstr := 'Save product vector as: '; + defaultstr := 'MatxVec'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'MatxVec'; + if Length(info) > 0 then Op4Edit.Text := info + else Op4Edit.Text := 'MatxVec'; + Op2Edit.Text := ExtractFileName(Op2Edit.Text); + Op3Edit.Text := ExtractFileName(Op3Edit.Text); + opstr := IntToStr(CurrentGrid) + '-'; + opstr := opstr + 'PreMatxPostVec:' + IntToStr(pregrid) + '-' + Op2Edit.Text; + opstr := opstr + ':' + IntToStr(postgrid) + '-' + Op3Edit.Text; + opstr := opstr + ':' + IntToStr(resultgrid) + '-' + Op4Edit.Text; + ScriptList.Items.Add(opstr); + CurrentObjName := info; + CurrentObjType := 2; + CurrentGrid := resultgrid; + ComboAdd(CurrentObjName); + if clickedok then SaveFileMnuClick(Self); + case resultgrid of + 1 : MatOneEdit.Text := info; + 2 : MatTwoEdit.Text := info; + 3 : MatThreeEdit.Text := info; + 4 : MatFourEdit.Text := info; + end; + end; + // deallocate memory + prodmat := nil; + postmat := nil; + premat := nil; +end; + +procedure Tmatmanfrm.PostMatMnuClick(Sender: TObject); +begin + PreMatMnuClick(Self); +end; + +procedure Tmatmanfrm.PrebyRowVmnuClick(Sender: TObject); +// premultiplication of a matrix by a row vector +var + i, j, k : integer; + precols, postcols, prerows, postrows : integer; + info : string; + pregrid, postgrid, resultgrid : integer; + prmptstr : string; + premat, postmat, prodmat : DynMat; + clickedok : boolean; + defaultstr : string; + +begin + if ScriptOp = false then + begin + prmptstr := 'The row vector is in grid: '; + info := InputBox('VECTOR GRID',prmptstr,IntToStr(CurrentGrid)); + if info = '' then exit; + pregrid := StrToInt(info); + prmptstr := 'The post-matrix is in grid:'; + info := inputbox('POST MATRIX',prmptstr,IntToStr(CurrentGrid)); + if info = '' then exit; + postgrid := StrToInt(info); + info := inputbox('RESULTS INTO','Place results in grid :','3'); + if info = '' then exit; + resultgrid := StrToInt(info); + end + else begin // executing the script + pregrid := 1; + postgrid := 2; + resultgrid := 3; + end; + case pregrid of // row vector + 1 : begin + precols := Cols1; + prerows := Rows1; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid1.Cells[j+1,i+1]); + Op2Edit.Text := MatOneEdit.Text; + end; + 2 : begin + precols := Cols2; + prerows := Rows2; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid2.Cells[j+1,i+1]); + Op2Edit.Text := MatTwoEdit.Text; + end; + 3 : begin + precols := Cols3; + prerows := Rows3; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid3.Cells[j+1,i+1]); + Op2Edit.Text := MatThreeEdit.Text; + end; + 4 : begin + precols := Cols4; + prerows := Rows4; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid4.Cells[j+1,i+1]); + Op2Edit.Text := MatFourEdit.Text; + end; + end; + case postgrid of + 1 : begin + postcols := Cols1; + postrows := Rows1; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid1.Cells[j+1,i+1]); + Op3Edit.Text := MatOneEdit.Text; + end; + 2 : begin + postcols := Cols2; + postrows := Rows2; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid2.Cells[j+1,i+1]); + Op3Edit.Text := MatTwoEdit.Text; + end; + 3 : begin + postcols := Cols3; + postrows := Rows3; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid3.Cells[j+1,i+1]); + Op3Edit.Text := MatThreeEdit.Text; + end; + 4 : begin + postcols := Cols4; + postrows := Rows4; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid4.Cells[j+1,i+1]); + Op3Edit.Text := MatFourEdit.Text; + end; + end; + SetLength(prodmat,prerows,postcols); + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + for k := 0 to precols-1 do + prodmat[i,j] := prodmat[i,j] + (premat[i,k]*postmat[k,j]); + case resultgrid of + 1 : begin + Grid1.RowCount := prerows+1; + Grid1.ColCount := postcols+1; + Rows1 := prerows; + Cols1 := postcols; + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + Grid1.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to Rows1 do Grid1.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols1 do Grid1.Cells[i,0] := 'Col.' + IntToStr(i); + MatOneEdit.Text := 'Product'; + Op4Edit.Text := MatOneEdit.Text; + end; + 2 : begin + Grid2.RowCount := prerows+1; + Grid2.ColCount := postcols+1; + Rows2 := prerows; + Cols2 := postcols; + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + Grid2.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to Rows2 do Grid2.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols2 do Grid2.Cells[i,0] := 'Col.' + IntToStr(i); + MatTwoEdit.Text := 'Product'; + Op4Edit.Text := MatTwoEdit.Text; + end; + 3 : begin + Grid3.RowCount := prerows+1; + Grid3.ColCount := postcols+1; + Rows3 := prerows; + Cols3 := postrows; + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + Grid3.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to Rows3 do Grid3.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols3 do Grid3.Cells[i,0] := 'Col.' + IntToStr(i); + MatThreeEdit.Text := 'Product'; + Op4Edit.Text := MatThreeEdit.Text; + end; + 4 : begin + Grid4.RowCount := prerows+1; + Grid4.ColCount := postcols+1; + Rows4 := prerows; + Cols4 := postrows; + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + Grid4.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to Rows4 do Grid4.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols4 do Grid4.Cells[i,0] := 'Col.' + IntToStr(i); + MatFourEdit.Text := 'Product'; + Op4Edit.Text := MatFourEdit.Text; + end; + end; + Op1Edit.Text := 'PreVecxPostMat'; + if ScriptOp = false then + begin + prmptstr := 'Save product as: '; + defaultstr := 'RowxMat'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'RowxMat'; + if Length(info) > 0 then Op4Edit.Text := info + else begin + Op4Edit.Text := 'RowxMat'; + info := 'RowxMat'; + end; + opstr := IntToStr(CurrentGrid) + '-'; + Op2Edit.Text := ExtractFileName(Op2Edit.Text); + opstr := opstr + 'PreVecxPostMat:' + IntToStr(pregrid) + '-' + Op2Edit.Text; + opstr := opstr + ':' + IntToStr(postgrid) + '-' + ExtractFileName(Op3Edit.Text); + opstr := opstr + ':' + IntToStr(resultgrid) + '-' + ExtractFileName(Op4Edit.Text); + ScriptList.Items.Add(opstr); + CurrentObjName := info; + CurrentObjType := 3; + CurrentGrid := resultgrid; + ComboAdd(CurrentObjName); + if clickedok then SaveFileMnuClick(Self); + case resultgrid of + 1 : MatOneEdit.Text := info; + 2 : MatTwoEdit.Text := info; + 3 : MatThreeEdit.Text := info; + 4 : MatFourEdit.Text := info; + end; + end; + // deallocate memory + prodmat := nil; + postmat := nil; + premat := nil; +end; + +procedure Tmatmanfrm.PreMatMnuClick(Sender: TObject); +// premultiplication of a matrix by another matrix +var + i, j, k : integer; + precols, postcols, prerows, postrows : integer; + info : string; + pregrid, postgrid, resultgrid : integer; + prmptstr : string; + premat, postmat, prodmat : DynMat; + clickedok : boolean; + defaultstr : string; + +begin + if ScriptOp = false then + begin + prmptstr := 'Multiply the pre-matrix in grid '; + info := InputBox('PRE MAT GRID',prmptstr,IntToStr(CurrentGrid)); + if info = '' then exit; + pregrid := StrToInt(info); + prmptstr := 'Times the post-matrix in grid'; + info := InputBox('POST MAT GRID',prmptstr,IntToStr(CurrentGrid)); + if info = '' then exit; + postgrid := StrToInt(info); + info := inputbox('RESULTS INTO','Place results in grid :','3'); + if info = '' then exit; + resultgrid := StrToInt(info); + end + else begin // executing the script + pregrid := 1; + postgrid := 2; + resultgrid := 3; + end; + case pregrid of + 1 : begin + precols := Cols1; + prerows := Rows1; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid1.Cells[j+1,i+1]); + Op2Edit.Text := MatOneEdit.Text; + end; + 2 : begin + precols := Cols2; + prerows := Rows2; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid2.Cells[j+1,i+1]); + Op2Edit.Text := MatTwoEdit.Text; + end; + 3 : begin + precols := Cols3; + prerows := Rows3; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid3.Cells[j+1,i+1]); + Op2Edit.Text := MatThreeEdit.Text; + end; + 4 : begin + precols := Cols4; + prerows := Rows4; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid4.Cells[j+1,i+1]); + Op2Edit.Text := MatFourEdit.Text; + end; + end; + case postgrid of + 1 : begin + postcols := Cols1; + postrows := Rows1; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid1.Cells[j+1,i+1]); + Op3Edit.Text := MatOneEdit.Text; + end; + 2 : begin + postcols := Cols2; + postrows := Rows2; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid2.Cells[j+1,i+1]); + Op3Edit.Text := MatTwoEdit.Text; + end; + 3 : begin + postcols := Cols3; + postrows := Rows3; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid3.Cells[j+1,i+1]); + Op3Edit.Text := MatThreeEdit.Text; + end; + 4 : begin + postcols := Cols4; + postrows := Rows4; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid4.Cells[j+1,i+1]); + Op3Edit.Text := MatFourEdit.Text; + end; + end; + + SetLength(prodmat,prerows,postcols); + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + for k := 0 to precols-1 do + prodmat[i,j] := prodmat[i,j] + (premat[i,k]*postmat[k,j]); + + case resultgrid of + 1 : begin + Grid1.RowCount := prerows+1; + Grid1.ColCount := postcols+1; + Rows1 := prerows; + Cols1 := postcols; + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + Grid1.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to prerows do Grid1.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to postcols do Grid1.Cells[i,0] := 'Col.' + IntToStr(i); + end; + 2 : begin + Grid2.RowCount := prerows+1; + Grid2.ColCount := postcols+1; + Rows2 := prerows; + Cols2 := postcols; + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + Grid2.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to prerows do Grid2.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to postcols do Grid2.Cells[i,0] := 'Col.' + IntToStr(i); + end; + 3 : begin + Grid3.RowCount := prerows+1; + Grid3.ColCount := postcols+1; + Rows3 := prerows; + Cols3 := postcols; + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + Grid3.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to prerows do Grid3.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to postcols do Grid3.Cells[i,0] := 'Col.' + IntToStr(i); + end; + 4 : begin + Grid4.RowCount := prerows+1; + Grid4.ColCount := postcols+1; + Rows4 := prerows; + Cols4 := postcols; + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + Grid4.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to prerows do Grid4.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to postcols do Grid4.Cells[i,0] := 'Col.' + IntToStr(i); + end; + end; + Op1Edit.Text := 'PreMatxPostMat'; + if ScriptOp = false then + begin + prmptstr := 'Save result as: '; + defaultstr := 'MatxMat'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'MatxMat'; + if Length(info) > 0 then + begin + Op4Edit.Text := info; + Op4Edit.Text := IntToStr(resultgrid) + '-' + Op4Edit.Text; + end + else Op4Edit.Text := ''; + opstr := IntToStr(CurrentGrid) + '-'; + Op2Edit.Text := ExtractFileName(Op2Edit.Text); + Op2Edit.Text := IntToStr(pregrid) + '-' + Op2Edit.Text; + opstr := opstr + 'PreMatxPostMat:'+ Op2Edit.Text; + Op3Edit.Text := ExtractFileName(Op3Edit.Text); + Op3Edit.Text := IntToStr(postgrid) + '-' + Op3Edit.Text; + opstr := opstr + ':' + Op3Edit.Text; + if Length(info) > 0 then opstr := opstr + ':' + Op4Edit.Text; + ScriptList.Items.Add(opstr); + if Length(info) > 0 then + begin + case resultgrid of + 1 : MatOneEdit.Text := info; + 2 : MatTwoEdit.Text := info; + 3 : MatThreeEdit.Text := info; + 4 : MatFourEdit.Text := info; + end; + CurrentObjName := info; + CurrentObjType := 1; + CurrentGrid := resultgrid; + if clickedok then SaveFileMnuClick(Self); + end; + ComboAdd(CurrentObjName); + end; + // deallocate memory + prodmat := nil; + postmat := nil; + premat := nil; +end; + +procedure Tmatmanfrm.PreScalarMnuClick(Sender: TObject); +// premultiplication of a matrix by a scaler +var + i, j : integer; + precols, postcols, prerows, postrows : integer; + info : string; + pregrid, postgrid, resultgrid : integer; + prmptstr : string; + premat, postmat, prodmat : DynMat; + clickedok : boolean; + defaultstr : string; + +begin + if ScriptOp = false then + begin + prmptstr := 'The scalar is in grid: '; + info := InputBox('SCALAR GRID',prmptstr,IntToStr(CurrentGrid)); + if info = '' then exit; + pregrid := StrToInt(info); + prmptstr := 'The matrix is in grid: '; + info := InputBox('MATRIX GRID',prmptstr,IntToStr(CurrentGrid)); + postgrid := StrToInt(info); + info := inputbox('RESULTS INTO','Place results in grid :','3'); + if info = '' then exit; + resultgrid := StrToInt(info); + end + else begin // executing the script + pregrid := 1; + postgrid := 2; + resultgrid := 3; + end; + case pregrid of + 1 : begin + precols := Cols1; + prerows := Rows1; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid1.Cells[j+1,i+1]); + Op2Edit.Text := ExtractFileName(MatOneEdit.Text); + end; + 2 : begin + precols := Cols2; + prerows := Rows2; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid2.Cells[j+1,i+1]); + Op2Edit.Text := ExtractFileName(MatTwoEdit.Text); + end; + 3 : begin + precols := Cols3; + prerows := Rows3; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid3.Cells[j+1,i+1]); + Op2Edit.Text := ExtractFileName(MatThreeEdit.Text); + end; + 4 : begin + precols := Cols4; + prerows := Rows4; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid4.Cells[j+1,i+1]); + Op2Edit.Text := ExtractFileName(MatFourEdit.Text); + end; + end; + case postgrid of + 1 : begin + postcols := Cols1; + postrows := Rows1; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid1.Cells[j+1,i+1]); + Op3Edit.Text := ExtractFileName(MatOneEdit.Text); + end; + 2 : begin + postcols := Cols2; + postrows := Rows2; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid2.Cells[j+1,i+1]); + Op3Edit.Text := ExtractFileName(MatTwoEdit.Text); + end; + 3 : begin + postcols := Cols3; + postrows := Rows3; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid3.Cells[j+1,i+1]); + Op3Edit.Text := ExtractFileName(MatThreeEdit.Text); + end; + 4 : begin + postcols := Cols4; + postrows := Rows4; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid4.Cells[j+1,i+1]); + Op3Edit.Text := ExtractFileName(MatFourEdit.Text); + end; + end; + SetLength(prodmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + prodmat[i,j] := premat[0,0]*postmat[i,j]; + case resultgrid of + 1 : begin + Grid1.RowCount := postrows+1; + Grid1.ColCount := postcols+1; + Rows1 := postrows; + Cols1 := postcols; + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + Grid1.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to Rows1 do Grid1.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols1 do Grid1.Cells[i,0] := 'Col.' + IntToStr(i); + MatOneEdit.Text := 'Product'; + end; + 2 : begin + Grid2.RowCount := postrows+1; + Grid2.ColCount := postcols+1; + Rows2 := postrows; + Cols2 := postcols; + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + Grid2.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to Rows2 do Grid2.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols2 do Grid2.Cells[i,0] := 'Col.' + IntToStr(i); + MatTwoEdit.Text := 'Product'; + end; + 3 : begin + Grid3.RowCount := postrows+1; + Grid3.ColCount := postcols+1; + Rows3 := postrows; + Cols3 := postcols; + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + Grid3.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to Rows3 do Grid3.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols3 do Grid3.Cells[i,0] := 'Col.' + IntToStr(i); + MatThreeEdit.Text := 'Product'; + end; + 4 : begin + Grid4.RowCount := postrows+1; + Grid4.ColCount := postcols+1; + Rows4 := postrows; + Cols4 := postcols; + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + Grid4.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to Rows4 do Grid4.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols4 do Grid4.Cells[i,0] := 'Col.' + IntToStr(i); + MatFourEdit.Text := 'Product'; + end; + end; + Op1Edit.Text := 'ScalerxPostMat'; + opstr := IntToStr(CurrentGrid) + '-'; + opstr := opstr + 'ScalerxPostMat:' + IntToStr(pregrid) + '-' + Op2Edit.Text; + opstr := opstr + ':' + IntToStr(postgrid) + '-' + Op3Edit.Text; + if ScriptOp = false then + begin + prmptstr := 'Save product as: '; + defaultstr := 'ScalarxMat'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'ScalarxMat'; + if Length(info) > 0 then + begin + Op4Edit.Text := info; + end + else begin + Op4Edit.Text := 'ScalerxMat'; + info := 'ScalarxMat'; + end; + opstr := opstr + ':' + IntToStr(resultgrid) + '-' + Op4Edit.Text; + ScriptList.Items.Add(opstr); + CurrentObjName := info; + CurrentObjType := 1; + CurrentGrid := resultgrid; + ComboAdd(CurrentObjName); + if clickedok then SaveFileMnuClick(Self); + case resultgrid of + 1 : MatOneEdit.Text := info; + 2 : MatTwoEdit.Text := info; + 3 : MatThreeEdit.Text := info; + 4 : MatFourEdit.Text := info; + end; + end; + // deallocate memory + prodmat := nil; + postmat := nil; + premat := nil; +end; + +procedure Tmatmanfrm.PrintFileMnuClick(Sender: TObject); +begin + MatPrintMnuClick(self); +end; + +procedure Tmatmanfrm.PrintScalMnuClick(Sender: TObject); +begin + MatPrintMnuClick(self); +end; + +procedure Tmatmanfrm.ExitMnuClick(Sender: TObject); +begin + Matrix1 := nil; + Matrix2 := nil; + Matrix3 := nil; + Matrix4 := nil; + Close; +end; + +procedure Tmatmanfrm.ExtractColVecMnuClick(Sender: TObject); +var + i, excol, togrid : integer; + prmptstr, info, collabel : string; + clickedok : boolean; + defaultstr : string; +begin + case CurrentGrid of + 1 : begin + Op2Edit.Text := MatOneEdit.Text; + excol := Grid1.Col; + prmptstr := 'Extract which column (1 - ' + IntToStr(excol) + ')?'; + info := InputBox('EXTRACT',prmptstr,IntToStr(excol)); + excol := StrToInt(info); + collabel := Grid1.Cells[excol,0]; + prmptstr := 'Place vector into grid '; + info := InputBox('GRID?',prmptstr,'2'); + togrid := StrToInt(info); + case togrid of + 2 : begin + Grid2.RowCount := Grid1.RowCount; + Grid2.ColCount := 2; + end; + 3 : begin + Grid3.RowCount := Grid1.RowCount; + Grid3.ColCount := 2; + end; + 4: begin + Grid4.RowCount := Grid1.RowCount; + Grid4.ColCount := 2; + end; + end; + for i := 1 to rows1 do + begin + case togrid of + 2 : Grid2.Cells[1,i] := Grid1.Cells[excol,i]; + 3 : Grid3.Cells[1,i] := Grid1.Cells[excol,i]; + 4 : Grid4.Cells[1,i] := Grid1.Cells[excol,i]; + end; + end; + case togrid of + 2 : begin + Grid2.Cells[1,0] := collabel; + Grid2.RowCount := Grid1.RowCount; + Rows2 := Grid2.RowCount - 1; + Grid2.ColCount := 2; + Cols2 := 1; + MatTwoEdit.Text := 'ExtractVec'; + Op3Edit.Text := 'ExtractVec'; + for i := 1 to Rows2 do Grid2.Cells[0,i] := 'Case' + IntToStr(i); + end; + 3 : begin + Grid3.Cells[1,0] := collabel; + Grid3.RowCount := Grid1.RowCount; + Rows3 := Grid3.RowCount - 1; + Grid3.ColCount := 2; + Cols3 := 1; + MatThreeEdit.Text := 'ExtractVec'; + Op3Edit.Text := 'ExtractVec'; + for i := 1 to Rows3 do Grid3.Cells[0,i] := 'Case' + IntToStr(i); + end; + 4 : begin + Grid4.Cells[1,0] := collabel; + Grid4.RowCount := Grid1.RowCount; + Rows4 := Grid4.RowCount - 1; + Grid4.ColCount := 2; + Cols4 := 1; + MatFourEdit.Text := 'ExtractVec'; + Op3Edit.Text := 'ExtractVec'; + for i := 1 to Rows4 do Grid4.Cells[0,i] := 'Case' + IntToStr(i); + end; + end; // end case togrid + end; // end case currentgrid = 1 + 2 : begin + Op2Edit.Text := MatTwoEdit.Text; + excol := Grid2.Col; + prmptstr := 'Extract which column (1 - ' + IntToStr(excol) + ')?'; + info := InputBox('EXTRACT',prmptstr,IntToStr(excol)); + excol := StrToInt(info); + collabel := Grid2.Cells[excol,0]; + prmptstr := 'Place vector into grid '; + info := InputBox('GRID?',prmptstr,'3'); + togrid := StrToInt(info); + case togrid of + 3 : begin + Grid3.RowCount := Grid2.RowCount; + Grid3.ColCount := 2; + end; + 4 : begin + Grid4.RowCount := Grid2.RowCount; + Grid4.ColCount := 2; + end; + 1: begin + Grid1.RowCount := Grid2.RowCount; + Grid1.ColCount := 2; + end; + end; + for i := 1 to rows2 do + begin + case togrid of + 3 : Grid3.Cells[1,i] := Grid2.Cells[excol,i]; + 4 : Grid4.Cells[1,i] := Grid2.Cells[excol,i]; + 1 : Grid1.Cells[1,i] := Grid2.Cells[excol,i]; + end; + end; + case togrid of + 3 : begin + Grid3.Cells[1,0] := collabel; + Grid3.RowCount := Grid2.RowCount; + Rows3 := Grid3.RowCount - 1; + Grid3.ColCount := 2; + Cols3 := 1; + MatThreeEdit.Text := 'ExtractVec'; + Op3Edit.Text := 'ExtractVec'; + for i := 1 to Rows3 do Grid3.Cells[0,i] := 'Case' + IntToStr(i); + end; + 4 : begin + Grid4.Cells[1,0] := collabel; + Grid4.RowCount := Grid2.RowCount; + Rows4 := Grid4.RowCount - 1; + Grid4.ColCount := 2; + Cols4 := 1; + MatFourEdit.Text := 'ExtractVec'; + Op3Edit.Text := 'ExtractVec'; + for i := 1 to Rows4 do Grid4.Cells[0,i] := 'Case' + IntToStr(i); + end; + 1 : begin + Grid1.Cells[1,0] := collabel; + Grid1.RowCount := Grid2.RowCount; + Rows1 := Grid1.RowCount - 1; + Grid1.ColCount := 2; + Cols1 := 1; + MatOneEdit.Text := 'ExtractVec'; + Op3Edit.Text := 'ExtractVec'; + for i := 1 to Rows1 do Grid1.Cells[0,i] := 'Case' + IntToStr(i); + end; + end; + end; + 3 : begin + Op2Edit.Text := MatThreeEdit.Text; + excol := Grid3.Col; + prmptstr := 'Extract which column (1 - ' + IntToStr(excol) + ')?'; + info := InputBox('EXTRACT',prmptstr,IntToStr(excol)); + excol := StrToInt(info); + collabel := Grid3.Cells[excol,0]; + prmptstr := 'Place vector into grid '; + info := InputBox('GRID?',prmptstr,'4'); + togrid := StrToInt(info); + case togrid of + 4 : begin + Grid4.RowCount := Grid3.RowCount; + Grid4.ColCount := 2; + end; + 1 : begin + Grid1.RowCount := Grid3.RowCount; + Grid1.ColCount := 2; + end; + 2: begin + Grid2.RowCount := Grid3.RowCount; + Grid2.ColCount := 2; + end; + end; + for i := 1 to rows3 do + begin + case togrid of + 4 : Grid4.Cells[1,i] := Grid3.Cells[excol,i]; + 1 : Grid1.Cells[1,i] := Grid3.Cells[excol,i]; + 2 : Grid2.Cells[1,i] := Grid3.Cells[excol,i]; + end; + end; + case togrid of + 4 : begin + Grid4.Cells[1,0] := collabel; + Grid4.RowCount := Grid3.RowCount; + Rows4 := Grid4.RowCount - 1; + Grid4.ColCount := 2; + Cols4 := 1; + MatFourEdit.Text := 'ExtractVec'; + Op3Edit.Text := 'ExtractVec'; + for i := 1 to Rows4 do Grid4.Cells[0,i] := 'Case' + IntToStr(i); + end; + 1 : begin + Grid1.Cells[1,0] := collabel; + Grid1.RowCount := Grid3.RowCount; + Rows1 := Grid1.RowCount - 1; + Grid1.ColCount := 2; + Cols1 := 1; + MatOneEdit.Text := 'ExtractVec'; + Op3Edit.Text := 'ExtractVec'; + for i := 1 to Rows1 do Grid1.Cells[0,i] := 'Case' + IntToStr(i); + end; + 2 : begin + Grid2.Cells[1,0] := collabel; + Grid2.RowCount := Grid3.RowCount; + Rows2 := Grid2.RowCount - 1; + Grid2.ColCount := 2; + Cols2 := 1; + MatTwoEdit.Text := 'ExtractVec'; + Op3Edit.Text := 'ExtractVec'; + for i := 1 to Rows2 do Grid2.Cells[0,i] := 'Case' + IntToStr(i); + end; + end; + end; + 4 : begin + Op2Edit.Text := MatFourEdit.Text; + excol := Grid4.Col; + prmptstr := 'Extract which column (1 - ' + IntToStr(excol) + ')?'; + info := InputBox('EXTRACT',prmptstr,IntToStr(excol)); + excol := StrToInt(info); + collabel := Grid4.Cells[excol,0]; + prmptstr := 'Place vector into grid '; + info := InputBox('GRID?',prmptstr,'1'); + togrid := StrToInt(info); + case togrid of + 1 : begin + Grid1.RowCount := Grid4.RowCount; + Grid1.ColCount := 2; + end; + 2 : begin + Grid2.RowCount := Grid4.RowCount; + Grid2.ColCount := 2; + end; + 3: begin + Grid3.RowCount := Grid4.RowCount; + Grid3.ColCount := 2; + end; + end; + for i := 1 to rows4 do + begin + case togrid of + 1 : Grid1.Cells[1,i] := Grid4.Cells[excol,i]; + 2 : Grid2.Cells[1,i] := Grid4.Cells[excol,i]; + 3 : Grid3.Cells[1,i] := Grid4.Cells[excol,i]; + end; + end; + case togrid of + 1 : begin + Grid1.Cells[1,0] := collabel; + Grid1.RowCount := Grid4.RowCount; + Rows1 := Grid1.RowCount - 1; + Grid1.ColCount := 2; + Cols1 := 1; + MatOneEdit.Text := 'ExtractVec'; + Op3Edit.Text := 'ExtractVec'; + for i := 1 to Rows1 do Grid1.Cells[0,i] := 'Case' + IntToStr(i); + end; + 2 : begin + Grid2.Cells[1,0] := collabel; + Grid2.RowCount := Grid4.RowCount; + Rows2 := Grid2.RowCount - 1; + Grid2.ColCount := 2; + Cols2 := 1; + MatTwoEdit.Text := 'ExtractVec'; + Op3Edit.Text := 'ExtractVec'; + for i := 1 to Rows2 do Grid2.Cells[0,i] := 'Case' + IntToStr(i); + end; + 3 : begin + Grid3.Cells[1,0] := collabel; + Grid3.RowCount := Grid4.RowCount; + Rows3 := Grid3.RowCount - 1; + Grid3.ColCount := 2; + Cols3 := 1; + MatThreeEdit.Text := 'ExtractVec'; + Op3Edit.Text := 'ExtractVec'; + for i := 1 to Rows3 do Grid3.Cells[0,i] := 'Case' + IntToStr(i); + end; + end; // end case togrid = 3 + end; // end case currentgrid = 4 + end; // end case currentgrid + ColDelMnuClick(Self); + + if ScriptOp = false then + begin + prmptstr := 'Save Extracted vector as '; + defaultstr := 'ExtractVector'; + clickedok := InputQuery('VECTOR NAME',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'ExtractVector'; + if Length(info) > 0 then Op3Edit.Text := info; + opstr := IntToStr(CurrentGrid) + '-' + 'ExtractVector:'; + opstr := opstr + IntToStr(CurrentGrid) + '-' + Op2Edit.Text; + opstr := opstr + ':' + IntToStr(togrid) + '-' + Op3Edit.Text; + ScriptList.Items.Add(opstr); + CurrentGrid := togrid; + CurrentObjName := Op3Edit.Text; + CurrentObjType := 2; // column vector + if clickedok then SaveFileMnuClick(Self); + ComboAdd(CurrentObjName); + end; +end; + +procedure Tmatmanfrm.ColAugMnuClick(Sender: TObject); +var + i : integer; + prmptstr, info : string; + clickedok : boolean; + defaultstr : string; +begin + if CurrentObjType <> 1 then + begin + ShowMessage('Error - Grid does not contain a matrix.'); + exit; + end; + if CurrentGrid = 0 then exit; + case CurrentGrid of + 1 : begin + Cols1 := Cols1 + 1; + Grid1.ColCount := Cols1 + 1; + Grid1.Cells[Cols1,0] := 'Col' + IntToStr(Cols1); + for i := 1 to Rows1 do Grid1.Cells[Cols1,i] := FloatToStr(1.0); + Op2Edit.Text := MatOneEdit.Text; + end; + 2 : begin + Cols2 := Cols2 + 1; + Grid2.ColCount := Cols2 + 1; + Grid2.Cells[Cols2,0] := 'Col' + IntToStr(Cols2); + for i := 1 to Rows2 do Grid1.Cells[Cols2,i] := FloatToStr(1.0); + Op2Edit.Text := MatTwoEdit.Text; + end; + 3 : begin + Cols3 := Cols3 + 1; + Grid3.ColCount := Cols3 + 1; + Grid3.Cells[Cols3,0] := 'Col' + IntToStr(Cols3); + for i := 1 to Rows3 do Grid3.Cells[Cols3,i] := FloatToStr(1.0); + Op2Edit.Text := MatThreeEdit.Text; + end; + 4 : begin + Cols4 := Cols4 + 1; + Grid4.ColCount := Cols4 + 1; + Grid4.Cells[Cols4,0] := 'Col' + IntToStr(Cols4); + for i := 1 to Rows4 do Grid4.Cells[Cols4,i] := FloatToStr(1.0); + Op2Edit.Text := MatFourEdit.Text; + end; + end; // case + Op4Edit.Text := ''; + Op1Edit.Text := 'ColAugment'; + CurrentObjType := 1; + if ScriptOp = false then + begin + prmptstr := 'Save result as: '; + defaultstr := 'ColAugMat'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'ColAugMat'; + if Length(info) > 0 then Op3Edit.Text := ':' + IntToStr(CurrentGrid) + '-' + info + else Op3Edit.Text := ''; + opstr := IntToStr(CurrentGrid) + '-'; + opstr := opstr + 'ColAugment:' + Op2Edit.Text; + opstr := opstr + Op3Edit.Text; + ScriptList.Items.Add(opstr); + if Length(info) > 0 then + begin + CurrentObjName := info; + CurrentObjType := 1; + if clickedok then SaveFileMnuClick(Self); + end; + ComboAdd(CurrentObjName); + if Length(info) > 0 then + begin + case CurrentGrid of + 1 : MatOneEdit.Text := info; + 2 : MatTwoEdit.Text := info; + 3 : MatThreeEdit.Text := info; + 4 : MatFourEdit.Text := info; + end; + end; + end; +end; + +procedure Tmatmanfrm.AboutMnuClick(Sender: TObject); +begin + ShowMessage('Copyright 2010 by Bill Miller'); +end; + +procedure Tmatmanfrm.ColDelMnuClick(Sender: TObject); +var + i, j : integer; + delcol : integer; + prmptstr, info : string; + clickedok : boolean; + defaultstr : string; +begin + if CurrentObjType <> 1 then + begin + ShowMessage('Error - Grid does not contain a matrix.'); + exit; + end; + if CurrentGrid = 0 then exit; + case CurrentGrid of + 1 : begin + delcol := Grid1.Col; + for i := delcol + 1 to Grid1.ColCount - 1 do + for j := 1 to Grid1.RowCount - 1 do + Grid1.Cells[i-1,j] := Grid1.Cells[i,j]; + Grid1.ColCount := Grid1.ColCount - 1; + Cols1 := Cols1 - 1; + Op2Edit.Text := MatOneEdit.Text; + end; + 2 : begin + delcol := Grid2.Col; + for i := delcol + 1 to Grid2.ColCount - 1 do + for j := 1 to Grid2.RowCount - 1 do + Grid2.Cells[i-1,j] := Grid2.Cells[i,j]; + Grid2.ColCount := Grid2.ColCount - 1; + Cols2 := Cols2 - 1; + Op2Edit.Text := MatTwoEdit.Text; + end; + 3 : begin + delcol := Grid3.Col; + for i := delcol + 1 to Grid3.ColCount - 1 do + for j := 1 to Grid3.RowCount - 1 do + Grid3.Cells[i-1,j] := Grid3.Cells[i,j]; + Grid3.ColCount := Grid3.ColCount - 1; + Cols3 := Cols3 - 1; + Op2Edit.Text := MatThreeEdit.Text; + end; + 4 : begin + delcol := Grid4.Col; + for i := delcol + 1 to Grid4.ColCount - 1 do + for j := 1 to Grid4.RowCount - 1 do + Grid4.Cells[i-1,j] := Grid4.Cells[i,j]; + Grid4.ColCount := Grid4.ColCount - 1; + Cols4 := Cols4 - 1; + Op2Edit.Text := MatFourEdit.Text; + end; + end; + Op1Edit.Text := 'DeleteCol'; + CurrentObjType := 1; + if ScriptOp = false then + begin + prmptstr := 'Save result as: '; + defaultstr := 'ColDel'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'ColDel'; + if Length(info) > 0 then Op3Edit.Text := info + else Op3Edit.Text := 'ColDel'; + opstr := IntToStr(CurrentGrid) + '-'; + Op2Edit.Text := ExtractFileName(Op2Edit.Text); + opstr := opstr + 'DeleteCol:' + IntToStr(CurrentGrid) + '-' + Op2Edit.Text; + opstr := opstr + ':' + IntToStr(CurrentGrid) + '-' + Op3Edit.Text; + ScriptList.Items.Add(opstr); + CurrentObjName := Op3Edit.Text; + CurrentObjType := 1; + if clickedok then SaveFileMnuClick(Self); + ComboAdd(CurrentObjName); + case CurrentGrid of + 1 : MatOneEdit.Text := Op3Edit.Text; + 2 : MatTwoEdit.Text := Op3Edit.Text; + 3 : MatThreeEdit.Text := Op3Edit.Text; + 4 : MatFourEdit.Text := Op3Edit.Text; + end; + end; +end; + +procedure Tmatmanfrm.ColInstMnuClick(Sender: TObject); +var + inscol, insgrid, i, j, showresult : integer; + before : boolean; + +begin + showresult := ColInsertFrm.ShowModal; + if showresult = mrCancel then exit; + insgrid := StrToInt(ColInsertFrm.GridNoEdit.Text); + if (insgrid < 1) or (insgrid > 4) then exit; + if ColInsertFrm.BeforeColEdit.Text = '' then before := false else before := true; + if before then inscol := StrToInt(ColInsertFrm.BeforeColEdit.Text) + else inscol := StrToInt(ColInsertFrm.AfterColEdit.Text); + case insgrid of + 1 : begin + Grid1.ColCount := Grid1.ColCount + 1; + if before then + begin // insert a column before inscol + for i := Cols1 downto inscol-1 do + for j := 1 to Rows1 do + Grid1.Cells[i+1,j] := Grid1.Cells[i,j]; + if inscol > 1 then + for j := 1 to Rows1 do Grid1.Cells[inscol-1,j] := '' + else for j := 1 to Rows1 do Grid1.Cells[1,j] := ''; + end + else begin // insert a row after insrow + for i := Cols1 downto inscol+1 do + for j := 1 to Rows1 do + Grid1.Cells[i+1,j] := Grid1.Cells[i,j]; + for j := 1 to Rows1 do Grid1.Cells[inscol+1,j] := '' + end; + Cols1 := Cols1 + 1; + for i := 1 to Cols1 do Grid1.Cells[i,0] := 'Col.' + IntToStr(i); + end; // end case grid 1 + 2 : begin + Grid2.ColCount := Grid2.ColCount + 1; + if before then + begin // insert a column before inscol + for i := Cols2 downto inscol-1 do + for j := 1 to Rows2 do + Grid2.Cells[i+1,j] := Grid2.Cells[i,j]; + if inscol > 1 then + for j := 1 to Rows2 do Grid2.Cells[inscol-1,j] := '' + else for j := 1 to Rows2 do Grid2.Cells[1,j] := ''; + end + else begin // insert a row after inscol + for i := Cols2 downto inscol+1 do + for j := 1 to Rows2 do + Grid2.Cells[i+1,j] := Grid2.Cells[i,j]; + for j := 1 to Rows2 do Grid2.Cells[inscol+1,j] := '' + end; + Cols2 := Cols2 + 1; + for i := 1 to Cols2 do Grid2.Cells[i,0] := 'Col.' + IntToStr(i); + end; + 3 : begin + Grid3.ColCount := Grid3.ColCount + 1; + if before then + begin // insert a column before inscol + for i := Cols3 downto inscol-1 do + for j := 1 to Rows3 do + Grid3.Cells[i+1,j] := Grid3.Cells[i,j]; + if inscol > 1 then + for j := 1 to Rows3 do Grid3.Cells[inscol-1,j] := '' + else for j := 1 to Rows3 do Grid3.Cells[1,j] := ''; + end + else begin // insert a row after inscol + for i := Cols3 downto inscol+1 do + for j := 1 to Rows3 do + Grid3.Cells[i+1,j] := Grid3.Cells[i,j]; + for j := 1 to Rows3 do Grid3.Cells[inscol+1,j] := '' + end; + Cols3 := Cols3 + 1; + for i := 1 to Cols3 do Grid3.Cells[i,0] := 'Col.' + IntToStr(i); + end; + 4 : begin + Grid4.ColCount := Grid4.ColCount + 1; + if before then + begin // insert a column before inscol + for i := Cols4 downto inscol-1 do + for j := 1 to Rows4 do + Grid4.Cells[i+1,j] := Grid4.Cells[i,j]; + if inscol > 1 then + for j := 1 to Rows4 do Grid4.Cells[inscol-1,j] := '' + else for j := 1 to Rows4 do Grid4.Cells[1,j] := ''; + end + else begin // insert a row after inscol + for i := Cols4 downto inscol+1 do + for j := 1 to Rows4 do + Grid4.Cells[i+1,j] := Grid4.Cells[i,j]; + for j := 1 to Rows4 do Grid4.Cells[inscol+1,j] := '' + end; + Cols4 := Cols4 + 1; + for i := 1 to Cols4 do Grid4.Cells[i,0] := 'Col.' + IntToStr(i); + end; + end; // case insgrid +end; + +procedure Tmatmanfrm.ColVecsBoxClick(Sender: TObject); +var + vecstr : string; + answer : string; + indexno : integer; + gridno : integer; + +begin + indexno := ColVecsBox.ItemIndex; + if indexno < 0 then exit; + vecstr := ColVecsBox.Items.Strings[indexno]; + answer := InputBox('PLACEMENT','Place in which Grid?','1'); + gridno := StrToInt(answer); + if ((gridno < 1) or (gridno > 4)) then + begin + ShowMessage('Error - Grid number must be between 1 and 4.'); + exit; + end; + CurrentGrid := gridno; + CurrentObjType := 2; + CurrentObjName := vecstr; + OpenDialog1.FileName := vecstr; + GetFile(Self); + ColVecsBox.Text := 'COLUMN VECTORS'; + ColVecsBox.ItemIndex := -1; +end; + +procedure Tmatmanfrm.ColxRowVecMnuClick(Sender: TObject); +begin + RowxColVecMnuClick(Self); +end; + +procedure Tmatmanfrm.DetermMnuClick(Sender: TObject); +label emsg; +var + i, j, size, nextgrid : integer; + prmptstr, info : string; + intvector : DynIntVec; + determ : double; + clickedok : boolean; + defaultstr : string; +begin + if CurrentObjType <> 1 then +emsg: + begin + ShowMessage('Error - Selected grid does not contain a symetric matrix.'); + exit; + end; + + case CurrentGrid of + 1 : begin + if Rows1 <> Cols1 then goto emsg; + size := Rows1; + Op2Edit.Text := ExtractFileName(MatOneEdit.Text); + end; + 2 : begin + if Rows2 <> Cols2 then goto emsg; + size := Rows2; + Op2Edit.Text := ExtractFileName(MatTwoEdit.Text); + end; + 3 : begin + if Rows3 <> Cols3 then goto emsg; + size := Rows3; + Op2Edit.Text := ExtractFileName(MatThreeEdit.Text); + end; + 4 : begin + if Rows4 <> Cols4 then goto emsg; + size := Rows4; + Op2Edit.Text := ExtractFileName(MatFourEdit.Text); + end; + end; + + // allocate memory + setlength(Matrix1,size,size); + setlength(intvector,size); + + // store data to be decomposed in Matrix1 + case CurrentGrid of + 1 : begin + for i := 0 to size - 1 do + for j := 0 to size - 1 do + Matrix1[i,j] := StrToFloat(Grid1.Cells[j+1,i+1]); + nextgrid := 2; + end; + 2 : begin + for i := 0 to size - 1 do + for j := 0 to size - 1 do + Matrix1[i,j] := StrToFloat(Grid2.Cells[j+1,i+1]); + nextgrid := 3; + end; + 3 : begin + for i := 0 to size - 1 do + for j := 0 to size - 1 do + Matrix1[i,j] := StrToFloat(Grid3.Cells[j+1,i+1]); + nextgrid := 4; + end; + 4 : begin + for i := 0 to size - 1 do + for j := 0 to size - 1 do + Matrix1[i,j] := StrToFloat(Grid4.Cells[j+1,i+1]); + nextgrid := 1; + end; + end; + + // decompose + LUDCMP(Matrix1,size,intvector,determ); + for i := 0 to size-1 do determ := determ * Matrix1[i,i]; + + // place results in next grid + case nextgrid of + 1 : begin + Grid1.RowCount := 2; + Grid1.ColCount := 2; + Rows1 := 1; + Cols1 := 1; + MatOneEdit.Text := 'Determinant'; + Grid1.Cells[1,1] := FloatToStr(determ); + CurrentObjName := MatOneEdit.Text; + end; + 2 : begin + Grid2.RowCount := 2; + Grid2.ColCount := 2; + Rows2 := 1; + Cols2 := 1; + MatTwoEdit.Text := 'Determinant'; + Grid2.Cells[1,1] := FloatToStr(determ); + CurrentObjName := MatTwoEdit.Text; + end; + 3 : begin + Grid3.RowCount := 2; + Grid3.ColCount := 2; + Rows3 := 1; + Cols3 := 1; + MatThreeEdit.Text := 'Determinant'; + Grid3.Cells[1,1] := FloatToStr(determ); + CurrentObjName := MatThreeEdit.Text; + end; + 4 : begin + Grid4.RowCount := 2; + Grid4.ColCount := 2; + Rows4 := 1; + Cols4 := 1; + MatFourEdit.Text := 'Determinant'; + Grid4.Cells[1,1] := FloatToStr(determ); + CurrentObjName := MatFourEdit.Text; + end; + end; + if ScriptOp = false then + begin + prmptstr := 'Save determinant as: '; + defaultstr := 'determinant'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'determinant'; + if Length(info) > 0 then Op3Edit.Text := info + else begin + Op3Edit.Text := 'determinant'; + info := 'determinant'; + end; + Op1Edit.Text := 'Determinant'; + opstr := IntToStr(CurrentGrid) + '-' + 'Determinant:'; + opstr := opstr + IntToStr(CurrentGrid) + '-' + Op2Edit.Text; + opstr := opstr + ':' + IntToStr(nextgrid) + '-' + Op3Edit.Text; + ScriptList.Items.Add(opstr); + CurrentObjName := info; + CurrentObjType := 4; + CurrentGrid := nextgrid; + ComboAdd(CurrentObjName); + if clickedok then SaveFileMnuClick(Self); + case nextgrid of + 1 : MatOneEdit.Text := info; + 2 : MatTwoEdit.Text := info; + 3 : MatThreeEdit.Text := info; + 4 : MatFourEdit.Text := info; + end; + end; + + // deallocate memory + intvector := nil; + Matrix1 := nil; +end; + +procedure Tmatmanfrm.DiagtovecmnuClick(Sender: TObject); +var + i, j, size, matgrid, nextgrid : integer; + diag : DynVec; + prmptstr, info : string; + clickedok : boolean; + defaultstr : string; +label emsg; + +begin + if CurrentGrid = 0 then exit; + prmptstr := 'The matrix is in grid: '; + info := InputBox('MATRIX GRID',prmptstr,IntToStr(CurrentGrid)); + if info = '' then exit; + matgrid := StrToInt(info); + if CurrentObjType <> 1 then +emsg: + begin + ShowMessage('Error - Selected grid does not contain a symetric matrix.'); + exit; + end; + + case matgrid of + 1 : begin + if Rows1 <> Cols1 then goto emsg; + size := Rows1; + SetLength(diag,size); + for i := 0 to size-1 do diag[i] := StrToFloat(Grid1.Cells[i+1,i+1]); + nextgrid := 2; + Op2Edit.Text := ExtractFileName(MatOneEdit.Text); + end; + 2 : begin + if Rows2 <> Cols2 then goto emsg; + size := Rows2; + SetLength(diag,size); + for i := 0 to size-1 do diag[i] := StrToFloat(Grid2.Cells[i+1,i+1]); + nextgrid := 3; + Op2Edit.Text := ExtractFileName(MatTwoEdit.Text); + end; + 3 : begin + if Rows3 <> Cols3 then goto emsg; + size := Rows3; + SetLength(diag,size); + for i := 0 to size-1 do diag[i] := StrToFloat(Grid3.Cells[i+1,i+1]); + nextgrid := 4; + Op2Edit.Text := ExtractFileName(MatThreeEdit.Text); + end; + 4 : begin + if Rows4 <> Cols4 then goto emsg; + size := Rows4; + SetLength(diag,size); + for i := 0 to size-1 do diag[i] := StrToFloat(Grid4.Cells[i+1,i+1]); + nextgrid := 1; + Op2Edit.Text := ExtractFileName(MatFourEdit.Text); + end; + end; + + // place diagonal elements in next available grid + case nextgrid of + 1: begin + for i := 0 to size-1 do + for j := 0 to size-1 do + Grid1.Cells[j+1,i+1] := ''; + for i := 0 to size-1 do Grid1.Cells[1,i+1] := FloatToStr(diag[i]); + cols1 := 1; + rows1 := size; + Grid1.ColCount := 2; + Grid1.RowCount := size + 1; + MatOneEdit.Text := 'DiagVec'; + end; + 2: begin + for i := 0 to size-1 do + for j := 0 to size-1 do + Grid2.Cells[j+1,i+1] := ''; + for i := 0 to size-1 do Grid2.Cells[1,i+1] := FloatToStr(diag[i]); + cols2 := 1; + rows2 := size; + Grid2.ColCount := 2; + Grid2.RowCount := size + 1; + MatTwoEdit.Text := 'DiagVec'; + end; + 3: begin + for i := 0 to size-1 do + for j := 0 to size-1 do + Grid3.Cells[j+1,i+1] := ''; + for i := 0 to size-1 do Grid3.Cells[1,i+1] := FloatToStr(diag[i]); + cols3 := 1; + rows3 := size; + Grid3.ColCount := 2; + Grid3.RowCount := size + 1; + MatThreeEdit.Text := 'DiagVec'; + end; + 4: begin + for i := 0 to size-1 do + for j := 0 to size-1 do + Grid4.Cells[j+1,i+1] := ''; + for i := 0 to size-1 do Grid4.Cells[1,i+1] := FloatToStr(diag[i]); + cols4 := 1; + rows4 := size; + Grid4.ColCount := 2; + Grid4.RowCount := size + 1; + MatFourEdit.Text := 'DiagVec'; + end; + end; + + Op1Edit.Text := 'DiagToVec:'; + opstr := IntToStr(matgrid) + '-' + 'DiagToVec:'; + opstr := opstr + IntToStr(matgrid) + '-' + Op2Edit.Text; + if ScriptOp = false then + begin + prmptstr := 'Save diagonal vector as: '; + defaultstr := 'diagvec'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'diagvec'; + if Length(info) > 0 then Op3Edit.Text := info + else begin + Op3Edit.Text := 'diagvec'; + info := 'diagvec'; + end; + opstr := opstr + ':' + IntToStr(nextgrid) + '-' + info; + ScriptList.Items.Add(opstr); + CurrentObjName := info; + CurrentObjType := 2; + CurrentGrid := nextgrid; + ComboAdd(CurrentObjName); + if clickedok then SaveFileMnuClick(Self); + case nextgrid of + 1 : MatOneEdit.Text := info; + 2 : MatTwoEdit.Text := info; + 3 : MatThreeEdit.Text := info; + 4 : MatFourEdit.Text := info; + end; + end; + diag := nil; +end; + +procedure Tmatmanfrm.EigenMnuClick(Sender: TObject); +label emsg, finish; +var + i, j, nfactors, size, choice : integer; + rootsvec, avector, bvector : DynVec; + c, trace, pcnttrace, sum : double; + prmptstr, info : string; + rootname, vectname : string; + clickedok1, clickedok2 : boolean; + defaultstr : string; +begin + if CurrentObjType <> 1 then +emsg: + begin + ShowMessage('Error - Selected grid does not contain a symetric matrix.'); + exit; + end; + case CurrentGrid of + 1 : begin + if Rows1 <> Cols1 then goto emsg; + size := Rows1; + Op2Edit.Text := ExtractFileName(MatOneEdit.Text); + end; + 2 : begin + if Rows2 <> Cols2 then goto emsg; + size := Rows2; + Op2Edit.Text := ExtractFileName(MatTwoEdit.Text); + end; + 3 : begin + if Rows3 <> Cols3 then goto emsg; + size := Rows3; + Op2Edit.Text := ExtractFileName(MatThreeEdit.Text); + end; + 4 : begin + if Rows4 <> Cols4 then goto emsg; + size := Rows4; + Op2Edit.Text := ExtractFileName(MatFourEdit.Text); + end; + end; + + // allocate memory + setlength(Matrix1,size,size); + setlength(Matrix2,size,size); + setlength(rootsvec,size); + setlength(bvector,size); + setlength(avector,size); + + // store data in Matrix1 to be analyzed + case CurrentGrid of + 1 : begin + for i := 0 to size - 1 do + for j := 0 to size - 1 do + Matrix1[i,j] := StrToFloat(Grid1.Cells[j+1,i+1]); + end; + 2 : begin + for i := 0 to size - 1 do + for j := 0 to size - 1 do + Matrix1[i,j] := StrToFloat(Grid2.Cells[j+1,i+1]); + end; + 3 : begin + for i := 0 to size - 1 do + for j := 0 to size - 1 do + Matrix1[i,j] := StrToFloat(Grid3.Cells[j+1,i+1]); + end; + 4 : begin + for i := 0 to size - 1 do + for j := 0 to size - 1 do + Matrix1[i,j] := StrToFloat(Grid4.Cells[j+1,i+1]); + end; + end; + + c := 0.0; + nfactors := size; + trace := 0.0; + sum := 0.0; + for i := 0 to size-1 do trace := trace + Matrix1[i,i]; + + // select the desired method + if rootmethodfrm.ShowModal <> mrCancel then + choice := rootmethodfrm.Choice + else goto finish; + case choice of + 1 : begin + for i := 0 to size-1 do + for j := 0 to size-1 do + Matrix2[i,j] := Matrix1[i,j]; + sevs(size,size,c,Matrix1,Matrix2,rootsvec,bvector,size); // works! (vectors not normalized) + end; + 2 : nonsymroots(Matrix1,size,nfactors,c,Matrix2, + rootsvec,bvector,trace,pcnttrace); // works (vectors not normalized) + 3 : begin + SymMatRoots(Matrix1,size,rootsvec,Matrix2); // works! (vectors normalized) + for i := 0 to size - 1 do bvector[i] := rootsvec[i] / trace * 100.0; + end; +// 4 : HOWS(size,size,size,Matrix1,rootsvec,Matrix2); + 4 : begin + xtqli(Matrix1, size, rootsvec, bvector, avector); // works! (vectors normalized) + for i := 0 to size-1 do + for j := 0 to size-1 do + Matrix2[i,j] := Matrix1[i,j]; + end; + 5 : begin + ROOTS(Matrix1,size,rootsvec,Matrix2); // works! (vectors normalized) + for i := 0 to size - 1 do bvector[i] := rootsvec[i] / trace * 100.0; + end; + end; + + for i := 0 to size-1 do sum := sum + rootsvec[i]; + pcnttrace := (trace / sum) * 100.0; + + // Place results in the four grids + Grid1.RowCount := Size + 1; // diagonal roots matrix in first grid + Grid1.ColCount := Size + 1; + Grid2.RowCount := Size + 1; // column vectors matrix in second + Grid2.Colcount := Size + 1; + Grid3.RowCount := Size + 1; // percentage vector in each root in 3 + Grid3.ColCount := 2; + Grid4.RowCount := 3; // trace and %trace in 4 + Grid4.ColCount := 2; + Rows1 := Size; + Cols1 := Size; + Rows2 := Size; + Cols2 := Size; + Rows3 := Size; + Cols3 := 1; + Rows4 := 2; + Cols4 := 1; + for i := 1 to Rows1 do Grid1.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols1 do Grid1.Cells[i,0] := 'Col ' + IntToStr(i); + for i := 1 to Rows2 do Grid2.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols2 do Grid2.Cells[i,0] := 'Col ' + IntToStr(i); + for i := 1 to Rows3 do Grid3.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols3 do Grid3.Cells[i,0] := 'Col ' + IntToStr(i); + for i := 1 to Rows4 do Grid4.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols4 do Grid4.Cells[i,0] := 'Col ' + IntToStr(i); + Grid4.Cells[0,1] := 'Trace'; + Grid4.Cells[0,2] := '%Extract'; + MatOneEdit.Text := 'Roots'; + MatTwoEdit.Text := 'vectors'; + MatThreeEdit.Text := 'RootPcnts'; + MatFourEdit.Text := 'Trace&Pcnt'; + for i := 0 to size - 1 do + begin + for j := 0 to size - 1 do + begin + if i = j then + begin + Grid1.Cells[i+1,i+1] := FloatToStr(rootsvec[i]); + end + else Grid1.Cells[j+1,i+1] := FloatToStr(0.0); + end; + end; + for i := 0 to size - 1 do + for j := 0 to size - 1 do + Grid2.Cells[j+1,i+1] := FloatToStr(Matrix2[i,j]); + for i := 0 to size - 1 do Grid3.Cells[1,i+1] := FloatToStr(bvector[i]); + Grid4.Cells[1,1] := FloatToStr(trace); + Grid4.Cells[1,2] := FloatToStr(pcnttrace); + Op1Edit.Text := 'MatrixRoots'; + opstr := IntToStr(CurrentGrid) + '-'; + opstr := opstr + 'MatrixRoots:' + IntToStr(CurrentGrid) + '-' + Op2Edit.Text; + + if ScriptOp = false then + begin + prmptstr := 'Save roots diagonal matrix as: '; + defaultstr := 'roots'; + clickedok1 := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok1 then info := defaultstr else info := 'roots'; + if Length(info) > 0 then rootname := info + else rootname := 'roots'; + prmptstr := 'Save eigenvectors as: '; + defaultstr := 'eigenvectors'; + clickedok2 := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok2 then info := defaultstr else info := 'eigenvectors'; + if Length(info) > 0 then vectname := info + else vectname := 'eigenvectors'; + MatOneEdit.Text := rootname; + MatTwoEdit.Text := vectname; + opstr := opstr + ':' + IntToStr(1) + '-' + rootname; + opstr := opstr + ':' + IntToStr(2) + '-' + vectname; + ScriptList.Items.Add(opstr); + // save roots + CurrentObjName := rootname; + CurrentObjType := 1; + CurrentGrid := 1; + MatOneEdit.Text := rootname; + ComboAdd(CurrentObjName); + if clickedok1 then SaveFileMnuClick(Self); + // save vectors + CurrentObjName := vectname; + CurrentObjType := 1; + CurrentGrid := 2; + ComboAdd(CurrentObjName); + if clickedok2 then SaveFileMnuClick(Self); + MatTwoEdit.Text := vectname; + end; +finish: + // deallocate memory + avector := nil; + bvector := nil; + Matrix2 := nil; + Matrix1 := nil; + rootsvec := nil; +end; + +procedure Tmatmanfrm.ResetMnuClick(Sender: TObject); +begin + FormShow(Self); +end; + +procedure Tmatmanfrm.RowAugMnuClick(Sender: TObject); +var + i : integer; + prmptstr, info, defaultstr : string; + clickedok : boolean; +begin + if CurrentObjType <> 1 then + begin + ShowMessage('Error - Grid does not contain a matrix.'); + exit; + end; + if CurrentGrid = 0 then exit; + case CurrentGrid of + 1 : begin + Rows1 := Rows1 + 1; + Grid1.RowCount := Rows1 + 1; + Grid1.Cells[0,Rows1] := 'Row' + IntToStr(Rows1); + for i := 1 to Cols1 do Grid1.Cells[i,Rows1] := FloatToStr(1.0); + Op2Edit.Text := MatOneEdit.Text; + end; + 2 : begin + Rows2 := Rows2 + 1; + Grid2.RowCount := Rows2 + 1; + Grid2.Cells[0,Rows2] := 'Row' + IntToStr(Rows2); + for i := 1 to Cols2 do Grid2.Cells[i,Rows2] := FloatToStr(1.0); + Op2Edit.Text := MatTwoEdit.Text; + end; + 3 : begin + Rows3 := Rows3 + 1; + Grid3.RowCount := Rows3 + 1; + Grid3.Cells[0,Rows3] := 'Row' + IntToStr(Rows3); + for i := 1 to Cols3 do Grid3.Cells[i,Rows3] := FloatToStr(1.0); + Op2Edit.Text := MatThreeEdit.Text; + end; + 4 : begin + Rows4 := Rows4 + 1; + Grid4.RowCount := Rows4 + 1; + Grid4.Cells[0,Rows4] := 'Row' + IntToStr(Rows4); + for i := 1 to Cols4 do Grid4.Cells[i,Rows4] := FloatToStr(1.0); + Op2Edit.Text := MatFourEdit.Text; + end; + end; // case + Op1Edit.Text := 'RowAugment'; + CurrentObjType := 1; + opstr := IntToStr(CurrentGrid) + '-'; + Op2Edit.Text := ExtractFileName(Op2Edit.Text); + opstr := opstr + 'RowAugment:' + Op2Edit.Text; + if ScriptOp = false then + begin + prmptstr := 'Save result as: '; + defaultstr := 'RowAugMat'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'RowAugMat'; + if Length(info) > 0 then Op3Edit.Text := info + else Op3Edit.Text := 'RowAugMat'; + case CurrentGrid of + 1 : MatOneEdit.Text := Op3Edit.Text; + 2 : MatTwoEdit.Text := Op3Edit.Text; + 3 : MatThreeEdit.Text := Op3Edit.Text; + 4 : MatFourEdit.Text := Op3Edit.Text; + end; + opstr := opstr + ':' + IntToStr(CurrentGrid) + '-' + Op3Edit.Text; + ScriptList.Items.Add(opstr); + CurrentObjName := Op3Edit.Text; + CurrentObjType := 1; + if clickedok then SaveFileMnuClick(Self); + ComboAdd(CurrentObjName); + end; +end; + +procedure Tmatmanfrm.RowDelMnuClick(Sender: TObject); +var + i, j : integer; + delrow : integer; + prmptstr, info, defaultstr : string; + clickedok : boolean; +begin + if CurrentObjType <> 1 then + begin + ShowMessage('Error - Grid does not contain a matrix.'); + exit; + end; + if CurrentGrid = 0 then exit; + case CurrentGrid of + 1 : begin + delrow := Grid1.Row; + for i := delrow + 1 to Grid1.RowCount - 1 do + for j := 1 to Grid1.ColCount - 1 do + Grid1.Cells[j,i-1] := Grid1.Cells[j,i]; + Grid1.RowCount := Grid1.RowCount - 1; + Rows1 := Rows1 - 1; + Op2Edit.Text := MatOneEdit.Text; + end; + 2 : begin + delrow := Grid2.Row; + for i := delrow + 1 to Grid2.RowCount - 1 do + for j := 1 to Grid2.ColCount - 1 do + Grid2.Cells[j,i-1] := Grid2.Cells[j,i]; + Grid2.RowCount := Grid2.RowCount - 1; + Rows2 := Rows2 - 1; + Op2Edit.Text := MatTwoEdit.Text; + end; + 3 : begin + delrow := Grid3.Row; + for i := delrow + 1 to Grid3.RowCount - 1 do + for j := 1 to Grid3.ColCount - 1 do + Grid3.Cells[j,i-1] := Grid3.Cells[j,i]; + Grid3.RowCount := Grid3.RowCount - 1; + Rows3 := Rows3 - 1; + Op2Edit.Text := MatThreeEdit.Text; + end; + 4 : begin + delrow := Grid4.Row; + for i := delrow + 1 to Grid4.RowCount - 1 do + for j := 1 to Grid4.ColCount - 1 do + Grid4.Cells[j,i-1] := Grid4.Cells[j,i]; + Grid4.RowCount := Grid4.RowCount - 1; + Rows4 := Rows4 - 1; + Op2Edit.Text := MatFourEdit.Text; + end; + end; + Op1Edit.Text := 'DeleteRow'; + CurrentObjType := 1; + if ScriptOp = false then + begin + prmptstr := 'Save result as: '; + defaultstr := 'RowDeleted'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'RowDeleted'; + if Length(info) > 0 then Op3Edit.Text := info + else Op3Edit.Text := 'RowDeleted'; + opstr := IntToStr(CurrentGrid) + '-'; + Op2Edit.Text := ExtractFileName(Op2Edit.Text); + opstr := opstr + 'DeleteRow:' + IntToStr(CurrentGrid) + '-' + Op2Edit.Text; + opstr := opstr + ':' + IntToStr(CurrentGrid) + '-' + Op3Edit.Text; + ScriptList.Items.Add(opstr); + CurrentObjName := Op3Edit.Text; + CurrentObjType := 1; + if clickedok then SaveFileMnuClick(Self); + ComboAdd(CurrentObjName); + case CurrentGrid of + 1 : MatOneEdit.Text := Op3Edit.Text; + 2 : MatTwoEdit.Text := Op3Edit.Text; + 3 : MatThreeEdit.Text := Op3Edit.Text; + 4 : MatFourEdit.Text := Op3Edit.Text; + end; + end; +end; + +procedure Tmatmanfrm.RowInstMnuClick(Sender: TObject); +var + insrow, insgrid, i, j, showresult : integer; + before : boolean; + +begin + showresult := RowInsertFrm.ShowModal; + if showresult = mrCancel then exit; + insgrid := StrToInt(RowInsertFrm.GridNoEdit.Text); + if (insgrid < 1) or (insgrid > 4) then exit; + if RowInsertFrm.BeforeEdit.Text = '' then before := false else before := true; + if before then insrow := StrToInt(RowInsertFrm.BeforeEdit.Text) + else insrow := StrToInt(RowInsertFrm.AfterEdit.Text); + case insgrid of + 1 : begin + Grid1.RowCount := Grid1.RowCount + 1; + if before then + begin // insert a row before insrow + for i := Rows1 downto insrow-1 do + for j := 1 to Cols1 do + Grid1.Cells[j,i+1] := Grid1.Cells[j,i]; + if insrow > 1 then + for j := 1 to Cols1 do Grid1.Cells[j,insrow-1] := '' + else for j := 1 to Cols1 do Grid1.Cells[j,1] := ''; + end + else begin // insert a row after insrow + for i := Rows1 downto insrow+1 do + for j := 1 to Cols1 do + Grid1.Cells[j,i+1] := Grid1.Cells[j,i]; + for j := 1 to Cols1 do Grid1.Cells[j,insrow+1] := '' + end; + Rows1 := Rows1 + 1; + for i := 1 to Rows1 do Grid1.Cells[0,i] := 'Row ' + IntToStr(i); + end; // end case grid 1 + 2 : begin + Grid2.RowCount := Grid2.RowCount + 1; + if before then + begin // insert a row before insrow + for i := Rows2 downto insrow-1 do + for j := 1 to Cols2 do + Grid2.Cells[j,i+1] := Grid2.Cells[j,i]; + if insrow > 1 then + for j := 1 to Cols2 do Grid2.Cells[j,insrow-1] := '' + else for j := 1 to Cols2 do Grid2.Cells[j,1] := ''; + end + else begin // insert a row after insrow + for i := Rows2 downto insrow+1 do + for j := 1 to Cols2 do + Grid2.Cells[j,i+1] := Grid2.Cells[j,i]; + for j := 1 to Cols2 do Grid2.Cells[j,insrow+1] := '' + end; + Rows2 := Rows2 + 1; + for i := 1 to Rows2 do Grid2.Cells[0,i] := 'Row ' + IntToStr(i); + end; + 3 : begin + Grid3.RowCount := Grid3.RowCount + 1; + if before then + begin // insert a row before insrow + for i := Rows3 downto insrow-1 do + for j := 1 to Cols3 do + Grid3.Cells[j,i+1] := Grid3.Cells[j,i]; + if insrow > 1 then + for j := 1 to Cols3 do Grid3.Cells[j,insrow-1] := '' + else for j := 1 to Cols3 do Grid3.Cells[j,1] := ''; + end + else begin // insert a row after insrow + for i := Rows3 downto insrow+1 do + for j := 1 to Cols3 do + Grid3.Cells[j,i+1] := Grid3.Cells[j,i]; + for j := 1 to Cols3 do Grid3.Cells[j,insrow+1] := '' + end; + Rows3 := Rows3 + 1; + for i := 1 to Rows3 do Grid3.Cells[0,i] := 'Row ' + IntToStr(i); + end; + 4 : begin + Grid4.RowCount := Grid4.RowCount + 1; + if before then + begin // insert a row before insrow + for i := Rows4 downto insrow-1 do + for j := 1 to Cols4 do + Grid4.Cells[j,i+1] := Grid4.Cells[j,i]; + if insrow > 1 then + for j := 1 to Cols4 do Grid4.Cells[j,insrow-1] := '' + else for j := 1 to Cols4 do Grid4.Cells[j,1] := ''; + end + else begin // insert a row after insrow + for i := Rows4 downto insrow+1 do + for j := 1 to Cols4 do + Grid4.Cells[j,i+1] := Grid4.Cells[j,i]; + for j := 1 to Cols4 do Grid4.Cells[j,insrow+1] := '' + end; + Rows4 := Rows4 + 1; + for i := 1 to Rows4 do Grid4.Cells[0,i] := 'Row ' + IntToStr(i); + end; + end; // case insgrid +end; + +procedure Tmatmanfrm.RowVecsBoxClick(Sender: TObject); +var + vecstr : string; + answer : string; + indexno : integer; + gridno : integer; + +begin + indexno := RowVecsBox.ItemIndex; + if indexno < 0 then exit; + vecstr := RowVecsBox.Items.Strings[indexno]; + answer := InputBox('PLACEMENT','Place in which Grid?','1'); + gridno := StrToInt(answer); + if ((gridno < 1) or (gridno > 4)) then + begin + ShowMessage('Error - Grid number must be between 1 and 4.'); + exit; + end; + CurrentGrid := gridno; + CurrentObjType := 3; + CurrentObjName := vecstr; + OpenDialog1.FileName := vecstr; + GetFile(Self); + RowVecsBox.Text := 'ROW VECTORS'; + RowVecsBox.ItemIndex := -1; +end; + +procedure Tmatmanfrm.RowxColVecMnuClick(Sender: TObject); +// premultiplication of a vector by another vector +var + i, j, k, resulttype : integer; + precols, postcols, prerows, postrows : integer; + info : string; + pregrid, postgrid, resultgrid : integer; + prmptstr : string; + premat, postmat, prodmat : DynMat; + clickedok : boolean; + defaultstr : string; + +begin + if ScriptOp = false then + begin + prmptstr := 'The pre-vector is in grid: '; + info := InputBox('PRE-VECTOR',prmptstr,IntToStr(CurrentGrid)); + if info = '' then exit; + pregrid := StrToInt(info); + prmptstr := 'The post-vector is in grid: '; + info := InputBox('POST-VECTOR',prmptstr,IntToStr(CurrentGrid)); + postgrid := StrToInt(info); + if info = '' then exit; + info := inputbox('RESULTS INTO','Place results in grid :','3'); + if info = '' then exit; + resultgrid := StrToInt(info); + end + else begin // executing the script + pregrid := 1; + postgrid := 2; + resultgrid := 3; + end; + case pregrid of + 1 : begin + precols := Cols1; + prerows := Rows1; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid1.Cells[j+1,i+1]); + Op2Edit.Text := MatOneEdit.Text; + end; + 2 : begin + precols := Cols2; + prerows := Rows2; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid2.Cells[j+1,i+1]); + Op2Edit.Text := MatTwoEdit.Text; + end; + 3 : begin + precols := Cols3; + prerows := Rows3; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid3.Cells[j+1,i+1]); + Op2Edit.Text := MatThreeEdit.Text; + end; + 4 : begin + precols := Cols4; + prerows := Rows4; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid4.Cells[j+1,i+1]); + Op2Edit.Text := MatFourEdit.Text; + end; + end; + case postgrid of + 1 : begin + postcols := Cols1; + postrows := Rows1; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid1.Cells[j+1,i+1]); + Op3Edit.Text := MatOneEdit.Text; + end; + 2 : begin + postcols := Cols2; + postrows := Rows2; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid2.Cells[j+1,i+1]); + Op3Edit.Text := MatTwoEdit.Text; + end; + 3 : begin + postcols := Cols3; + postrows := Rows3; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid3.Cells[j+1,i+1]); + Op3Edit.Text := MatThreeEdit.Text; + end; + 4 : begin + postcols := Cols4; + postrows := Rows4; + SetLength(postmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid4.Cells[j+1,i+1]); + Op3Edit.Text := MatFourEdit.Text; + end; + end; + SetLength(prodmat,prerows,postcols); + if prerows > 1 then resulttype := 1 else resulttype := 4; + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + for k := 0 to precols-1 do + prodmat[i,j] := prodmat[i,j] + (premat[i,k]*postmat[k,j]); + case resultgrid of + 1 : begin + Grid1.RowCount := prerows+1; + Grid1.ColCount := postcols+1; + Rows1 := prerows; + Cols1 := postcols; + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + Grid1.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to Rows1 do Grid1.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols1 do Grid1.Cells[i,0] := 'Col.' + IntToStr(i); + MatOneEdit.Text := 'Product'; + Op4Edit.Text := MatOneEdit.Text; + if Rows1 = Cols1 then CurrentObjType := 1; + if Rows1 > Cols1 then CurrentObjType := 2; + if Cols1 > Rows1 then CurrentObjType := 3; + end; + 2 : begin + Grid2.RowCount := prerows+1; + Grid2.ColCount := postcols+1; + Rows2 := prerows; + Cols2 := postcols; + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + Grid2.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to Rows2 do Grid2.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols2 do Grid2.Cells[i,0] := 'Col.' + IntToStr(i); + MatTwoEdit.Text := 'Product'; + Op4Edit.Text := MatTwoEdit.Text; + if Rows2 = Cols2 then CurrentObjType := 1; + if Rows2 > Cols2 then CurrentObjType := 2; + if Cols2 > Rows2 then CurrentObjType := 3; + end; + 3 : begin + Grid3.RowCount := prerows+1; + Grid3.ColCount := postcols+1; + Rows3 := prerows; + Cols3 := postcols; + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + Grid3.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to Rows3 do Grid3.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols3 do Grid3.Cells[i,0] := 'Col.' + IntToStr(i); + MatThreeEdit.Text := 'Product'; + Op4Edit.Text := MatThreeEdit.Text; + if Rows3 = Cols3 then CurrentObjType := 1; + if Rows3 > Cols3 then CurrentObjType := 2; + if Cols3 > Rows3 then CurrentObjType := 3; + end; + 4 : begin + Grid4.RowCount := prerows+1; + Grid4.ColCount := postcols+1; + Rows4 := prerows; + Cols4 := postcols; + for i := 0 to prerows-1 do + for j := 0 to postcols-1 do + Grid4.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to Rows4 do Grid4.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols4 do Grid4.Cells[i,0] := 'Col.' + IntToStr(i); + MatFourEdit.Text := 'Product'; + Op4Edit.Text := MatFourEdit.Text; + if Rows4 = Cols4 then CurrentObjType := 1; + if Rows4 > Cols4 then CurrentObjType := 2; + if Cols4 > Rows4 then CurrentObjType := 3; + end; + end; + Op1Edit.Text := 'VecxVec'; + opstr := IntToStr(CurrentGrid) + '-'; + Op2Edit.Text := ExtractFileName(Op2Edit.Text); + Op2Edit.Text := IntToStr(postgrid) + '-' + Op2Edit.Text; + opstr := opstr + 'VecxVec:'+ Op2Edit.Text; + Op3Edit.Text := ExtractFileName(Op3Edit.Text); + Op3Edit.Text := IntToStr(pregrid) + '-' + Op3Edit.Text; + opstr := opstr + ':' + Op3Edit.Text; + if ScriptOp = false then + begin + prmptstr := 'Save product as: '; + defaultstr := 'VectorProd'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'VectorProd'; + if Length(info) > 0 then Op4Edit.Text := info + else begin + Op4Edit.Text := 'VectorProd'; + info := 'VectorProd'; + end; + opstr := opstr + ':' + IntToStr(resultgrid) + '-' + Op4Edit.Text; + ScriptList.Items.Add(opstr); + CurrentObjName := info; + CurrentObjType := resulttype; + ComboAdd(CurrentObjName); + CurrentGrid := resultgrid; + if clickedok then SaveFileMnuClick(Self); + end; + // deallocate memory + prodmat := nil; + postmat := nil; + premat := nil; +end; + +procedure Tmatmanfrm.SaveFileMnuClick(Sender: TObject); +var + SaveFile : TextFile; + i, j : integer; +// OpStr : string; + BackUpName : string; + +begin + SaveDialog1.Filter := 'Matrix (*.mat)|*.MAT|Col.Vector (*.CVE)|*.CVE|RowVector (*.RVE)|*.RVE|Scaler (*.scl)|*.SCA|All (*.*)|*.*'; + SaveDialog1.FilterIndex := CurrentObjType; + case CurrentObjType of + 1 : SaveDialog1.DefaultExt := '.MAT'; + 2 : SaveDialog1.DefaultExt := '.CVE'; + 3 : SaveDialog1.DefaultExt := '.RVE'; + 4 : SaveDialog1.DefaultExt := '.SCA'; + end; + BackUpName := ExtractFileName(CurrentObjName); + SaveDialog1.FileName := BackUpName; + + if SaveDialog1.Execute then + begin + Op2Edit.Text := SaveDialog1.FileName; + CurrentObjName := ExtractFileName(SaveDialog1.FileName); + Op1Edit.Text := 'FileSave'; + Op3Edit.Text := ''; + Op4Edit.Text := ''; + AssignFile(SaveFile, SaveDialog1.FileName); + Rewrite(SaveFile); + Writeln(SaveFile,CurrentObjType); + Writeln(SaveFile,CurrentObjName); + case CurrentGrid of + 1 : begin + MatOneEdit.Text := CurrentObjName; + Writeln(SaveFile,Rows1); + Writeln(SaveFile,Cols1); + for i := 1 to Rows1 do + for j := 1 to Cols1 do + Writeln(SaveFile,Grid1.Cells[j,i]); + end; + 2 : begin + MatTwoEdit.Text := CurrentObjName; + Writeln(SaveFile,Rows2); + Writeln(SaveFile,Cols2); + for i := 1 to Rows2 do + for j := 1 to Cols2 do + Writeln(SaveFile,Grid2.Cells[j,i]); + end; + 3 : begin + MatThreeEdit.Text := CurrentObjName; + Writeln(SaveFile,Rows3); + Writeln(SaveFile,Cols3); + for i := 1 to Rows3 do + for j := 1 to Cols3 do + Writeln(SaveFile,Grid3.Cells[j,i]); + end; + 4 : begin + MatFourEdit.Text := CurrentObjName; + Writeln(SaveFile,Rows4); + Writeln(SaveFile,Cols4); + for i := 1 to Rows4 do + for j := 1 to Cols4 do + Writeln(SaveFile,Grid4.Cells[j,i]); + end; + end; // case + CloseFile(SaveFile); + Saved := true; + if ScriptOp = false then + begin + OpStr := IntToStr(CurrentGrid) + '-'; + OpStr := OpStr + 'FileSave:' + IntToStr(CurrentGrid) + '-' + CurrentObjName; + if scriptoptsfrm.CheckGroup1.Checked[1] <> true then ScriptList.Items.Add(OpStr); + end; + end; // if savedialog1 executed +end; + +procedure Tmatmanfrm.ScalarInmnuClick(Sender: TObject); +var + instr : string; + +begin + instr := InputBox('GRID?','Which grid no. (1-4):','1'); + CurrentGrid := StrToInt(instr); + if ((CurrentGrid < 1) or (CurrentGrid > 4)) then CurrentGrid := 1; + GridNoEdit.Text := IntToStr(CurrentGrid); + ScaCount := ScaCount + 1; + instr := InputBox('Scaler Name','Object name:','Ascaler'); + CurrentObjName := instr; + CurrentObjType := 4; + case CurrentGrid of + 1 : begin + Rows1 := 1; + Cols1 := 1; + Grid1.RowCount := 2; + Grid1.ColCount := 2; + Grid1.Cells[1,0] := 'Col.1'; + Grid1.Cells[0,1] := 'Row.1'; + Grid1.Cells[1,1] := ''; + MatOneEdit.Text := CurrentObjName; + end; + 2 : begin + Rows2 := 1; + Cols2 := 1; + Grid2.RowCount := 2; + Grid2.ColCount := 2; + Grid2.Cells[1,0] := 'Col.1'; + Grid2.Cells[0,1] := 'Row.1'; + Grid2.Cells[1,1] := ''; + MatTwoEdit.Text := CurrentObjName; + end; + 3 : begin + Rows3 := 1; + Cols3 := 1; + Grid3.RowCount := 2; + Grid3.ColCount := 2; + Grid3.Cells[1,0] := 'Col.1'; + Grid3.Cells[0,1] := 'Row.1'; + Grid3.Cells[1,1] := ''; + MatThreeEdit.Text := CurrentObjName; + end; + 4 : begin + Rows4 := 1; + Cols4 := 1; + Grid4.RowCount := 2; + Grid4.ColCount := 2; + Grid4.Cells[1,0] := 'Col.1'; + Grid4.Cells[0,1] := 'Row.1'; + Grid4.Cells[1,1] := ''; + MatFourEdit.Text := CurrentObjName; + end; + end; // case + case CurrentGrid of + 1 : Grid1.SetFocus; + 2 : Grid2.SetFocus; + 3 : Grid3.SetFocus; + 4 : Grid4.SetFocus; + end; +end; + +procedure Tmatmanfrm.ScalarsBoxClick(Sender: TObject); +var + scalerstr : string; + answer : string; + indexno : integer; + gridno : integer; + +begin + indexno := ScalarsBox.ItemIndex; + if indexno < 0 then exit; + scalerstr := ScalarsBox.Items.Strings[indexno]; + answer := InputBox('PLACEMENT','Place in which Grid?','1'); + gridno := StrToInt(answer); + if ((gridno < 1) or (gridno > 4)) then + begin + ShowMessage('Error - Grid number must be between 1 and 4.'); + exit; + end; + CurrentGrid := gridno; + CurrentObjType := 4; + CurrentObjName := scalerstr; + OpenDialog1.FileName := scalerstr; + GetFile(Self); + ScalarsBox.Text := 'SCALARS'; + ScalarsBox.ItemIndex := -1; +end; + +procedure Tmatmanfrm.ScalRecipMnuClick(Sender: TObject); +var + prmptstr, info : string; + clickedok : boolean; + defaultstr : string; +begin + Op1Edit.Text := 'ScalerRecip'; + case CurrentGrid of + 1 : begin + if StrToFloat(Grid1.Cells[1,1]) = 0.0 then + begin + ShowMessage('Attempt to divide by zero.'); + exit; + end; + Grid1.Cells[1,1] := FloatToStr(1.0 / StrToFloat(Grid1.Cells[1,1])); + Op2Edit.Text := MatOneEdit.Text; + MatOneEdit.Text := 'ScalerRecip'; + Op3Edit.Text := MatOneEdit.Text; + CurrentObjName := MatOneEdit.Text; + end; + 2 : begin + if StrToFloat(Grid2.Cells[1,1]) = 0.0 then + begin + ShowMessage('Attempt to divide by zero.'); + exit; + end; + Grid2.Cells[1,1] := FloatToStr(1.0 / StrToFloat(Grid2.Cells[1,1])); + Op2Edit.Text := MatTwoEdit.Text; + MatTwoEdit.Text := 'ScalerRecip'; + Op3Edit.Text := MatTwoEdit.Text; + CurrentObjName := MatTwoEdit.Text; + end; + 3 : begin + if StrToFloat(Grid3.Cells[1,1]) = 0.0 then + begin + ShowMessage('Attempt to divide by zero.'); + exit; + end; + Grid3.Cells[1,1] := FloatToStr(1.0 / StrToFloat(Grid3.Cells[1,1])); + Op2Edit.Text := MatThreeEdit.Text; + MatThreeEdit.Text := 'ScalerRecip'; + Op3Edit.Text := MatThreeEdit.Text; + CurrentObjName := MatThreeEdit.Text; + end; + 4 : begin + if StrToFloat(Grid4.Cells[1,1]) = 0.0 then + begin + ShowMessage('Attempt to divide by zero.'); + exit; + end; + Grid4.Cells[1,1] := FloatToStr(1.0 / StrToFloat(Grid4.Cells[1,1])); + Op2Edit.Text := MatFourEdit.Text; + MatFourEdit.Text := 'ScalerRecip'; + Op3Edit.Text := MatFourEdit.Text; + CurrentObjName := MatFourEdit.Text; + end; + end; + if ScriptOp = false then + begin + opstr := IntToStr(CurrentGrid) + '-' + 'ScalerRecip:'; + opstr := opstr + IntToStr(CurrentGrid) + '-' + Op2Edit.Text; + prmptstr := 'Save reciprocal of scaler as: '; + defaultstr := 'ScalarRecip'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'ScalarRecip'; + if Length(info) > 0 then Op3Edit.Text := info + else begin + Op3Edit.Text := 'ScalarRecip'; + info := 'ScalarRecip'; + end; + opstr := opstr + ':' + IntToStr(CurrentGrid) + '-' + Op3Edit.Text; + ScriptList.Items.Add(opstr); + CurrentObjName := info; + CurrentObjType := 4; + ComboAdd(CurrentObjName); + if clickedok then SaveFileMnuClick(Self); + case CurrentGrid of + 1 : MatOneEdit.Text := info; + 2 : MatTwoEdit.Text := info; + 3 : MatThreeEdit.Text := info; + 4 : MatFourEdit.Text := info; + end; + end; +end; + +procedure Tmatmanfrm.ScalSqrtMnuClick(Sender: TObject); +var + prmptstr, info : string; + clickedok : boolean; + defaultstr : string; +begin + Op1Edit.Text := 'SqrtScalar'; + case CurrentGrid of + 1 : begin + if StrToFloat(Grid1.Cells[1,1]) < 0.0 then + ShowMessage('Attempt to take square root of a negative value.') + else Grid1.Cells[1,1] := FloatToStr(sqrt(StrToFloat(Grid1.Cells[1,1]))); + Op2Edit.Text := MatOneEdit.Text; + MatOneEdit.Text := 'SqrtScaler'; + end; + 2 : begin + if StrToFloat(Grid2.Cells[1,1]) < 0.0 then + ShowMessage('Attempt to take square root of a negative value.') + else Grid2.Cells[1,1] := FloatToStr(sqrt(StrToFloat(Grid2.Cells[1,1]))); + Op2Edit.Text := MatTwoEdit.Text; + MatTwoEdit.Text := 'SqrtScaler'; + end; + 3 : begin + if StrToFloat(Grid3.Cells[1,1]) < 0.0 then + ShowMessage('Attempt to take square root of a negative value.') + else Grid3.Cells[1,1] := FloatToStr(sqrt(StrToFloat(Grid3.Cells[1,1]))); + Op2Edit.Text := MatThreeEdit.Text; + MatThreeEdit.Text := 'SqrtScaler'; + end; + 4 : begin + if StrToFloat(Grid4.Cells[1,1]) < 0.0 then + ShowMessage('Attempt to take square root of a negative value.') + else Grid4.Cells[1,1] := FloatToStr(sqrt(StrToFloat(Grid4.Cells[1,1]))); + Op2Edit.Text := MatFourEdit.Text; + MatFourEdit.Text := 'SqrtScaler'; + end; + end; + if ScriptOp = false then + begin + prmptstr := 'Save scalar square root as: '; + defaultstr := 'SqrtScalar'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'SqrtScalar'; + if Length(info) > 0 then Op3Edit.Text := info + else begin + Op3Edit.Text := 'SqrtScalar'; + info := 'SqrtScaler'; + end; + opstr := IntToStr(CurrentGrid) + '-' + 'SqrtScaler:'; + opstr := opstr + IntToStr(CurrentGrid) + '-' + Op2Edit.Text; + opstr := opstr + ':' + IntToStr(CurrentGrid) + '-' + Op3Edit.Text; + ScriptList.Items.Add(opstr); + CurrentObjName := info; + CurrentObjType := 4; + ComboAdd(CurrentObjName); + if clickedok then SaveFileMnuClick(Self); + case CurrentGrid of + 1 : MatOneEdit.Text := info; + 2 : MatTwoEdit.Text := info; + 3 : MatThreeEdit.Text := info; + 4 : MatFourEdit.Text := info; + end; + end; +end; + +procedure Tmatmanfrm.ScalxScalMnuClick(Sender: TObject); +var + multiplier : double; + prmptstr, info : string; + clickedok : boolean; + defaultstr : string; +begin + prmptstr := 'Multiply the scalar by ' ; + info := inputbox('MULTIPLY BY ',prmptstr,''); + if info = '' then exit + else multiplier := StrToFloat(info); + Op1Edit.Text := 'ScalarxScalar'; + case CurrentGrid of + 1 : begin + Op2Edit.Text := MatOneEdit.Text; + Grid1.Cells[1,1] := FloatToStr(StrToFloat(Grid1.Cells[1,1]) * multiplier); + MatOneEdit.Text := 'ScalarProd'; + end; + 2 : begin + Op2Edit.Text := MatTwoEdit.Text; + Grid2.Cells[1,1] := FloatToStr(StrToFloat(Grid2.Cells[1,1]) * multiplier); + MatTwoEdit.Text := 'ScalarProd'; + end; + 3 : begin + Op2Edit.Text := MatThreeEdit.Text; + Grid3.Cells[1,1] := FloatToStr(StrToFloat(Grid3.Cells[1,1]) * multiplier); + MatThreeEdit.Text := 'ScalarProd'; + end; + 4 : begin + Op2Edit.Text := MatFourEdit.Text; + Grid4.Cells[1,1] := FloatToStr(StrToFloat(Grid4.Cells[1,1]) * multiplier); + MatFourEdit.Text := 'ScalarProd'; + end; + end; + + if ScriptOp = false then + begin + prmptstr := 'Save product of scalars as: '; + defaultstr := 'ScalarProd'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'ScalarProd'; + if Length(info) > 0 then Op3Edit.Text := ':' + IntToStr(CurrentGrid) + '-' + info + else begin + Op3Edit.Text := 'ScalarProd'; + info := 'ScalarProd'; + end; + opstr := IntToStr(CurrentGrid) + '-' + 'ScalerProd:'; + opstr := opstr + IntToStr(CurrentGrid) + '-' + Op2Edit.Text; + opstr := opstr + ':' + IntToStr(CurrentGrid) + '-' + Op3Edit.Text; + ScriptList.Items.Add(opstr); + CurrentObjName := info; + CurrentObjType := 4; + ComboAdd(CurrentObjName); + if clickedok then SaveFileMnuClick(Self); + case CurrentGrid of + 1 : MatOneEdit.Text := info; + 2 : MatTwoEdit.Text := info; + 3 : MatThreeEdit.Text := info; + 4 : MatFourEdit.Text := info; + end; + end; +end; + +procedure Tmatmanfrm.ScrExeMnuClick(Sender: TObject); +var + i, Count : integer; +// Operation, Op1, Op2, Op3 : string; + parseresult : integer; +// Opergrid, Op1grid, Op2grid, Op3grid : integer; +begin + Count := ScriptList.Items.Count; + if Count < 1 then + begin + ShowMessage('No script loaded to execute!'); + exit; + end; + ScriptOp := true; + for i := 0 to Count - 1 do + begin + OpStr := ScriptList.Items.Strings[i]; + + parseresult := OpParse(Operation, OpStr, Op1, Op2, Op3, Opergrid, Op1grid, + Op2grid, Op3grid); + if parseresult = 0 then + begin + ShowMessage('Operation code not found in a script entry.'); + ScriptOp := false; + exit; + end; + + // Now, execute the operation + OperExec; //(Operation, Op1, Op2, Op3, Opergrid, Op1grid, Op2grid, Op3grid); + if i = Count - 1 then ScriptOp := false; + LastScript := i; + end; // next i +end; + +procedure Tmatmanfrm.ScriptClearMnuClick(Sender: TObject); +begin + ScriptList.Clear; +end; + +procedure Tmatmanfrm.ScriptEditMnuClick(Sender: TObject); +var count, i : integer; + +begin + count := ScriptList.Items.Count; + ScriptEditorFrm.ScriptList.Clear; + for i := 0 to count-1 do ScriptEditorFrm.ScriptList.Items.Add(ScriptList.Items.Strings[i]); + ScriptEditorFrm.ShowModal; +end; + +procedure Tmatmanfrm.ScriptFileInMnuClick(Sender: TObject); +var + SaveFile : TextFile; + i, Count : integer; + cellstring : string; +// ScriptName : string; +begin + OpenDialog1.FileName := 'Script'; + OpenDialog1.Filter := 'Script (*.SCP)|*.SCP|(*.*)|*.*'; + OpenDialog1.DefaultExt := '.SCP'; + if OpenDialog1.Execute then + begin + ScriptName := ExtractFileName(OpenDialog1.FileName); + ScriptList.Clear; + scripteditorfrm.ScriptList.Clear; + scripteditorfrm.ScriptFileEdit.Text := OpenDialog1.FileName; + AssignFile(SaveFile, OpenDialog1.FileName); + Reset(SaveFile); + Readln(SaveFile,CurrentObjType); + if CurrentObjType <> 5 then + begin + ShowMessage('Not a script file!'); + CloseFile(SaveFile); + exit; + end; + Readln(SaveFile,CurrentObjName); + Op2Edit.Text := OpenDialog1.FileName; + Readln(SaveFile,Count); + for i := 0 to Count - 1 do + begin + Readln(SaveFile,cellstring); + ScriptList.Items.Add(cellstring); + scripteditorfrm.ScriptList.Items.Add(cellstring); + end; + CloseFile(SaveFile); + Op1Edit.Text := 'OpenScript'; + Op3Edit.Text := ''; + end; +end; + +procedure Tmatmanfrm.ScriptListClick(Sender: TObject); +var + i, Count : integer; + parseresult : integer; + +begin + Count := ScriptList.Items.Count; + if Count < 1 then + begin + ShowMessage('No script loaded to execute!'); + exit; + end; + ScriptOp := true; + i := ScriptList.ItemIndex; + OpStr := ScriptList.Items.Strings[i]; + parseresult := OpParse(Operation, OpStr, Op1, Op2, Op3, Opergrid, Op1grid, + Op2grid, Op3grid); + if parseresult = 0 then + begin + ShowMessage('Operation code not found in a script entry.'); + ScriptOp := false; + exit; + end; + + // Now, execute the operation + OperExec; //(Operation, Op1, Op2, Op3, Opergrid, Op1grid, Op2grid, Op3grid); + ScriptOp := false; +end; + +procedure Tmatmanfrm.ScriptLoadMnuClick(Sender: TObject); +begin + ScriptFileInMnuClick(Self); +end; + +procedure Tmatmanfrm.ScriptOpsMnuClick(Sender: TObject); +begin + ScriptOptsFrm.ShowModal; +end; + +procedure Tmatmanfrm.ScriptPrintMnuClick(Sender: TObject); +var i : integer; + +begin + if ScriptList.Items.Count = 0 then exit; + OutPutFrm.RichEdit.Lines.Add('CURRENT LISTING FOR SCRIPT ' + ScriptName); + OutPutFrm.RichEdit.Lines.Add(''); + for i := 0 to ScriptList.Items.Count - 1 do + OutPutFrm.RichEdit.Lines.Add(ScriptList.Items.Strings[i]); + OutPutFrm.ShowModal; +end; + +procedure Tmatmanfrm.ScriptSaveMnuClick(Sender: TObject); +var + SaveFile : TextFile; + i, Count : integer; + +begin + Count := ScriptList.Items.Count; + if Count < 1 then exit; + CurrentObjType := 5; // a script file + SaveDialog1.FileName := 'Script'; + SaveDialog1.Filter := 'Script (*.SCP)|*.SCP|(*.*)|*.*'; + SaveDialog1.DefaultExt := '.SCP'; + if SaveDialog1.Execute then + begin + AssignFile(SaveFile, SaveDialog1.FileName); + CurrentObjName := SaveDialog1.FileName; + Rewrite(SaveFile); + Writeln(SaveFile,CurrentObjType); + Writeln(SaveFile,CurrentObjName); + Writeln(SaveFile,Count); + for i := 0 to Count - 1 do + Writeln(SaveFile,ScriptList.Items.Strings[i]); + CloseFile(SaveFile); + Op1Edit.Text := 'SaveScript'; + Op2Edit.Text := SaveDialog1.FileName; + Op3Edit.Text := ''; + end; +end; + +procedure Tmatmanfrm.ScrSavMnuClick(Sender: TObject); +begin + ScriptSaveMnuClick(Self); +end; + +procedure Tmatmanfrm.SVDInvMnuClick(Sender: TObject); +label emsg; +var + size : integer; + i, j : integer; + prmptstr, info : string; + clickedok : boolean; + defaultstr : string; +begin + if CurrentObjType <> 1 then +emsg: + begin + ShowMessage('Error - Selected grid does not contain a symetric matrix.'); + exit; + end; + case CurrentGrid of + 1 : begin + if Rows1 <> Cols1 then goto emsg; + size := Rows1; + Op2Edit.Text := MatOneEdit.Text; + end; + 2 : begin + if Rows2 <> Cols2 then goto emsg; + size := Rows2; + Op2Edit.Text := MatTwoEdit.Text; + end; + 3 : begin + if Rows3 <> Cols3 then goto emsg; + size := Rows3; + Op2Edit.Text := MatThreeEdit.Text; + end; + 4 : begin + if Rows4 <> Cols4 then goto emsg; + size := Rows4; + Op2Edit.Text := MatFourEdit.Text; + end; + end; + + // allocate memory + setlength(Matrix1,size,size); + setlength(Matrix2,size,size); + setlength(Matrix3,size,size); + setlength(Matrix4,size,size); + + case CurrentGrid of + 1 : begin + for i := 0 to size - 1 do + for j := 0 to size - 1 do + Matrix1[i,j] := StrToFloat(Grid1.Cells[j+1,i+1]); + end; + 2 : begin + for i := 0 to size - 1 do + for j := 0 to size - 1 do + Matrix1[i,j] := StrToFloat(Grid2.Cells[j+1,i+1]); + end; + 3 : begin + for i := 0 to size - 1 do + for j := 0 to size - 1 do + Matrix1[i,j] := StrToFloat(Grid3.Cells[j+1,i+1]); + end; + 4 : begin + for i := 0 to size - 1 do + for j := 0 to size - 1 do + Matrix1[i,j] := StrToFloat(Grid4.Cells[j+1,i+1]); + end; + end; + matinv(Matrix1, Matrix2, Matrix3, Matrix4, size); + + // Place results in the four grids + Grid1.RowCount := Size + 1; + Grid1.ColCount := Size + 1; + Grid2.RowCount := Size + 1; + Grid2.Colcount := Size + 1; + Grid3.RowCount := Size + 1; + Grid3.ColCount := Size + 1; + Grid4.RowCount := Size + 1; + Grid4.ColCount := Size + 1; + Rows1 := Size; + Cols1 := Size; + Rows2 := Size; + Cols2 := Size; + Rows3 := Size; + Cols3 := Size; + Rows4 := Size; + Cols4 := Size; +// Obj1NameEdit.Text := 'Inverse'; + MatTwoEdit.Text := 'vtimesw '; + MatThreeEdit.Text := 'v'; + MatFourEdit.Text := 'w'; + for i := 0 to size - 1 do + begin + for j := 0 to size - 1 do + begin + Grid1.Cells[j+1,i+1] := FloatToStr(Matrix1[i,j]); + Grid2.Cells[j+1,i+1] := FloatToStr(Matrix2[i,j]); + Grid3.Cells[j+1,i+1] := FloatToStr(Matrix3[i,j]); + Grid4.Cells[j+1,i+1] := FloatToStr(Matrix4[i,j]); + end; + end; + + Op1Edit.Text := 'SVDInverse'; + if ScriptOp = false then + begin + prmptstr := 'Save result as: '; + defaultstr := 'SVDInverse'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'SVDInverse'; + if Length(info) > 0 then MatOneEdit.Text := info; + opstr := IntToStr(CurrentGrid) + '-'; + Op2Edit.Text := ExtractFileName(Op2Edit.Text); + Op2Edit.Text := IntToStr(CurrentGrid) + '-' + Op2Edit.Text; + opstr := opstr + 'SVDInverse:' + Op2Edit.Text; + if Length(info) > 0 then Op3Edit.Text := ':' + IntToStr(1) + '-' + info + else Op3Edit.Text := ''; + opstr := opstr + Op3Edit.Text; + ScriptList.Items.Add(opstr); + if Length(info) > 0 then + begin + CurrentObjName := info; + CurrentObjType := 1; + CurrentGrid := 1; + if clickedok then SaveFileMnuClick(Self); + end; + ComboAdd(CurrentObjName); + end; + // deallocate memory + Matrix4 := nil; + Matrix3 := nil; + Matrix2 := nil; + Matrix1 := nil; +end; + +procedure Tmatmanfrm.TraceMnuClick(Sender: TObject); +label emsg; +var + i, nextgrid : integer; + sum : double; + prmptstr, info : string; + clickedok : boolean; + defaultstr : string; +begin + if CurrentObjType <> 1 then +emsg: + begin + ShowMessage('Error - Selected grid does not contain a matrix.'); + exit; + end; + sum := 0.0; + + case CurrentGrid of + 1 : begin + for i := 1 to Grid1.ColCount - 1 do + sum := sum + StrToFloat(Grid1.Cells[i,i]); + Op2Edit.Text := MatOneEdit.Text; + nextgrid := 2; + end; + 2 : begin + for i := 1 to Grid2.ColCount - 1 do + sum := sum + StrToFloat(Grid2.Cells[i,i]); + Op2Edit.Text := MatTwoEdit.Text; + nextgrid := 3; + end; + 3 : begin + for i := 1 to Grid3.ColCount - 1 do + sum := sum + StrToFloat(Grid3.Cells[i,i]); + Op2Edit.Text := MatThreeEdit.Text; + nextgrid := 4; + end; + 4 : begin + for i := 1 to Grid4.ColCount - 1 do + sum := sum + StrToFloat(Grid4.Cells[i,i]); + Op2Edit.Text := MatFourEdit.Text; + nextgrid := 1; + end; + end; + + // place results in next grid + case nextgrid of + 1 : begin + Grid1.RowCount := 2; + Grid1.ColCount := 2; + MatOneEdit.Text := 'Trace'; + Grid1.Cells[1,1] := FloatToStr(sum); + CurrentObjName := MatOneEdit.Text; + end; + 2 : begin + Grid2.RowCount := 2; + Grid2.ColCount := 2; + MatTwoEdit.Text := 'Trace'; + Grid2.Cells[1,1] := FloatToStr(sum); + CurrentObjName := MatTwoEdit.Text; + end; + 3 : begin + Grid3.RowCount := 2; + Grid3.ColCount := 2; + MatThreeEdit.Text := 'Trace'; + Grid3.Cells[1,1] := FloatToStr(sum); + CurrentObjName := MatThreeEdit.Text; + end; + 4 : begin + Grid4.RowCount := 2; + Grid4.ColCount := 2; + MatFourEdit.Text := 'Trace'; + Grid4.Cells[1,1] := FloatToStr(sum); + CurrentObjName := MatFourEdit.Text; + end; + end; + + Op1Edit.Text := 'MatTrace'; + if ScriptOp = false then + begin + prmptstr := 'Save trace as: '; + defaultstr := 'trace'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'trace'; + if Length(info) > 0 then + begin + Op3Edit.Text := info; + end + else begin + Op3Edit.Text := 'trace'; + info := 'trace'; + end; + case nextgrid of + 1 : MatOneEdit.Text := info; + 2 : MatTwoEdit.Text := info; + 3 : MatThreeEdit.Text := info; + 4 : MatFourEdit.Text := info; + end; + Op2Edit.Text := IntToStr(CurrentGrid) + '-' + ExtractFileName(Op2Edit.Text); + opstr := IntToStr(CurrentGrid) + '-' + 'MatTrace:' + Op2Edit.Text; + opstr := opstr + ':' + IntToStr(nextgrid) + '-' + Op3Edit.Text; + ScriptList.Items.Add(opstr); + CurrentObjName := info; + CurrentObjType := 4; + CurrentGrid := nextgrid; + ComboAdd(CurrentObjName); + if clickedok then SaveFileMnuClick(Self); + end; +end; + +procedure Tmatmanfrm.TransMnuClick(Sender: TObject); +label emsg; +var + i, j, gridno, nextgrid : integer; + prmptstr, info: string; + clickedok : boolean; + defaultstr : string; +begin + if CurrentObjType <> 1 then +emsg: + begin + ShowMessage('Error - Selected grid does not contain a matrix.'); + exit; + end; + case CurrentGrid of + 1 : begin + Op2Edit.Text := MatOneEdit.Text; + nextgrid := 2; + Grid2.RowCount := Cols1 + 1; + Grid2.ColCount := Rows1 + 1; + for i := 1 to Rows1 do + for j := 1 to Cols1 do + Grid2.Cells[i,j] := Grid1.Cells[j,i]; + for i := 1 to Rows1 do Grid2.Cells[i,0] := 'Col.' + IntToStr(i); + for i := 1 to Cols1 do Grid2.Cells[0,i] := 'Row ' + IntToStr(i); + Grid2.RowCount := Cols1 + 1; + Grid2.ColCount := Rows1 + 1; + Rows2 := Cols1; + Cols2 := Rows1; + end; + 2 : begin + Op2Edit.Text := MatTwoEdit.Text; + nextgrid := 3; + Grid3.RowCount := Cols2 + 1; + Grid3.ColCount := Rows2 + 1; + for i := 1 to Rows2 do + for j := 1 to Cols2 do + Grid3.Cells[i,j] := Grid2.Cells[j,i]; + for i := 1 to Rows2 do Grid3.Cells[i,0] := 'Col.' + IntToStr(i); + for i := 1 to Cols2 do Grid3.Cells[0,i] := 'Row ' + IntToStr(i); + Rows3 := Cols2; + Cols3 := Rows2; + end; + 3 : begin + Op2Edit.Text := MatThreeEdit.Text; + nextgrid := 4; + Grid4.RowCount := Cols3 + 1; + Grid4.ColCount := Rows3 + 1; + for i := 1 to Rows3 do + for j := 1 to Cols3 do + Grid4.Cells[i,j] := Grid3.Cells[j,i]; + for i := 1 to Rows3 do Grid4.Cells[i,0] := 'Col.' + IntToStr(i); + for i := 1 to Cols3 do Grid4.Cells[0,i] := 'Row ' + IntToStr(i); + Rows4 := Cols3; + Cols4 := Rows3; + end; + 4 : begin + Op2Edit.Text := MatFourEdit.Text; + nextgrid := 1; + Grid1.RowCount := Cols4 + 1; + Grid1.ColCount := Rows4 + 1; + for i := 1 to Rows4 do + for j := 1 to Cols4 do + Grid1.Cells[i,j] := Grid4.Cells[j,i]; + for i := 1 to Rows4 do Grid1.Cells[i,0] := 'Col.' + IntToStr(i); + for i := 1 to Cols4 do Grid1.Cells[0,i] := 'Row ' + IntToStr(i); + Rows1 := Cols4; + Cols1 := Rows4; + end; + end; + Op1Edit.Text := 'MatTranspose'; + Op4Edit.Text := ''; + if ScriptOp = false then + begin + prmptstr := 'Save transpose matrix as: '; + defaultstr := 'transpose'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'transpose'; + opstr := IntToStr(CurrentGrid) + '-'; + Op2Edit.Text := ExtractFileName(Op2Edit.Text); + Op2Edit.Text := IntToStr(CurrentGrid) + '-' + Op2Edit.Text; + opstr := opstr + 'MatTranspose:' + Op2Edit.Text; + if Length(info) > 0 then + Op3Edit.Text := ':' + IntToStr(nextgrid) + '-' + info + else begin + Op3Edit.Text := ':' + IntToStr(nextgrid) + '-' + 'transpose'; + info := 'transpose'; + end; + opstr := opstr + Op3Edit.Text; + ScriptList.Items.Add(opstr); + CurrentObjName := info; + CurrentObjType := 1; + CurrentGrid := nextgrid; + ComboAdd(CurrentObjName); + if clickedok then SaveFileMnuClick(Self); + case nextgrid of + 1 : MatOneEdit.Text := info; + 2 : MatTwoEdit.Text := info; + 3 : MatThreeEdit.Text := info; + 4 : MatFourEdit.Text := info; + end; + end; +end; + +procedure Tmatmanfrm.TriDiagMnuClick(Sender: TObject); +label emsg; +var + size : integer; + i, j : integer; + prmptstr, info : string; + avector, bvector : DynVec; + clickedok : boolean; + defaultstr : string; +begin + if CurrentGrid = 0 then exit; + if CurrentObjType <> 1 then +emsg: + begin + ShowMessage('Error - Selected grid does not contain a symetric matrix.'); + exit; + end; + case CurrentGrid of + 1 : begin + if Rows1 <> Cols1 then goto emsg; + size := Rows1; + Op2Edit.Text := ExtractFileName(MatOneEdit.Text); + end; + 2 : begin + if Rows2 <> Cols2 then goto emsg; + size := Rows2; + Op2Edit.Text := ExtractFileName(MatTwoEdit.Text); + end; + 3 : begin + if Rows3 <> Cols3 then goto emsg; + size := Rows3; + Op2Edit.Text := ExtractFileName(MatThreeEdit.Text); + end; + 4 : begin + if Rows4 <> Cols4 then goto emsg; + size := Rows4; + Op2Edit.Text := ExtractFileName(MatFourEdit.Text); + end; + end; + + // allocate memory + setlength(Matrix1,size,size); + setlength(Matrix2,size,size); + setlength(avector,size); + setlength(bvector,size); + + // store data in Matrix1 to be inverted + case CurrentGrid of + 1 : begin + for i := 0 to size - 1 do + for j := 0 to size - 1 do + Matrix1[i,j] := StrToFloat(Grid1.Cells[j+1,i+1]); + end; + 2 : begin + for i := 0 to size - 1 do + for j := 0 to size - 1 do + Matrix1[i,j] := StrToFloat(Grid2.Cells[j+1,i+1]); + end; + 3 : begin + for i := 0 to size - 1 do + for j := 0 to size - 1 do + Matrix1[i,j] := StrToFloat(Grid3.Cells[j+1,i+1]); + end; + 4 : begin + for i := 0 to size - 1 do + for j := 0 to size - 1 do + Matrix1[i,j] := StrToFloat(Grid4.Cells[j+1,i+1]); + end; + end; + TRED2(Matrix1,size,avector,bvector); + for i := 0 to size-1 do + begin + for j := 0 to size-1 do + begin + Matrix2[i,j] := 0.0; + if i = j then Matrix2[i,j] := avector[i]; + if i < size-1 then Matrix2[i,i+1] := bvector[i+1]; + if i > 0 then Matrix2[i,i-1] := bvector[i]; + end; + end; + + // Replace original matrix with tridiagonalized matrix + case CurrentGrid of + 1 : begin + for i := 0 to size-1 do + for j := 0 to size-1 do + Grid1.Cells[j+1,i+1] := FloatToStr(Matrix2[i,j]); + end; + 2 : begin + for i := 0 to size-1 do + for j := 0 to size-1 do + Grid2.Cells[j+1,i+1] := FloatToStr(Matrix2[i,j]); + end; + 3 : begin + for i := 0 to size-1 do + for j := 0 to size-1 do + Grid3.Cells[j+1,i+1] := FloatToStr(Matrix2[i,j]); + end; + 4 : begin + for i := 0 to size-1 do + for j := 0 to size-1 do + Grid4.Cells[j+1,i+1] := FloatToStr(Matrix2[i,j]); + end; + end; + + Op1Edit.Text := 'Tridiagonalize'; + opstr := IntToStr(CurrentGrid) + '-'; + Op2Edit.Text := Op2Edit.Text; + opstr := opstr + 'Tridiagonalize:' + IntToStr(CurrentGrid) + '-' + Op2Edit.Text; + if ScriptOp = false then + begin + prmptstr := 'Save result as: '; + defaultstr := 'TriDiag'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'TriDiag'; + if Length(info) > 0 then Op3Edit.Text := info + else Op3Edit.Text := 'TriDiag'; + opstr := opstr + ':' + IntToStr(CurrentGrid) + '-' + Op3Edit.Text; + ScriptList.Items.Add(opstr); + CurrentObjName := Op3Edit.Text; + CurrentObjType := 1; + if clickedok then SaveFileMnuClick(Self); + case CurrentGrid of + 1 : MatOneEdit.Text := Op3Edit.Text; + 2 : MatTwoEdit.Text := Op3Edit.Text; + 3 : MatThreeEdit.Text := Op3Edit.Text; + 4 : MatFourEdit.Text := Op3Edit.Text; + end; + ComboAdd(CurrentObjName); + end; + // deallocate memory + Matrix4 := nil; + Matrix3 := nil; + avector := nil; + bvector := nil; +end; + +procedure Tmatmanfrm.ULDecompMnuClick(Sender: TObject); +label emsg; +var + size : integer; + i, j : integer; + prmptstr, info : string; + intvector : DynIntVec; + scaler : double; + lowername, uppername : string; + clickedok1, clickedok2 : boolean; + defaultstr : string; +begin + if CurrentGrid = 0 then exit; + if CurrentObjType <> 1 then +emsg: + begin + ShowMessage('Error - Selected grid does not contain a symetric matrix.'); + exit; + end; + case CurrentGrid of + 1 : begin + if Rows1 <> Cols1 then goto emsg; + size := Rows1; + Op2Edit.Text := MatOneEdit.Text; + end; + 2 : begin + if Rows2 <> Cols2 then goto emsg; + size := Rows2; + Op2Edit.Text := MatTwoEdit.Text; + end; + 3 : begin + if Rows3 <> Cols3 then goto emsg; + size := Rows3; + Op2Edit.Text := MatThreeEdit.Text; + end; + 4 : begin + if Rows4 <> Cols4 then goto emsg; + size := Rows4; + Op2Edit.Text := MatFourEdit.Text; + end; + end; + + // allocate memory + setlength(Matrix1,size,size); + setlength(Matrix2,size,size); + setlength(Matrix3,size,size); + setlength(Matrix4,size,size); + setlength(intvector,size); + + // store data to be decomposed in Matrix1 + case CurrentGrid of + 1 : begin + for i := 0 to size - 1 do + for j := 0 to size - 1 do + Matrix1[i,j] := StrToFloat(Grid1.Cells[j+1,i+1]); + end; + 2 : begin + for i := 0 to size - 1 do + for j := 0 to size - 1 do + Matrix1[i,j] := StrToFloat(Grid2.Cells[j+1,i+1]); + end; + 3 : begin + for i := 0 to size - 1 do + for j := 0 to size - 1 do + Matrix1[i,j] := StrToFloat(Grid3.Cells[j+1,i+1]); + end; + 4 : begin + for i := 0 to size - 1 do + for j := 0 to size - 1 do + Matrix1[i,j] := StrToFloat(Grid4.Cells[j+1,i+1]); + end; + end; + + // decompose + LUDCMP(Matrix1,size,intvector,scaler); + for i := 0 to size-1 do + for j := 0 to size-1 do + Matrix2[i,j] := Matrix1[i,j]; + { store in left and right triangular matrices } + for i := 0 to size-1 do + begin + for j := 0 to size-1 do + begin + Matrix3[i,j] := 0.0; + Matrix4[i,j] := 0.0; + end; + end; + for i := 0 to size-1 do // row + begin + for j := 0 to i do + Matrix3[i,j] := Matrix2[i,j]; // lower matrix + Matrix3[i,i] := 1.0; + end; + for i := 0 to size -1 do + for j := i to Size-1 do + Matrix4[i,j] := Matrix2[i,j]; // upper matrix + + // Place lower in grid1 + Grid1.RowCount := size + 1; + Grid1.ColCount := size + 1; + Rows1 := size; + Cols1 := size; + for i := 0 to size-1 do + for j := 0 to size-1 do + Grid1.Cells[j+1,i+1] := FloatToStr(Matrix3[i,j]); + MatOneEdit.Text := 'LowerDecomp'; + // place upper in grid2 + Grid2.RowCount := size + 1; + Grid2.ColCount := size + 1; + Rows2 := size; + Cols2 := size; + for i := 0 to size-1 do + for j := 0 to size-1 do + Grid2.Cells[j+1,i+1] := FloatToStr(Matrix4[i,j]); + MatTwoEdit.Text := 'UpperDecomp'; + //save combined upper and lower in grid3 + Grid3.RowCount := size + 1; + Grid3.ColCount := size + 1; + Rows3 := size; + Cols3 := size; + for i := 0 to size - 1 do + for j := 0 to size-1 do + Grid3.Cells[j+1,i+1] := FloatToStr(Matrix2[i,j]); + MatThreeEdit.Text := 'LUMatrix'; + // save permutations in grid4 + grid4.RowCount := size + 1; + Grid4.ColCount := 2; + Rows4 := size; + Cols4 := 1; + for i := 0 to size-1 do Grid4.Cells[1,i+1] := IntToStr(intvector[i] + 1); + MatFourEdit.Text := 'RowPermutations'; + + Op1Edit.Text := 'UpLowDecomp'; + opstr := IntToStr(CurrentGrid) + '-'; + Op2Edit.Text := ExtractFileName(Op2Edit.Text); + opstr := opstr + 'UpLowDecomp:' + IntToStr(CurrentGrid) + '-' + Op2Edit.Text; + if ScriptOp = false then + begin + prmptstr := 'Save lower matrix as: '; + defaultstr := 'lowermat'; + clickedok1 := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok1 then info := defaultstr else info := 'lowermat'; + if Length(info) > 0 then lowername := info + else lowername := 'lowermat'; + prmptstr := 'Save upper matrix as: '; + defaultstr := 'uppermat'; + clickedok2 := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok2 then info := defaultstr else info := 'uppermat'; + if Length(info) > 0 then uppername := info + else uppername := 'uppermat'; + opstr := opstr + ':' + IntToStr(1) + '-' + lowername; + opstr := opstr + ':' + IntToStr(2) + '-' + uppername; + ScriptList.Items.Add(opstr); + CurrentObjName := lowername; + CurrentObjType := 1; + CurrentGrid := 1; + MatOneEdit.Text := lowername; + ComboAdd(CurrentObjName); + if clickedok1 then SaveFileMnuClick(Self); + CurrentObjName := uppername; + CurrentObjType := 1; + CurrentGrid := 2; + MatTwoEdit.Text := uppername; + ComboAdd(CurrentObjName); + if clickedok2 then SaveFileMnuClick(Self); + end; + // deallocate memory + intvector := nil; + Matrix4 := nil; + Matrix3 := nil; + Matrix2 := nil; + Matrix1 := nil; +end; + +procedure Tmatmanfrm.Vec2DiagMnuClick(Sender: TObject); +var + i, vecgrid, matgrid : integer; + info, prmptstr : string; +begin + if scriptop = true then + begin + vecgrid := 1; + matgrid := 2; + end + else begin + prmptstr := 'Insert the vector from grid '; + info := InputBox('VECTOR GRID',prmptstr,IntToStr(CurrentGrid)); + vecgrid := StrToInt(info); + prmptstr := 'into the matrix diagonal in grid '; + info := InputBox('MATRIX GRID',prmptstr,IntToStr(CurrentGrid)); + matgrid := StrToInt(info); + end; + case vecgrid of + 1 : Op2Edit.Text := MatOneEdit.Text; + 2 : Op2Edit.Text := MatTwoEdit.Text; + 3 : Op2Edit.Text := MatThreeEdit.Text; + 4 : Op2Edit.Text := MatFourEdit.Text; + end; + + case matgrid of + 1 : begin + Op3Edit.Text := MatOneEdit.Text; + case vecgrid of + 2 : begin + if Rows2 > Cols2 then + for i := 1 to Rows2 do Grid1.Cells[i,i] := Grid2.Cells[1,i] + else for i := 1 to Cols2 do Grid1.Cells[i,i] := Grid2.Cells[i,1]; + end; + 3 : begin + if Rows3 > Cols3 then + for i := 1 to Rows3 do Grid1.Cells[i,i] := Grid3.Cells[1,i] + else for i := 1 to Cols3 do Grid1.Cells[i,i] := Grid3.Cells[i,1]; + end; + 4 : begin + if Rows4 > Cols4 then + for i := 1 to Rows4 do Grid1.Cells[i,i] := Grid4.Cells[1,i] + else for i := 1 to Cols4 do Grid1.Cells[i,i] := Grid4.Cells[i,1]; + end; + end; + end; + 2 : begin + Op3Edit.Text := MatTwoEdit.Text; + case vecgrid of + 1 : begin + if Rows1 > Cols1 then + for i := 1 to Rows1 do Grid2.Cells[i,i] := Grid1.Cells[1,i] + else for i := 1 to Cols1 do Grid2.Cells[i,i] := Grid1.Cells[i,1]; + end; + 3 : begin + if Rows3 > Cols3 then + for i := 1 to Rows3 do Grid2.Cells[i,i] := Grid3.Cells[1,i] + else for i := 1 to Cols3 do Grid2.Cells[i,i] := Grid3.Cells[i,1]; + end; + 4 : begin + if Rows4 > Cols4 then + for i := 1 to Rows4 do Grid2.Cells[i,i] := Grid4.Cells[1,i] + else for i := 1 to Cols4 do Grid2.Cells[i,i] := Grid4.Cells[i,1]; + end; + end; + end; + 3 : begin + Op3Edit.Text := MatThreeEdit.Text; + case vecgrid of + 1 : begin + if Rows1 > Cols1 then + for i := 1 to Rows1 do Grid3.Cells[i,i] := Grid1.Cells[1,i] + else for i := 1 to Cols1 do Grid3.Cells[i,i] := Grid1.Cells[i,1]; + end; + 2 : begin + if Rows2 > Cols2 then + for i := 1 to Rows2 do Grid3.Cells[i,i] := Grid2.Cells[1,i] + else for i := 1 to Cols2 do Grid3.Cells[i,i] := Grid2.Cells[i,1]; + end; + 4 : begin + if Rows4 > Cols4 then + for i := 1 to Rows4 do Grid3.Cells[i,i] := Grid4.Cells[1,i] + else for i := 1 to Cols4 do Grid3.Cells[i,i] := Grid4.Cells[i,1]; + end; + end; + end; + 4 : begin + Op3Edit.Text := MatFourEdit.Text; + case vecgrid of + 1 : begin + if Rows1 > Cols1 then + for i := 1 to Rows1 do Grid4.Cells[i,i] := Grid1.Cells[1,i] + else for i := 1 to Cols1 do Grid4.Cells[i,i] := Grid1.Cells[i,1]; + end; + 2 : begin + if Rows2 > Cols2 then + for i := 1 to Rows2 do Grid4.Cells[i,i] := Grid2.Cells[1,i] + else for i := 1 to Cols2 do Grid4.Cells[i,i] := Grid2.Cells[i,1]; + end; + 3 : begin + if Rows3 > Cols3 then + for i := 1 to Rows3 do Grid4.Cells[i,i] := Grid3.Cells[1,i] + else for i := 1 to Cols3 do Grid4.Cells[i,i] := Grid3.Cells[i,1]; + end; + end; + end; + end; // case matgrid + Op1Edit.Text := 'VecToDiag'; + + if scriptop = false then + begin + opstr := IntToStr(CurrentGrid) + '-' + 'VecToDiag:'; + Op2Edit.Text := IntToStr(vecgrid) + '-' + Op2Edit.Text; + opstr := opstr + Op2Edit.Text; + opstr := opstr + ':' + IntToStr(matgrid) + '-' + Op3Edit.Text; + ScriptList.Items.Add(opstr); + CurrentGrid := matgrid; + CurrentObjName := Op3Edit.Text; + CurrentObjType := 1; // column vector + SaveFileMnuClick(Self); + ComboAdd(CurrentObjName); + end; +end; + +procedure Tmatmanfrm.VecInmnuClick(Sender: TObject); +var + instr : string; + i, j : integer; + +begin + instr := InputBox('GRID?','Which grid no. (1-4):','1'); + CurrentGrid := StrToInt(instr); + if ((CurrentGrid < 1) or (CurrentGrid > 4)) then CurrentGrid := 1; + GridNoEdit.Text := IntToStr(CurrentGrid); + instr := InputBox('TYPE','Row or Column Vector','Column'); + if instr = 'Column' then CurrentObjType := 2 else CurrentObjType := 3; + if CurrentObjType = 3 then // row vector + begin + instr := InputBox('NAME','Object name:','ARowVector'); + CurrentObjName := instr; + Rows := 1; + instr := InputBox('RowVector','No. of elements = ','3'); + Cols := StrToInt(instr); + RowVecCount := RowVecCount + 1; + RowVecsBox.Items.Add(CurrentObjName); + case CurrentGrid of + 1 : begin + Rows1 := Rows; + Cols1 := Cols; + Grid1.ColCount := Cols1 + 1; + Grid1.RowCount := 2; + MatOneEdit.Text := CurrentObjName; + for i := 0 to Rows1 do + for j := 0 to Cols1 do + Grid1.Cells[j,i] := ''; + for i := 1 to Cols1 do Grid1.Cells[i,0] := 'Col.'+ IntToStr(i); + for i := 1 to Rows1 do Grid1.Cells[0,i] := 'Row' + IntToStr(i); + end; + 2 : begin + Rows2 := Rows; + Cols2 := Cols; + Grid2.ColCount := Cols2 + 1; + Grid2.RowCount := 2; + MatTwoEdit.Text := CurrentObjName; + for i := 0 to Rows2 do + for j := 0 to Cols2 do + Grid2.Cells[j,i] := ''; + for i := 1 to Cols2 do Grid2.Cells[i,0] := 'Col.'+ IntToStr(i); + for i := 1 to Rows2 do Grid2.Cells[0,i] := 'Row' + IntToStr(i); + end; + 3 : begin + Rows3 := Rows; + Cols3 := Cols; + Grid3.ColCount := Cols3 + 1; + Grid3.RowCount := 2; + MatThreeEdit.Text := CurrentObjName; + for i := 0 to Rows3 do + for j := 0 to Cols3 do + Grid3.Cells[j,i] := ''; + for i := 1 to Cols3 do Grid3.Cells[i,0] := 'Col.'+ IntToStr(i); + for i := 1 to Rows3 do Grid3.Cells[0,i] := 'Row' + IntToStr(i); + end; + 4 : begin + Rows4:= Rows; + Cols4:= Cols; + Grid4.ColCount := Cols4+ 1; + Grid4.RowCount := 2; + MatFourEdit.Text := CurrentObjName; + for i := 0 to Rows4 do + for j := 0 to Cols4 do + Grid4.Cells[j,i] := ''; + for i := 1 to Cols4 do Grid4.Cells[i,0] := 'Col.'+ IntToStr(i); + for i := 1 to Rows4 do Grid4.Cells[0,i] := 'Row' + IntToStr(i); + end; + end; // case + Op1Edit.Text := 'RowVecInput'; + Op2Edit.Text := CurrentObjName; + Op3Edit.Text := ''; + end + else // column vector input + begin + instr := InputBox('NAME','Object name:','AColVector'); + CurrentObjName := instr; + Cols := 1; + instr := InputBox('ColumnVector','No. of elements = ','3'); + Rows := StrToInt(instr); + case CurrentGrid of + 1 : begin + MatOneEdit.Text := CurrentObjName; + Cols1 := Cols; + Rows1 := Rows; + Grid1.ColCount := 2; + Grid1.RowCount := Rows1 + 1; + for i := 0 to Rows1 do + for j := 0 to Cols1 do + Grid1.Cells[j,i] := ''; + for i := 1 to Cols1 do Grid1.Cells[i,0] := 'Col.'+ IntToStr(i); + for i := 1 to Rows1 do Grid1.Cells[0,i] := 'Row' + IntToStr(i); + end; + 2 : begin + MatTwoEdit.Text := CurrentObjName; + Cols2 := Cols; + Rows2 := Rows; + Grid2.ColCount := 2; + Grid2.RowCount := Rows2 + 1; + for i := 0 to Rows2 do + for j := 0 to Cols2 do + Grid2.Cells[j,i] := ''; + for i := 1 to Cols2 do Grid2.Cells[i,0] := 'Col.'+ IntToStr(i); + for i := 1 to Rows2 do Grid2.Cells[0,i] := 'Row' + IntToStr(i); + end; + 3 : begin + MatThreeEdit.Text := CurrentObjName; + Cols3 := Cols; + Rows3 := Rows; + Grid3.ColCount := 2; + Grid3.RowCount := Rows3 + 1; + for i := 0 to Rows3 do + for j := 0 to Cols3 do + Grid3.Cells[j,i] := ''; + for i := 1 to Cols3 do Grid3.Cells[i,0] := 'Col.'+ IntToStr(i); + for i := 1 to Rows3 do Grid3.Cells[0,i] := 'Row' + IntToStr(i); + end; + 4 : begin + MatFourEdit.Text := CurrentObjName; + Cols4 := Cols; + Rows4 := Rows; + Grid4.ColCount := 2; + Grid4.RowCount := Rows4 + 1; + for i := 0 to Rows4 do + for j := 0 to Cols4 do + Grid4.Cells[j,i] := ''; + for i := 1 to Cols4 do Grid4.Cells[i,0] := 'Col.'+ IntToStr(i); + for i := 1 to Rows4 do Grid4.Cells[0,i] := 'Row' + IntToStr(i); + end; + end; // case + ColVecCount := ColVecCount + 1; + ColVecsBox.Items.Add(CurrentObjName); + Op1Edit.Text := 'ColVecInput'; + Op2Edit.Text := CurrentObjName; + Op3Edit.Text := ''; + end; + case CurrentGrid of + 1 : Grid1.SetFocus; + 2 : Grid2.SetFocus; + 3 : Grid3.SetFocus; + 4 : Grid4.SetFocus; + end; +end; + +procedure Tmatmanfrm.VecPrintMnuClick(Sender: TObject); +begin + MatPrintMnuClick(Self); +end; + +procedure Tmatmanfrm.VecRecipMnuClick(Sender: TObject); +var + vectype, i, j : integer; + prmptstr, info, priorobjname : string; + clickedok : boolean; + defaultstr : string; +begin + CurrentObjName := 'VectorRecips'; + case Currentgrid of + 1 : begin + priorobjname := MatOneEdit.Text; + if Rows1 > Cols1 then vectype := 2 else vectype := 3; + for i := 1 to Rows1 do + begin + for j := 1 to Cols1 do + begin + if StrToFloat(Grid1.Cells[j,i]) = 0.0 then + ShowMessage('ERROR - attempt to divide by zero!') + else + Grid1.Cells[j,i] := FloatToStr(1.0 /StrToFloat(Grid1.Cells[j,i])); + end; + end; + MatOneEdit.Text := CurrentObjName; + end; + 2 : begin + priorobjname := MatTwoEdit.Text; + if Rows2 > Cols2 then vectype := 2 else vectype := 3; + for i := 1 to Rows2 do + begin + for j := 1 to Cols2 do + begin + if StrToFloat(Grid2.Cells[j,i]) = 0.0 then + ShowMessage('ERROR - attempt to divide by zero!') + else + Grid2.Cells[j,i] := FloatToStr(1.0 /StrToFloat(Grid2.Cells[j,i])); + end; + end; + MatTwoEdit.Text := CurrentObjName; + end; + 3 : begin + priorobjname := MatThreeEdit.Text; + if Rows3 > Cols3 then vectype := 2 else vectype := 3; + for i := 1 to Rows3 do + begin + for j := 1 to Cols3 do + begin + if StrToFloat(Grid3.Cells[j,i]) = 0.0 then + ShowMessage('ERROR - attempt to divide by zero!') + else + Grid3.Cells[j,i] := FloatToStr(1.0 /StrToFloat(Grid3.Cells[j,i])); + end; + end; + MatThreeEdit.Text := CurrentObjName; + end; + 4 : begin + priorobjname := MatFourEdit.Text; + if Rows4 > Cols4 then vectype := 2 else vectype := 3; + for i := 1 to Rows4 do + begin + for j := 1 to Cols4 do + begin + if StrToFloat(Grid4.Cells[j,i]) = 0.0 then + ShowMessage('ERROR - attempt to divide by zero!') + else + Grid4.Cells[j,i] := FloatToStr(1.0 /StrToFloat(Grid4.Cells[j,i])); + end; + end; + MatFourEdit.Text := CurrentObjName; + end; + end; // end case + + if ScriptOp = false then + begin + opstr := IntToStr(Currentgrid) + '-' + 'VectorRecip:'; + opstr := opstr + IntToStr(Currentgrid) + '-' + priorobjname; + prmptstr := 'Save recipricol of vector as: '; + defaultstr := 'VectorRecip'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'VectorRecip'; + if Length(info) > 0 then Op3Edit.Text := info + else begin + Op3Edit.Text := 'VectorRecip'; + info := 'VectorRecip'; + end; + opstr := opstr + ':' + IntToStr(CurrentGrid) + '-' + Op3Edit.Text; + ScriptList.Items.Add(opstr); + CurrentObjName := info; + CurrentObjType := vectype; + ComboAdd(CurrentObjName); + if clickedok then SaveFileMnuClick(Self); + end; +end; + +procedure Tmatmanfrm.VecSqrtMnuClick(Sender: TObject); +var + vectype, i, j : integer; + prmptstr, info, priorobjname : string; + clickedok : boolean; + defaultstr : string; +begin + CurrentObjName := 'sqrtvector'; + case Currentgrid of + 1 : begin + priorobjname := MatOneEdit.Text; + if ExtractFileExt(priorobjname) = '.RVE' then vectype := 3 else vectype := 2; + for i := 1 to Rows1 do + begin + for j := 1 to Cols1 do + begin + if StrToFloat(Grid1.Cells[j,i]) < 0.0 then + ShowMessage('ERROR - attempt to take root of a negative value!') + else + Grid1.Cells[j,i] := FloatToStr(sqrt(abs(StrToFloat(Grid1.Cells[j,i])))); + end; + end; + MatOneEdit.Text := CurrentObjName; + end; + 2 : begin + priorobjname := MatTwoEdit.Text; + if ExtractFileExt(priorobjname) = '.RVE' then vectype := 3 else vectype := 2; + for i := 1 to Rows2 do + begin + for j := 1 to Cols2 do + begin + if StrToFloat(Grid2.Cells[j,i]) < 0.0 then + ShowMessage('ERROR - attempt to take root of a negative value!') + else + Grid2.Cells[j,i] := FloatToStr(sqrt(abs(StrToFloat(Grid2.Cells[j,i])))); + end; + end; + MatTwoEdit.Text := CurrentObjName; + end; + 3 : begin + priorobjname := MatThreeEdit.Text; + if ExtractFileExt(priorobjname) = '.RVE' then vectype := 3 else vectype := 2; + for i := 1 to Rows3 do + begin + for j := 1 to Cols3 do + begin + if StrToFloat(Grid3.Cells[j,i]) < 0.0 then + ShowMessage('ERROR - attempt to take root of a negative value!') + else + Grid3.Cells[j,i] := FloatToStr(sqrt(abs(StrToFloat(Grid3.Cells[j,i])))); + end; + end; + MatThreeEdit.Text := CurrentObjName; + end; + 4 : begin + priorobjname := MatFourEdit.Text; + if ExtractFileExt(priorobjname) = '.RVE' then vectype := 3 else vectype := 2; + for i := 1 to Rows4 do + begin + for j := 1 to Cols4 do + begin + if StrToFloat(Grid4.Cells[j,i]) < 0.0 then + ShowMessage('ERROR - attempt to take root of a negative value!') + else + Grid4.Cells[j,i] := FloatToStr(sqrt(abs(StrToFloat(Grid4.Cells[j,i])))); + end; + end; + MatFourEdit.Text := CurrentObjName; + end; + end; // end case + + if ScriptOp = false then + begin + prmptstr := 'Save square root of vector as: '; + defaultstr := 'SqrtVec'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'SqrtVec'; + if Length(info) > 0 then + begin + Op3Edit.Text := ':' + IntToStr(CurrentGrid) + '-' + info; + end + else begin + Op3Edit.Text := 'SqrtVec'; + info := 'SqrtVec'; + end; + opstr := IntToStr(Currentgrid) + '-' + 'sqrtvector:'; + opstr := opstr + IntToStr(Currentgrid) + '-' + priorobjname; + opstr := opstr + Op3Edit.Text; + ScriptList.Items.Add(opstr); + CurrentObjName := info; + CurrentObjType := vectype; + ComboAdd(CurrentObjName); + if clickedok then SaveFileMnuClick(Self); + case CurrentGrid of + 1 : MatOneEdit.Text := info; + 2 : MatTwoEdit.Text := info; + 3 : MatThreeEdit.Text := info; + 4 : MatFourEdit.Text := info; + end; + end; +end; + +procedure Tmatmanfrm.VecTransMnuClick(Sender: TObject); +label emsg; +var + i, j, transgrid, vectype : integer; + prmptstr, info : string; + clickedok : boolean; + defaultstr : string; +begin + if CurrentGrid = 0 then exit; + if ((CurrentObjType = 1) or (CurrentObjType = 4)) then +emsg: + begin + ShowMessage('Error - Selected grid does not contain a vector.'); + exit; + end; + if ScriptOp = true then CurrentGrid := 1; + transgrid := CurrentGrid + 1; + if transgrid > 4 then transgrid := 1; + case CurrentGrid of + 1 : begin + Op2Edit.Text := MatOneEdit.Text; + // get type of resulting vector + if Rows1 = 1 then vectype := 2 else vectype := 3; + Grid2.RowCount := Grid1.ColCount; + Grid2.ColCount := Grid1.RowCount; + Rows2 := Grid2.RowCount-1; + Cols2 := Grid2.ColCount-1; + MatTwoEdit.Text := 'VectorTrans'; + for i := 1 to rows1 do + for j := 1 to cols1 do + Grid2.Cells[i,j] := Grid1.Cells[j,i]; + end; + 2 : begin + Op2Edit.Text := MatTwoEdit.Text; + if Rows2 = 1 then vectype := 2 else vectype := 3; + Grid3.RowCount := Grid2.ColCount; + Grid3.ColCount := Grid2.RowCount; + Rows3 := Grid3.RowCount-1; + Cols3 := Grid3.ColCount-1; + MatThreeEdit.Text := 'VectorTrans'; + for i := 1 to rows2 do + for j := 1 to cols2 do + Grid3.Cells[i,j] := Grid2.Cells[j,i]; + end; + 3 : begin + Op2Edit.Text := MatThreeEdit.Text; + if Rows3 = 1 then vectype := 2 else vectype := 3; + Grid4.RowCount := Grid3.ColCount; + Grid4.ColCount := Grid3.RowCount; + Rows4 := Grid4.RowCount-1; + Cols4 := Grid4.ColCount-1; + MatFourEdit.Text := 'VectorTrans'; + for i := 1 to rows3 do + for j := 1 to cols3 do + Grid4.Cells[i,j] := Grid3.Cells[j,i]; + end; + 4 : begin + Op2Edit.Text := MatFourEdit.Text; + if Rows4 = 1 then vectype := 2 else vectype := 3; + Grid1.RowCount := Grid4.ColCount; + Grid1.ColCount := Grid4.RowCount; + Rows1 := Grid4.RowCount-1; + Cols1 := Grid4.ColCount-1; + MatOneEdit.Text := 'VectorTrans'; + for i := 1 to rows4 do + for j := 1 to cols4 do + Grid1.Cells[i,j] := Grid4.Cells[j,i]; + end; + end; + Op1Edit.Text := 'Vec.Transpose'; + opstr := IntToStr(CurrentGrid) + '-' + 'VectorTranspose:'; + opstr := opstr + IntToStr(CurrentGrid) + '-' + Op2Edit.Text; + if ScriptOp = false then + begin + prmptstr := 'Save vector transpose as: '; + defaultstr := 'VecTrans'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'VecTrans'; + if Length(info) > 0 then + begin + Op3Edit.Text := info; + end + else begin + Op3Edit.Text := 'VecTrans'; + info := 'VecTrans'; + end; + opstr := opstr + ':' + IntToStr(transgrid) + '-' + Op3Edit.Text; + ScriptList.Items.Add(opstr); + CurrentObjName := info; + CurrentObjType := vectype; + CurrentGrid := transgrid; + ComboAdd(CurrentObjName); + if clickedok then SaveFileMnuClick(Self); + case transgrid of + 1 : MatOneEdit.Text := info; + 2 : MatTwoEdit.Text := info; + 3 : MatThreeEdit.Text := info; + 4 : MatFourEdit.Text := info; + end; + end; +end; + +procedure Tmatmanfrm.VecXscalarMnuClick(Sender: TObject); +// multiplication of a scaler times a vector +var + i, j, vectype : integer; + precols, postcols, prerows, postrows : integer; + info : string; + pregrid, postgrid, resultgrid : integer; + prmptstr : string; + premat, postmat, prodmat : DynMat; + clickedok : boolean; + defaultstr : string; +begin + if ScriptOp = false then + begin + prmptstr := 'The scaler is in grid ' + IntToStr(CurrentGrid); + info := inputbox('SCALER',prmptstr,'2'); + if info = '' then exit; + pregrid := StrToInt(info); + prmptstr := 'The vector is in grid ' + IntToStr(CurrentGrid); + info := inputbox('VECTOR',prmptstr,'2'); + if info = '' then exit; + postgrid := StrToInt(info); + info := inputbox('RESULTS INTO','Place results in grid :','3'); + if info = '' then exit; + resultgrid := StrToInt(info); + end + else begin // executing the script + pregrid := 1; + postgrid := 2; + resultgrid := 3; + end; + case pregrid of + 1 : begin + precols := Cols1; + prerows := Rows1; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid1.Cells[j+1,i+1]); + Op2Edit.Text := MatOneEdit.Text; + end; + 2 : begin + precols := Cols2; + prerows := Rows2; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid2.Cells[j+1,i+1]); + Op2Edit.Text := MatTwoEdit.Text; + end; + 3 : begin + precols := Cols3; + prerows := Rows3; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid3.Cells[j+1,i+1]); + Op2Edit.Text := MatThreeEdit.Text; + end; + 4 : begin + precols := Cols4; + prerows := Rows4; + SetLength(premat,prerows,precols); + for i := 0 to prerows-1 do + for j := 0 to precols-1 do + premat[i,j] := StrToFloat(Grid4.Cells[j+1,i+1]); + Op2Edit.Text := MatFourEdit.Text; + end; + end; + case postgrid of + 1 : begin + postcols := Cols1; + postrows := Rows1; + SetLength(postmat,postrows,postcols); + if Cols1 > Rows1 then vectype := 3 else vectype := 2; + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid1.Cells[j+1,i+1]); + Op3Edit.Text := MatOneEdit.Text; + end; + 2 : begin + postcols := Cols2; + postrows := Rows2; + SetLength(postmat,postrows,postcols); + if Cols2 > Rows2 then vectype := 3 else vectype := 2; + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid2.Cells[j+1,i+1]); + Op3Edit.Text := MatTwoEdit.Text; + end; + 3 : begin + postcols := Cols3; + postrows := Rows3; + SetLength(postmat,postrows,postcols); + if Cols3 > Rows3 then vectype := 3 else vectype := 2; + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid3.Cells[j+1,i+1]); + Op3Edit.Text := MatThreeEdit.Text; + end; + 4 : begin + postcols := Cols4; + postrows := Rows4; + SetLength(postmat,postrows,postcols); + if Cols4 > Rows4 then vectype := 3 else vectype := 2; + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + postmat[i,j] := StrToFloat(Grid4.Cells[j+1,i+1]); + Op3Edit.Text := MatFourEdit.Text; + end; + end; + SetLength(prodmat,postrows,postcols); + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + prodmat[i,j] := premat[0,0]*postmat[i,j]; + case resultgrid of + 1 : begin + Grid1.RowCount := postrows+1; + Grid1.ColCount := postcols+1; + Rows1 := postrows; + Cols1 := postcols; + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + Grid1.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to Rows1 do Grid1.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols1 do Grid1.Cells[i,0] := 'Col.' + IntToStr(i); + MatOneEdit.Text := 'Product'; + Op4Edit.Text := MatOneEdit.Text; + end; + 2 : begin + Grid2.RowCount := postrows+1; + Grid2.ColCount := postcols+1; + Rows2 := postrows; + Cols2 := postcols; + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + Grid2.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to Rows2 do Grid2.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols2 do Grid2.Cells[i,0] := 'Col.' + IntToStr(i); + MatTwoEdit.Text := 'Product'; + Op4Edit.Text := MatTwoEdit.Text; + end; + 3 : begin + Grid3.RowCount := postrows+1; + Grid3.ColCount := postcols+1; + Rows3 := postrows; + Cols3 := postcols; + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + Grid3.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to Rows3 do Grid3.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols3 do Grid3.Cells[i,0] := 'Col.' + IntToStr(i); + MatThreeEdit.Text := 'Product'; + Op4Edit.Text := MatThreeEdit.Text; + end; + 4 : begin + Grid4.RowCount := postrows+1; + Grid4.ColCount := postcols+1; + Rows4 := postrows; + Cols4 := postcols; + for i := 0 to postrows-1 do + for j := 0 to postcols-1 do + Grid4.Cells[j+1,i+1] := format('%10.5f',[prodmat[i,j]]); + for i := 1 to Rows4 do Grid4.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to Cols4 do Grid4.Cells[i,0] := 'Col.' + IntToStr(i); + MatFourEdit.Text := 'Product'; + Op4Edit.Text := MatFourEdit.Text; + end; + end; + Op1Edit.Text := 'ScalerxVector'; + if ScriptOp = false then + begin + Op2Edit.Text := ExtractFileName(Op2Edit.Text); + Op3Edit.Text := ExtractFileName(Op3Edit.Text); + Op4Edit.Text := ExtractFileName(Op4Edit.Text); + opstr := IntToStr(CurrentGrid) + '-'; + opstr := opstr + 'ScalerxVector:' + IntToStr(pregrid) + '-' + Op2Edit.Text; + opstr := opstr + ':' + IntToStr(postgrid) + '-' + Op3Edit.Text; + prmptstr := 'Save product as: '; + defaultstr := 'ScalerxVec'; + clickedok := InputQuery('SAVE AS',prmptstr,defaultstr); + if clickedok then info := defaultstr else info := 'ScalerxVec'; + if Length(info) > 0 then + begin + Op4Edit.Text := info; + end + else begin + Op4Edit.Text := 'ScalerxVec'; + info := 'ScalerxVec'; + end; + opstr := opstr + ':' + IntToStr(resultgrid) + '-' + Op4Edit.Text; + ScriptList.Items.Add(opstr); + CurrentObjName := info; + CurrentObjType := vectype; + CurrentGrid := resultgrid; + ComboAdd(CurrentObjName); + if clickedok then SaveFileMnuClick(Self); + case resultgrid of + 1 : MatOneEdit.Text := info; + 2 : MatTwoEdit.Text := info; + 3 : MatThreeEdit.Text := info; + 4 : MatFourEdit.Text := info; + end; + end; + // deallocate memory + prodmat := nil; + postmat := nil; + premat := nil; +end; + +procedure Tmatmanfrm.GetFile(Sender: TObject); +begin + OpenDialog1.Filter := 'Matrix (*.mat)|*.MAT|Col.Vector (*.CVE)|*.CVE|RowVector (*.RVE)|*.RVE|Scaler (*.scl)|*.SCA|All (*.*)|*.*'; + OpenDialog1.FilterIndex := CurrentObjType; + case CurrentObjType of + 1 : OpenDialog1.DefaultExt := '.MAT'; + 2 : OpenDialog1.DefaultExt := '.CVE'; + 3 : OpenDialog1.DefaultExt := '.RVE'; + 4 : OpenDialog1.DefaultExt := '.SCA'; + else OpenDialog1.DefaultExt := '.MAT'; + end; + GridNoEdit.Text := IntToStr(CurrentGrid); + GetGridData(CurrentGrid); +end; + +procedure Tmatmanfrm.GetGridData(gridno: integer); +var + SaveFile : TextFile; + i, j, iRows, iCols : integer; + cellstring : string; +// OpStr : string; + FName : string; + +begin + if OpenDialog1.Execute then + begin + AssignFile(SaveFile, OpenDialog1.FileName); + Reset(SaveFile); + Readln(SaveFile,CurrentObjType); + Readln(SaveFile,CurrentObjName); + CurrentObjName := ExtractFileName(CurrentObjName); + Readln(SaveFile,iRows); + Readln(SaveFile,iCols); + SetLength(Matrix1,iRows,iCols); + for i := 1 to iRows do + begin + for j := 1 to iCols do + begin + Readln(SaveFile,cellstring); + Matrix1[i-1,j-1] := StrToFloat(cellstring); + end; + end; + CloseFile(SaveFile); + end else exit; + + case gridno of + 1 : begin + MatOneEdit.Text := CurrentObjName; + Rows1 := iRows; + Cols1 := iCols; + Grid1.RowCount := iRows + 1; + Grid1.ColCount := iCols + 1; + for i := 1 to iCols do Grid1.Cells[i,0] := 'Col.'+ IntToStr(i); + for i := 1 to iRows do Grid1.Cells[0,i] := 'Row' + IntToStr(i); + for i := 1 to iRows do + for j := 1 to iCols do + Grid1.Cells[j,i] := FloatToStr(Matrix1[i-1,j-1]); + end; + 2 : begin + MatTwoEdit.Text := CurrentObjName; + Rows2 := iRows; + Cols2 := iCols; + Grid2.RowCount := iRows + 1; + Grid2.ColCount := iCols + 1; + for i := 1 to iCols do Grid2.Cells[i,0] := 'Col.'+ IntToStr(i); + for i := 1 to iRows do Grid2.Cells[0,i] := 'Row' + IntToStr(i); + for i := 1 to iRows do + for j := 1 to iCols do + Grid2.Cells[j,i] := FloatToStr(Matrix1[i-1,j-1]); + end; + 3 : begin + MatThreeEdit.Text := CurrentObjName; + Rows3 := iRows; + Cols3 := iCols; + Grid3.RowCount := iRows + 1; + Grid3.ColCount := iCols + 1; + for i := 1 to iCols do Grid3.Cells[i,0] := 'Col.'+ IntToStr(i); + for i := 1 to iRows do Grid3.Cells[0,i] := 'Row' + IntToStr(i); + for i := 1 to iRows do + for j := 1 to iCols do + Grid3.Cells[j,i] := FloatToStr(Matrix1[i-1,j-1]); + end; + 4 : begin + MatFourEdit.Text := CurrentObjName; + Rows4 := iRows; + Cols4 := iCols; + Grid4.RowCount := iRows + 1; + Grid4.ColCount := iCols + 1; + for i := 1 to iCols do Grid4.Cells[i,0] := 'Col.'+ IntToStr(i); + for i := 1 to iRows do Grid4.Cells[0,i] := 'Row' + IntToStr(i); + for i := 1 to iRows do + for j := 1 to iCols do + Grid4.Cells[j,i] := FloatToStr(Matrix1[i-1,j-1]); + end; + end; + FName := ExtractFileName(CurrentObjName); + ComboAdd(FName); + + if ScriptOp = false then + begin + FName := IntToStr(CurrentGrid) + '-' + FName; + OpStr := IntToStr(CurrentGrid) + '-' + 'FileOpen:' + FName; + if ScriptOptsFrm.CheckGroup1.Checked[0] <> true then ScriptList.Items.Add(OpStr); + Op1Edit.Text := 'FileOpen'; + Op2Edit.Text := CurrentObjName; + Op3Edit.Text := ''; + Op4Edit.Text := ''; + end; + + Matrix1 := nil; +end; + +function Tmatmanfrm.sign(a, b: double): double; +begin + IF (b >= 0.0) THEN sign := abs(a) ELSE sign := -abs(a) +end; + +function Tmatmanfrm.max(a, b: double): double; +begin + IF (a > b) THEN max := a ELSE max := b +end; + +procedure Tmatmanfrm.matinv(a, vtimesw, v, w: DynMat; n: integer); +LABEL 1,2,3; + +VAR + ainverse : array of array of double; + m,mp,np,nm,l,k,j,its,i: integer; + z,y,x,scale,s,h,g,f,c,anorm: double; + rv1: array of double; + +begin + setlength(rv1,n); + setlength(ainverse,n,n); + m := n; + mp := n; + np := n; + g := 0.0; + scale := 0.0; + anorm := 0.0; + FOR i := 0 to n-1 DO BEGIN + l := i+1; + rv1[i] := scale*g; + g := 0.0; + s := 0.0; + scale := 0.0; + IF (i <= m-1) THEN BEGIN + FOR k := i to m-1 DO BEGIN + scale := scale+abs(a[k,i]) + END; + IF (scale <> 0.0) THEN BEGIN + FOR k := i to m-1 DO BEGIN + a[k,i] := a[k,i]/scale; + s := s+a[k,i]*a[k,i] + END; + f := a[i,i]; + g := -sign(sqrt(s),f); + h := f*g-s; + a[i,i] := f-g; + IF (i <> n-1) THEN BEGIN + FOR j := l to n-1 DO BEGIN + s := 0.0; + FOR k := i to m-1 DO BEGIN + s := s+a[k,i]*a[k,j] + END; + f := s/h; + FOR k := i to m-1 DO BEGIN + a[k,j] := a[k,j]+ + f*a[k,i] + END + END + END; + FOR k := i to m-1 DO BEGIN + a[k,i] := scale*a[k,i] + END + END + END; + w[i,i] := scale*g; + g := 0.0; + s := 0.0; + scale := 0.0; + IF ((i <= m-1) AND (i <> n-1)) THEN BEGIN + FOR k := l to n-1 DO BEGIN + scale := scale+abs(a[i,k]) + END; + IF (scale <> 0.0) THEN BEGIN + FOR k := l to n-1 DO BEGIN + a[i,k] := a[i,k]/scale; + s := s+a[i,k]*a[i,k] + END; + f := a[i,l]; + g := -sign(sqrt(s),f); + h := f*g-s; + a[i,l] := f-g; + FOR k := l to n-1 DO BEGIN + rv1[k] := a[i,k]/h + END; + IF (i <> m-1) THEN BEGIN + FOR j := l to m-1 DO BEGIN + s := 0.0; + FOR k := l to n-1 DO BEGIN + s := s+a[j,k]*a[i,k] + END; + FOR k := l to n-1 DO BEGIN + a[j,k] := a[j,k] + +s*rv1[k] + END + END + END; + FOR k := l to n-1 DO BEGIN + a[i,k] := scale*a[i,k] + END + END + END; + anorm := max(anorm,(abs(w[i,i])+abs(rv1[i]))) + END; + FOR i := n-1 DOWNTO 0 DO BEGIN + IF (i < n-1) THEN BEGIN + IF (g <> 0.0) THEN BEGIN + FOR j := l to n-1 DO BEGIN + v[j,i] := (a[i,j]/a[i,l])/g + END; + FOR j := l to n-1 DO BEGIN + s := 0.0; + FOR k := l to n-1 DO BEGIN + s := s+a[i,k]*v[k,j] + END; + FOR k := l to n-1 DO BEGIN + v[k,j] := v[k,j]+s*v[k,i] + END + END + END; + FOR j := l to n-1 DO BEGIN + v[i,j] := 0.0; + v[j,i] := 0.0 + END + END; + v[i,i] := 1.0; + g := rv1[i]; + l := i + END; + FOR i := n-1 DOWNTO 0 DO BEGIN + l := i+1; + g := w[i,i]; + IF (i < n-1) THEN BEGIN + FOR j := l to n-1 DO BEGIN + a[i,j] := 0.0 + END + END; + IF (g <> 0.0) THEN BEGIN + g := 1.0/g; + IF (i <> n-1) THEN BEGIN + FOR j := l to n-1 DO BEGIN + s := 0.0; + FOR k := l to m-1 DO BEGIN + s := s+a[k,i]*a[k,j] + END; + f := (s/a[i,i])*g; + FOR k := i to m-1 DO BEGIN + a[k,j] := a[k,j]+f*a[k,i] + END + END + END; + FOR j := i to m-1 DO BEGIN + a[j,i] := a[j,i]*g + END + END ELSE BEGIN + FOR j := i to m-1 DO BEGIN + a[j,i] := 0.0 + END + END; + a[i,i] := a[i,i]+1.0 + END; + FOR k := n-1 DOWNTO 0 DO BEGIN + FOR its := 1 to 30 DO BEGIN + FOR l := k DOWNTO 0 DO BEGIN + nm := l-1; + IF ((abs(rv1[l])+anorm) = anorm) THEN GOTO 2; + IF ((abs(w[nm,nm])+anorm) = anorm) THEN GOTO 1 + END; +1: c := 0.0; + s := 1.0; + FOR i := l to k DO BEGIN + f := s*rv1[i]; + IF ((abs(f)+anorm) <> anorm) THEN BEGIN + g := w[i,i]; + h := sqrt(f*f+g*g); + w[i,i] := h; + h := 1.0/h; + c := (g*h); + s := -(f*h); + FOR j := 0 to m-1 DO BEGIN + y := a[j,nm]; + z := a[j,i]; + a[j,nm] := (y*c)+(z*s); + a[j,i] := -(y*s)+(z*c) + END + END + END; +2: z := w[k,k]; + IF (l = k) THEN BEGIN + IF (z < 0.0) THEN BEGIN + w[k,k] := -z; + FOR j := 0 to n-1 DO BEGIN + v[j,k] := -v[j,k] + END + END; + GOTO 3 + END; + IF (its = 30) THEN BEGIN + showmessage('No convergence in 30 SVDCMP iterations'); + exit; + END; + x := w[l,l]; + nm := k-1; + y := w[nm,nm]; + g := rv1[nm]; + h := rv1[k]; + f := ((y-z)*(y+z)+(g-h)*(g+h))/(2.0*h*y); + g := sqrt(f*f+1.0); + f := ((x-z)*(x+z)+h*((y/(f+sign(g,f)))-h))/x; + c := 1.0; + s := 1.0; + FOR j := l to nm DO BEGIN + i := j+1; + g := rv1[i]; + y := w[i,i]; + h := s*g; + g := c*g; + z := sqrt(f*f+h*h); + rv1[j] := z; + c := f/z; + s := h/z; + f := (x*c)+(g*s); + g := -(x*s)+(g*c); + h := y*s; + y := y*c; + FOR nm := 0 to n-1 DO BEGIN + x := v[nm,j]; + z := v[nm,i]; + v[nm,j] := (x*c)+(z*s); + v[nm,i] := -(x*s)+(z*c) + END; + z := sqrt(f*f+h*h); + w[j,j] := z; + IF (z <> 0.0) THEN BEGIN + z := 1.0/z; + c := f*z; + s := h*z + END; + f := (c*g)+(s*y); + x := -(s*g)+(c*y); + FOR nm := 0 to m-1 DO BEGIN + y := a[nm,j]; + z := a[nm,i]; + a[nm,j] := (y*c)+(z*s); + a[nm,i] := -(y*s)+(z*c) + END + END; + rv1[l] := 0.0; + rv1[k] := f; + w[k,k] := x + END; +3: END; +{ mat_print(m,a,'U matrix'); + mat_print(n,v,'V matrix'); + writeln(lst,'Diagonal values of W inverse matrix'); + for i := 1 to n do + write(lst,1/w[i]:6:3); + writeln(lst); } + for i := 0 to n-1 do + for j := 0 to n-1 do + begin + if w[i,i] < 1.0e-6 then vtimesw[i,j] := 0 + else vtimesw[i,j] := v[i,j] * (1.0 / w[j,j] ); + end; +{ mat_print(n,vtimesw,'V matrix times w inverse '); } + for i := 0 to m-1 do + for j := 0 to n-1 do + begin + ainverse[i,j] := 0.0; + for k := 0 to m-1 do + begin + ainverse[i,j] := ainverse[i,j] + vtimesw[i,k] * a[j,k] + end; + end; +{ mat_print(n,ainverse,'Inverse Matrix'); } + for i := 0 to n-1 do + for j := 0 to n-1 do + a[i,j] := ainverse[i,j]; + ainverse := nil; + rv1 := nil; +end; + +procedure Tmatmanfrm.ResetGrids(Sender: TObject); +var + i, j : integer; + +begin + rows1 := 4; + cols1 := 4; + Grid1.RowCount := 5; + Grid1.ColCount := 5; + for i := 0 to Rows1 do + for j := 0 to Cols1 do + Grid1.Cells[j,i] := ''; + Grid1.Cells[0,0] := 'Row/Col'; + for i := 1 to rows1 do Grid1.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to cols1 do Grid1.Cells[i,0] := 'Col ' + IntToStr(i); + + rows2 := 4; + cols2 := 4; + Grid2.RowCount := 5; + Grid2.ColCount := 5; + for i := 0 to Rows2 do + for j := 0 to Cols2 do + Grid2.Cells[j,i] := ''; + Grid2.Cells[0,0] := 'Row/Col'; + for i := 1 to rows2 do Grid2.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to cols2 do Grid2.Cells[i,0] := 'Col ' + IntToStr(i); + + rows3 := 4; + cols3 := 4; + Grid3.RowCount := 5; + Grid3.ColCount := 5; + for i := 0 to Rows3 do + for j := 0 to Cols3 do + Grid3.Cells[j,i] := ''; + Grid3.Cells[0,0] := 'Row/Col'; + for i := 1 to rows3 do Grid3.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to cols3 do Grid3.Cells[i,0] := 'Col ' + IntToStr(i); + + rows4 := 4; + cols4 := 4; + Grid4.RowCount := 5; + Grid4.ColCount := 5; + for i := 0 to Rows4 do + for j := 0 to Cols4 do + Grid4.Cells[j,i] := ''; + Grid4.Cells[0,0] := 'Row/Col'; + for i := 1 to rows4 do Grid4.Cells[0,i] := 'Row ' + IntToStr(i); + for i := 1 to cols4 do Grid4.Cells[i,0] := 'Col ' + IntToStr(i); + +// ScriptList.Clear; + CurrentObjName := ''; + CurrentObjType := 0; + CurrentGrid := 1; + CurrentObjType := 1; + Op4Edit.Text := ''; + Op1Edit.Text := ''; + Op2Edit.Text := ''; + Op3Edit.Text := ''; + MatOneEdit.Text := ''; + MatTwoEdit.Text := ''; + MatThreeEdit.Text := ''; + MatFourEdit.Text := ''; + MatCount := 0; + ColVecCount := 0; + RowVecCount := 0; + ScaCount := 0; + Saved := true; + ScriptOp := false; + LastScript := 0; + LastGridNo := 1; + GridNoEdit.Text := '1'; + MatricesBox.Clear; + MatricesBox.Text := 'Matrices'; + ColVecsBox.Clear; + ColVecsBox.Text := 'Col.Vectors'; + RowVecsBox.Clear; + RowVecsBox.Text := 'RowVectors'; + ScalarsBox.Clear; + ScalarsBox.Text := 'Scalers'; +// PrntForm.RichEdit.Clear; +end; + +function Tmatmanfrm.DuplicateMat(str: string): boolean; +var + itemcnt : integer; + i : integer; + rslt : boolean; + +begin + rslt := false; + itemcnt := MatricesBox.Items.Count; + if itemcnt > 0 then + begin + for i := 0 to itemcnt - 1 do + if MatricesBox.Items.Strings[i] = str then rslt := true; + end; + Result := rslt; +end; + +function Tmatmanfrm.DuplicateColVec(str: string): boolean; +var + itemcnt : integer; + i : integer; + rslt : boolean; + +begin + rslt := false; + itemcnt := ColVecsbox.Items.Count; + if itemcnt > 0 then + begin + for i := 0 to itemcnt - 1 do + if ColVecsBox.Items.Strings[i] = str then rslt := true; + end; + Result := rslt; +end; + +function Tmatmanfrm.DuplicateRowVec(str: string): boolean; +var + itemcnt : integer; + i : integer; + rslt : boolean; + +begin + rslt := false; + itemcnt := RowVecsBox.Items.Count; + if itemcnt > 0 then + begin + for i := 0 to itemcnt - 1 do + if RowVecsBox.Items.Strings[i] = str then rslt := true; + end; + Result := rslt; +end; + +function Tmatmanfrm.DuplicateScaler(str: string): boolean; +var + itemcnt : integer; + i : integer; + rslt : boolean; + +begin + rslt := false; + itemcnt := scalarsBox.Items.Count; + if itemcnt > 0 then + begin + for i := 0 to itemcnt - 1 do + if ScalarsBox.Items.Strings[i] = str then rslt := true; + end; + Result := rslt; +end; + +procedure Tmatmanfrm.tred2(var a: DynMat; n: integer; var d, e: DynVec); +VAR + L,k,j,i: integer; + scale,hh,h,g,f: double; + +begin + IF (n > 1) THEN + BEGIN + FOR i := n-1 DOWNTO 1 DO + BEGIN + L := i-1; + h := 0.0; + scale := 0.0; + IF (L > 0) THEN + BEGIN + FOR k := 0 to L DO scale := scale+abs(a[i,k]); + IF (scale = 0.0) THEN e[i] := a[i,L] + ELSE BEGIN + FOR k := 0 to L DO + BEGIN + a[i,k] := a[i,k]/scale; + h := h+sqr(a[i,k]) + END; + f := a[i,L]; + g := -sign(sqrt(h),f); + e[i] := scale*g; + h := h-f*g; + a[i,L] := f-g; + f := 0.0; + FOR j := 0 to L DO + BEGIN + (* Next statement can be omitted if eigenvectors not wanted *) + a[j,i] := a[i,j]/h; + g := 0.0; + FOR k := 0 to j DO g := g+a[j,k]*a[i,k]; + IF (L > j) THEN FOR k := j+1 to L DO g := g+a[k,j]*a[i,k]; + e[j] := g/h; + f := f+e[j]*a[i,j] + END; + hh := f/(h+h); + FOR j := 0 to L DO + BEGIN + f := a[i,j]; + g := e[j]-hh*f; + e[j] := g; + FOR k := 0 to j DO a[j,k] := a[j,k]-(f*e[k]+g*a[i,k]); + END; + END; + END ELSE e[i] := a[i,L]; + d[i] := h; + END; + END; + (* Next statement can be omitted if eigenvectors not wanted *) + d[0] := 0.0; + e[0] := 0.0; + FOR i := 0 to n-1 DO + BEGIN + (* Contents of this loop can be omitted if eigenvectors not wanted, + except for statement d[i] := a[i,i]; *) + L := i-1; + IF (d[i] <> 0.0) THEN + BEGIN + FOR j := 0 to L DO + BEGIN + g := 0.0; + FOR k := 0 to L DO g := g+a[i,k]*a[k,j]; + FOR k := 0 to L DO a[k,j] := a[k,j]-g*a[k,i]; + END; + END; + d[i] := a[i,i]; + a[i,i] := 1.0; + IF (L >= 0) THEN + BEGIN + FOR j := 0 to L DO BEGIN + a[i,j] := 0.0; + a[j,i] := 0.0; + END; + END; + END; +end; + +procedure Tmatmanfrm.ludcmp(var a: DynMat; n: integer; var indx: DynIntVec; + var d: double); +CONST tiny=1.0e-20; + +VAR k,j,imax,i: integer; + sum,dum,big: double; + vv: DynVec; + +begin + SetLength(vv,n); + d := 1.0; + FOR i := 0 to n-1 DO BEGIN + big := 0.0; + FOR j := 0 to n-1 DO IF (abs(a[i,j]) > big) THEN big := abs(a[i,j]); + IF (big = 0.0) THEN BEGIN + ShowMessage('Error - Singular matrix!'); + vv := nil; + exit; + END; + vv[i] := 1.0/big; + END; + FOR j := 0 to n-1 DO BEGIN + IF (j > 0) THEN BEGIN + FOR i := 0 to j-1 DO BEGIN + sum := a[i,j]; + IF (i > 0) THEN BEGIN + FOR k := 0 to i-1 DO sum := sum-a[i,k]*a[k,j]; + a[i,j] := sum; + END; + END; + END; + big := 0.0; + FOR i := j to n-1 DO BEGIN + sum := a[i,j]; + IF (j > 0) THEN BEGIN + FOR k := 0 to j-1 DO sum := sum-a[i,k]*a[k,j]; + a[i,j] := sum; + END; + dum := vv[i]*abs(sum); + IF (dum >= big) THEN BEGIN + big := dum; + imax := i; + END; + END; + IF (j <> imax) THEN BEGIN + FOR k := 0 to n-1 DO BEGIN + dum := a[imax,k]; + a[imax,k] := a[j,k]; + a[j,k] := dum; + END; + d := -d; + vv[imax] := vv[j]; + END; + indx[j] := imax; + IF (a[j,j] = 0.0) THEN a[j,j] := tiny; + IF (j <> n-1) THEN BEGIN + dum := 1.0/a[j,j]; + FOR i := j+1 to n-1 DO a[i,j] := a[i,j]*dum; + END + END; + IF (a[n-1,n-1] = 0.0) THEN a[n-1,n-1] := tiny; + vv := nil; +end; + +procedure Tmatmanfrm.DynMatPrint(var xmat: DynMat; rows, cols: integer; + var title: string; var ColHeadings: Dynstrarray); +var + i, j, first, last, nflds : integer; + done : boolean; + outline: string; + valstring: string; + +begin + OutputFrm.RichEdit.Lines.Add(title); + OutputFrm.RichEdit.Lines.Add(''); + nflds := 4; + done := FALSE; + first := 0; + while not done do + begin + OutputFrm.RichEdit.Lines.Add(''); + OutputFrm.RichEdit.Lines.Add(' Columns'); + outline := ' '; + last := first + nflds; + if last >= cols - 1 then + begin + done := TRUE; + last := cols - 1 + end; + for i := first to last do + begin + outline := outline + format('%12s ',[ColHeadings[i]]); + end; + OutputFrm.RichEdit.Lines.Add(outline); + OutputFrm.RichEdit.Lines.Add('Rows'); + for i := 0 to rows-1 do + begin + outline := format('%5d ',[i+1]); + for j := first to last do + begin + valstring := format('%12.3f ',[xmat[i,j]]); + outline := outline + valstring; + end; + OutputFrm.RichEdit.Lines.Add(outline); + end; + OutputFrm.RichEdit.Lines.Add(''); + first := last + 1 + end; + OutputFrm.RichEdit.Lines.Add(''); + OutputFrm.RichEdit.Lines.Add(''); +end; + +procedure Tmatmanfrm.ComboAdd(FileName: String); +var + rslt : boolean; + +begin + if CurrentObjType = 1 then // matrix + begin + rslt := DuplicateMat(FileName); + if rslt = false then + begin + MatricesBox.Items.Add(FileName); + MatCount := MatCount + 1; + end; + end; + + if (CurrentObjType = 2) then // column vector + begin + rslt := DuplicateColVec(FileName); + if rslt = false then + begin + ColVecsBox.Items.Add(FileName); + ColVecCount := ColVecCount + 1; + end; + end; + + if CurrentObjType = 3 then // row vector + begin + rslt := DuplicateRowVec(FileName); + if rslt = false then + begin + RowVecsBox.Items.Add(FileName); + RowVecCount := RowVecCount + 1; + end; + end; + + if CurrentObjType = 4 then // scaler + begin + rslt := DuplicateScaler(FileName); + if rslt = false then + begin + ScalarsBox.Items.Add(FileName); + ScaCount := ScaCount + 1; + end; + end; +end; + +procedure Tmatmanfrm.tqli(var d: DynVec; var e: DynVec; n: integer; + var z: DynMat); +LABEL 1,2; +VAR + m,L,iter,i,k: integer; + s,r,p,g,f,dd,c,b: double; + +begin + IF (n > 1) THEN + BEGIN + FOR i := 1 to n-1 DO e[i-1] := e[i]; + e[n-1] := 0.0; + FOR L := 0 to n-1 DO + BEGIN + iter := 0; +1: FOR m := L to n-2 DO + BEGIN + dd := abs(d[m])+abs(d[m+1]); + IF ((abs(e[m])+ dd) = dd) THEN GOTO 2 + END; + m := n-1; +2: IF (m <> L) THEN + BEGIN + IF (iter = 30) THEN + BEGIN + showmessage('Too many iterations in routine tqli-returning'); + exit; + END; + iter := iter+1; + g := (d[L+1]-d[L])/(2.0*e[L]); + r := sqrt(sqr(g)+1.0); + g := d[m]-d[L]+e[L]/(g+sign(r,g)); + s := 1.0; + c := 1.0; + p := 0.0; + FOR i := m-1 DOWNTO L DO + BEGIN + f := s*e[i]; + b := c*e[i]; + IF (abs(f) >= abs(g)) THEN + BEGIN + c := g/f; + r := sqrt(sqr(c)+1.0); + e[i+1] := f*r; + s := 1.0/r; + c := c*s + END + ELSE BEGIN + s := f/g; + r := sqrt(sqr(s)+1.0); + e[i+1] := g*r; + c := 1.0/r; + s := s*c + END; + g := d[i+1]-p; + r := (d[i]-g)*s+2.0*c*b; + p := s*r; + d[i+1] := g+p; + g := c*r-b; + (* Next loop can be omitted if eigenvectors not wanted *) + FOR k := 0 to n-1 DO + BEGIN + f := z[k,i+1]; + z[k,i+1] := s*z[k,i]+c*f; + z[k,i] := c*z[k,i]-s*f + END + END; + d[L] := d[L]-p; + e[L] := g; + e[m] := 0.0; + GOTO 1 + END; + END; + END; +end; + +procedure Tmatmanfrm.xtqli(var a: DynMat; NP: integer; var d: DynVec; + var f: DynVec; var e: DynVec); +var + i : integer; + sum : double; + +begin + sum := 0.0; + tred2(a, NP, d, e); + tqli(d, e, NP, a); + for i := 0 to NP-1 do + begin + f[i] := 0.0; + sum := sum + d[i]; + end; + for i := 0 to NP-1 do f[i] := (d[i] / sum) * 100.0; +end; + +function Tmatmanfrm.SEVS(nv, nf: integer; C: double; var r: DynMat; + var v: DynMat; var e: DynVec; var p: DynVec; nd: integer): integer; +Label Label12, Label13; +var + i, j, k, M : integer; + t, ee, ev, sum : double; + +begin + // extracts roots and denormal vectors from a symetric matrix. + // Veldman, 1967, page 209 + + t := 0.0; + for i := 0 to nv-1 do t := t + r[i,i]; + for k := 0 to nf-1 do // roots in e(k) and vector in v(.k) + begin + for i := 0 to nv-1 do p[i] := 1.0; + e[k] := 1.0; + for M := 0 to 99 do + begin + for i := 0 to nv-1 do v[i,k] := p[i] / e[k]; + for i := 0 to nv-1 do + begin + sum := 0.0; + for j := 0 to nv-1 do + begin + sum := sum + (r[i,j] * v[j,k]); + end; + p[i] := sum; + end; + ee := 0.0; + for j := 0 to nv-1 do ee := ee + p[j] * v[j,k]; + e[k] := sqrt(abs(ee)); + end; + if (ee < (C * C)) then goto label12; + for i := 0 to nv-1 do + begin + for j := 0 to nv - 1 do r[i,j] := r[i,j] - (v[i,k] * v[j,k]); + end; + end; + goto label13; +label12: + nf := k - 1; +label13: + for i := 0 to nf-1 do p[i] := e[i] / t * 100.0; + ev := 0.0; + for i := 0 to nf-1 do ev := ev + p[i]; + //outform.list1.AddItem "Trace := " & fmtstring(t, 6, 3) & " " & + //fmtstring(ev, 6, 3) & " Pct. of trace extracted by " & fmtstring + //(nf, 3, 0) & " roots." + //lineno := lineno + 1 + result := nf; +end; + +procedure Tmatmanfrm.nonsymroots(var a: DynMat; nv: integer; var nf: integer; + c: double; var v: DynMat; var e: DynVec; var x: DynVec; var t: double; + var ev: double); +Label endit; +var + y, z : DynVec; + ek, e2, d : double; + i, j, k, m : integer; + +begin + // roots and vectors of a non symetric matrix. a is square matrix + // entered and is destroyed in process. nv is number of variables + // (rows and columns )of a. nf is the number of factors to be + // extracted - is output as the number which exceeded c, the + // minimum eigenvalue to be extracted. v is the output matrix of + // column vectors of loadings. e is the output vector of roots. x + // is the percentages of trace for factors. t is the trace of the + // matrix and ev is the percent of trace extracted. + + e2 := 0.0; + setlength(y,nv); + setlength(z,nv); + t := 0.0; + for i := 0 to nv-1 do t := t + a[i,i]; + for k := 0 to nf-1 do + begin + for i := 0 to nv-1 do + begin + x[i] := 1.0; + y[i] := 1.0; + end; + e[k] := 1.0; + ek := 1.0; + for m := 0 to 99 do + begin + for i := 0 to nv-1 do + begin + v[i,k] := x[i] / e[k]; + z[i] := y[i] / ek; + end; + for i := 0 to nv-1 do + begin + x[i] := 0.0; + for j := 0 to nv-1 do x[i] := x[i] + a[i,j] * v[j,k]; + y[i] := 0.0; + for j := 0 to nv-1 do y[i] := y[i] + a[j,i] * z[j]; + end; + e2 := 0.0; + for j := 0 to nv-1 do e2 := e2 + x[j] * v[j,k]; + e[k] := sqrt(abs(e2)); + ek := 0.0; + for j := 0 to nv-1 do ek := ek + y[j] * z[j]; + ek := sqrt(abs(ek)); + end; + if (e2 >= (c * c)) then + begin + d := 0.0; + for j := 0 to nv-1 do d := d + v[j,k] * z[j]; + d := e[k] / d; + for i := 0 to nv-1 do + for j := 0 to nv-1 do + a[i,j] := a[i,j] - v[i,k] * z[j] * d; + end + else + begin + nf := k - 1; + goto endit; + end; + end; +endit: + for i := 0 to nf-1 do x[i] := e[i] / t * 100.0; + ev := 0.0; + for i := 0 to nf-1 do ev := ev + x[i]; + z := nil; + y := nil; +end; + +procedure Tmatmanfrm.OPRINC(S: DynVec; M, IA: integer; var EVAL: DynVec; + var EVEC: DynMat; var COMP: DynMat; var VARPCNT: DynVec; var CL: DynVec; + var CU: DynVec; var IER: integer); +var + i, j, k : integer; + zero, one, rnine, hund, scale, an, sum, sumr, anp, anm : double; + +begin + // Adapted from the IMSL routine OPRINC. S contains the lower half + // of a covariance or correlation matrix (including the diagonal + // values.) It returns eigenvalues in the EVAL vector, eigenvectors + // in the matrix EVEC from the analysis of S. The order of the + // matrix is M and IA roots roots are extracted. Comp is a + // returned M by M component correlation matrix. VARPCNT of length M + // contains percentages of total variance associated with the + // components, in the order of the eigenvalues. On entry, CL is + // the number of subjects on which S is based. On return it + // contains the left 95% confidence bounds on the eigenvalues. CU + // returns the right 95% confidence bounds on the eigenvalues. IER + // is the error flag returned and is zero if there is no error. + // NOTE!! Counting starts at 1, not 0! + + zero := 0.0; + one := 1.0; + rnine := 9.0; + hund := 100.0; + scale := 2.7718585822513; + IER := 0; + an := CL[1]; + for i := 1 to M do + begin + for j := 1 to M do EVEC[i,j] := 0.0; + EVEC[i,i] := 1.0; + end; + k := 0; + for i := 1 to M do + begin + k := k + i; + CL[i] := sqrt(S[k]); + end; + EHOUSS(S, M, EVAL, VARPCNT, CU); + EQRT2S(EVAL, VARPCNT, M, EVEC, IA, IER); + if (IER <> 0) then + begin + UERTST(IER,'OPRINC'); + exit; + end; + EHOBKS(S, M, 1, M, EVEC, IA); + sum := zero; + for i := 1 to M do + begin + if (EVAL[i] < zero) then EVAL[i] := 0; + sum := sum + EVAL[i]; + end; + sumr := hund / sum; + for i := 1 to M do VARPCNT[i] := EVAL[i] * sumr; + // compute COMP (correlations) matrix + for i := 1 to M do + begin + sumr := one / CL[i]; + for j := 1 to M do COMP[i,j] := sqrt(EVAL[j]) * EVEC[i,j] * sumr; + end; + if (an < rnine) then + begin + an := rnine; + IER := 34; + end; + an := sqrt(an-one); + // Compute vector CL + anp := an / (an + scale); + anm := an / (an - scale); + for i := 1 to M do + begin + CL[i] := EVAL[i] * anp; + CU[i] := EVAL[i] * anm; + end; + if (IER <> 0) then UERTST(IER,'OPRINC'); +end; + +procedure Tmatmanfrm.EHOUSS(var A: DynVec; N: integer; var D: DynVec; + var E: DynVec; var E2: DynVec); +Label fifteen, sixtyfive; +var + zero, h, scale, f, g, hh : double; + np1, nn, nbeg, ii, i, j, L, nk, k, jk1, ik, jk, jp1 : integer; + +begin + //Called by OPRINC for obtaining eigenvalues and vectors + // Adapted from the IMSL routine by the same name + //NOTE! Subscripts start at 1, not 0! + + zero := 0.0; + np1 := N + 1; + nn := (N * np1) div 2 - 1; + nbeg := nn + 1 - N; + for ii := 1 to N do // major loop + begin + i := np1 - ii; + L := i - 1; + h := zero; + scale := zero; + if (L >= 1) then + begin + nk := nn; + for k := 1 to L do + begin + scale := scale + abs(A[nk]); + nk := nk - 1; + end; + if (scale <> 0.0) then goto fifteen; + end; + E[i] := zero; + E2[i] := zero; + goto sixtyfive; +fifteen: nk := nn; + for k := 1 to L do + begin + A[nk] := A[nk] / scale; + h := h + (A[nk] * A[nk]); + nk := nk - 1; + end; + E2[i] := scale * scale * h; + f := A[nn]; + g := -DSIGN(sqrt(h),f); + E[i] := scale * g; + h := h - (f * g); + A[nn] := f - g; + if (L <> 1) then + begin + f := zero; + jk1 := 1; + for j := 1 to L do + begin + g := zero; + ik := nbeg + 1; + jk := jk1; + // form element of A * U + for k := 1 to j do + begin + g := g + (A[jk] * A[ik]); + jk := jk + 1; + ik := ik + 1; + end; + jp1 := j + 1; + if (L >= jp1) then + begin + jk := jk + (j - 1); + for k := jp1 to L do + begin + g := g + (A[jk] * A[ik]); + jk := jk + k; + ik := ik + 1; + end; + end; + E[j] := g / h; + f := f + (E[j] * A[nbeg + j]); + jk1 := jk1 + j; + end; // 40 + hh := f / (h + h); + // form reduced A + jk := 1; + for j := 1 to L do + begin + f := A[nbeg + j]; + g := E[j] - hh * f; + E[j] := g; + for k := 1 to j do + begin + A[jk] := A[jk] - (f * E[k]) - (g * A[nbeg + k]); + jk := jk + 1; + end; + end; + end; // end if L <> 1 + for k := 1 to L do A[nbeg+k] := A[nbeg+k] * scale; +sixtyfive: D[i] := A[nbeg+i]; + A[nbeg+i] := h * scale * scale; + nbeg := nbeg - i + 1; + nn := nn - i; + end; // 70 +end; + +function Tmatmanfrm.DSIGN(X, Y: double): double; +begin + if (Y < 0.0) then result := -abs(X) + else result := abs(X); +end; + +function Tmatmanfrm.isign(a, b: integer): integer; +begin + IF (b >= 0) then isign := abs(a) ELSE isign := -abs(a) +end; + +procedure Tmatmanfrm.EQRT2S(var D: DynVec; var E: DynVec; N: integer; + var Z: DynMat; var IZ: integer; var IER: integer); +Label twenty, fiftyfive, fifty, thirtyfive; +var + B, C, F, G, H, P, R, S, RDELP, ONE, ZERO : double; + i1, j1, I, II, J, K, L, L1, M, MM1, MM1PL, IP1 : integer; + +begin + // Adapted from the IMSL routine by the same name + // NOTE! Subscripts start at 1, not 0! + // On input, the vector D of length N contains the diagonal + // elements of the symmetric tridiagonal matrix T. On output, D + // contains the eigenvalues of T in ascending order. On input, the + // vector e of length N contains the sub-diagonal elements of T in + // position 2,...,N. On output, E is destroyed. N -order of + // tridiagonal matrix T. (input) Z -On input, z contains the + // identity matrix of order N. On output, Z contains the + // eigenvector in column J of Z corresponding to the eigenvalue + // D[j]. + // -Input row dimension of matrix Z exactly as specified in the + // calling program. If IZ is less than N, the eigenvectors are not + // computed. In this case, Z is not used. + // IER - Error parameter. + + RDELP := 0.222045E-15; + ONE := 1.0; + ZERO := 0.0; + + // Move the last N-1 elements of E into the first N-1 locations + IER := 0; + if (N = 1) then exit; + for i1 := 2 to N do E[i1-1] := E[i1]; + E[N] := ZERO; + B := ZERO; + F := ZERO; + for L := 1 to N do + begin + J := 0; + H := RDELP * (abs(D[L]) + abs(E[L])); + if (B < H) then B := H; + // Look for small sub-diagonal element + for M := 1 to N do + begin + K := M; + if (abs(E[K]) <= B) then continue; + end; + M := K; + if (M = L) then goto fiftyfive; +twenty: if (J = 30) then + begin + IER := 128 + L; + UERTST(IER,'EQR2S'); + exit; + end; + J := J + 1; + L1 := L + 1; + G := D[L]; + P := (D[L1] - G) / (E[L] + E[L]); + R := abs(P); + if (RDELP * abs(P) < 1.0) then R := sqrt(P * P + ONE); + D[L] := E[L] / (P + DSIGN(R,P)); + H := G - D[L]; + for I := L1 to N do D[I] := D[I] - H; + F := F + H; + // QL Transformation + P := D[M]; + C := ONE; + S := ZERO; + MM1 := M - 1; + MM1PL := MM1 + L; + if (L > MM1) then goto fifty; + for II := L to MM1 do + begin + I := MM1PL - II; + G := C * E[I]; + H := C * P; + if (abs(P) >= abs(E[I])) then + begin + C := E[I] / P; + R := sqrt(C * C + ONE); + E[I + 1] := S * P * R; + S := C / R; + C := ONE / R; + goto thirtyfive; + end; + C := P / E[I]; + R := sqrt(C * C + ONE); + E[I + 1] := S * E[I] * R; + S := ONE / R; + C := C * S; +thirtyfive: P := C * D[I] - S * G; + D[I + 1] := H + S * (C * G + S * D[I]); + if (IZ >= N) then + begin + // Form vector + for K := 1 to N do + begin + H := Z[K,I+1]; + Z[K,I+1] := S * Z[K,I] + C * H; + Z[K,I] := C * Z[K,I] - S * H; + end; + end; + end; // next II +fifty: E[L] := S * P; + D[L] := C * P; + if (abs(E[L]) > B) then goto twenty; +fiftyfive: D[L] := D[L] + F; + end; // next L + // Order Eigenvalues and Eigenvectors + for I := 1 to N do + begin + K := I; + P := D[I]; + IP1 := I + 1; + if (IP1 <= N) then + begin + for J := IP1 to N do + begin + if (D[J] >= P) then continue; + K := J; + P := D[J]; + end; + end; + if (K = I) then exit; + D[K] := D[I]; + D[I] := P; + if (IZ < N) then exit; + for J := 1 to N do + begin + P := Z[J,I]; + Z[J,I] := Z[J,K]; + Z[J,K] := P; + end; + end; // next I +end; + +procedure Tmatmanfrm.EHOBKS(var A: DynVec; N, M1, M2: integer; var Z: DynMat; + IZ: integer); +var + H, S : double; + I, L, J, K, IA : integer; + +begin + // IMSL routine by the same name + if (N = 1) then exit; + for I := 2 to N do + begin + L := I - 1; + IA := (I * L) div 2; + H := A[IA+I]; + if (H = 0.0) then exit; + // Derives eigenvectors M1 to M2 of the original matrix from + // M1 to M2 of the symmetric tridiagonal matrix + for J := M1 to M2 do + begin + S := 0.0; + for K := 1 to L do S := S + (A[IA+K] * Z[K,J]); + S := S / H; + for K := 1 to L do Z[K,J] := Z[K,J] - (S * A[IA+K]); + end; + end; +end; + +procedure Tmatmanfrm.UERTST(IER: integer; aNAME: string); +var + I, IEQDF, LEVEL, LEVOLD, NIN, NMTB : integer; + IEQ, NAMSET, NAMUPK, NAMEQ, ASTRING : string; + +begin + // Substitute for the IMSL routine by the same name + // IER is input error parameter where IER := I + J where + // I := 128 implies terminal error message, + // I := 64 implies warning with fix message, + // I := 32 implies warning message, + // J := error code relevant to calling routine. + // NAME is a character string providing the name of the calling + // routine output is displayed as an application message box + + IEQDF := 0; + LEVEL := 4; + IEQ := '='; + NAMSET := 'UERSET'; + NAMEQ := ' '; + + NAMUPK := NAME; + if (IER <= 999) then + begin + if (LEVEL < 4) then + begin + IEQDF := 0; + exit; + end; + end; + if (IER < -32) then + begin + IEQDF := 1; + NAMEQ := NAMUPK; + exit; + end; + if (IER < 128) then + begin + + end; + + astring := 'Routine '; + astring := astring + NAME; + astring := astring + ' called UERTST with the error code = '; + astring := astring + IntToStr(IER); + ShowMessage(astring); +end; + +procedure Tmatmanfrm.Roots(var RMat: DynMat; NITEMS: integer; + var EIGENVAL: DynVec; var EIGENVEC: DynMat); +var + i, j, L, IER, size, size2, NSUBS : integer; + EVAL : DynVec; + DCORR : DynVec; + PERVAR : DynVec; + ICL : DynVec; + CU : DynVec; + COMP : DynMat; + EVEC : DynMat; + response : string; + +begin + size := ((NITEMS * (NITEMS - 1)) div 2) + NITEMS + 1; + size2 := (NITEMS + 1) * (NITEMS + 1); + setlength(DCORR,size); + setlength(EVAL,size); + setlength(PERVAR,size); + setlength(ICL,size); + setlength(CU,size); + setlength(COMP,size2,size2); + setlength(EVEC,size2,size2); + // Move values up one subscript in array since the roots routine + // counts from 1, not zero. Store only lower half matrix + L := 1; + response := inputbox('Sample Size','No. of cases :','1000'); + NSUBS := StrToInt(response); // number of cases + for i := 0 to NITEMS-1 do + begin + for j := 0 to i do + begin + DCORR[L] := RMat[i,j]; + L := L + 1; + end; + end; + DCORR[0] := 0.0; + + // Get the iegenvalues and vectors of the correlation matrix. + // EVAL holds the values and EVEC holds the vectors + ICL[1] := NSUBS; + OPRINC(DCORR,NITEMS,NITEMS,EVAL,EVEC,COMP,PERVAR,ICL,CU,IER); + for i := 1 to NITEMS do + begin + EIGENVAL[i-1] := EVAL[i]; + for j := 1 to NITEMS do + begin + EIGENVEC[i-1,j-1] := EVEC[i,j]; + end; + end; + EVEC := nil; + COMP := nil; + CU := nil; + ICL := nil; + PERVAR := nil; + DCORR := nil; + EVAL := nil; +end; + +procedure Tmatmanfrm.SymMatRoots(A: DynMat; M: integer; var E: DynVec; + var V: DynMat); +Label one, three, nine, fifteen; +var + L, IT, j, k : integer; + Test, sum1, sum2 : double; + X, Y, Z : DynVec; + +begin +// Adapted from: "Multivariate Data Analysis" by William W. Cooley and Paul +// R. Lohnes, 1971, page 121 + SetLength(X, M); + SetLength(Y, M); + SetLength(Z, M); + sum2 := 0.0; + L := 0; + Test := 0.00000001; +one: + IT := 0; + for j := 0 to M-1 do Y[j] := 1.0; +three: + IT := IT + 1; + for j := 0 to M-1 do + begin + X[j] := 0.0; + for k := 0 to M-1 do X[j] := X[j] + (A[j,k] * Y[k]); + end; + E[L] := X[0]; + Sum1 := 0.0; + for j := 0 to M-1 do + begin + V[j,L] := X[j] / X[0]; + Sum1 := Sum1 + abs(Y[j] - V[j,L]); + Y[j] := V[j,L]; + end; + if (IT - 10) <> 0 then goto nine; + if (Sum2 - Sum1) > 0 then goto nine + else + begin + showmessage('Root not converging. Exiting.'); + exit; + end; +nine: + Sum2 := Sum1; + if (Sum1 - Test) > 0 then goto three; + Sum1 := 0.0; + for j := 0 to M-1 do Sum1 := Sum1 + (V[j,L] * V[j,L]); + Sum1 := sqrt(Sum1); + for j := 0 to M-1 do V[j,L] := V[j,L] / Sum1; + for j := 0 to M-1 do + for k := 0 to M-1 do + A[j,k] := A[j,k] - (V[j,L] * V[k,L] * E[L]); + if ((M-1)-L) <= 0 then goto fifteen; + L := L + 1; + goto one; +fifteen: + Z := nil; + Y := nil; + X := nil; +end; + +function Tmatmanfrm.OpParse(var Operation: string; OpStr: string; + var Op1: string; var Op2: string; var Op3: string; var Opergrid: integer; + var Op1grid: integer; var Op2grid: integer; var Op3grid: integer): integer; +var + colonpos, dashpos : integer; + +begin + Operation := ''; + Op1 := ''; + Op2 := ''; + Op3 := ''; + colonpos := AnsiPos(':',OpStr); + if colonpos = 0 then + begin + ShowMessage('Operation code not found in a script entry.'); + result := 0; + exit; + end; + Operation := copy(OpStr,1,colonpos-1); + OpStr := copy(OpStr,colonpos+1,length(OpStr)); + colonpos := AnsiPos(':',OpStr); + + if colonpos > 0 then // more than one operand + begin + Op1 := copy(OpStr,1,colonpos-1); + OpStr := copy(OpStr,colonpos+1,length(OpStr)); + colonpos := AnsiPos(':',OpStr); + if colonpos > 0 then // more than two operands + begin + Op2 := copy(OpStr,1,colonpos-1); + Op3 := copy(OpStr,colonpos+1,length(OpStr)); + end + else Op2 := copy(OpStr,1,length(OpStr)); + end + else if length(OpStr) > 0 then Op1 := OpStr; + + // Now, strip the grid number for each part (n-) + // first, set defaults + Opergrid := 0; + Op1grid := 0; + Op2grid := 0; + Op3grid := 0; + dashpos := AnsiPos('-',Operation); + if dashpos > 0 then + begin + Opergrid := StrToInt(copy(Operation,dashpos-1,1)); + Operation := copy(Operation,dashpos+1,length(Operation)); + end; + dashpos := AnsiPos('-',Op1); + if dashpos > 0 then + begin + Op1grid := StrToInt(copy(Op1,dashpos-1,1)); + Op1 := copy(Op1,dashpos+1,length(Op1)); + end; + + dashpos := AnsiPos('-',Op2); + if dashpos > 0 then + begin + Op2grid := StrToInt(copy(Op2,dashpos-1,1)); + Op2 := copy(Op2,dashpos+1,length(Op2)); + end; + + dashpos := AnsiPos('-',Op3); + if dashpos > 0 then + begin + Op3grid := StrToInt(copy(Op3,dashpos-1,1)); + Op3 := copy(Op3,dashpos+3,length(Op3)); + end; + + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + Op3Edit.Text := Op2; + Op4Edit.Text := Op3; + result := 1; +end; + +procedure Tmatmanfrm.OperExec; +var + prompt, response : string; + SaveFile : TextFile; + +begin + if Opergrid > 0 then CurrentGrid := Opergrid; + Op2Edit.Text := ''; + Op2Edit.Text := ''; + Op4Edit.Text := ''; +{ + if Operation = 'FileOpen' then + begin + if Op1grid > 0 then Currentgrid := Op1grid; + OpenDialog1.FileName := Op1; + GetFile(Self); + end; + + if Operation = 'FileSave' then + begin + if Op1grid > 0 then Currentgrid := Op1grid; + SaveDialog1.FileName := Op1; + CurrentObjName := Op1; + mnuSaveClick(Self); + end; + + if Operation = 'KeyMatInput' then + begin + prompt := 'Input data matrix for ' + Op1 + '?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then KeyMatClick(Self); + end; + + if Operation = 'KeyVecInput' then + begin + prompt := 'Input vector for ' + Op1 + '?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then KeyVectClick(Self); + end; + + if Operation = 'KeyScalerInput' then + begin + prompt := 'Input the scaler ' + Op1 + '?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then KeyScalerClick(Self); + end; +} + if Operation = 'RowAugment' then + begin + prompt := 'Row augment the matrix ' + Op1 + '?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then + begin + if Op1grid > 0 then CurrentGrid := Op1grid; + OpenDialog1.FileName := Op1; + CurrentObjType := 1; + GetFile(Self); + RowAugMnuClick(Self); + end; + end; + + if Operation = 'ColAugment' then + begin + prompt := 'Column augment the matrix ' + Op1 + '?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then + begin + if Op1grid > 0 then CurrentGrid := Op1grid; + OpenDialog1.FileName := Op1; + CurrentObjType := 1; + GetFile(Self); + ColAugMnuClick(Self); + end; + end; + + if Operation = 'DeleteRow' then + begin + prompt := 'Delete matrix row in ' + Op1 + '?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then + begin + if Op1grid > 0 then CurrentGrid := Op1grid; + OpenDialog1.FileName := Op1; + CurrentObjType := 1; + GetFile(Self); + RowDelMnuClick(Self); + end; + end; + + if Operation = 'DeleteCol' then + begin + prompt := 'Delete matrix column in ' + Op1 + '?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then + begin + if Op1grid > 0 then CurrentGrid := Op1grid; + OpenDialog1.FileName := Op1; + CurrentObjType := 1; + GetFile(Self); + ColDelMnuClick(Self); + end; + end; + + if Operation = 'SVDInverse' then + begin + prompt := 'Invert the matrix ' + Op1 + '?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then + begin + if Op1grid > 0 then CurrentGrid := Op1grid; + OpenDialog1.FileName := Op1; + CurrentObjType := 1; + GetFile(Self); + SVDInvMnuClick(Self); + end; + end; + + if Operation = 'PreMatxPostMat' then + begin + prompt := 'Premultiply ' + Op1 + ' by ' + Op2 + '?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + CurrentGrid := 1; + CurrentObjType := 1; + OpenDialog1.FileName := Op1; + GetFile(Self); + CurrentGrid := 2; + Op3Edit.Text := Op2; + OpenDialog1.FileName := Op2; + CurrentObjType := 1; + GetFile(Self); + Op4Edit.Text := Op3; + PreMatMnuClick(Self); + end; + end; + + if Operation = 'Tridiagonalize' then + begin + prompt := 'Tridiagonalize the matrix ' + Op1 + '?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + if Op1grid > 0 then CurrentGrid := Op1grid; + OpenDialog1.FileName := Op1; + CurrentObjType := 1; + GetFile(Self); + TriDiagMnuClick(Self); + end; + end; + + if Operation = 'UpLowDecomp' then + begin + prompt := 'Obtain upper and lower decompositon of ' + Op1 + '?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + if Op1grid > 0 then CurrentGrid := Op1grid; + OpenDialog1.FileName := Op1; + CurrentObjType := 1; + GetFile(Self); + ULDecompMnuClick(Self); + end; + end; + + if Operation = 'DiagToVec' then + begin + prompt := 'Copy diagonal of ' + Op1 + ' to vector ' + Op2 + '?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + if Op1grid > 0 then CurrentGrid := Op1grid; + OpenDialog1.FileName := Op1; + CurrentObjType := 1; + GetFile(Self); + DiagtovecmnuClick(Self); + end; + end; + + if Operation = 'Determinant' then + begin + prompt := 'Obtain determinant of matrix ' + Op1 + '?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + if Op1grid > 0 then CurrentGrid := Op1grid; + OpenDialog1.FileName := Op1; + CurrentObjType := 1; + GetFile(Self); + DetermMnuClick(Self); + end; + end; + + if Operation = 'MatTranspose' then + begin + prompt := 'Obtain transpose of matrix ' + Op1 + '?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + if Op1grid > 0 then CurrentGrid := Op1grid; + OpenDialog1.FileName := Op1; + CurrentObjType := 1; + GetFile(Self); + TransMnuClick(Self); + end; + end; + + if Operation = 'MatrixRoots' then + begin + prompt := 'Obtain eigenvalues and vectors of matrix ' + Op1 + '?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + if Op1grid > 0 then CurrentGrid := Op1grid; + OpenDialog1.FileName := Op1; + CurrentObjType := 1; + GetFile(Self); + EigenMnuClick(Self); + end; + end; + + if Operation = 'MatTrace' then + begin + prompt := 'Obtain trace of matrix ' + Op1 + '?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + if Op1grid > 0 then CurrentGrid := Op1grid; + OpenDialog1.FileName := Op1; + CurrentObjType := 1; + GetFile(Self); + TraceMnuClick(Self); + end; + end; + + if Operation = 'NormalizeRows' then + begin + prompt := 'Normalize rows of matrix ' + Op1 + '?'; + response := InputBox('EXECUTE',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + if Op1grid > 0 then CurrentGrid := Op1grid; + OpenDialog1.FileName := Op1; + CurrentObjType := 1; + GetFile(Self); + NormRowsMnuClick(Self); + end; + end; + + if Operation = 'NormalizeCols' then + begin + prompt := 'Normalize columns of matrix ' + Op1 + '?'; + response := InputBox('EXECUTE',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + if Op1grid > 0 then CurrentGrid := Op1grid; + OpenDialog1.FileName := Op1; + CurrentObjType := 1; + GetFile(Self); + NormColsMnuClick(Self); + end; + end; + + if Operation = 'MatMinusMat' then + begin + prompt := 'Subtract matrix ' + Op2 + ' from ' + Op1 + '?'; + response := InputBox('EXECUTE',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + CurrentGrid := 1; + OpenDialog1.FileName := Op1; + CurrentObjType := 1; + GetFile(Self); + CurrentGrid := 2; + OpenDialog1.FileName := Op2; + CurrentObjType := 1; + GetFile(Self); + MatSubMnuClick(Self); + end; + end; + + if Operation = 'MatPlusMat' then + begin + prompt := 'Add matrix ' + Op1 + ' to ' + Op2 + '?'; + response := InputBox('EXECUTE',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + Currentgrid := 1; + OpenDialog1.FileName := Op1; + CurrentObjType := 1; + GetFile(Self); + CurrentGrid := 2; + OpenDialog1.FileName := Op2; + CurrentObjType := 1; + GetFile(Self); + MatSumMnuClick(Self); + end; + end; + + if Operation = 'PreVecxPostMat' then + begin + prompt := 'Multiply matrix ' + Op1 + ' by row vector ' + Op2 + '?'; + response := InputBox('EXECUTE',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op2; + Currentgrid := 1; + OpenDialog1.FileName := Op2; + CurrentObjType := 3; + GetFile(Self); + CurrentGrid := 2; + OpenDialog1.FileName := Op1; + CurrentObjType := 1; + GetFile(Self); + PrebyRowVmnuClick(Self); + end; + end; + + if Operation = 'ScalerxPostMat' then + begin + prompt := 'Multiply scaler ' + Op1 + ' times matrix ' + Op2 + '?'; + response := InputBox('EXECUTE',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + Currentgrid := 1; + OpenDialog1.FileName := Op1; + CurrentObjType := 4; + GetFile(Self); + CurrentGrid := 2; + Op3Edit.Text := Op2; + OpenDialog1.FileName := Op2; + CurrentObjType := 1; + GetFile(Self); + PreScalarMnuClick(Self); + end; + end; + + if Operation = 'PreMatxPostVec' then + begin + prompt := 'Multiply matrix ' + Op1 + ' by col.Vector ' + Op2 + '?'; + response := InputBox('EXECUTE',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + Currentgrid := 1; + CurrentObjType := 1; + OpenDialog1.FileName := Op1; + GetFile(Self); + CurrentGrid := 2; + Op3Edit.Text := Op2; + OpenDialog1.FileName := Op2; + CurrentObjType := 2; + GetFile(Self); + PostColVMnuClick(Self); + end; + end; + + if Operation = 'MatxPostMat' then + begin + prompt := 'Multiply matrix ' + Op1 + ' by matrix ' + Op2 + '?'; + response := InputBox('EXECUTE',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + Currentgrid := 1; + OpenDialog1.FileName := Op1; + CurrentObjType := 1; + GetFile(Self); + CurrentGrid := 2; + Op3Edit.Text := Op2; + OpenDialog1.FileName := Op2; + CurrentObjType := 1; + GetFile(Self); + PostMatMnuClick(Self); + end; + end; + + if Operation = 'VectorTranspose' then + begin + prompt := 'Transpose vector ' + Op1 + '?'; + response := InputBox('EXECUTE',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + Currentgrid := 1; + OpenDialog1.FileName := Op1; + if FileExists(Op1) then + begin + AssignFile(SaveFile, Op1); + Reset(SaveFile); + Readln(SaveFile,CurrentObjType); + CloseFile(SaveFile); + end; + GetFile(Self); + VecTransMnuClick(Self); + end; + end; + + if Operation = 'ScalerxVector' then + begin + prompt := 'Multiply vector ' + Op2 + ' by scaler ' + Op1 + '?'; + response := InputBox('EXECUTE',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op2; + if FileExists(Op2) then + begin + AssignFile(SaveFile, Op2); + Reset(SaveFile); + Readln(SaveFile,CurrentObjType); + CloseFile(SaveFile); + end; + Currentgrid := 1; + OpenDialog1.FileName := Op2; + GetFile(Self); + Op3Edit.Text := Op1; + CurrentGrid := 2; + OpenDialog1.FileName := Op1; + CurrentObjType := 4; + GetFile(Self); + VecXscalarMnuClick(Self); + end; + end; + + if Operation = 'sqrtvector' then + begin + prompt := 'Square root of elements in vector ' + Op1 + '?'; + response := InputBox('EXECUTE',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + if FileExists(Op1) then + begin + AssignFile(SaveFile, Op1); + Reset(SaveFile); + Readln(SaveFile,CurrentObjType); + CloseFile(SaveFile); + end; + Currentgrid := 1; + OpenDialog1.FileName := Op1; + GetFile(Self); + VecSqrtMnuClick(Self); + end; + end; + + if Operation = 'VectorRecip' then + begin + prompt := 'Recipricol of elements in vector ' + Op1 + '?'; + response := InputBox('EXECUTE',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + if FileExists(Op1) then + begin + AssignFile(SaveFile, Op1); + Reset(SaveFile); + Readln(SaveFile,CurrentObjType); + CloseFile(SaveFile); + end; + Currentgrid := 1; + OpenDialog1.FileName := Op1; + GetFile(Self); + VecRecipMnuClick(Self); + end; + end; + + if Operation = 'VecxVec' then + begin + prompt := 'Multiply ' + Op1 + ' times ' + Op2 + '?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + CurrentGrid := 1; + OpenDialog1.FileName := Op1; + if ExtractFileExt(Op1) = '.CVE' then + CurrentObjType := 2 + else CurrentObjType := 3; + GetFile(Self); + CurrentGrid := 2; + Op3Edit.Text := Op2; + OpenDialog1.FileName := Op2; + if ExtractFileExt(Op2) = '.CVE' then + CurrentObjType := 2 + else CurrentObjType := 3; + GetFile(Self); + Op4Edit.Text := Op3; + RowxColVecMnuClick(Self); + end; + end; + + if Operation = 'SqrtScaler' then + begin + prompt := 'Square root of scaler ' + Op1 + '?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + CurrentGrid := 1; + OpenDialog1.FileName := Op1; + CurrentObjType := 4; + GetFile(Self); + ScalSqrtMnuClick(Self); + end; + end; + + If Operation = 'ScalerRecip' then + begin + prompt := 'Recipricol of scaler ' + Op1 + '?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + CurrentGrid := 1; + OpenDialog1.FileName := Op1; + CurrentObjType := 4; + GetFile(Self); + ScalRecipMnuClick(Self); + end; + end; + + if Operation = 'ScalerProd' then + begin + prompt := 'Multiply ' + Op1 + ' by a value?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + CurrentGrid := 1; + OpenDialog1.FileName := Op1; + CurrentObjType := 4; + GetFile(Self); + ScalxScalMnuClick(Self); + end; + end; + + if Operation = 'ExtractVector' then + begin + prompt := 'Extract ' + Op2 + ' from ' + Op1 + '?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + CurrentGrid := 1; + OpenDialog1.FileName := Op1; + CurrentObjType := 1; + GetFile(Self); + ExtractColVecMnuClick(Self); + end; + end; + + if Operation = 'VecToDiag' then + begin + prompt := 'Place ' + Op1 + ' into diagonal of matrix' + Op2 +'?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then + begin + Op1Edit.Text := Operation; + Op2Edit.Text := Op1; + CurrentGrid := 1; + OpenDialog1.FileName := Op1; + if ExtractFileExt(Op1) = '.CVE' then + CurrentObjType := 2 + else if ExtractFileExt(Op1) = '.RVE' then + CurrentObjType := 3 + else exit; + GetFile(Self); + Op3Edit.Text := Op2; + CurrentGrid := 2; + OpenDialog1.FileName := Op2; + CurrentObjType := 1; + GetFile(Self); + Vec2DiagMnuClick(Self); + end; + end; + + if Operation = 'IDMAT' then + begin + prompt := 'Create an Identity Matrix?'; + response := InputBox('EXECUTE?',prompt,'Y'); + if response = 'Y' then IdentMnuClick(Self); + end; + + Operation := ''; +end; + +initialization + {$I matmanunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/matrixlib.pas b/applications/lazstats/source_orig/matrixlib.pas new file mode 100644 index 000000000..4c1b717cb --- /dev/null +++ b/applications/lazstats/source_orig/matrixlib.pas @@ -0,0 +1,2385 @@ +unit MatrixLib; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, Globals, DictionaryUnit, OutPutUnit, Dialogs, + Math, FunctionsLib, DataProcs, MainUnit; + +procedure GridVecProd(col1, col2 : integer; VAR Product : double; VAR Ngood : integer); + +procedure GridXProd(NoSelected : integer; + VAR Selected : IntDyneVec; + VAR Product : DblDyneMat; + Augment : boolean; + VAR Ngood : integer); + +procedure GridCovar(NoSelected : integer; + VAR Selected : IntDyneVec; + VAR Covar : DblDyneMat; + VAR Means : DblDyneVec; + VAR Variances : DblDyneVec; + VAR StdDevs : DblDyneVec; + VAR errorcode : boolean; + VAR Ngood : integer); + +procedure Correlations(NoSelected : integer; + VAR Selected : IntDyneVec; + VAR Correlations : DblDyneMat; + VAR Means : DblDyneVec; + VAR Variances : DblDyneVec; + VAR StdDevs : DblDyneVec; + VAR errorcode : boolean; + VAR Ngood : integer); + +procedure MATAxB(VAR a : DblDyneMat; + VAR b : DblDyneMat; + VAR c : DblDyneMat; + brows, bcols, crows, ccols : integer; + VAR errorcode : boolean); + +function MATTRN(VAR a : DblDyneMat; + VAR b : DblDyneMat; + brows, bcols : integer): boolean; + +procedure nonsymroots(a : DblDyneMat; nv : integer; + var nf : integer; c : real; + var v : DblDyneMat; var e : DblDyneVec; + var px : DblDyneVec; + var t : double; + var ev : double); + +PROCEDURE ludcmp(VAR a: DblDyneMat; n: integer; VAR indx: IntDyneVec; VAR d: double); + +procedure DETERM(VAR a : DblDyneMat; rows, cols : integer; VAR determ : double; + VAR errorcode : boolean); + +procedure EffectCode(GridCol, min, max : integer; + FactLetter : string; + VAR startcol : integer; + VAR endcol : integer; + VAR novectors : integer); + +procedure MReg(NoIndep : integer; + VAR IndepCols : IntDyneVec; + DepCol : integer; + VAR RowLabels : StrDyneVec; + VAR Means : DblDyneVec; + VAR Variances : DblDyneVec; + VAR StdDevs : DblDyneVec; + VAR BWeights : DblDyneVec; + VAR BetaWeights : DblDyneVec; + VAR BStdErrs : DblDyneVec; + VAR Bttests : DblDyneVec; + VAR tProbs : DblDyneVec; + VAR R2 : double; + VAR stderrest : double; + VAR NCases : integer; + VAR errorcode : boolean; + PrintAll : boolean); + +procedure Dynnonsymroots(var a : DblDyneMat; nv : integer; + var nf : integer; c : real; + var v : DblDyneMat; var e : DblDyneVec; + var px : DblDyneVec; + var t : double; + var ev : double); + +function DynCorrelations(novars : integer; + VAR ColSelected : IntDyneVec; + VAR DataGrid : DblDyneMat; + VAR rmatrix : DblDyneMat; + VAR means : DblDyneVec; + VAR vars : DblDyneVec; + VAR stddevs : DblDyneVec; + NCases : integer; + ReturnType : integer) : integer; + +procedure Predict(VAR ColNoSelected : IntDyneVec; + NoVars : integer; + VAR IndepInverse : DblDyneMat; + VAR Means : DblDyneVec; + VAR StdDevs : DblDyneVec; + VAR BetaWeights : DblDyneVec; + StdErrEst : double; + VAR IndepIndex : IntDyneVec; + NoIndepVars : integer); + +procedure MReg2(NCases : integer; + NoVars : integer; + VAR NoIndepVars : integer; + VAR IndepIndex : IntDyneVec; + VAR corrs : DblDyneMat; + VAR IndepCorrs : DblDyneMat; + VAR RowLabels : StrDyneVec; + VAR R2 : double; + VAR BetaWeights : DblDyneVec; + VAR Means : DblDyneVec; + VAR Variances : DblDyneVec; + VAR errorcode : integer; + VAR StdErrEst : double; + VAR constant : double; + probout : double; + Printit : boolean; + TestOut : boolean; + PrintInv : boolean); + +procedure MATSUB(VAR a, b, c : DblDyneMat; + brows, bcols, crows, ccols : integer; VAR errorcode : boolean); + +procedure IntArrayPrint(mat : IntDyneMat; + rows, cols : integer; + ytitle : string; + RowLabels, ColLabels : StrDyneVec; + Title : string); + +procedure eigens(VAR a: DblDyneMat; Var d : DblDyneVec; n : integer); + +PROCEDURE tred2(VAR a: DblDyneMat; n: integer; VAR d,e: DblDyneVec); + +PROCEDURE tqli(VAR d,e: DblDyneVec; n: integer; VAR z: DblDyneMat); + +function SEVS(nv,nf : integer; + c : double; + var r : DblDyneMat; + VAR v : DblDyneMat; + VAR e : DblDyneVec; + var p : DblDyneVec; + VAR nd : integer) : integer ; + +function SCPF(VAR x,y : DblDyneMat; kx,ky,n,nd : integer) : double; +procedure MAT_PRINT(VAR xmat : DblDyneMat ; + rows, cols : integer; + VAR title : string; + VAR RowLabels: StrDyneVec; + VAR ColLabels: StrDyneVec; + NCases: integer); +procedure DynVectorPrint(VAR avector: DblDyneVec; + NoVars : integer; + title : string; + VAR Labels : StrDyneVec; + NCases : integer); +procedure scatplot(var x : DblDyneVec; + var y : DblDyneVec; + nocases : integer; + titlestr : string; + x_axis, y_axis : string; + x_min, x_max, y_min, y_max : double; + VAR VarLabels : StrDyneVec); +procedure DynIntMatPrint(mat : IntDyneMat; + rows, cols : integer; + ytitle : string; + RowLabels, ColLabels : StrDyneVec; + Title : string); +procedure SymMatRoots(A : DblDyneMat; M : integer; VAR E : DblDyneVec; VAR V : DblDyneMat); +procedure matinv(a, vtimesw, v, w: DblDyneMat; n: integer); + +implementation + +procedure GridVecProd(col1, col2 : integer; VAR Product : double; VAR Ngood : integer); +// Get the cross-product of two vectors +// col1 and col2 are grid columns +// Product is the vector product +// Ngood are the number of elements in the product not missing or filtered +var + i : integer; + Selected : IntDyneVec; + X1, X2 : double; +begin + SetLength(Selected,2); + Product := 0.0; + Selected[0] := col1; + Selected[1] := col2; + for i := 1 to NoCases do + begin + if NOT GoodRecord(i,2,Selected) then continue; + Ngood := Ngood + 1; + X1 := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[col1,i])); + X2 := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[col2,i])); + Product := Product + (X1 * X2); + end; + Selected := nil; +end; +//------------------------------------------------------------------- + +procedure GridXProd(NoSelected : integer; + VAR Selected : IntDyneVec; + VAR Product : DblDyneMat; + Augment : boolean; + VAR Ngood : integer); +// Matrix product of a grid matrix and its transpose +// Product contains the cross-products matrix upon return +// Selected is a integer vector of grid columns of the vectors +// NoSelected is an integer of the number of grid vectors selected +// Ngood is the number of elements in a vector product not missing or filtered +// Augment is true if the augment matrix is to be obtained and is required +// to obtain means, variances, standard deviations in the correlation procedure +// and GridCovar procedure +var + i, j, k : integer; + Col1, Col2 : integer; + X1 : double; + Prod : double; + NoVars : integer; + N : double; + +begin + // initialize + N := 0.0; + NoVars := 0; + for i := 1 to NoSelected do + for j := 1 to NoSelected do + Product[i-1,j-1] := 0.0; + if Augment then + begin + NoVars := NoSelected + 1; + for i := 1 to NoVars do + begin + Product[i-1,NoVars-1] := 0.0; + Product[NoVars-1,i-1] := 0.0; + end; + end; + + // Do cross-products without augmentation + for i := 1 to NoSelected do // pre-matrix row (Grid transpose) + begin + for j := 1 to NoSelected do // post-matrix column (Grid) + begin + Ngood := 0; + Col1 := Selected[i-1]; + Col2 := Selected[j-1]; + GridVecProd(Col1,Col2,Prod, Ngood); + Product[i-1,j-1] := Prod; + end; + end; + + if Augment then // do last column and row for augmented matrix + begin + for j := 1 to NoSelected do + begin + Col1 := Selected[j-1]; + for k := 1 to NoCases do + begin + if NOT GoodRecord(k,NoSelected,Selected) then continue; + X1 := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[Col1,k])); + Product[NoVars-1,j-1] := Product[NoVars-1,j-1] + X1; + Product[j-1,NoVars-1] := Product[j-1,NoVars-1] + X1; + end; + end; + for i := 1 to NoCases do // last cell of augmented matix + begin + if NOT GoodRecord(i,NoSelected,Selected) then continue; + N := N + 1.0; + end; + Product[NoVars-1,NoVars-1] := N; + Ngood := round(N); + end; +end; +//------------------------------------------------------------------- + +procedure GridCovar(NoSelected : integer; + VAR Selected : IntDyneVec; + VAR Covar : DblDyneMat; + VAR Means : DblDyneVec; + VAR Variances : DblDyneVec; + VAR StdDevs : DblDyneVec; + VAR errorcode : boolean; + VAR Ngood : integer); +// Obtains the variance/covariance matrix of variables in the grid +// NoSelected is the number of variables selected from the grid +// Selected is a vector of integers for the grid columns of selected variables +// Covar is the variance/covariance matrix returned +// Means, StdDevs, Variances are double vectors obtained from the augmented matrix +// errorcode is true if an error occurs due to 0 variance +// Ngood is the number of records in the cross-product of vectors +// This procedure calls the GridXProd procedure with augmentation true +// in order to obtain the means, variances and standard deviations +var + i, j : integer; + N : double; + Augment : boolean; +begin + // initialize + errorcode := false; + for i := 1 to NoSelected do + begin + Means[i-1] := 0.0; + Variances[i-1] := 0.0; + StdDevs[i-1] := 0.0; + end; + Augment := true; // augment to get intercept, means, variances, std.devs. + + // get cross-products + GridXProd(NoSelected,Selected,Covar,Augment,Ngood); + + // Get no. of records in cross-products + N := Ngood; + + // Sums of squares are in diagonal, cross-products in off-diagonal cells + // Sums of X's are in the augmented column + // Get means and standard deviations first + for i := 1 to NoSelected do + begin + Means[i-1] := Covar[i-1,NoSelected] / N; + Variances[i-1] := Covar[i-1,i-1] - (Sqr(Covar[i-1,NoSelected]) / N); + Variances[i-1] := Variances[i-1] / (N - 1.0); + if Variances[i-1] > 0.0 then + StdDevs[i-1] := sqrt(Variances[i-1]) + else + begin + StdDevs[i-1] := 0.0; + errorcode := true; + end; + end; + + // Now get covariances + for i := 1 to NoSelected do + begin + for j := 1 to NoSelected do + begin + Covar[i-1,j-1] := Covar[i-1,j-1] - + ((Covar[i-1,NoSelected] * Covar[j-1,NoSelected]) / N); + Covar[i-1,j-1] := Covar[i-1,j-1] / (N - 1); + end; + end; +end; +//------------------------------------------------------------------- + +procedure Correlations(NoSelected : integer; + VAR Selected : IntDyneVec; + VAR Correlations : DblDyneMat; + VAR Means : DblDyneVec; + VAR Variances : DblDyneVec; + VAR StdDevs : DblDyneVec; + VAR errorcode : boolean; + VAR Ngood : integer); +// Obtains the correlation matrix among grid variables +// NoSelected is the no. of grid variables selected for analysis +// Selected is a vector of integers of the grid variable columns selected +// Correlations are returned in the Correlations matrix +// Means, Variances, StdDevs are returned as double vectors +// errorcode is true if a 0 variance is detected +// Ngood is the number cases that do not contain missing values or are filtered +// This procedure calls the GridCovar procedure +var + i, j : integer; + +begin + // get covariance matrix, means and standard deviations + GridCovar(NoSelected,Selected,Correlations,Means,Variances,StdDevs,errorcode, Ngood); + for i := 1 to NoSelected do + begin + for j := 1 to NoSelected do + begin + if (StdDevs[i-1] > 0.0) and (StdDevs[j-1] > 0.0) then + Correlations[i-1,j-1] := Correlations[i-1,j-1] / + (StdDevs[i-1] * StdDevs[j-1]) + else + begin + Correlations[i-1,j-1] := 0.0; + errorcode := true; + end; + end; + end; +end; +//------------------------------------------------------------------- + +procedure MATAxB(VAR a : DblDyneMat; + VAR b : DblDyneMat; + VAR c : DblDyneMat; + brows, bcols, crows, ccols : integer; + VAR errorcode : boolean); +// Product of matrix b times c with results returned in a +var i, j, k : integer; +begin + errorcode := FALSE; + if (bcols <> crows) then errorcode := TRUE + else + begin + for i := 0 to brows-1 do + begin + for j := 0 to ccols-1 do + begin + a[i,j] := 0.0; + for k := 0 to crows-1 do + a[i,j] := a[i,j] + b[i,k] * c[k,j]; + end; + end; + end; +end; { of MATAxB } + +//------------------------------------------------------------------- + +function MATTRN(VAR a : DblDyneMat; + VAR b : DblDyneMat; + brows, bcols : integer): boolean; +// transpose the b matrix and return it in a +var i, j : integer; + errorcode : boolean; +begin + errorcode := FALSE; + if ((brows = 1) and (bcols = 1)) then errorcode := TRUE else + begin + for i := 0 to brows-1 do + for j := 0 to bcols-1 do + a[j,i] := b[i,j]; + end; + MATTRN := errorcode; +end; { of mattrn } +//------------------------------------------------------------------- + +procedure nonsymroots(a : DblDyneMat; nv : integer; + var nf : integer; c : real; + var v : DblDyneMat; var e : DblDyneVec; + var px : DblDyneVec; + var t : double; + var ev : double); +{ roots and vectors of a non symetric matrix. a is square matrix entered + and is destroyed in process. nv is number of variables (rows and columns ) + of a. nf is the number of factorsto be extracted - is output as the number + which exceeded c, the minimum eigenvalue to be extracted. v is the output + matrix of column vectors of loadings. e is the output vector of roots. px + is the percentages of trace for factors. t is the trace of the matrix and + ev is the percent of trace extracted } +label 40; +var + y, z : DblDyneVec; + ek, e2, d : real; + i, j, k, m : integer; +begin + SetLength(y,nv); + SetLength(z,nv); + t := 0.0; + for i := 0 to nv-1 do t := t + a[i,i]; + for k := 0 to nf-1 do + begin + for i := 0 to nv-1 do + begin + px[i] := 1.0; + y[i] := 1.0; + end; + e[k] := 1.0; + ek := 1.0; + for m := 1 to 25 do + begin + for i := 0 to nv-1 do + begin + v[i,k] := px[i] / e[k]; + z[i] := y[i] / ek; + end; + for i := 0 to nv-1 do + begin + px[i] := 0.0; + for j := 0 to nv-1 do px[i] := px[i] + a[i,j] * v[j,k]; + y[i] := 0.0; + for j := 0 to nv-1 do y[i] := y[i] + a[j,i] * z[j]; + end; + e2 := 0.0; + for j := 0 to nv-1 do e2 := e2 + px[j] * v[j,k]; + e[k] := sqrt(abs(e2)); + ek := 0.0; + for j := 0 to nv-1 do ek := ek + y[j] * z[j]; + ek := sqrt(abs(ek)); + end; + if e2 >= sqr(c) then + begin + d := 0.0; + for j := 0 to nv-1 do d := d + v[j,k] * z[j]; + d := e[k] / d; + for i := 0 to nv-1 do + for j := 0 to nv-1 do + a[i,j] := a[i,j] - v[i,k] * z[j] * d; + end + else begin + nf := k - 1; + goto 40; + end; + end; + 40 : for i := 0 to nf-1 do px[i] := e[i] / t * 100.0; + ev := 0.0; + for i := 0 to nf-1 do ev := ev + px[i]; + z := nil; + y := nil; +end; { of procedure nonsymroots } +//------------------------------------------------------------------- + +PROCEDURE ludcmp(VAR a: DblDyneMat; n: integer; VAR indx: IntDyneVec; VAR d: double); +CONST tiny=1.0e-20; +VAR k,j,imax,i: integer; + sum,dum,big: double; + vv: DblDyneVec; +BEGIN + SetLength(vv,n); + d := 1.0; imax := 0; + FOR i := 1 to n DO BEGIN + big := 0.0; + FOR j := 1 to n DO IF (abs(a[i-1,j-1]) > big) THEN big := abs(a[i-1,j-1]); + IF (big = 0.0) THEN BEGIN + ShowMessage('Singular matrix in Lower-Upper Decomposition routine'); + exit; + END; + vv[i-1] := 1.0/big + END; + FOR j := 1 to n DO BEGIN + IF (j > 1) THEN BEGIN + FOR i := 1 to j-1 DO BEGIN + sum := a[i-1,j-1]; + IF (i > 1) THEN BEGIN + FOR k := 1 to i-1 DO BEGIN + sum := sum - a[i-1,k-1] * a[k-1,j-1] + END; + a[i-1,j-1] := sum + END + END + END; + big := 0.0; + FOR i := j to n DO BEGIN + sum := a[i-1,j-1]; + IF (j > 1) THEN BEGIN + FOR k := 1 to j-1 DO BEGIN + sum := sum - a[i-1,k-1] * a[k-1,j-1] + END; + a[i-1,j-1] := sum + END; + dum := vv[i-1] * abs(sum); + IF (dum > big) THEN BEGIN + big := dum; + imax := i + END + END; + IF (j <> imax) THEN BEGIN + FOR k := 1 to n DO BEGIN + dum := a[imax-1,k-1]; + a[imax-1,k-1] := a[j-1,k-1]; + a[j-1,k-1] := dum + END; + d := -d; + vv[imax-1] := vv[j-1] + END; + indx[j-1] := imax; + IF (j <> n) THEN BEGIN + IF (a[j-1,j-1] = 0.0) THEN a[j-1,j-1] := tiny; + dum := 1.0/a[j-1,j-1]; + FOR i := j+1 to n DO BEGIN + a[i-1,j-1] := a[i-1,j-1] * dum + END + END + END; + IF (a[n-1,n-1] = 0.0) THEN a[n-1,n-1] := tiny; + vv := nil; +END; +//------------------------------------------------------------------- + +procedure DETERM(VAR a : DblDyneMat; rows, cols : integer; VAR determ : double; + VAR errorcode : boolean); +var indx : IntDyneVec; + i : integer; +begin + SetLength(indx,rows); + errorcode := FALSE; + if (rows <> cols) then errorcode := TRUE else + begin + LUDCMP(a, rows, indx, determ); + for i := 1 to rows do + determ := determ * a[i-1,i-1]; + end; +end; { of determ } +//------------------------------------------------------------------- + +procedure EffectCode(GridCol, min, max : integer; + FactLetter : string; + VAR startcol : integer; + VAR endcol : integer; + VAR novectors : integer); +var + levels, i, j, grp, col, cval : integer; + coef : IntDyneMat; + labelstr : string; +begin + // Routine for creating coded vectors representing group membership + // for purposes of multiple regression effects of group membership + levels := max - min + 1; + SetLength(coef,levels,levels); + novectors := levels - 1; + startcol := NoVariables + 1; + endcol := startcol + novectors - 1; + // setup grid for additional columns + for i := 1 to levels - 1 do + begin + labelstr := FactLetter + IntToStr(i); + col := NoVariables + 1; + DictionaryFrm.NewVar(col); + DictionaryFrm.DictGrid.Cells[1,col] := labelstr; + OS3MainFrm.DataGrid.Cells[col,0] := labelstr; + end; + + // get coefficients for effect coding + for i := 1 to levels do // group code + begin + for j := 1 to levels - 1 do // vector code + begin + if i = j then coef[i-1,j-1] := 1; + if i = levels then coef[i-1,j-1] := -1; + if (i <> j) and (i <> levels) then coef[i-1,j-1] := 0; + end; + end; + + // code the cases using coefficients above + col := NoVariables - (levels - 1); + for i := 1 to levels - 1 do + begin + col := col + 1; + for j := 1 to NoCases do + begin + grp := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[GridCol,j]))) + - min + 1; // subject group code + cval := coef[grp-1,i-1]; // vector code + OS3MainFrm.DataGrid.Cells[col,j] := IntToStr(cval); + end; + end; +// NoVariables := NoVariables + novectors; + OS3MainFrm.NoVarsEdit.Text := IntToStr(NoVariables); + coef := nil; +end; +//------------------------------------------------------------------- + +procedure MReg(NoIndep : integer; + VAR IndepCols : IntDyneVec; + DepCol : integer; + VAR RowLabels : StrDyneVec; + VAR Means : DblDyneVec; + VAR Variances : DblDyneVec; + VAR StdDevs : DblDyneVec; + VAR BWeights : DblDyneVec; + VAR BetaWeights : DblDyneVec; + VAR BStdErrs : DblDyneVec; + VAR Bttests : DblDyneVec; + VAR tProbs : DblDyneVec; + VAR R2 : double; + VAR stderrest : double; + VAR NCases : integer; + VAR errorcode : boolean; + PrintAll : boolean); +var + i, j, k, N : integer; + X : DblDyneMat; + XT : DblDyneMat; + XTX : DblDyneMat; + XTY : DblDyneVec; + Y : DblDyneVec; + indx : IntDyneVec; + D, F, Prob, VarY, SDY, MeanY : double; + value, TOL, VIF, AdjR2 : double; + SSY, SSres, resvar, SSreg : double; + ColLabels : StrDyneVec; + title : string; + deplabel : string; + errcode : boolean; +begin + SetLength(X,NoCases,NoIndep+1); // augmented independent var. matrix + SetLength(XT,Noindep+1,NoCases); // transpose of independent var's + SetLength(XTX,Noindep+1,Noindep+1); // product of transpose X times X + SetLength(Y,NCases+1); // Y variable values + SetLength(XTY,Noindep+1); // X transpose time Y + SetLength(indx,Noindep+1); + SetLength(ColLabels,NCases); + + // initialize + for i := 0 to Noindep do + begin + indx[i] := 0; + XTY[i] := 0.0; + Y[i] := 0.0; + tprobs[i] := 0.0; + Means[i] := 0.0; + Variances[i] := 0.0; + StdDevs[i] := 0.0; + BWeights[i] := 0.0; + BetaWeights[i] := 0.0; + errcode := false; + for j := 0 to Noindep do XTX[i,j] := 0.0; + end; + SSY := 0.0; + VarY := 0.0; + SDY := 0.0; + MeanY := 0.0; + for i := 0 to NCases-1 do + begin + ColLabels[i] := 'Case ' + IntToStr(i+1); + Y[i] := 0.0; + end; + + // get independent matrix and Y vector from the grid + NCases := 0; + N := Noindep + 1; + for i := 1 to NoCases do + begin + if Not GoodRecord(i,Noindep,IndepCols) then continue; + for j := 0 to Noindep-1 do + begin + value := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[IndepCols[j],i])); + X[NCases,j] := value; + Means[j] := Means[j] + value; + Variances[j] := Variances[j] + (value * value); + end; + value := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[DepCol,i])); + Y[NCases] := value; + MeanY := MeanY + value; + SSY := SSY + (value * value); + Means[Noindep] := Means[Noindep] + value; + Variances[Noindep] := Variances[Noindep] + (value * value); + NCases := NCases + 1; + end; + deplabel := OS3MainFrm.DataGrid.Cells[DepCol,0]; + RowLabels[NoIndep] := 'Intercept'; + VarY := SSY - (MeanY * MeanY / NCases); + VarY := VarY / (NCases - 1); + SDY := sqrt(VarY); + + title := format('Variance Y = %10.3f SSY = %10.3f SDY = %10.3f',[VarY,SSY,SDY]); + OutPutFrm.RichEdit.Lines.Add(title); + OutPutFrm.ShowModal ; + // augment the matrix + for i := 1 to NCases do X[i-1,Noindep] := 1.0; + Y[NCases] := 1.0; + + // get transpose of augmented X matrix + MATTRN(XT,X,NCases,N); +{ if PrintAll then + begin + title := 'XT MATRIX'; + MAT_PRINT(XT,Noindep+1,NCases,title,RowLabels,ColLabels,NCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; +} + // get product of the augmented X transpose times augmented X + MATAXB(XTX,XT,X,N,NCases,NCases,N,errorcode); +{ if PrintAll then + begin + title := 'XTX MATRIX'; + MAT_PRINT(XTX,Noindep+1,Noindep+1,title,RowLabels,RowLabels,NCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; +} + //Get means, variances and standard deviations + errorcode := false; + for i := 0 to N-1 do + begin + Variances[i] := XTX[i,i] - (sqr(XTX[i,N-1]) / NCases); + Variances[i] := Variances[i] / (NCases - 1); + if (Variances[i] > 0.0) then StdDevs[i] := sqrt(Variances[i]) + else errorcode := true; + Means[i] := XTX[N-1,i] / NCases; + end; + + if printall then + begin + DynVectorPrint(Means,Noindep+1,'MEANS',RowLabels,NCases); + DynVectorPrint(Variances,Noindep+1,'VARIANCES',RowLabels,NCases); + DynVectorPrint(StdDevs,Noindep+1,'STD. DEV.S',RowLabels,NCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + + // get product of the augmented X transpose matrix times the Y vector + for i := 0 to N-1 do + begin + for j := 0 to NCases-1 do + begin + XTY[i] := XTY[i] + (XT[i,j] * Y[j]); + end; + end; +{ if PrintAll then + begin + title := 'XTY VECTOR'; + DynVectorPrint(XTY,Noindep+1,title,RowLabels,NCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; +} + // get inverse of the augmented cross products matrix among independent variables + SVDInverse(XTX,N); +{ if PrintAll then + begin + title := 'XTX MATRIX INVERSE'; + MAT_PRINT(XTX,Noindep+1,Noindep+1,title,RowLabels,RowLabels,NCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; +} + // multiply augmented inverse matrix times the XTY vector + // result is bweights with the intercept last + for i := 0 to N-1 do + for j := 0 to N-1 do + BWeights[i] := BWeights[i] + (XTX[i,j] * XTY[j]); + + //Get Beta weightw + for i := 0 to N-2 do + BetaWeights[i] := BWeights[i] * StdDevs[i] / SDY; + + // Get standard errors, squared multiple correlation, tests of significance + SSres := 0.0; + for i := 0 to NoIndep do + begin + SSres := SSres + (BWeights[i] * XTY[i]); + end; + SSres := SSY - SSres; + resvar := SSres / (NCases - N); + if resvar > 0.0 then stderrest := sqrt(resvar); + for i := 0 to N-1 do // Standard errors and t-tedt values for weights + begin + BStdErrs[i] := sqrt(resvar * XTX[i,i]); + Bttests[i] := BWeights[i] / BStdErrs[i]; + tprobs[i] := probt(Bttests[i],NCases-N); + end; + SSY := VarY * (NCases-1); + SSreg := SSY - SSres; + R2 := SSreg / SSY; + F := (SSreg / (N - 1)) / (SSres / (NCases - N)); + Prob := probf(F,(N-1),(NCases-N)); + AdjR2 := 1.0 - (1.0 - R2) * (NCases - 1) / (NCases - N); +{ + if PrintAll then + begin + OutPutFrm.RichEdit.Lines.Add('Dependent variable: ' + deplabel); + OutPutFrm.RichEdit.Lines.Add(''); + title := 'B WEIGHTS'; + DynVectorPrint(BWeights,Noindep+1,title,RowLabels,NCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + + + if PrintAll then + begin + OutPutFrm.RichEdit.Lines.Add('Dependent variable: ' + deplabel); + OutPutFrm.RichEdit.Lines.Add(''); + title := 'BETA WEIGHTS'; + DynVectorPrint(BetaWeights,Noindep,title,RowLabels,NCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + + if PrintAll then + begin + title := 'B STD.ERRORS'; + DynVectorPrint(BStdErrs,Noindep+1,title,RowLabels,NCases); + title := 'B t-test VALUES'; + DynVectorPrint(Bttests,Noindep+1,title,RowLabels,NCases); + title := 'B t VALUE PROBABILITIES'; + DynVectorPrint(tprobs,Noindep+1,title,RowLabels,NCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; +} + if PrintAll then + begin + title := format('SSY = %10.2f, SSreg = %10.2f, SSres = %10.2f', + [SSY,SSreg,SSres]); + OutPutFrm.RichEdit.Lines.Add(title); + title := format('R2 = %6.4f, F = %8.2f, D.F. = %d %d, Prob>F = %6.4f', + [R2,F,N-1,NCases-N,Prob]); + OutPutFrm.RichEdit.Lines.Add(title); + title := format('Standard Error of Estimate = %8.2f',[stderrest]); + OutPutFrm.RichEdit.Lines.Add(title); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + + RowLabels[N-1] := 'Intercept'; + OutPutFrm.RichEdit.Lines.Add(' Variable Beta B Std.Err. t prob VIF TOL'); + Correlations(NoIndep,IndepCols,XTX,Means,Variances, StdDevs,errcode,NCases); + SVDinverse(XTX,NoIndep); + for i := 0 to NoIndep do + begin + VIF := XTX[i,i]; + if VIF > 0.0 then TOL := 1.0 / VIF else TOL := 0.0; + title := format('%10s%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f', + [RowLabels[i],BetaWeights[i],BWeights[i],BStdErrs[i],Bttests[i], + tprobs[i], VIF, TOL]); + OutPutFrm.RichEdit.Lines.Add(title); + end; + OutPutFrm.RichEdit.Lines.Add(' '); + OutPutFrm.RichEdit.Lines.Add('SOURCE DF SS MS F Prob.>F'); + title := format('Regression%3d %9.3f %9.3f %6.4f',[N-1,SSreg,SSreg/(N-1),F,Prob]); + OutPutFrm.RichEdit.Lines.Add(title); + title := format('Residual %3d %9.3f %9.3f',[(NCases-1),SSres,SSres/(NCases-N)]); + OutPutFrm.RichEdit.Lines.Add(title); + title := format('Total %3d %9.3f',[NCases-1,SSY]); + OutPutFrm.RichEdit.Lines.Add(title); + OutPutFrm.RichEdit.Lines.Add(''); + title := format('R2 = %6.4f, F = %8.2f, D.F. = %d %d Prob.>F = %6.4f',[R2,F,N-1,NCases-N,Prob]); + OutPutFrm.RichEdit.Lines.Add(title); + title := format('Adjusted R2 = %6.4f',[AdjR2]); + OutPutFrm.RichEdit.Lines.Add(title); + title := format('Standard Error of Estimate = %8.2f',[stderrest]); + OutPutFrm.RichEdit.Lines.Add(title); + OutPutFrm.ShowModal; + + // clean up the heap + ColLabels := nil; + indx := nil; + XTY := nil; + Y := nil; + XTX := nil; + XT := nil; + X := nil; +end; +//------------------------------------------------------------------- + +procedure Dynnonsymroots(var a : DblDyneMat; nv : integer; + var nf : integer; c : real; + var v : DblDyneMat; var e : DblDyneVec; + var px : DblDyneVec; + var t : double; + var ev : double); +{ roots and vectors of a non symetric matrix. a is square matrix entered + and is destroyed in process. nv is number of variables (rows and columns ) + of a. nf is the number of factorsto be extracted - is output as the number + which exceeded c, the minimum eigenvalue to be extracted. v is the output + matrix of column vectors of loadings. e is the output vector of roots. px + is the percentages of trace for factors. t is the trace of the matrix and + ev is the percent of trace extracted } +label 40; +var + y, z : DblDyneVec; + ek, e2, d : real; + i, j, k, m : integer; +begin + SetLength(y,nv); + SetLength(z,nv); + t := 0.0; + for i := 0 to nv-1 do t := t + a[i,i]; + for k := 0 to nf-1 do + begin + for i := 0 to nv-1 do + begin + px[i] := 1.0; + y[i] := 1.0; + end; + e[k] := 1.0; + ek := 1.0; + for m := 1 to 25 do + begin + for i := 0 to nv-1 do + begin + v[i,k] := px[i] / e[k]; + z[i] := y[i] / ek; + end; + for i := 0 to nv - 1 do + begin + px[i] := 0.0; + for j := 0 to nv-1 do px[i] := px[i] + a[i,j] * v[j,k]; + y[i] := 0.0; + for j := 0 to nv-1 do y[i] := y[i] + a[j,i] * z[j]; + end; + e2 := 0.0; + for j := 0 to nv-1 do e2 := e2 + px[j] * v[j,k]; + e[k] := sqrt(abs(e2)); + ek := 0.0; + for j := 0 to nv-1 do ek := ek + y[j] * z[j]; + ek := sqrt(abs(ek)); + end; + if e2 >= sqr(c) then + begin + d := 0.0; + for j := 0 to nv - 1 do d := d + v[j,k] * z[j]; + d := e[k] / d; + for i := 0 to nv - 1 do + for j := 0 to nv - 1 do + a[i,j] := a[i,j] - v[i,k] * z[j] * d; + end + else begin + nf := k - 1; + goto 40; + end; + end; + 40 : for i := 0 to nf-1 do px[i] := e[i] / t * 100.0; + ev := 0.0; + for i := 0 to nf-1 do ev := ev + px[i]; + z := nil; + y := nil; +end; { of procedure nonsymroots } +//----------------------------------------------------------------------------- + +function DynCorrelations(novars : integer; + VAR ColSelected : IntDyneVec; + VAR DataGrid : DblDyneMat; + VAR rmatrix : DblDyneMat; + VAR means : DblDyneVec; + VAR vars : DblDyneVec; + VAR stddevs : DblDyneVec; + NCases : integer; + ReturnType : integer) : integer; +var + i, j, k, row, col, errorcode : integer; + X, Y : double; +begin + errorcode := 0; + for i := 0 to novars - 1 do + begin + means[i] := 0.0; + vars[i] := 0.0; + stdDevs[i] := 0.0; + for j := 0 to novars - 1 do + begin + rmatrix[i,j] := 0.0; + end; + end; + { get cross products } + for i := 0 to NCases - 1 do + begin + if IsFiltered(i) then continue; + for j := 0 to novars - 1 do + begin + row := ColSelected[j]; + X := DataGrid[i,row]; + means[j] := means[j] + X; + vars[j] := vars[j] + (X * X); + for k := 0 to novars - 1 do + begin + col := ColSelected[k]; + Y := DataGrid[i,col]; + rmatrix[j,k] := rmatrix[j,k] + (X * Y); + end; + end; + end; + for j := 0 to novars - 1 do + begin + vars[j] := vars[j] - (means[j] * means[j] / NCases); + vars[j] := vars[j] / (NCases-1); + if (vars[j] > 0.0) then stddevs[j] := sqrt(vars[j]) + else stddevs[j] := 0.0; + end; + if ReturnType = 1 then {return cross-products, variances, std.devs, means } + begin + for i := 0 to novars - 1 do + begin + means[i] := means[i] / NCases; + end; + DynCorrelations := errorcode; + exit; + end; + + for i := 0 to novars - 1 do {get variance-covariance matrix } + begin + for j := 0 to novars - 1 do + begin + rmatrix[i,j] := rmatrix[i,j] - (means[i] * means[j] / NCases); + rmatrix[i,j] := rmatrix[i,j] / (NCases - 1); + end; + end; + if ReturnType = 2 then + begin + for i := 0 to novars - 1 do + begin + means[i] := means[i] / NCases; + end; + DynCorrelations := errorcode; + exit; + end; + + for i := 0 to novars - 1 do { get product-moment correlations } + begin + for j := 0 to novars - 1 do + begin + if ((stddevs[i] > 0.0) and (stddevs[j] > 0.0)) then + rmatrix[i,j] := rmatrix[i,j] / (stddevs[i] * stddevs[j]) + else + begin + rmatrix[i,j] := 9.999; + errorcode := 1; + end; + end; + end; + for i := 0 to novars - 1 do + begin + means[i] := means[i] / NCases; + end; + DynCorrelations := errorcode; +end; +//--------------------------------------------------------------------------- + +procedure Predict(VAR ColNoSelected : IntDyneVec; + NoVars : integer; + VAR IndepInverse : DblDyneMat; + VAR Means : DblDyneVec; + VAR StdDevs : DblDyneVec; + VAR BetaWeights : DblDyneVec; + StdErrEst : double; + VAR IndepIndex : IntDyneVec; + NoIndepVars : integer); +var + col, i, j, k, index, IndexX, IndexY : integer; + predicted, zpredicted, z1, z2, resid, Term1, Term2 : double; + StdErrPredict, t95, Hi95, Low95 : double; + +begin + { use the next available grid column to store the z predicted score } + col := NoVariables + 1; + DictionaryFrm.NewVar(col); + DictionaryFrm.DictGrid.Cells[1,col] := 'Pred.z'; + OS3MainFrm.DataGrid.Cells[col,0] := 'Pred.z'; + col := NoVariables + 1; + DictionaryFrm.NewVar(col); + DictionaryFrm.DictGrid.Cells[1,col] := 'z Resid.'; + OS3MainFrm.DataGrid.Cells[col,0] := 'z Resid.'; + for i := 1 to NoCases do + begin + zpredicted := 0.0; + for j := 1 to NoIndepVars do + begin + Index := IndepIndex[j-1]; + k := ColNoSelected[Index-1]; + z1 := (StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[k,i])) - + Means[Index-1]) / StdDevs[index-1]; + zpredicted := zpredicted + (z1 * BetaWeights[j-1]); + OS3MainFrm.DataGrid.Cells[col-1,i] := format('%8.4f',[zpredicted]); + end; + Index := ColNoSelected[NoVars-1]; + z2 := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[Index,i])); + z2 := (z2 - Means[NoVars-1]) / StdDevs[NoVars-1]; + OS3MainFrm.DataGrid.Cells[col,i] := format('%8.4f',[(z2 - zpredicted)]); + end; + col := NoVariables + 1; + DictionaryFrm.NewVar(col); + DictionaryFrm.DictGrid.Cells[1,col] := 'Pred.Raw'; + OS3MainFrm.DataGrid.Cells[col,0] := 'Pred.Raw'; + { calculate raw predicted scores and store in grid at col } + for i := 1 to NoCases do + begin + predicted := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[col-2,i])) * + StdDevs[NoVars-1] + Means[NoVars-1]; + OS3MainFrm.DataGrid.Cells[col,i] := format('%8.3f',[predicted]); + end; + { Calculate residuals of predicted raw scores } + col := NoVariables +1; + DictionaryFrm.NewVar(col); + DictionaryFrm.DictGrid.Cells[1,col] := 'Raw Resid.'; + OS3MainFrm.DataGrid.Cells[col,0] := 'Raw Resid.'; + for i := 1 to NoCases do + begin + Index := ColNoSelected[NoVars-1]; + resid := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[col-1,i])) - + StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[Index,i])); + OS3MainFrm.DataGrid.Cells[col,i] := Format('%8.3f',[resid]); + end; + { Calculate Confidence Interval for raw predicted score } + col := NoVariables + 1; + DictionaryFrm.NewVar(col); + DictionaryFrm.DictGrid.Cells[1,col] := 'StdErrPred'; + OS3MainFrm.DataGrid.Cells[col,0] := 'StdErrPred'; + col := NoVariables + 1; + DictionaryFrm.NewVar(col); + DictionaryFrm.DictGrid.Cells[1,col] := 'Low 95%'; + OS3MainFrm.DataGrid.Cells[col,0] := 'Low 95%'; + col := NoVariables + 1; + DictionaryFrm.NewVar(col); + DictionaryFrm.DictGrid.Cells[1,col] := 'Top 95%'; + OS3MainFrm.DataGrid.Cells[col,0] := 'Top 95%'; + for i := 1 to NoCases do + begin + { get term1 of the std. err. prediction } + Term1 := 0.0; + for j := 1 to NoIndepVars do + begin + Index := IndepIndex[j-1]; + col := ColNoSelected[Index-1]; + z1 := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[col,i])); + z1 := (z1 - Means[Index-1]) / StdDevs[Index-1]; + z1 := (z1 * z1) * IndepInverse[j-1,j-1]; + Term1 := Term1 + z1; + end; + { get term2 of the std err. of prediction } + term2 := 0.0; + for j := 1 to NoIndepVars - 1 do + begin + for k := j + 1 to NoIndepVars do + begin + IndexX := IndepIndex[j-1]; + col := ColNoSelected[IndexX-1]; + z1 := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[col,i])); + IndexY := IndepIndex[k-1]; + col := ColNoSelected[IndexY-1]; + z2 := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[col,i])); + z1 := (z1 - Means[IndexX-1]) / StdDevs[IndexX-1]; + z2 := (z2 - Means[IndexY-1]) / StdDevs[IndexY-1]; + Term2 := Term2 + IndepInverse[j-1,k-1] * z1 * z2; + end; + end; + term2 := 2.0 * Term2; + StdErrPredict := sqrt(NoCases + 1 + Term1 + Term2); + StdErrPredict := (StdErrEst / sqrt(NoCases)) * StdErrPredict; + t95 := Inverset(0.975,NoCases-NoIndepVars-1); + low95 := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[NoVars+4,i])); + hi95 := low95; + low95 := low95 - (t95 * StdErrPredict); + hi95 := hi95 + (t95 * StdErrPredict); + OS3MainFrm.DataGrid.Cells[NoVariables,i] := Format('%8.3f',[hi95]); + OS3MainFrm.DataGrid.Cells[NoVariables-1,i] := Format('%8.3f',[low95]); + OS3MainFrm.DataGrid.Cells[NoVariables-2,i] := Format('%8.3f',[StdErrPredict]); + end; { next case } +end; +//--------------------------------------------------------------------------- + +procedure MReg2(NCases : integer; + NoVars : integer; + VAR NoIndepVars : integer; + VAR IndepIndex : IntDyneVec; + VAR corrs : DblDyneMat; + VAR IndepCorrs : DblDyneMat; + VAR RowLabels : StrDyneVec; + VAR R2 : double; + VAR BetaWeights : DblDyneVec; + VAR Means : DblDyneVec; + VAR Variances : DblDyneVec; + VAR errorcode : integer; + VAR StdErrEst : double; + VAR constant : double; + probout : double; + Printit : boolean; + TestOut : boolean; + PrintInv : boolean); +{ + The following routine obtains multiple regression results for a + correlation matrix consisting of 1 to NoVars. The last variable + represents the dependent variable. The number of independent + variables is passed as NoIndepVars. The inverse matrix of independent + variables may be obtained by the calling program using the variable + IndepCorrs. The user may request printing of the inverse using the + boolean variable Printit. +} +var + i, j, k, l : integer; + IndexX, IndexY : integer; + IndRowLabels : StrDyneVec; + IndColLabels : StrDyneVec; + XYCorrs : DblDyneVec; + df1, df2, df3 : double; + SSt, SSres, SSreg : double; + VarEst, F : double; + FprobF : double; + outline : string; + valstring : string; + title : string; + deplabel : string; + sum, B, Beta : double; + SSx, StdErrB : double; + AdjR2 : double; + VIF, TOL : double; + outcount : integer; + varsout : IntDyneVec; +begin + SetLength(IndRowLabels,NoVars); + SetLength(IndColLabels,NoVars); + SetLength(XYCorrs,NoVars); + SetLength(varsout,NoVars); + + errorcode := 0; + outcount := 0; + VIF := 0.0; + deplabel := RowLabels[NoVars-1]; + for i := 0 to NoIndepVars-1 do + begin + IndexX := IndepIndex[i]; + for j := 0 to NoIndepVars-1 do + begin + IndexY := IndepIndex[j]; + IndepCorrs[i,j] := corrs[IndexX-1,IndexY-1]; + end; + end; + for i := 0 to NoIndepVars-1 do + begin + IndRowLabels[i] := RowLabels[IndepIndex[i]-1]; + IndColLabels[i] := RowLabels[IndepIndex[i]-1]; + XYCorrs[i] := corrs[IndepIndex[i]-1,NoVars-1]; + end; + SVDinverse(IndepCorrs,NoIndepVars); + title := 'Inverse of independent variables matrix'; + if (PrintInv = true) then + MAT_PRINT(IndepCorrs,NoIndepVars,NoIndepVars,title,IndRowLabels,IndColLabels,NCases); + { Get product of inverse matrix times vector of correlations + between independent and dependent variables } + R2 := 0.0; + for i := 0 to NoIndepVars-1 do + begin + BetaWeights[i] := 0.0; + for j := 0 to NoIndepVars-1 do + begin + BetaWeights[i] := BetaWeights[i] + IndepCorrs[i,j] * XYCorrs[j]; + end; + R2 := R2 + BetaWeights[i] * XYCorrs[i]; + end; + df1 := NoIndepVars; + df2 := NCases - NoIndepVars - 1; + df3 := NCases - 1; + SSt := (NCases-1) * Variances[NoVars-1]; + SSres := SSt * (1.0 - R2); + SSreg := SSt - SSres; + VarEst := SSres / df2; + if (VarEst > 0.0) then StdErrEst := sqrt(VarEst) + else + begin + ShowMessage('ERROR! Error in computing variance estimate.'); + StdErrEst := 0.0; + end; + if (R2 < 1.0) and (df2 > 0.0) and (df1 > 0.0) then F := (R2 / df1) / ((1.0-R2)/ df2) + else F := 0.0; + FProbF := probf(F,df1,df2); + OutPutFrm.RichEdit.Lines.Add('SOURCE DF SS MS F Prob.>F'); + outline := format('Regression %3.0f %9.3f %9.3f %9.3f %9.3f',[df1,SSreg,SSreg/df1,F,FprobF]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Residual %3.0f %9.3f %9.3f',[df2,SSres,SSres/df2]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Total %3.0f %9.3f',[df3,SSt]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + AdjR2 := 1.0 - (1.0 - R2) * (NCases - 1) / df2; + if (PrintIt = true) then + begin +// OutPutFrm.RichEdit.ParaGraph.Alignment := taLeftJustify; + OutPutFrm.RichEdit.Lines.Add('Dependent Variable: ' + deplabel); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('%8s%10s%10s%12s%5s%5s',['R','R2','F','Prob.>F','DF1','DF2']); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('%8.3f%10.3f%10.3f%10.3f%5.0f%5.0f', + [sqrt(R2),R2,F,FProbF,df1,df2]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Adjusted R Squared = %5.3f',[AdjR2]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Std. Error of Estimate = %10.3f',[StdErrEst]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Variable Beta B Std.Error t Prob.>t VIF TOL'); + end; + df1 := 1.0; + df2 := NCases - NoIndepVars - 1; + sum := 0.0; + for i := 0 to NoIndepVars-1 do + begin + beta := BetaWeights[i]; + B := beta * sqrt(Variances[NoVars-1]) / sqrt(Variances[IndepIndex[i]-1]); + sum := sum + B * Means[IndepIndex[i]-1]; + SSx := (NCases-1) * Variances[IndepIndex[i]-1]; + if (IndepCorrs[i,i] > 0.0) and (VarEst > 0.0) then + begin + StdErrB := sqrt(VarEst / (SSx * (1.0 / IndepCorrs[i,i]))); + F := B / StdErrB; + FProbF := probf(F*F,df1,df2); + VIF := IndepCorrs[i,i]; + TOL := 1.0 / VIF; + end + else + begin + ShowMessage('ERROR! Error in estimating std.err. of a B'); + StdErrB := 0.0; + F := 0.0; + FProbF := 0.0; + end; + if (PrintIt = true) then + begin + valstring := format('%10s',[IndRowLabels[i]]); + outline := format('%10s%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f', + [valstring, beta ,B, StdErrB, F, FProbF, VIF, TOL]); + if FprobF > ProbOut then outline := outline + ' Exceeds limit - to be removed.'; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + if FprobF > ProbOut then + begin + outcount := outcount + 1; + varsout[outcount-1] := IndepIndex[i]; + end; + end; + if (PrintIt = true) then OutPutFrm.RichEdit.Lines.Add(''); + { Get constant } + constant := Means[NoVars-1] - sum; + if (PrintIt = true) then + begin + outline := format('Constant = %10.3f',[constant]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + { Now remove any variables that exceed tolerance } + if (outcount > 0) and (TestOut = true) then + begin + for i := 0 to outcount-1 do + begin + k := varsout[i]; { variable to eliminate } + for j := 0 to NoIndepVars-1 do + begin + if IndepIndex[j] = k then {eliminate this one } + begin + for l := j to NoIndepVars-2 do + IndepIndex[l] := IndepIndex[l+1]; + end; + end; + end; + NoIndepVars := NoIndepVars - outcount; + errorcode := outcount; + end; + + varsout := nil; + XYCorrs := nil; + IndColLabels := nil; + IndRowLabels := nil; +end; +//--------------------------------------------------------------------------- + +procedure MATSUB(VAR a, b, c : DblDyneMat; + brows, bcols, crows, ccols : integer; VAR errorcode : boolean); +// Subtracts matrix c from b and returns the results in matrix a +var i, j : integer; +begin + errorcode := FALSE; + if ((brows <> crows) or (bcols <> ccols)) then errorcode := TRUE + else + begin + for i := 0 to brows-1 do + for j := 0 to bcols-1 do + a[i,j] := b[i,j] - c[i,j]; + end; +end; { of matsub } +//--------------------------------------------------------------------------- + +procedure IntArrayPrint(mat : IntDyneMat; + rows, cols : integer; + ytitle : string; + RowLabels, ColLabels : StrDyneVec; + Title : string); +var + i, j, first, last, nflds : integer; + done : boolean; + outline: string; + valstring: string; + +begin + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add(Title); + OutPutFrm.RichEdit.Lines.Add(''); + nflds := 4; + done := FALSE; + first := 1; + while not done do + begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := ' ' + ytitle; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('Variables'); + outline := ' '; + last := first + nflds; + if last >= cols then + begin + done := TRUE; + last := cols + end; + for i := first to last do + begin + outline := outline + format('%13s',[ColLabels[i-1]]); + end; + OutPutFrm.RichEdit.Lines.Add(outline); + + for i := 1 to rows do + begin + outline := format('%10s',[RowLabels[i-1]]); + for j := first to last do + begin + valstring := format('%12d ',[mat[i-1,j-1]]); + outline := outline + valstring; + end; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + first := last + 1 + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add(''); +end; +//--------------------------------------------------------------------------- + +procedure eigens(VAR a: DblDyneMat; Var d : DblDyneVec; n : integer); + +var e : DblDyneVec; + i : integer; + +begin + SetLength(e,n); + for i := 1 to n do + begin + d[i-1] := 0.0; + e[i-1] := 0.0; + end; + + tred2(a, n, d ,e ); { Upon return, d contains diagonal values, e contains + off diagonal values, and a contains the orthogonal + matrix from the tridiagonalization of the a matrix } + + tqli(d, e, n, a); { Upon return, d contains eigenvalues, a the column + eigenvectors of the tridiagonal matrix (in d and e). } + e := nil; +end; { Procedure eigens } +//------------------------------------------------------------------- + +PROCEDURE tred2(VAR a: DblDyneMat; n: integer; VAR d,e: DblDyneVec); +(* Programs using routine TRED2 must define the types +TYPE + glnp = ARRAY [1..np] OF real; + glnpnp = ARRAY [1..np,1..np] OF real; +where 'np by np' is the physical dimension of the matrix to be analyzed. *) + +VAR + l,k,j,i: integer; + scale,hh,h,g,f: double; +BEGIN + IF (n > 1) THEN BEGIN + FOR i := n DOWNTO 2 DO BEGIN + l := i-1; + h := 0.0; + scale := 0.0; + IF (l > 1) THEN BEGIN + FOR k := 1 to l DO BEGIN + scale := scale+abs(a[i-1,k-1]) + END; + IF (scale = 0.0) THEN BEGIN + e[i-1] := a[i-1,l-1] + END ELSE BEGIN + FOR k := 1 to l DO BEGIN + a[i-1,k-1] := a[i-1,k-1]/scale; + h := h+sqr(a[i-1,k-1]) + END; + f := a[i-1,l-1]; + g := -sign(sqrt(h),f); + e[i-1] := scale*g; + h := h-f*g; + a[i-1,l-1] := f-g; + f := 0.0; + FOR j := 1 to l DO BEGIN + (* Next statement can be omitted if eigenvectors not wanted *) + a[j-1,i-1] := a[i-1,j-1]/h; + g := 0.0; + FOR k := 1 to j DO BEGIN + g := g+a[j-1,k-1]*a[i-1,k-1] + END; + IF (l > j) THEN FOR k := j+1 to l DO g := g+a[k-1,j-1]*a[i-1,k-1]; + e[j-1] := g/h; + f := f+e[j-1]*a[i-1,j-1] + END; + hh := f/(h+h); + FOR j := 1 to l DO BEGIN + f := a[i-1,j-1]; + g := e[j-1]-hh*f; + e[j-1] := g; + FOR k := 1 to j DO a[j-1,k-1] := a[j-1,k-1]-f*e[k-1]-g*a[i-1,k-1] + END + END + END ELSE BEGIN + e[i-1] := a[i-1,l-1] + END; + d[i-1] := h + END + END; + (* Next statement can be omitted if eigenvectors not wanted *) + d[0] := 0.0; + e[0] := 0.0; + FOR i := 1 to n DO BEGIN + (* Contents of this loop can be omitted if eigenvectors not wanted, + except for statement d[i] := a[i,i]; *) + l := i-1; + IF (d[i-1] <> 0.0) THEN BEGIN + FOR j := 1 to l DO BEGIN + g := 0.0; + FOR k := 1 to l DO BEGIN + g := g+a[i-1,k-1]*a[k-1,j-1] + END; + FOR k := 1 to l DO BEGIN + a[k-1,j-1] := a[k-1,j-1]-g*a[k-1,i-1] + END + END + END; + d[i-1] := a[i-1,i-1]; + a[i-1,i-1] := 1.0; + IF (l >= 1) THEN BEGIN + FOR j := 1 to l DO BEGIN + a[i-1,j-1] := 0.0; + a[j-1,i-1] := 0.0 + END + END + END +END; +//------------------------------------------------------------------- + +PROCEDURE tqli(VAR d,e: DblDyneVec; n: integer; VAR z: DblDyneMat); +LABEL 1,2; +VAR + m,l,iter,i,k: integer; + s,r,p,g,f,dd,c,b: double; +BEGIN + IF (n > 1) THEN BEGIN + FOR i := 2 to n DO BEGIN + e[i-2] := e[i-1] + END; + e[n-1] := 0.0; + FOR l := 1 to n DO BEGIN + iter := 0; +1: FOR m := l to n-1 DO BEGIN + dd := abs(d[m-1])+abs(d[m]); + IF (abs(e[m-1])+ dd = dd) THEN GOTO 2 + END; + m := n; +2: IF (m <> l) THEN BEGIN + IF (iter = 30) THEN BEGIN + ShowMessage('Too many iterations in routine tqli'); + exit; + END; + iter := iter+1; + g := (d[l]-d[l-1])/(2.0*e[l-1]); + r := sqrt(sqr(g)+1.0); + g := d[m-1] - d[l-1] + e[l-1] / (g+sign(r,g)); + s := 1.0; + c := 1.0; + p := 0.0; + FOR i := m-1 DOWNTO l DO BEGIN + f := s * e[i-1]; + b := c * e[i-1]; + IF (abs(f) >= abs(g)) THEN BEGIN + c := g / f; + r := sqrt(sqr(c) + 1.0); + e[i] := f * r; + s := 1.0 / r; + c := c * s + END ELSE BEGIN + s := f / g; + r := sqrt(sqr(s) + 1.0); + e[i] := g * r; + c := 1.0 / r; + s := s * c + END; + g := d[i] - p; + r := (d[i-1] - g) * s + 2.0 * c * b; + p := s * r; + d[i] := g + p; + g := c * r - b; + (* Next loop can be omitted if eigenvectors not wanted *) + FOR k := 1 to n DO BEGIN + f := z[k-1,i]; + z[k-1,i] := s * z[k-1,i-1] + c * f; + z[k-1,i-1] := c * z[k-1,i-1] - s * f + END + END; + d[l-1] := d[l-1] - p; + e[l-1] := g; + e[m-1] := 0.0; + GOTO 1 + END + END + END +END; +//------------------------------------------------------------------- + +function SEVS(nv,nf : integer; + c : double; + var r : DblDyneMat; + VAR v : DblDyneMat; + VAR e : DblDyneVec; + var p : DblDyneVec; + VAR nd : integer) : integer ; + +{ extracts roots and denormal vectors from a symetric matrix. Veldman, 1967, + page 209 } + +label 1,2; + +var t, ee, ev : double; + i, j, k, m : integer; + +begin + t := 0.0; + for i := 1 to nv do t := t + r[i-1,i-1]; + for k := 1 to nf do { compute roots in e[k] and vector in v^[.k] } + begin + for i := 1 to nv do p[i-1] := 1.0; + begin + e[k-1] := 1.0; + for m := 1 to 25 do + begin + for i := 1 to nv do v[i-1,k-1] := p[i-1] / e[k-1]; + for i := 1 to nv do p[i-1] := SCPF(r,v,-i,k,nv,nd); + ee := 0.0; + for j := 1 to nv do ee := ee + p[j-1] * v[j-1,k-1]; + e[k-1] := sqrt(abs(ee)); + end; + end; + if ee < (c * c) then goto 1; + for i := 1 to nv do + for j := 1 to nv do + r[i-1,j-1] := r[i-1,j-1] - (v[i-1,k-1] * v[j-1,k-1]); + end; + goto 2; +1 : nf := k - 1; +2 : for i := 1 to nf do p[i-1] := e[i-1] / t * 100.0; + ev := 0.0; + for i := 1 to nf do ev := ev + p[i-1]; +{ + stopit; + writeln(lst); + writeln(lst,'Root % Extracted'); + for i := 1 to nf do writeln(lst,i:3,' ',p^[i]:6:3); + writeln(lst,' Trace = ',t:6:3,' % Extracted = ',ev:6:3); + writeln(lst); +} + result := nf; +end; { of SEVS procedure } +//------------------------------------------------------------------- + +function SCPF(VAR x,y : DblDyneMat; kx,ky,n,nd : integer) : double; + +{ sum of cross products of two vectors. Veldman, 1967, pp 128-129 } +var j,k,i : integer; + scp : double; + +begin + scp := 0.0; + scpf := 0.0; + j := abs(kx); + k := abs(ky); + if ((kx = 0) and (ky = 0)) then exit; + if ((kx < 0) and (ky < 0)) then + begin + for i := 1 to n do scp := scp + x[j-1,i-1] * y[k-1,i-1]; + end; + if ((kx < 0) and (ky > 0)) then + begin + for i := 1 to n do scp := scp + x[j-1,i-1] * y[i-1,k-1]; + end; + if ((kx > 0) and (ky < 0)) then + begin + for i := 1 to n do scp := scp + x[i-1,j-1] * y[k-1,i-1]; + end; + if ((kx > 0) and (ky > 0)) then + begin + for i := 1 to n do scp := scp + x[i-1,j-1] * y[i-1,k-1]; + end; + scpf := scp; +end; { of SCPF } +//------------------------------------------------------------------- + +procedure MAT_PRINT(VAR xmat : DblDyneMat ; + rows, cols : integer; + VAR title : string; + VAR RowLabels: StrDyneVec; + VAR ColLabels: StrDyneVec; + NCases: integer); +var + i, j, first, last, nflds : integer; + done : boolean; + outline: string; + valstring: string; + +begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := format(' with %4d cases.',[NCases]); + outline := title + outline; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + nflds := 4; + done := FALSE; + first := 1; + while not done do + begin + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Variables'); + outline := ' '; + last := first + nflds; + if last >= cols then + begin + done := TRUE; + last := cols + end; + for i := first to last do + begin + outline := outline + format('%13s',[ColLabels[i-1]]); + end; + OutPutFrm.RichEdit.Lines.Add(outline); + + for i := 1 to rows do + begin + outline := format('%10s',[RowLabels[i-1]]); + for j := first to last do + begin + valstring := format('%12.3f ',[xmat[i-1,j-1]]); + outline := outline + valstring; + end; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + first := last + 1 + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add(''); +end; +//-------------------------------------------------------------------- + +procedure DynVectorPrint(VAR avector: DblDyneVec; + NoVars : integer; + title : string; + VAR Labels : StrDyneVec; + NCases : integer); +var + i, j, first, last, nflds : integer; + done : boolean; + outline: string; + valstring: string; + +begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := format(' with %4d valid cases.',[NCases]); + outline := title + outline; + OutPutFrm.RichEdit.Lines.Add(outline); + nflds := 4; + done := FALSE; + first := 0; + while not done do + begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := 'Variables'; + last := first + nflds; + if last >= NoVars -1 then + begin + done := TRUE; + last := NoVars-1; + end; + for i := first to last do + begin + outline := outline + format('%13s',[Labels[i]]); + end; + OutPutFrm.RichEdit.Lines.Add(outline); + outline := ' '; + for j := first to last do + begin + valstring := format('%12.3f ',[avector[j]]); + outline := outline + valstring; + end; + OutPutFrm.RichEdit.Lines.Add(outline); + first := last + 1 + end; + OutPutFrm.RichEdit.Lines.Add(''); +end; +//-------------------------------------------------------------------------- + +procedure scatplot(var x : DblDyneVec; + var y : DblDyneVec; + nocases : integer; + titlestr : string; + x_axis, y_axis : string; + x_min, x_max, y_min, y_max : double; + VAR VarLabels : StrDyneVec); + +var + i, j, k, l, row, xslot : integer; + xdelta, ypred, xtemp, maxx, maxy, minx, miny, stepx, stepy : double; + incrementx, incrementy, rangex, rangey, swap : double; + plotstring : array[0..51,0..61] of char; + ymed, xmed : double; + height : integer; + overlap : boolean; + valuestring : string[2]; + howlong : integer; + outline : string; + Labels : StrDyneVec; +begin + SetLength(Labels,NoVariables); + for i := 1 to nocases do Labels[i-1] := VarLabels[i-1]; + height := 40; + rangex := x_max - x_min ; + incrementx := rangex / 15.0; + xdelta := rangex / 60; + xmed := rangex / 2; + rangey := y_max - y_min; + incrementy := rangey / height; + ymed := rangey / 2; + + { sort in descending order } + for i := 1 to (nocases - 1) do + begin + for j := (i + 1) to nocases do + begin + if y[i-1] < y[j-1] then + begin + swap := y[i-1]; + y[i-1] := y[j-1]; + y[j-1] := swap; + swap := x[i-1]; + x[i-1] := x[j-1]; + x[j-1] := swap; + outline := Labels[i-1]; + Labels[i-1] := Labels[j-1]; + Labels[j-1] := outline; + end; + end; + end; + outline := ' SCATTERPLOT - ' + titlestr; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add(y_axis); + maxy := y_max; + for i := 1 to 60 do + for j := 1 to height+1 do plotstring[j,i] := ' '; + + { Set up the plot strings with the data } + row := 0; + while maxy > y_min do + begin + row := row + 1; + plotstring[row,30] := '|'; + if (row = (height / 2)) then + begin + for i := 1 to 60 do plotstring[row,i] := '-'; + end; + for i := 1 to nocases do + begin + if ((maxy >= y[i-1]) and (y[i-1] > (maxy - incrementy))) then + begin + xslot := round(((x[i-1] - x_min) / rangex) * 60); + if xslot < 1 then xslot := 1; + if xslot > 60 then xslot := 60; + overlap := false; + str(i:2,valuestring); + howlong := 1; + if (valuestring[1] <> ' ') then howlong := 2; + for l := xslot to (xslot + howlong - 1) do + if (plotstring[row,l] = '*') then overlap := true; + if (overlap) then plotstring[row,xslot] := '*' + else + begin + if (howlong < 2) then + plotstring[row,xslot] := valuestring[2] + else for l := 1 to 2 do + plotstring[row,xslot + l - 1] := valuestring[l]; + end; + end; + end; + maxy := maxy - incrementy; + end; + { print the plot } + for i := 1 to row do + begin + outline := ' |'; + for j := 1 to 60 do outline := outline + format('%1s',[plotstring[i,j]]); + outline := outline + format('|-%6.2f-%6.2f', + [(y_max - i * incrementy),(y_max - i * incrementy + incrementy)]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + outline := ''; + for i := 1 to 63 do outline := outline + '-'; + OutPutFrm.RichEdit.Lines.Add(outline); + outline := ''; + for i := 1 to 16 do outline := outline + ' | '; + outline := outline + x_axis; + OutPutFrm.RichEdit.Lines.Add(outline); + outline := ''; + for i := 1 to 16 do outline := outline + format('%4.1f',[(x_min + i * incrementx - incrementx)]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Labels:'); + for i := 1 to nocases do + begin + outline := format('%2d = %s',[i,Labels[i-1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + Labels := nil; +end; { of scatplot procedure } +//------------------------------------------------------------------- + +procedure DynIntMatPrint(mat : IntDyneMat; + rows, cols : integer; + ytitle : string; + RowLabels, ColLabels : StrDyneVec; + Title : string); +var + i, j, first, last, nflds : integer; + done : boolean; + outline: string; + valstring: string; + +begin + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add(Title); + OutPutFrm.RichEdit.Lines.Add(''); + nflds := 4; + done := FALSE; + first := 0; + while not done do + begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := ' ' + ytitle; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('Variables'); + outline := ' '; + last := first + nflds; + if last >= cols-1 then + begin + done := TRUE; + last := cols-1 + end; + for i := first to last do + begin + outline := outline + format('%13s',[ColLabels[i]]); + end; + OutPutFrm.RichEdit.Lines.Add(outline); + + for i := 0 to rows-1 do + begin + outline := format('%10s',[RowLabels[i]]); + for j := first to last do + begin + valstring := format('%12d ',[mat[i,j]]); + outline := outline + valstring; + end; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + first := last + 1 + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add(''); +end; + +procedure SymMatRoots(A: DblDyneMat; M: integer; var E: DblDyneVec; +var V: DblDyneMat); +Label one, three, nine, fifteen; +var + L, IT, j, k : integer; + Test, sum1, sum2 : double; + X, Y, Z : DblDyneVec; + +begin +// Adapted from: "Multivariate Data Analysis" by William W. Cooley and Paul +// R. Lohnes, 1971, page 121 + SetLength(X, M); + SetLength(Y, M); + SetLength(Z, M); + sum2 := 0.0; + L := 0; + Test := 0.00000001; +one: + IT := 0; + for j := 0 to M-1 do Y[j] := 1.0; +three: + IT := IT + 1; + for j := 0 to M-1 do + begin + X[j] := 0.0; + for k := 0 to M-1 do X[j] := X[j] + (A[j,k] * Y[k]); + end; + E[L] := X[0]; + Sum1 := 0.0; + for j := 0 to M-1 do + begin + V[j,L] := X[j] / X[0]; + Sum1 := Sum1 + abs(Y[j] - V[j,L]); + Y[j] := V[j,L]; + end; + if (IT - 10) <> 0 then goto nine; + if (Sum2 - Sum1) > 0 then goto nine + else + begin + showmessage('Root not converging. Exiting.'); + exit; + end; +nine: + Sum2 := Sum1; + if (Sum1 - Test) > 0 then goto three; + Sum1 := 0.0; + for j := 0 to M-1 do Sum1 := Sum1 + (V[j,L] * V[j,L]); + Sum1 := sqrt(Sum1); + for j := 0 to M-1 do V[j,L] := V[j,L] / Sum1; + for j := 0 to M-1 do + for k := 0 to M-1 do + A[j,k] := A[j,k] - (V[j,L] * V[k,L] * E[L]); + if ((M-1)-L) <= 0 then goto fifteen; + L := L + 1; + goto one; +fifteen: + Z := nil; + Y := nil; + X := nil; +end; + +procedure matinv(a, vtimesw, v, w: DblDyneMat; n: integer); +LABEL 1,2,3; + +VAR + ainverse : array of array of double; + m,mp,np,nm,l,k,j,its,i: integer; + z,y,x,scale,s,h,g,f,c,anorm: double; + rv1: array of double; + +begin + setlength(rv1,n); + setlength(ainverse,n,n); + m := n; + mp := n; + np := n; + g := 0.0; + scale := 0.0; + anorm := 0.0; + FOR i := 0 to n-1 DO BEGIN + l := i+1; + rv1[i] := scale*g; + g := 0.0; + s := 0.0; + scale := 0.0; + IF (i <= m-1) THEN BEGIN + FOR k := i to m-1 DO BEGIN + scale := scale+abs(a[k,i]) + END; + IF (scale <> 0.0) THEN BEGIN + FOR k := i to m-1 DO BEGIN + a[k,i] := a[k,i]/scale; + s := s+a[k,i]*a[k,i] + END; + f := a[i,i]; + g := -sign(sqrt(s),f); + h := f*g-s; + a[i,i] := f-g; + IF (i <> n-1) THEN BEGIN + FOR j := l to n-1 DO BEGIN + s := 0.0; + FOR k := i to m-1 DO BEGIN + s := s+a[k,i]*a[k,j] + END; + f := s/h; + FOR k := i to m-1 DO BEGIN + a[k,j] := a[k,j]+ + f*a[k,i] + END + END + END; + FOR k := i to m-1 DO BEGIN + a[k,i] := scale*a[k,i] + END + END + END; + w[i,i] := scale*g; + g := 0.0; + s := 0.0; + scale := 0.0; + IF ((i <= m-1) AND (i <> n-1)) THEN BEGIN + FOR k := l to n-1 DO BEGIN + scale := scale+abs(a[i,k]) + END; + IF (scale <> 0.0) THEN BEGIN + FOR k := l to n-1 DO BEGIN + a[i,k] := a[i,k]/scale; + s := s+a[i,k]*a[i,k] + END; + f := a[i,l]; + g := -sign(sqrt(s),f); + h := f*g-s; + a[i,l] := f-g; + FOR k := l to n-1 DO BEGIN + rv1[k] := a[i,k]/h + END; + IF (i <> m-1) THEN BEGIN + FOR j := l to m-1 DO BEGIN + s := 0.0; + FOR k := l to n-1 DO BEGIN + s := s+a[j,k]*a[i,k] + END; + FOR k := l to n-1 DO BEGIN + a[j,k] := a[j,k] + +s*rv1[k] + END + END + END; + FOR k := l to n-1 DO BEGIN + a[i,k] := scale*a[i,k] + END + END + END; + anorm := max(anorm,(abs(w[i,i])+abs(rv1[i]))) + END; + FOR i := n-1 DOWNTO 0 DO BEGIN + IF (i < n-1) THEN BEGIN + IF (g <> 0.0) THEN BEGIN + FOR j := l to n-1 DO BEGIN + v[j,i] := (a[i,j]/a[i,l])/g + END; + FOR j := l to n-1 DO BEGIN + s := 0.0; + FOR k := l to n-1 DO BEGIN + s := s+a[i,k]*v[k,j] + END; + FOR k := l to n-1 DO BEGIN + v[k,j] := v[k,j]+s*v[k,i] + END + END + END; + FOR j := l to n-1 DO BEGIN + v[i,j] := 0.0; + v[j,i] := 0.0 + END + END; + v[i,i] := 1.0; + g := rv1[i]; + l := i + END; + FOR i := n-1 DOWNTO 0 DO BEGIN + l := i+1; + g := w[i,i]; + IF (i < n-1) THEN BEGIN + FOR j := l to n-1 DO BEGIN + a[i,j] := 0.0 + END + END; + IF (g <> 0.0) THEN BEGIN + g := 1.0/g; + IF (i <> n-1) THEN BEGIN + FOR j := l to n-1 DO BEGIN + s := 0.0; + FOR k := l to m-1 DO BEGIN + s := s+a[k,i]*a[k,j] + END; + f := (s/a[i,i])*g; + FOR k := i to m-1 DO BEGIN + a[k,j] := a[k,j]+f*a[k,i] + END + END + END; + FOR j := i to m-1 DO BEGIN + a[j,i] := a[j,i]*g + END + END ELSE BEGIN + FOR j := i to m-1 DO BEGIN + a[j,i] := 0.0 + END + END; + a[i,i] := a[i,i]+1.0 + END; + FOR k := n-1 DOWNTO 0 DO BEGIN + FOR its := 1 to 30 DO BEGIN + FOR l := k DOWNTO 0 DO BEGIN + nm := l-1; + IF ((abs(rv1[l])+anorm) = anorm) THEN GOTO 2; + IF ((abs(w[nm,nm])+anorm) = anorm) THEN GOTO 1 + END; +1: c := 0.0; + s := 1.0; + FOR i := l to k DO BEGIN + f := s*rv1[i]; + IF ((abs(f)+anorm) <> anorm) THEN BEGIN + g := w[i,i]; + h := sqrt(f*f+g*g); + w[i,i] := h; + h := 1.0/h; + c := (g*h); + s := -(f*h); + FOR j := 0 to m-1 DO BEGIN + y := a[j,nm]; + z := a[j,i]; + a[j,nm] := (y*c)+(z*s); + a[j,i] := -(y*s)+(z*c) + END + END + END; +2: z := w[k,k]; + IF (l = k) THEN BEGIN + IF (z < 0.0) THEN BEGIN + w[k,k] := -z; + FOR j := 0 to n-1 DO BEGIN + v[j,k] := -v[j,k] + END + END; + GOTO 3 + END; + IF (its = 30) THEN BEGIN + showmessage('No convergence in 30 SVDCMP iterations'); + exit; + END; + x := w[l,l]; + nm := k-1; + y := w[nm,nm]; + g := rv1[nm]; + h := rv1[k]; + f := ((y-z)*(y+z)+(g-h)*(g+h))/(2.0*h*y); + g := sqrt(f*f+1.0); + f := ((x-z)*(x+z)+h*((y/(f+sign(g,f)))-h))/x; + c := 1.0; + s := 1.0; + FOR j := l to nm DO BEGIN + i := j+1; + g := rv1[i]; + y := w[i,i]; + h := s*g; + g := c*g; + z := sqrt(f*f+h*h); + rv1[j] := z; + c := f/z; + s := h/z; + f := (x*c)+(g*s); + g := -(x*s)+(g*c); + h := y*s; + y := y*c; + FOR nm := 0 to n-1 DO BEGIN + x := v[nm,j]; + z := v[nm,i]; + v[nm,j] := (x*c)+(z*s); + v[nm,i] := -(x*s)+(z*c) + END; + z := sqrt(f*f+h*h); + w[j,j] := z; + IF (z <> 0.0) THEN BEGIN + z := 1.0/z; + c := f*z; + s := h*z + END; + f := (c*g)+(s*y); + x := -(s*g)+(c*y); + FOR nm := 0 to m-1 DO BEGIN + y := a[nm,j]; + z := a[nm,i]; + a[nm,j] := (y*c)+(z*s); + a[nm,i] := -(y*s)+(z*c) + END + END; + rv1[l] := 0.0; + rv1[k] := f; + w[k,k] := x + END; +3: END; +{ mat_print(m,a,'U matrix'); + mat_print(n,v,'V matrix'); + writeln(lst,'Diagonal values of W inverse matrix'); + for i := 1 to n do + write(lst,1/w[i]:6:3); + writeln(lst); } + for i := 0 to n-1 do + for j := 0 to n-1 do + begin + if w[i,i] < 1.0e-6 then vtimesw[i,j] := 0 + else vtimesw[i,j] := v[i,j] * (1.0 / w[j,j] ); + end; +{ mat_print(n,vtimesw,'V matrix times w inverse '); } + for i := 0 to m-1 do + for j := 0 to n-1 do + begin + ainverse[i,j] := 0.0; + for k := 0 to m-1 do + begin + ainverse[i,j] := ainverse[i,j] + vtimesw[i,k] * a[j,k] + end; + end; +{ mat_print(n,ainverse,'Inverse Matrix'); } + for i := 0 to n-1 do + for j := 0 to n-1 do + a[i,j] := ainverse[i,j]; + ainverse := nil; + rv1 := nil; +end; +end. + diff --git a/applications/lazstats/source_orig/mcitemunit.lfm b/applications/lazstats/source_orig/mcitemunit.lfm new file mode 100644 index 000000000..f113bd5e1 --- /dev/null +++ b/applications/lazstats/source_orig/mcitemunit.lfm @@ -0,0 +1,313 @@ +object MCItemForm: TMCItemForm + Left = 188 + Height = 604 + Top = 127 + Width = 626 + Caption = 'Multiple Choice Item Create or Edit' + ClientHeight = 604 + ClientWidth = 626 + OnShow = FormShow + LCLVersion = '0.9.30' + object jpeglabel: TLabel + Left = 7 + Height = 16 + Top = 424 + Width = 225 + Caption = 'jpeg photo to display prior to item (if any):' + ParentColor = False + end + object jpegnameEdit: TEdit + Left = 236 + Height = 23 + Top = 416 + Width = 372 + TabOrder = 0 + Text = 'jpegnameEdit' + end + object jpegBrowseBtn: TButton + Left = 1 + Height = 30 + Top = 455 + Width = 118 + Caption = 'Browse jpeg Images' + OnClick = jpegBrowseBtnClick + TabOrder = 1 + end + object SelectImageBtn: TButton + Left = 7 + Height = 26 + Top = 560 + Width = 112 + Caption = 'Select Shown Image' + OnClick = SelectImageBtnClick + TabOrder = 2 + end + object ItemSaveBtn: TButton + Left = 368 + Height = 33 + Top = 455 + Width = 111 + Caption = 'Save this item' + OnClick = ItemSaveBtnClick + TabOrder = 3 + end + object PreviousBtn: TButton + Left = 496 + Height = 32 + Top = 456 + Width = 110 + Caption = 'Show Previous Item' + OnClick = PreviousBtnClick + TabOrder = 4 + end + object ShowNextBtn: TButton + Left = 368 + Height = 30 + Top = 512 + Width = 109 + Caption = 'Show Next Item' + OnClick = ShowNextBtnClick + TabOrder = 5 + end + object StartNewBtn: TButton + Left = 498 + Height = 30 + Top = 512 + Width = 111 + Caption = 'Start a new item' + OnClick = StartNewBtnClick + TabOrder = 6 + end + object ReturnBtn: TButton + Left = 432 + Height = 30 + Top = 560 + Width = 111 + Caption = 'Return' + OnClick = ReturnBtnClick + TabOrder = 7 + end + object ItemStemLabel: TLabel + Left = 7 + Height = 16 + Top = 144 + Width = 58 + Caption = 'Item Stem:' + ParentColor = False + end + object ItemStemEdit: TEdit + Left = 80 + Height = 23 + Top = 136 + Width = 539 + TabOrder = 8 + Text = 'ItemStemEdit' + end + object AnswerLabel: TLabel + Left = 7 + Height = 16 + Top = 392 + Width = 117 + Caption = 'Answer (A,B,C,D or F):' + ParentColor = False + end + object AnswerEdit: TEdit + Left = 128 + Height = 23 + Top = 384 + Width = 29 + TabOrder = 9 + end + object Label1: TLabel + Left = 267 + Height = 16 + Top = 200 + Width = 46 + Caption = 'Choices:' + ParentColor = False + end + object Label2: TLabel + Left = 9 + Height = 16 + Top = 231 + Width = 15 + Caption = 'A. ' + ParentColor = False + end + object Label3: TLabel + Left = 8 + Height = 16 + Top = 263 + Width = 14 + Caption = 'B. ' + ParentColor = False + end + object Label4: TLabel + Left = 7 + Height = 16 + Top = 295 + Width = 15 + Caption = 'C. ' + ParentColor = False + end + object Label5: TLabel + Left = 7 + Height = 16 + Top = 327 + Width = 15 + Caption = 'D. ' + ParentColor = False + end + object Label6: TLabel + Left = 9 + Height = 16 + Top = 359 + Width = 13 + Caption = 'E. ' + ParentColor = False + end + object ChoiceAEdit: TEdit + Left = 34 + Height = 23 + Top = 224 + Width = 585 + TabOrder = 10 + Text = 'ChoiceAEdit' + end + object ChoiceDEdit: TEdit + Left = 34 + Height = 23 + Top = 320 + Width = 585 + TabOrder = 11 + Text = 'Edit1' + end + object ChoiceEEdit: TEdit + Left = 34 + Height = 23 + Top = 352 + Width = 585 + TabOrder = 12 + Text = 'Edit1' + end + object ChoiceCEdit: TEdit + Left = 34 + Height = 23 + Top = 288 + Width = 585 + TabOrder = 13 + Text = 'Edit1' + end + object ChoiceBEdit: TEdit + Left = 34 + Height = 23 + Top = 256 + Width = 585 + TabOrder = 14 + Text = 'Edit1' + end + object Memo1: TMemo + Left = 8 + Height = 81 + Top = 7 + Width = 608 + Lines.Strings = ( + 'Directions: To create a Multiple Choice item, you will need to enter the number of an item code which ' + 'contains' + 'both a major code and a minor code. It is suggested you print all item codes from the options menu on the' + 'main procedure page of the item banking program. You can however, browse the MC items from this ' + 'form.' + 'After you have selected an item code number, enter the item stem in the space provided. Your item can also' + 'include a jpeg picture prior to the presentation of the item on a test. To find the image, click the jpeg browse' + 'button until you see the image you wish to include. When that item is shown, click the Select button to save' + 'the name of the image file.' + 'Memo1' + ) + ScrollBars = ssVertical + TabOrder = 15 + end + object Image1: TImage + Left = 136 + Height = 130 + Top = 455 + Width = 217 + end + object TFItemNoLabel: TLabel + Left = 9 + Height = 16 + Top = 112 + Width = 75 + Caption = 'Item Number:' + ParentColor = False + end + object ItemNoEdit: TEdit + Left = 104 + Height = 23 + Top = 105 + Width = 44 + TabOrder = 16 + Text = '1' + end + object ItemCodeLabel: TLabel + Left = 168 + Height = 16 + Top = 112 + Width = 93 + Caption = 'Item Major Code:' + ParentColor = False + end + object MajorCodeEdit: TEdit + Left = 272 + Height = 23 + Top = 105 + Width = 41 + TabOrder = 17 + Text = '1' + end + object MinorCodeLabel: TLabel + Left = 336 + Height = 16 + Top = 112 + Width = 94 + Caption = 'Item Minor Code:' + ParentColor = False + end + object MinorCodeEdit: TEdit + Left = 440 + Height = 23 + Top = 105 + Width = 45 + TabOrder = 18 + Text = '0' + end + object CodeBrowseBtn: TButton + Left = 510 + Height = 28 + Top = 100 + Width = 106 + Caption = 'Browse Items' + OnClick = CodeBrowseBtnClick + TabOrder = 19 + end + object Label7: TLabel + Left = 11 + Height = 16 + Top = 184 + Width = 224 + Caption = 'Enter number of choices and press return: ' + ParentColor = False + end + object NoChoicesEdit: TEdit + Left = 240 + Height = 23 + Top = 168 + Width = 32 + OnChange = NoChoicesEditChange + TabOrder = 20 + Text = '0' + end + object OpenPictureDialog1: TOpenPictureDialog + left = 512 + top = 368 + end +end diff --git a/applications/lazstats/source_orig/mcitemunit.lrs b/applications/lazstats/source_orig/mcitemunit.lrs new file mode 100644 index 000000000..1780bb198 --- /dev/null +++ b/applications/lazstats/source_orig/mcitemunit.lrs @@ -0,0 +1,83 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TMCItemForm','FORMDATA',[ + 'TPF0'#11'TMCItemForm'#10'MCItemForm'#4'Left'#3#188#0#6'Height'#3'\'#2#3'Top' + +#2#127#5'Width'#3'r'#2#7'Caption'#6'#Multiple Choice Item Create or Edit'#12 + +'ClientHeight'#3'\'#2#11'ClientWidth'#3'r'#2#6'OnShow'#7#8'FormShow'#10'LCLV' + +'ersion'#6#6'0.9.30'#0#6'TLabel'#9'jpeglabel'#4'Left'#2#7#6'Height'#2#16#3'T' + +'op'#3#168#1#5'Width'#3#225#0#7'Caption'#6'-jpeg photo to display prior to i' + +'tem (if any):'#11'ParentColor'#8#0#0#5'TEdit'#12'jpegnameEdit'#4'Left'#3#236 + +#0#6'Height'#2#23#3'Top'#3#160#1#5'Width'#3't'#1#8'TabOrder'#2#0#4'Text'#6#12 + +'jpegnameEdit'#0#0#7'TButton'#13'jpegBrowseBtn'#4'Left'#2#1#6'Height'#2#30#3 + +'Top'#3#199#1#5'Width'#2'v'#7'Caption'#6#18'Browse jpeg Images'#7'OnClick'#7 + +#18'jpegBrowseBtnClick'#8'TabOrder'#2#1#0#0#7'TButton'#14'SelectImageBtn'#4 + +'Left'#2#7#6'Height'#2#26#3'Top'#3'0'#2#5'Width'#2'p'#7'Caption'#6#18'Select' + +' Shown Image'#7'OnClick'#7#19'SelectImageBtnClick'#8'TabOrder'#2#2#0#0#7'TB' + +'utton'#11'ItemSaveBtn'#4'Left'#3'p'#1#6'Height'#2'!'#3'Top'#3#199#1#5'Width' + +#2'o'#7'Caption'#6#14'Save this item'#7'OnClick'#7#16'ItemSaveBtnClick'#8'Ta' + +'bOrder'#2#3#0#0#7'TButton'#11'PreviousBtn'#4'Left'#3#240#1#6'Height'#2' '#3 + +'Top'#3#200#1#5'Width'#2'n'#7'Caption'#6#18'Show Previous Item'#7'OnClick'#7 + +#16'PreviousBtnClick'#8'TabOrder'#2#4#0#0#7'TButton'#11'ShowNextBtn'#4'Left' + +#3'p'#1#6'Height'#2#30#3'Top'#3#0#2#5'Width'#2'm'#7'Caption'#6#14'Show Next ' + +'Item'#7'OnClick'#7#16'ShowNextBtnClick'#8'TabOrder'#2#5#0#0#7'TButton'#11'S' + +'tartNewBtn'#4'Left'#3#242#1#6'Height'#2#30#3'Top'#3#0#2#5'Width'#2'o'#7'Cap' + +'tion'#6#16'Start a new item'#7'OnClick'#7#16'StartNewBtnClick'#8'TabOrder'#2 + +#6#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3#176#1#6'Height'#2#30#3'Top'#3'0'#2#5 + +'Width'#2'o'#7'Caption'#6#6'Return'#7'OnClick'#7#14'ReturnBtnClick'#8'TabOrd' + +'er'#2#7#0#0#6'TLabel'#13'ItemStemLabel'#4'Left'#2#7#6'Height'#2#16#3'Top'#3 + +#144#0#5'Width'#2':'#7'Caption'#6#10'Item Stem:'#11'ParentColor'#8#0#0#5'TEd' + +'it'#12'ItemStemEdit'#4'Left'#2'P'#6'Height'#2#23#3'Top'#3#136#0#5'Width'#3 + +#27#2#8'TabOrder'#2#8#4'Text'#6#12'ItemStemEdit'#0#0#6'TLabel'#11'AnswerLabe' + +'l'#4'Left'#2#7#6'Height'#2#16#3'Top'#3#136#1#5'Width'#2'u'#7'Caption'#6#22 + +'Answer (A,B,C,D or F):'#11'ParentColor'#8#0#0#5'TEdit'#10'AnswerEdit'#4'Lef' + +'t'#3#128#0#6'Height'#2#23#3'Top'#3#128#1#5'Width'#2#29#8'TabOrder'#2#9#0#0#6 + +'TLabel'#6'Label1'#4'Left'#3#11#1#6'Height'#2#16#3'Top'#3#200#0#5'Width'#2'.' + +#7'Caption'#6#8'Choices:'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2 + +#9#6'Height'#2#16#3'Top'#3#231#0#5'Width'#2#15#7'Caption'#6#3'A. '#11'Parent' + +'Color'#8#0#0#6'TLabel'#6'Label3'#4'Left'#2#8#6'Height'#2#16#3'Top'#3#7#1#5 + +'Width'#2#14#7'Caption'#6#3'B. '#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4 + +'Left'#2#7#6'Height'#2#16#3'Top'#3''''#1#5'Width'#2#15#7'Caption'#6#3'C. '#11 + +'ParentColor'#8#0#0#6'TLabel'#6'Label5'#4'Left'#2#7#6'Height'#2#16#3'Top'#3 + +'G'#1#5'Width'#2#15#7'Caption'#6#3'D. '#11'ParentColor'#8#0#0#6'TLabel'#6'La' + +'bel6'#4'Left'#2#9#6'Height'#2#16#3'Top'#3'g'#1#5'Width'#2#13#7'Caption'#6#3 + +'E. '#11'ParentColor'#8#0#0#5'TEdit'#11'ChoiceAEdit'#4'Left'#2'"'#6'Height'#2 + +#23#3'Top'#3#224#0#5'Width'#3'I'#2#8'TabOrder'#2#10#4'Text'#6#11'ChoiceAEdit' + +#0#0#5'TEdit'#11'ChoiceDEdit'#4'Left'#2'"'#6'Height'#2#23#3'Top'#3'@'#1#5'Wi' + +'dth'#3'I'#2#8'TabOrder'#2#11#4'Text'#6#5'Edit1'#0#0#5'TEdit'#11'ChoiceEEdit' + +#4'Left'#2'"'#6'Height'#2#23#3'Top'#3'`'#1#5'Width'#3'I'#2#8'TabOrder'#2#12#4 + +'Text'#6#5'Edit1'#0#0#5'TEdit'#11'ChoiceCEdit'#4'Left'#2'"'#6'Height'#2#23#3 + +'Top'#3' '#1#5'Width'#3'I'#2#8'TabOrder'#2#13#4'Text'#6#5'Edit1'#0#0#5'TEdit' + +#11'ChoiceBEdit'#4'Left'#2'"'#6'Height'#2#23#3'Top'#3#0#1#5'Width'#3'I'#2#8 + +'TabOrder'#2#14#4'Text'#6#5'Edit1'#0#0#5'TMemo'#5'Memo1'#4'Left'#2#8#6'Heigh' + +'t'#2'Q'#3'Top'#2#7#5'Width'#3'`'#2#13'Lines.Strings'#1#6'gDirections: To c' + +'reate a Multiple Choice item, you will need to enter the number of an item ' + +'code which '#6#8'contains'#6'jboth a major code and a minor code. It is su' + +'ggested you print all item codes from the options menu on the'#6'bmain proc' + +'edure page of the item banking program. You can however, browse the MC ite' + +'ms from this '#6#5'form.'#6'kAfter you have selected an item code number, ' + +'enter the item stem in the space provided. Your item can also'#6'qinclude ' + +'a jpeg picture prior to the presentation of the item on a test. To find th' + +'e image, click the jpeg browse'#6'mbutton until you see the image you wish ' + +'to include. When that item is shown, click the Select button to save'#6#27 + +'the name of the image file.'#6#5'Memo1'#0#10'ScrollBars'#7#10'ssVertical'#8 + +'TabOrder'#2#15#0#0#6'TImage'#6'Image1'#4'Left'#3#136#0#6'Height'#3#130#0#3 + +'Top'#3#199#1#5'Width'#3#217#0#0#0#6'TLabel'#13'TFItemNoLabel'#4'Left'#2#9#6 + +'Height'#2#16#3'Top'#2'p'#5'Width'#2'K'#7'Caption'#6#12'Item Number:'#11'Par' + +'entColor'#8#0#0#5'TEdit'#10'ItemNoEdit'#4'Left'#2'h'#6'Height'#2#23#3'Top'#2 + +'i'#5'Width'#2','#8'TabOrder'#2#16#4'Text'#6#1'1'#0#0#6'TLabel'#13'ItemCodeL' + ,'abel'#4'Left'#3#168#0#6'Height'#2#16#3'Top'#2'p'#5'Width'#2']'#7'Caption'#6 + +#16'Item Major Code:'#11'ParentColor'#8#0#0#5'TEdit'#13'MajorCodeEdit'#4'Lef' + +'t'#3#16#1#6'Height'#2#23#3'Top'#2'i'#5'Width'#2')'#8'TabOrder'#2#17#4'Text' + +#6#1'1'#0#0#6'TLabel'#14'MinorCodeLabel'#4'Left'#3'P'#1#6'Height'#2#16#3'Top' + +#2'p'#5'Width'#2'^'#7'Caption'#6#16'Item Minor Code:'#11'ParentColor'#8#0#0#5 + +'TEdit'#13'MinorCodeEdit'#4'Left'#3#184#1#6'Height'#2#23#3'Top'#2'i'#5'Width' + +#2'-'#8'TabOrder'#2#18#4'Text'#6#1'0'#0#0#7'TButton'#13'CodeBrowseBtn'#4'Lef' + +'t'#3#254#1#6'Height'#2#28#3'Top'#2'd'#5'Width'#2'j'#7'Caption'#6#12'Browse ' + +'Items'#7'OnClick'#7#18'CodeBrowseBtnClick'#8'TabOrder'#2#19#0#0#6'TLabel'#6 + +'Label7'#4'Left'#2#11#6'Height'#2#16#3'Top'#3#184#0#5'Width'#3#224#0#7'Capti' + +'on'#6'*Enter number of choices and press return: '#11'ParentColor'#8#0#0#5 + +'TEdit'#13'NoChoicesEdit'#4'Left'#3#240#0#6'Height'#2#23#3'Top'#3#168#0#5'Wi' + +'dth'#2' '#8'OnChange'#7#19'NoChoicesEditChange'#8'TabOrder'#2#20#4'Text'#6#1 + +'0'#0#0#18'TOpenPictureDialog'#18'OpenPictureDialog1'#4'left'#3#0#2#3'top'#3 + +'p'#1#0#0#0 +]); diff --git a/applications/lazstats/source_orig/mcitemunit.pas b/applications/lazstats/source_orig/mcitemunit.pas new file mode 100644 index 000000000..8d01de2e8 --- /dev/null +++ b/applications/lazstats/source_orig/mcitemunit.pas @@ -0,0 +1,381 @@ +unit MCItemUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, ExtCtrls, ExtDlgs, outputunit; + +type + + { TMCItemForm } + + TMCItemForm = class(TForm) + AnswerEdit: TEdit; + AnswerLabel: TLabel; + ChoiceAEdit: TEdit; + ChoiceDEdit: TEdit; + ChoiceEEdit: TEdit; + ChoiceCEdit: TEdit; + ChoiceBEdit: TEdit; + CodeBrowseBtn: TButton; + NoChoicesEdit: TEdit; + Image1: TImage; + ItemCodeLabel: TLabel; + ItemSaveBtn: TButton; + ItemStemEdit: TEdit; + ItemStemLabel: TLabel; + jpegBrowseBtn: TButton; + jpeglabel: TLabel; + jpegnameEdit: TEdit; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + Label5: TLabel; + Label6: TLabel; + Label7: TLabel; + MajorCodeEdit: TEdit; + Memo1: TMemo; + MinorCodeEdit: TEdit; + MinorCodeLabel: TLabel; + OpenPictureDialog1: TOpenPictureDialog; + PreviousBtn: TButton; + ReturnBtn: TButton; + SelectImageBtn: TButton; + ShowNextBtn: TButton; + StartNewBtn: TButton; + ItemNoEdit: TEdit; + TFItemNoLabel: TLabel; + procedure CodeBrowseBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure ItemSaveBtnClick(Sender: TObject); + procedure jpegBrowseBtnClick(Sender: TObject); + procedure NoChoicesEditChange(Sender: TObject); + procedure PreviousBtnClick(Sender: TObject); + procedure ReturnBtnClick(Sender: TObject); + procedure SelectImageBtnClick(Sender: TObject); + procedure ShowNextBtnClick(Sender: TObject); + procedure StartNewBtnClick(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + MCItemForm: TMCItemForm; + +implementation +uses ItemBankingUnit; + +{ TMCItemForm } + +procedure TMCItemForm.jpegBrowseBtnClick(Sender: TObject); +VAR + JPEG : TJPEGImage; +begin + OpenPictureDialog1.Options := OpenPictureDialog1.Options+[ofFileMustExist]; + if not OpenPictureDialog1.Execute then exit; + try + JPEG := TJPEGImage.Create; + try + JPEG.LoadFromFile(OpenPictureDialog1.FileName); + Image1.Picture.Assign(JPEG); + finally + JPEG.Free; + end; + except + on E: Exception do begin + MessageDlg('Error','Error: '+E.Message,mtError,[mbOk],0); + end; + end; + Image1.Proportional := true; +end; + +procedure TMCItemForm.NoChoicesEditChange(Sender: TObject); +var + nochoices : integer; +begin + nochoices := StrToInt(NoChoicesEdit.Text); + if nochoices > 0 then ChoiceAEdit.Visible := true else ChoiceAEdit.Visible := false; + if nochoices > 1 then ChoiceBEdit.Visible := true else ChoiceBEdit.Visible := false; + if nochoices > 2 then ChoiceCEdit.Visible := true else ChoiceCEdit.Visible := false; + if nochoices > 3 then ChoiceDEdit.Visible := true else ChoiceDEdit.Visible := false; + if nochoices > 4 then ChoiceEEdit.Visible := true else ChoiceEEdit.Visible := false; +end; + +procedure TMCItemForm.PreviousBtnClick(Sender: TObject); +Var + response : string; + itemno : integer; + JPEG : TJPEGImage; + nochoices : integer; +begin + response := InputBox('Save current item?','Save','Y'); + if response = 'Y' then ItemSaveBtnClick(self); + Image1.Canvas.Clear; + ChoiceAEdit.Text := ''; + ChoiceBEdit.Text := ''; + ChoiceCEdit.Text := ''; + ChoiceDEdit.Text := ''; + ChoiceEEdit.Text := ''; + response := InputBox('Code Number:','Number:','1'); + itemno := StrToInt(response); + if itemno <= ItemBankFrm.BankInfo.NMCItems then + begin + nochoices := ItemBankFrm.MCItemInfo[itemno].NoChoices; + ItemNoEdit.Text := IntToStr(ItemBankFrm.MCItemInfo[itemno].ItemNumber); + MajorCodeEdit.Text := IntToStr(ItemBankFrm.MCItemInfo[itemno].majorcode); + MinorCodeEdit.Text := IntToStr(ItemBankFrm.MCItemInfo[itemno].minorcode); + NoChoicesEdit.Text := IntToStr(ItemBankFrm.MCItemInfo[itemno].NoChoices); + ItemStemEdit.Text := ItemBankFrm.MCItemInfo[itemno].ItemStem ; + if nochoices > 0 then ChoiceAEdit.Text := ItemBankFrm.MCItemInfo[itemno].ChoiceOne; + if nochoices > 1 then ChoiceBEdit.Text := ItemBankFrm.MCItemInfo[itemno].ChoiceTwo; + if nochoices > 2 then ChoiceCEdit.Text := ItemBankFrm.MCItemInfo[itemno].ChoiceThree; + if nochoices > 3 then ChoiceDEdit.Text := ItemBankFrm.MCItemInfo[itemno].ChoiceFour; + if nochoices > 4 then ChoiceEEdit.Text := ItemBankFrm.MCItemInfo[itemno].ChoiceFive; + AnswerEdit.Text := ItemBankFrm.MCItemInfo[itemno].CorrectChoice; + jpegnameEdit.Text := ItemBankFrm.MCItemInfo[itemno].PicName; + if jpegnameEdit.Text <> 'none' then + begin + JPEG := TJPEGImage.Create; + try + JPEG.LoadFromFile(jpegnameEdit.Text); + Image1.Picture.Assign(JPEG); + finally + JPEG.Free; + Image1.Proportional := true; + end; + end; + end; +end; + +procedure TMCItemForm.ReturnBtnClick(Sender: TObject); +begin + MCItemForm.Hide; + Close; +end; + +procedure TMCItemForm.ItemSaveBtnClick(Sender: TObject); +var + currentno : integer; + count : integer; + nochoices : integer; +begin + count := ItemBankFrm.BankInfo.NMCItems; + currentno := StrToInt(ItemNoEdit.Text); + if currentno > count then + begin + ItemBankFrm.BankInfo.NMCItems := currentno; + ItemBankFrm.NMCItemsText.Text := IntToStr(currentno); + end; + nochoices := StrToInt(NoChoicesEdit.Text); + ItemBankFrm.MCItemInfo[currentno].ItemNumber := currentno; + ItemBankFrm.MCItemInfo[currentno].majorcode := StrToInt(MajorCodeEdit.Text); + ItemBankFrm.MCItemInfo[currentno].minorcode := StrToInt(MinorCodeEdit.Text); + ItemBankFrm.MCItemInfo[currentno].NoChoices := nochoices; + ItemBankFrm.MCItemInfo[currentno].ItemStem := ItemStemEdit.Text; + if nochoices > 0 then ItemBankFrm.MCItemInfo[currentno].ChoiceOne := ChoiceAEdit.Text; + if nochoices > 1 then ItemBankFrm.MCItemInfo[currentno].ChoiceTwo := ChoiceBEdit.Text; + if nochoices > 2 then ItemBankFrm.MCItemInfo[currentno].ChoiceThree := ChoiceCEdit.Text; + if nochoices > 3 then ItemBankFrm.MCItemInfo[currentno].ChoiceFour := ChoiceDEdit.Text; + if nochoices > 4 then ItemBankFrm.MCItemInfo[currentno].ChoiceFive := ChoiceEEdit.Text; + ItemBankFrm.MCItemInfo[currentno].CorrectChoice := AnswerEdit.Text[1]; + ItemBankFrm.MCItemInfo[currentno].PicName := jpegnameEdit.Text; +end; + +procedure TMCItemForm.FormShow(Sender: TObject); +Var + JPEG : TJPEGImage; + nochoices : integer; +begin + ChoiceAEdit.Text := ''; + ChoiceBEdit.Text := ''; + ChoiceCEdit.Text := ''; + ChoiceDEdit.Text := ''; + ChoiceEEdit.Text := ''; + Image1.Canvas.Clear; + if ItemBankFrm.BankInfo.NMCItems > 0 then + begin + ItemNoEdit.Text := IntToStr(ItemBankFrm.MCItemInfo[1].ItemNumber); + MajorCodeEdit.Text := IntToStr(ItemBankFrm.MCItemInfo[1].majorcode) ; + MinorCodeEdit.Text := IntToStr(ItemBankFrm.MCItemInfo[1].minorcode); + nochoices := ItemBankFrm.MCItemInfo[1].NoChoices; + NoChoicesEdit.Text := IntToStr(nochoices); + ItemStemEdit.Text := ItemBankFrm.MCItemInfo[1].ItemStem; + AnswerEdit.Text := ItemBankFrm.MCItemInfo[1].CorrectChoice; + if nochoices > 0 then ChoiceAEdit.Text := ItemBankFrm.MCItemInfo[1].ChoiceOne; + if nochoices > 1 then ChoiceBEdit.Text := ItemBankFrm.MCItemInfo[1].ChoiceTwo; + if nochoices > 2 then ChoiceCEdit.Text := ItemBankFrm.MCItemInfo[1].ChoiceThree; + if nochoices > 3 then ChoiceDEdit.Text := ItemBankFrm.MCItemInfo[1].ChoiceFour; + if nochoices > 4 then ChoiceEEdit.Text := ItemBankFrm.MCItemInfo[1].ChoiceFive; + jpegnameEdit.Text := ItemBankFrm.MCItemInfo[1].PicName; + if jpegnameEdit.Text <> 'none' then + begin + JPEG := TJPEGImage.Create; + try + JPEG.LoadFromFile(jpegnameEdit.Text); + Image1.Picture.Assign(JPEG); + finally + JPEG.Free; + Image1.Proportional := true; + end; + end; + end else + begin + ItemNoEdit.Text := '1'; + MajorCodeEdit.Text := '1'; + MinorCodeEdit.Text := '0'; + ItemStemEdit.Text := ''; + AnswerEdit.Text := ''; + jpegnameEdit.Text := 'none'; + Image1.Canvas.Clear; + end; +end; + +procedure TMCItemForm.CodeBrowseBtnClick(Sender: TObject); +var + count : integer; + i : integer; + outline : string; + nochoices : integer; +begin + OutPutFrm.RichEdit.Clear; + count := ItemBankFrm.BankInfo.NMCItems; + OutPutFrm.RichEdit.Lines.Add('Current Items'); + OutPutFrm.RichEdit.Lines.Add(''); + + for i := 1 to count do + begin + ChoiceAEdit.Text := ''; + ChoiceBEdit.Text := ''; + ChoiceCEdit.Text := ''; + ChoiceDEdit.Text := ''; + ChoiceEEdit.Text := ''; + nochoices := ItemBankFrm.MCItemInfo[i].NoChoices; + outline := format('Item number %3d',[ItemBankFrm.MCItemInfo[i].itemnumber]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Major Code %3d',[ItemBankFrm.MCItemInfo[i].majorcode]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Minor Code %3d',[ItemBankFrm.MCItemInfo[i].minorcode]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('No. of Choices %3d',[ItemBankFrm.MCItemInfo[i].NoChoices]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Item Stem %s',[ItemBankFrm.MCItemInfo[i].ItemStem]); + OutPutFrm.RichEdit.Lines.Add(outline); + if nochoices > 0 then + begin + outline := format('Choice A %s',[ItemBankFrm.MCItemInfo[i].ChoiceOne]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + if nochoices > 1 then + begin + outline := format('Choice B %s',[ItemBankFrm.MCItemInfo[i].ChoiceTwo]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + if nochoices > 2 then + begin + outline := format('Choice C %s',[ItemBankFrm.MCItemInfo[i].ChoiceThree]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + if nochoices > 3 then + begin + outline := format('Choice D %s',[ItemBankFrm.MCItemInfo[i].ChoiceFour]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + if nochoices > 4 then + begin + outline := format('Choice E %s',[ItemBankFrm.MCItemInfo[i].ChoiceFive]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + outline := format('Correct Choice %s',[ItemBankFrm.MCItemInfo[i].CorrectChoice]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Graphic Image %s',[ItemBankFrm.MCItemInfo[i].PicName]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + end; + OutPutFrm.ShowModal; +end; + +procedure TMCItemForm.SelectImageBtnClick(Sender: TObject); +begin + jpegnameEdit.Text := OpenPictureDialog1.FileName; +end; + +procedure TMCItemForm.ShowNextBtnClick(Sender: TObject); +var + count : integer; + itemno : integer; + JPEG : TJPEGImage; + nochoices : integer; + response : string; +begin + response := InputBox('Save current item?','Save','Y'); + if response = 'Y' then ItemSaveBtnClick(self); + Image1.Canvas.Clear; + itemno := StrToInt(ItemNoEdit.Text) + 1; + count := ItemBankFrm.BankInfo.NMCItems; + if count <= itemno then + begin + ChoiceAEdit.Text := ''; + ChoiceBEdit.Text := ''; + ChoiceCEdit.Text := ''; + ChoiceDEdit.Text := ''; + ChoiceEEdit.Text := ''; + nochoices := ItemBankFrm.MCItemInfo[itemno].NoChoices; + ItemNoEdit.Text := IntToStr(ItemBankFrm.MCItemInfo[itemno].ItemNumber); + MajorCodeEdit.Text := IntToStr(ItemBankFrm.MCItemInfo[itemno].majorcode) ; + MinorCodeEdit.Text := IntToStr(ItemBankFrm.MCItemInfo[itemno].minorcode); + ItemStemEdit.Text := ItemBankFrm.MCItemInfo[itemno].ItemStem; + if nochoices > 0 then ChoiceAEdit.Text := ItemBankFrm.MCItemInfo[itemno].ChoiceOne; + if nochoices > 1 then ChoiceBEdit.Text := ItemBankFrm.MCItemInfo[itemno].ChoiceTwo; + if nochoices > 2 then ChoiceCEdit.Text := ItemBankFrm.MCItemInfo[itemno].ChoiceThree; + if nochoices > 3 then ChoiceDEdit.Text := ItemBankFrm.MCItemInfo[itemno].ChoiceFour; + if nochoices > 4 then ChoiceEEdit.Text := ItemBankFrm.MCItemInfo[itemno].ChoiceFive; + AnswerEdit.Text := ItemBankFrm.MCItemInfo[itemno].CorrectChoice; + jpegnameEdit.Text := ItemBankFrm.MCItemInfo[itemno].PicName; + if jpegnameEdit.Text <> 'none' then + begin + JPEG := TJPEGImage.Create; + try + JPEG.LoadFromFile(jpegnameEdit.Text); + Image1.Picture.Assign(JPEG); + finally + JPEG.Free; + Image1.Proportional := true; + end; + end; + end; +end; + +procedure TMCItemForm.StartNewBtnClick(Sender: TObject); +var + currentno : integer; + response : string; +begin + response := InputBox('Save current item?','Save','Y'); + if response = 'Y' then ItemSaveBtnClick(self); + currentno := ItemBankFrm.BankInfo.NMCItems + 1; + ItemNoEdit.Text := IntToStr(currentno); + currentno := StrToInt(MinorCodeEdit.Text); + MinorCodeEdit.Text := IntToStr(currentno + 1); + NoChoicesEdit.Text := '0'; + ItemStemEdit.Text := ''; + ChoiceAEdit.Text := ''; + ChoiceBEdit.Text := ''; + ChoiceCEdit.Text := ''; + ChoiceDEdit.Text := ''; + ChoiceEEdit.Text := ''; + AnswerEdit.Text := ''; + jpegnameEdit.Text := 'none'; + Image1.Canvas.Clear; +end; + +initialization + {$I mcitemunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/medianpolishunit.lfm b/applications/lazstats/source_orig/medianpolishunit.lfm new file mode 100644 index 000000000..e1d1bd44c --- /dev/null +++ b/applications/lazstats/source_orig/medianpolishunit.lfm @@ -0,0 +1,416 @@ +object MedianPolishForm: TMedianPolishForm + Left = 288 + Height = 371 + Top = 161 + Width = 531 + Caption = 'Median Polishing for a Two-Way Table' + ClientHeight = 371 + ClientWidth = 531 + OnShow = ResetBtnClick + LCLVersion = '0.9.30' + object Label1: TLabel + Left = 8 + Height = 16 + Top = 11 + Width = 51 + Caption = 'Variables:' + ParentColor = False + end + object VarList: TListBox + Left = 8 + Height = 275 + Top = 29 + Width = 185 + ItemHeight = 0 + TabOrder = 0 + end + object DepVar: TEdit + Left = 256 + Height = 23 + Top = 56 + Width = 135 + TabOrder = 1 + Text = 'DepVar' + end + object DepIn1: TBitBtn + Left = 208 + Height = 29 + Top = 35 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = DepIn1Click + TabOrder = 2 + end + object DepOut: TBitBtn + Left = 208 + Height = 29 + Top = 72 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = DepOutClick + TabOrder = 3 + end + object StaticText1: TStaticText + Left = 256 + Height = 15 + Top = 32 + Width = 73 + Caption = 'Dependent Variable' + TabOrder = 4 + end + object Fact1In: TBitBtn + Left = 208 + Height = 29 + Top = 120 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = Fact1InClick + TabOrder = 5 + end + object Fact1Out: TBitBtn + Left = 208 + Height = 29 + Top = 160 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = Fact1OutClick + TabOrder = 6 + end + object Fact2In: TBitBtn + Left = 208 + Height = 29 + Top = 216 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = Fact2InClick + TabOrder = 7 + end + object Fact2Out: TBitBtn + Left = 208 + Height = 29 + Top = 256 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = Fact2OutClick + TabOrder = 8 + end + object Factor1: TEdit + Left = 256 + Height = 23 + Top = 136 + Width = 135 + TabOrder = 9 + Text = 'Edit1' + end + object Factor2: TEdit + Left = 256 + Height = 23 + Top = 232 + Width = 135 + TabOrder = 10 + Text = 'Edit1' + end + object Label2: TLabel + Left = 257 + Height = 16 + Top = 113 + Width = 43 + Caption = 'Factor 1' + ParentColor = False + end + object Label3: TLabel + Left = 257 + Height = 16 + Top = 209 + Width = 43 + Caption = 'Factor 2' + ParentColor = False + end + object ResetBtn: TButton + Left = 429 + Height = 28 + Top = 28 + Width = 75 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 11 + end + object CancelBtn: TButton + Left = 429 + Height = 28 + Top = 80 + Width = 75 + Cancel = True + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 12 + end + object ComputeBtn: TButton + Left = 429 + Height = 28 + Top = 136 + Width = 75 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 13 + end + object ReturnBtn: TButton + Left = 429 + Height = 28 + Top = 192 + Width = 75 + Caption = 'Return' + ModalResult = 1 + TabOrder = 14 + end + object Label4: TLabel + Left = 255 + Height = 16 + Top = 294 + Width = 81 + Caption = 'Max. Iterations:' + ParentColor = False + end + object MaxEdit: TEdit + Left = 356 + Height = 23 + Top = 288 + Width = 35 + TabOrder = 15 + Text = '5' + end + object ItersBtn: TRadioButton + Left = 254 + Height = 19 + Top = 323 + Width = 182 + Caption = 'Show Results for Each Iteration' + OnChange = ItersBtnChange + TabOrder = 16 + Visible = False + end + object NormChk: TCheckBox + Left = 9 + Height = 19 + Top = 325 + Width = 234 + Caption = 'Show Bill Miller''s Normalizing Procedure' + TabOrder = 17 + end +end diff --git a/applications/lazstats/source_orig/medianpolishunit.lrs b/applications/lazstats/source_orig/medianpolishunit.lrs new file mode 100644 index 000000000..effde098f --- /dev/null +++ b/applications/lazstats/source_orig/medianpolishunit.lrs @@ -0,0 +1,347 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TMedianPolishForm','FORMDATA',[ + 'TPF0'#17'TMedianPolishForm'#16'MedianPolishForm'#4'Left'#3' '#1#6'Height'#3 + +'s'#1#3'Top'#3#161#0#5'Width'#3#19#2#7'Caption'#6'$Median Polishing for a Tw' + +'o-Way Table'#12'ClientHeight'#3's'#1#11'ClientWidth'#3#19#2#6'OnShow'#7#13 + +'ResetBtnClick'#10'LCLVersion'#6#6'0.9.30'#0#6'TLabel'#6'Label1'#4'Left'#2#8 + +#6'Height'#2#16#3'Top'#2#11#5'Width'#2'3'#7'Caption'#6#10'Variables:'#11'Par' + +'entColor'#8#0#0#8'TListBox'#7'VarList'#4'Left'#2#8#6'Height'#3#19#1#3'Top'#2 + +#29#5'Width'#3#185#0#10'ItemHeight'#2#0#8'TabOrder'#2#0#0#0#5'TEdit'#6'DepVa' + +'r'#4'Left'#3#0#1#6'Height'#2#23#3'Top'#2'8'#5'Width'#3#135#0#8'TabOrder'#2#1 + +#4'Text'#6#6'DepVar'#0#0#7'TBitBtn'#6'DepIn1'#4'Left'#3#208#0#6'Height'#2#29 + +#3'Top'#2'#'#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0 + +#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd' + +#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G' + +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^' + +#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195 + +'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255 + +#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255 + +#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255 + +']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145 + +'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#11'DepIn1Click'#8'TabOrder'#2#2#0#0#7'TBitBtn'#6'DepOu' + +'t'#4'Left'#3#208#0#6'Height'#2#29#3'Top'#2'H'#5'Width'#2' '#10'Glyph.Data' + +#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0 + +#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255 + +#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213 + +#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135 + +#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r' + +#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138 + +#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207 + +#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}' + +#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S' + +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';' + +#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'DepOutClick'#8 + +'TabOrder'#2#3#0#0#11'TStaticText'#11'StaticText1'#4'Left'#3#0#1#6'Height'#2 + +#15#3'Top'#2' '#5'Width'#2'I'#7'Caption'#6#18'Dependent Variable'#8'TabOrder' + +#2#4#0#0#7'TBitBtn'#7'Fact1In'#4'Left'#3#208#0#6'Height'#2#29#3'Top'#2'x'#5 + +'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0 + +'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0 + +#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)' + +#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190 + +'m'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255 + +'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139 + +'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160 + +#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255 + +#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128 + +#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199 + +'t'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255#150 + +#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255 + +#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255 + +#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255 + +'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163 + +'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247 + +';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187 + +'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnCl' + +'ick'#7#12'Fact1InClick'#8'TabOrder'#2#5#0#0#7'TBitBtn'#8'Fact1Out'#4'Left'#3 + +#208#0#6'Height'#2#29#3'Top'#3#160#0#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0 + +'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0 + +#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h' + +#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255 + +';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255 + +#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152 + +#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255 + +#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!' + +'c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138#255#162#216 + ,#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142 + +#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255 + +'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't' + +#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255 + +'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5' + +#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199 + +'t'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't' + +#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#13'Fact1OutClick'#8'TabOr' + +'der'#2#6#0#0#7'TBitBtn'#7'Fact2In'#4'Left'#3#208#0#6'Height'#2#29#3'Top'#3 + +#216#0#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0 + +'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0 + +#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G' + +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^' + +#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195 + +'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255 + +#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255 + +#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255 + +']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145 + +'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#12'Fact2InClick'#8'TabOrder'#2#7#0#0#7'TBitBtn'#8'Fact' + +'2Out'#4'Left'#3#208#0#6'Height'#2#29#3'Top'#3#0#1#5'Width'#2' '#10'Glyph.Da' + +'ta'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0 + +#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255 + +'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$' + +#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156 + +#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255 + +#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255 + +'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138 + +#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207 + +#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}' + +#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S' + +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';' + +#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#13'Fact2OutClick' + +#8'TabOrder'#2#8#0#0#5'TEdit'#7'Factor1'#4'Left'#3#0#1#6'Height'#2#23#3'Top' + ,#3#136#0#5'Width'#3#135#0#8'TabOrder'#2#9#4'Text'#6#5'Edit1'#0#0#5'TEdit'#7 + +'Factor2'#4'Left'#3#0#1#6'Height'#2#23#3'Top'#3#232#0#5'Width'#3#135#0#8'Tab' + +'Order'#2#10#4'Text'#6#5'Edit1'#0#0#6'TLabel'#6'Label2'#4'Left'#3#1#1#6'Heig' + +'ht'#2#16#3'Top'#2'q'#5'Width'#2'+'#7'Caption'#6#8'Factor 1'#11'ParentColor' + +#8#0#0#6'TLabel'#6'Label3'#4'Left'#3#1#1#6'Height'#2#16#3'Top'#3#209#0#5'Wid' + +'th'#2'+'#7'Caption'#6#8'Factor 2'#11'ParentColor'#8#0#0#7'TButton'#8'ResetB' + +'tn'#4'Left'#3#173#1#6'Height'#2#28#3'Top'#2#28#5'Width'#2'K'#7'Caption'#6#5 + +'Reset'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#11#0#0#7'TButton'#9'Can' + +'celBtn'#4'Left'#3#173#1#6'Height'#2#28#3'Top'#2'P'#5'Width'#2'K'#6'Cancel'#9 + +#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#12#0#0#7'TButton' + +#10'ComputeBtn'#4'Left'#3#173#1#6'Height'#2#28#3'Top'#3#136#0#5'Width'#2'K'#7 + +'Caption'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#13#0#0 + +#7'TButton'#9'ReturnBtn'#4'Left'#3#173#1#6'Height'#2#28#3'Top'#3#192#0#5'Wid' + +'th'#2'K'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#14#0#0#6 + +'TLabel'#6'Label4'#4'Left'#3#255#0#6'Height'#2#16#3'Top'#3'&'#1#5'Width'#2'Q' + +#7'Caption'#6#16'Max. Iterations:'#11'ParentColor'#8#0#0#5'TEdit'#7'MaxEdit' + +#4'Left'#3'd'#1#6'Height'#2#23#3'Top'#3' '#1#5'Width'#2'#'#8'TabOrder'#2#15#4 + +'Text'#6#1'5'#0#0#12'TRadioButton'#8'ItersBtn'#4'Left'#3#254#0#6'Height'#2#19 + +#3'Top'#3'C'#1#5'Width'#3#182#0#7'Caption'#6#31'Show Results for Each Iterat' + +'ion'#8'OnChange'#7#14'ItersBtnChange'#8'TabOrder'#2#16#7'Visible'#8#0#0#9'T' + +'CheckBox'#7'NormChk'#4'Left'#2#9#6'Height'#2#19#3'Top'#3'E'#1#5'Width'#3#234 + +#0#7'Caption'#6'(Show Bill Miller''s Normalizing Procedure'#8'TabOrder'#2#17 + +#0#0#0 +]); diff --git a/applications/lazstats/source_orig/medianpolishunit.pas b/applications/lazstats/source_orig/medianpolishunit.pas new file mode 100644 index 000000000..c5a352865 --- /dev/null +++ b/applications/lazstats/source_orig/medianpolishunit.pas @@ -0,0 +1,926 @@ +unit MedianPolishUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, MainUnit, Globals, FunctionsLib, OutPutUnit, + DataProcs, Math, GraphLib; + +type + + { TMedianPolishForm } + + TMedianPolishForm = class(TForm) + NormChk: TCheckBox; + MaxEdit: TEdit; + Label4: TLabel; + ItersBtn: TRadioButton; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + DepIn1: TBitBtn; + DepOut: TBitBtn; + DepVar: TEdit; + Fact1In: TBitBtn; + Fact1Out: TBitBtn; + Fact2In: TBitBtn; + Fact2Out: TBitBtn; + Factor1: TEdit; + Factor2: TEdit; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + StaticText1: TStaticText; + VarList: TListBox; + procedure ComputeBtnClick(Sender: TObject); + procedure DepIn1Click(Sender: TObject); + procedure DepOutClick(Sender: TObject); + procedure Fact1InClick(Sender: TObject); + procedure Fact1OutClick(Sender: TObject); + procedure Fact2InClick(Sender: TObject); + procedure Fact2OutClick(Sender: TObject); + procedure ItersBtnChange(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + + private + { private declarations } + CumRowResiduals : DblDyneVec; + CumColResiduals : DblDyneVec; + function Median(VAR X : DblDyneVec; size : integer) : double; + procedure PrintObsTable(ObsTable : DblDyneMat; nrows, ncols : integer); + procedure PrintResults(ObsTable : DblDyneMat; rowmedian,rowresid : DblDyneVec; + comedian, colresid : DblDyneVec; nrows, ncols : integer); + procedure sortvalues(VAR X : DblDyneVec; size : integer); + procedure TwoWayPlot(NF1cells : integer; RowSums : DblDyneVec; + graphtitle : string; Heading : string); + procedure InteractPlot(NF1cells, NF2Cells : integer; + ObsTable :DblDyneMat; graphtitle : string; + Heading : string); public + { public declarations } + end; + +var + MedianPolishForm: TMedianPolishForm; + +implementation + +{ TMedianPolishForm } + + +{ TMedianPolishForm } + +procedure TMedianPolishForm.ResetBtnClick(Sender: TObject); +var i : integer; +begin + VarList.Clear; + for i := 1 to NoVariables do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); + DepVar.Text := ''; + Factor1.Text := ''; + Factor2.Text := ''; + DepIn1.Visible := true; + DepOut.Visible := false; + Fact1In.Visible := true; + Fact1Out.Visible := false; + Fact2In.Visible := true; + Fact2out.Visible := false; + ItersBtn.Checked := false; + NormChk.Checked := false; +end; + +procedure TMedianPolishForm.ComputeBtnClick(Sender: TObject); +VAR + NoSelected, DepVarCol, F1Col, F2Col, i, j, k : integer; + NoRows, NoCols, minrow, maxrow, mincol, maxcol : integer; + intvalue, xrange, yrange, row, col, N, count, iteration : integer; + X, Resid, M, sumrowmedians, sumcolmedians, GrandMedian, scale, TotResid : double; + SumAbsRows, SumAbsCols, SumAbsInter, SumAbsTable, TableSum, explained : double; + Q1, Q2, Q3, Qrange1, Qrange2, total : double; + ColNoSelected : IntDyneVec; + Observed : DblDyneCube; + Residuals : DblDyneCube; + RowResiduals : DblDyneVec; + ColResiduals : DblDyneVec; + RowMedian : DblDyneVec; + ColMedian : DblDyneVec; + CellCount : IntDyneMat; + GroupScores : DblDyneVec; + ObsTable : DblDyneMat; + cellstring : string; + single : boolean; + NoIterations : integer; + done : boolean; + WholeTable : DblDyneVec; + RowEffects : DblDyneVec; + ColEffects : DblDyneVec; +begin + OutPutFrm.RichEdit.Clear; + for i := 1 to NoVariables do + begin + cellstring := Trim(OS3MainFrm.DataGrid.Cells[i,0]); + if cellstring = DepVar.Text then DepVarCol := i; + if cellstring = Factor1.Text then F1Col := i; + if cellstring = Factor2.Text then F2Col := i; + end; + NoSelected := 3; + SetLength(ColNoSelected,3); + ColNoSelected[0] := DepVarCol; + ColNoSelected[1] := F1Col; + ColNoSelected[2] := F2Col; + // get no. of rows and columns (Factor 1 and Factor 2) + mincol := 10000; + maxcol := 0; + minrow := 10000; + maxrow := 0; + for i := 1 to NoCases do + begin + intvalue := StrToInt(Trim(OS3MainFrm.DataGrid.Cells[F1Col,i])); + if intvalue > maxrow then maxrow := intvalue; + if intvalue < minrow then minrow := intvalue; + intvalue := StrToInt(Trim(OS3MainFrm.DataGrid.Cells[F2Col,i])); + if intvalue > maxcol then maxcol := intvalue; + if intvalue < mincol then mincol := intvalue; + end; + xrange := maxrow - minrow + 1; + yrange := maxcol - mincol + 1; + // get no. of observations in each cell + SetLength(CellCount,xrange,yrange); + for i := 0 to xrange-1 do + begin + for j := 0 to yrange-1 do + begin + CellCount[i,j] := 0; + end; + end; + count := 0; + single := false; + for i := 1 to NoCases do + begin + row := StrToInt(Trim(OS3MainFrm.DataGrid.Cells[F1Col,i])); + row := row - minrow; + col := StrToInt(Trim(OS3MainFrm.DataGrid.Cells[F2Col,i])); + col := col - mincol; + CellCount[row,col] := CellCount[row,col] + 1; + count := count + 1; + end; + if count = (xrange * yrange) then single := true; + SetLength(Observed,NoCases,xrange,yrange); + SetLength(Residuals,NoCases,xrange,yrange); + SetLength(RowResiduals,xrange); + SetLength(ColResiduals,yrange); + SetLength(GroupScores,NoCases); + SetLength(RowMedian,xrange); + SetLength(ColMedian,yrange); + SetLength(CumRowResiduals,xrange); + SetLength(CumColResiduals,yrange); + SetLength(WholeTable,xrange * yrange); + SetLength(RowEffects,xrange); + SetLength(ColEffects,yrange); + + for i := 0 to NoCases-1 do + begin + for j := 0 to xrange-1 do + begin + for k := 0 to yrange-1 do + begin + Observed[i,j,k] := 0.0; + Residuals[i,j,k] := 0.0; + end; + end; + end; + for j := 0 to xrange-1 do + begin + RowResiduals[j] := 0.0; + CumRowResiduals[j] := 0.0; + end; + for j := 0 to yrange-1 do + begin + ColResiduals[j] := 0.0; + CumColResiduals[j] := 0.0; + end; + // Get observed scores + for i := 0 to xrange-1 do + begin + for j := 0 to yrange-1 do + begin + CellCount[i,j] := 0; + end; + end; + for i := 1 to NoCases do + begin + row := StrToInt(Trim(OS3MainFrm.DataGrid.Cells[F1Col,i])); + row := row - minrow; + col := StrToInt(Trim(OS3MainFrm.DataGrid.Cells[F2Col,i])); + col := col - mincol; + X := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[DepVarCol,i])); + CellCount[row,col] := CellCount[row,col] + 1; + N := CellCount[row,col]; + Observed[N-1,row,col] := X; + end; + + // if not single case in each cell, obtain median for each cell + if not single then + begin + for i := 0 to xrange-1 do + begin + for j := 0 to yrange-1 do + begin + for k := 0 to CellCount[i,j]-1 do + begin + GroupScores[k] := Observed[k,i,j]; + end; + M := Median(GroupScores,CellCount[i,j]); + Observed[0,i,j] := M; + end; + end; + end; + SetLength(ObsTable,xrange,yrange); + k := 0; + for i := 0 to xrange-1 do + begin + for j := 0 to yrange-1 do + begin + ObsTable[i,j] := Observed[0,i,j]; + WholeTable[k] := Observed[0,i,j]; + k := k + 1; + end; + end; + sortvalues(WholeTable,xrange*yrange); + Q1 := Quartiles(2,0.25,xrange*yrange,WholeTable); + Q3 := Quartiles(2,0.75,xrange*yrange,WholeTable); + Qrange1 := Q3 - Q1; + cellstring := format('Quartiles of original data = %8.3f %8.3f',[Q1,Q3]); + OutPutFrm.RichEdit.Lines.Add(cellstring); + + if NormChk.Checked = true then + begin + // Bill Miller's solution + // get deviations of each cell from the grand mean, row and column residuals + // and row and column absolute deviations + k := 0; + for i := 0 to xrange-1 do + begin + for j := 0 to yrange-1 do + begin + ObsTable[i,j] := Observed[0,i,j]; + WholeTable[k] := Observed[0,i,j]; + k := k + 1; + end; + end; + sortvalues(WholeTable,xrange*yrange); + M := Median(WholeTable,xrange*yrange); + GrandMedian := M; +// OutPutFrm.RichEdit.Clear; + cellstring := Format('Grand Median = %9.3f',[M]); + OutPutFrm.RichEdit.Lines.Add(cellstring); + OutPutFrm.RichEdit.Lines.Add(''); + PrintObsTable(ObsTable,xrange,yrange); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + for i := 0 to xrange-1 do + begin + RowMedian[i] := 0.0; + RowResiduals[i] := 0.0; + CumRowResiduals[i] := 0.0; + end; + for j := 0 to yrange-1 do + begin + ColMedian[j] := 0.0; + ColResiduals[j] := 0.0; + CumColResiduals[j] := 0.0; + end; + + for i := 0 to xrange-1 do + begin + for j := 0 to yrange-1 do + begin + GroupScores[j] := ObsTable[i,j]; + end; + sortvalues(GroupScores,yrange); + M := Median(GroupScores,yrange); + RowMedian[i] := M; + end; + + for i := 0 to xrange-1 do + begin + for j := 0 to yrange-1 do + begin + RowResiduals[i] := RowResiduals[i] + (ObsTable[i,j] - RowMedian[i]); + end; + CumRowResiduals[i] := CumRowResiduals[i] + abs(RowResiduals[i]); + end; + + for j := 0 to yrange-1 do + begin + for i := 0 to xrange-1 do + begin + GroupScores[i] := ObsTable[i,j]; + end; + sortvalues(GroupScores,xrange); + M := Median(GroupScores,xrange); + ColMedian[j] := M; + end; + + for j := 0 to yrange-1 do + begin + for i := 0 to xrange-1 do + begin + ColResiduals[j] := ColResiduals[j] + (ObsTable[i,j] - ColMedian[j]); + end; + CumColResiduals[j] := CumColResiduals[j] + abs(ColResiduals[j]); + end; + PrintResults(ObsTable,RowMedian,RowResiduals,ColMedian,ColResiduals,xrange,yrange); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; +// TwoWayPlot(xrange, RowMedian,'Rows','ROW MEDIANS'); +// TwoWayPlot(yrange, ColMedian,'Columns','COL. MEDIANS'); + // Normalize medians and raw data + // This will result in the sum of column, row and table residuals all + // summing to zero. The model is X = Total Median + Row effects + + // col. effects + interaction effects and the row, col and interaction + // effects each sum to zero (as in ANOVA) + TableSum := 0.0; + scale := 0; + for i := 0 to xrange-1 do + begin + for j := 0 to yrange-1 do + begin + scale := scale + ObsTable[i,j]; + end; + end; + scale := scale / (xrange * yrange); + for i := 0 to xrange-1 do + begin + for j := 0 to yrange-1 do + begin + ObsTable[i,j] := ObsTable[i,j] - scale; + TableSum := TableSum + abs(ObsTable[i,j]); + end; + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Normalized Data'); + PrintObsTable(ObsTable,xrange,yrange); + scale := 0; + for i := 0 to xrange-1 do scale := scale + RowMedian[i]; + scale := scale / xrange; + for i := 0 to xrange-1 do RowMedian[i] := RowMedian[i] - scale; + scale := 0; + for j := 0 to yrange-1 do scale := scale + ColMedian[j]; + scale := scale / yrange; + for j := 0 to yrange-1 do ColMedian[j] := ColMedian[j] - scale; + + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Normalized Adjusted Data'); + PrintResults(ObsTable,RowMedian,RowResiduals,ColMedian,ColResiduals,xrange,yrange); + OutPutFrm.RichEdit.Lines.Add(''); + + for i := 0 to xrange-1 do + begin + for j := 0 to yrange-1 do + begin + ObsTable[i,j] := ObsTable[i,j] - (RowMedian[i] + ColMedian[j]); + end; + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Normalized Table minus Row and Column Medians'); + PrintObsTable(ObsTable,xrange,yrange); + for i := 0 to xrange-1 do RowResiduals[i] := 0.0; + for j := 0 to yrange-1 do ColResiduals[j] := 0.0; + TotResid := 0.0; + for i := 0 to xrange-1 do + begin + for j := 0 to yrange-1 do + begin + RowResiduals[i] := RowResiduals[i] + ObsTable[i,j]; + ColResiduals[j] := ColResiduals[j] + ObsTable[i,j]; + TotResid := TotResid + ObsTable[i,j]; + end; + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Normalized Adjusted Data'); + PrintResults(ObsTable,RowMedian,RowResiduals,ColMedian,ColResiduals,xrange,yrange); + OutPutFrm.RichEdit.Lines.Add(''); + cellstring := format('Total Table Residuals = %8.3f',[TotResid]); + OutPutFrm.RichEdit.Lines.Add(cellstring); + + SumAbsRows := 0.0; + SumAbsCols := 0.0; + SumAbsTable := 0.0; + for i := 0 to xrange-1 do SumAbsRows := SumAbsRows + abs(RowMedian[i]); + for j := 0 to yrange-1 do SumAbsCols := SumAbsCols + abs(ColMedian[j]); + for i := 0 to xrange - 1 do + for j := 0 to yrange - 1 do + SumAbsTable := SumAbsTable + abs(ObsTable[i,j]); + cellstring := format('Absolute Sums of Row, Col and Interactions = %8.3f %8.3f %8.3f', + [SumAbsRows, SumAbsCols, SumAbsTable]); + OutPutFrm.RichEdit.Lines.Add(cellstring); + total := SumAbsRows + SumAbsCols + SumAbsTable; + cellstring := format('Absolute Sums of Table Values prior to Extracting Row and Col. = %8.3f', + [TableSum]); + OutPutFrm.RichEdit.Lines.Add(cellstring); + cellstring := format('Percentages explained by rows, col.s, interactions plus error %8.3f %8.3f %8.3f', + [100*SumAbsRows/total, 100*SumAbsCols/total, 100*SumAbsTable/total]); + OutPutFrm.RichEdit.Lines.Add(cellstring); + explained := 100*SumAbsRows/total + 100*SumAbsCols/total + 100*SumAbsTable/total; + cellstring := format('Percentage explained = %8.3f percent',[explained]); + OutPutFrm.RichEdit.Lines.Add(cellstring); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + + TwoWayPlot(xrange, RowMedian,'Rows','ROW MEDIANS'); + TwoWayPlot(yrange, ColMedian,'Columns','COL. MEDIANS'); + end; // Bills method + + // Now do traditional median smoothing + OutPutFrm.RichEdit.Lines.Add('Tukey Iterative Median Smoothing Method'); + OutPutFrm.RichEdit.Lines.Add(''); + NoIterations := StrToInt(MaxEdit.Text); + done := false; + iteration := 1; + for i := 0 to xrange-1 do RowEffects[i] := 0.0; + for j := 0 to yrange-1 do ColEffects[j] := 0.0; + while not done do + begin + // Get residuals from the median for each row + count := 0; + for i := 0 to xrange-1 do + begin + count := 0; + for j := 0 to yrange-1 do + begin + GroupScores[count] := Observed[0,i,j]; + count := count + 1; + end; + sortvalues(GroupScores,count); + M := Median(GroupScores,count); + RowMedian[i] := M; + for j := 0 to yrange-1 do Observed[0,i,j] := Observed[0,i,j] - M; + for j := 0 to yrange-1 do RowResiduals[i] := RowResiduals[i] + Observed[0,i,j]; + CumRowResiduals[i] := CumRowResiduals[i] + abs(RowResiduals[i]); + end; + + // get sum of residuals for cols + count := 0; + for i := 0 to yrange-1 do + begin + count := 0; + for j := 0 to xrange-1 do + begin + GroupScores[count] := Observed[0,j,i]; + count := count + 1; + end; + sortvalues(GroupScores,count); + M := Median(GroupScores,count); + ColMedian[i] := M; + for j := 0 to xrange-1 do Observed[0,j,i] := Observed[0,j,i] - M; + for j := 0 to xrange-1 do ColResiduals[i] := ColResiduals[i] + Observed[0,j,i]; + CumColResiduals[i] := CumColResiduals[i] + abs(ColResiduals[i]); + end; + + // build table of results + for i := 0 to xrange-1 do + begin + for j := 0 to yrange-1 do + begin + ObsTable[i,j] := Observed[0,i,j]; // Residuals[0,i,j]; + end; + end; + +// if ItersBtn.Checked then +// begin + OutPutFrm.RichEdit.Lines.Add(''); + cellstring := format('Iteration = %d',[iteration]); + OutPutFrm.RichEdit.Lines.Add(cellstring); + PrintResults(ObsTable,RowMedian,RowResiduals,ColMedian,ColResiduals,xrange,yrange); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Row Effects'); + for i := 0 to xrange-1 do + begin + GroupScores[i] := RowMedian[i]; + end; + sortvalues(GroupScores,xrange); + M := Median(GroupScores,xrange); + cellstring := format('Overall Median = %8.3f',[m]); + OutPutFrm.RichEdit.Lines.Add(cellstring); + OutPutFrm.RichEdit.Lines.Add(''); + for i := 0 to xrange-1 do + begin + RowEffects[i] := RowEffects[i] + (RowMedian[i] - M); + cellstring := format('Row %d Effect = %8.3f',[i+1,RowEffects[i]]); + OutPutFrm.RichEdit.Lines.Add(cellstring); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Column Effects'); + for j := 0 to yrange-1 do + begin + ColEffects[j] := ColEffects[j] + ColMedian[j]; + cellstring := format('Col. %d Effect = %8.3f',[j+1,ColEffects[j]]); + OutPutFrm.RichEdit.Lines.Add(cellstring); + end; +// OutPutFrm.ShowModal; +// OutPutFrm.RichEdit.Clear; +// end; + for i := 0 to xrange-1 do RowResiduals[i] := 0.0; + for j := 0 to yrange-1 do ColResiduals[j] := 0.0; + NoIterations := NoIterations - 1; + iteration := iteration + 1; + if NoIterations = 0 then done := true; + sumrowmedians := 0.0; + sumcolmedians := 0.0; + for i := 0 to xrange-1 do sumrowmedians := sumrowmedians + RowMedian[i]; + for i := 0 to yrange-1 do sumcolmedians := sumcolmedians + ColMedian[i]; + if (sumrowmedians + sumcolmedians) = 0.0 then done := true; + if done then + begin + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('SUMMARY OF THE ANALYSIS'); + PrintResults(ObsTable,RowMedian,RowResiduals,ColMedian,ColResiduals,xrange,yrange); + for i := 0 to xrange-1 do + begin + RowEffects[i] := RowEffects[i] + (RowMedian[i] - M); + cellstring := format('Row %d Effect = %8.3f',[i+1,RowEffects[i]]); + OutPutFrm.RichEdit.Lines.Add(cellstring); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Column Effects'); + for j := 0 to yrange-1 do + begin + ColEffects[j] := ColEffects[j] + ColMedian[j]; + cellstring := format('Col. %d Effect = %8.3f',[j+1,ColEffects[j]]); + OutPutFrm.RichEdit.Lines.Add(cellstring); + end; + k := 0; + OutPutFrm.RichEdit.Lines.Add(''); + for i := 0 to xrange-1 do + begin + for j := 0 to yrange-1 do + begin + WholeTable[k] := ObsTable[i,j]; + k := k + 1; + end; + end; + sortvalues(WholeTable,xrange*yrange); + M := Median(WholeTable,xrange*yrange); + Q1 := Quartiles(2,0.25,xrange*yrange,WholeTable); + Q3 := Quartiles(2,0.75,xrange*yrange,WholeTable); + cellstring := format('Quartiles of the residuals = %8.3f %8.3f', + [Q1, Q3]); + OutPutFrm.RichEdit.Lines.Add(cellstring); + Qrange2 := Q3 - Q1; + cellstring := format('Original interquartile and final interquartile ranges = %8.3f %8.3f', + [Qrange1, Qrange2]); + OutPutFrm.RichEdit.Lines.Add(cellstring); + cellstring := format('Quality of the additive fit = %8.3f percent', + [100 * (Qrange1 - Qrange2) / Qrange1]); + OutPutFrm.RichEdit.Lines.Add(cellstring); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + end; // while not done +// if ItersBtn.Checked then +// begin + TwoWayPlot(xrange, RowEffects,'Rows','CUMULATIVE ROW EFFECTS'); + TwoWayPlot(yrange, ColEffects,'Columns','CUMULATIVE COL. EFFECTS'); + InteractPlot(xrange, yrange, ObsTable, 'Interaction', + 'RESIDUALS OF ROWS AND COLUMNS'); +// end; + // cleanup + ColEffects := nil; + RowEffects := nil; + WholeTable := nil; + CumColResiduals := nil; + CumRowResiduals := nil; + ObsTable := nil; + ColMedian := nil; + RowMedian := nil; + GroupScores := nil; + CellCount := nil; + ColResiduals := nil; + RowResiduals := nil; + Residuals := nil; + Observed := nil; + ColNoSelected := nil; +end; + +procedure TMedianPolishForm.DepIn1Click(Sender: TObject); +var index : integer; +begin + index := VarList.ItemIndex; + DepVar.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + DepIn1.Visible := false; + DepOut.Visible := true;; +end; + +procedure TMedianPolishForm.DepOutClick(Sender: TObject); +begin + VarList.Items.Add(DepVar.Text); + DepVar.Text := ''; + DepIn1.Visible := true; + DepOut.Visible := false; +end; + +procedure TMedianPolishForm.Fact1InClick(Sender: TObject); +var index : integer; +begin + index := VarList.ItemIndex; + Factor1.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + Fact1In.Visible := false; + Fact1Out.Visible := true;; +end; + +procedure TMedianPolishForm.Fact1OutClick(Sender: TObject); +begin + VarList.Items.Add(Factor1.Text); + Factor1.Text := ''; + Fact1In.Visible := true; + Fact1Out.Visible := false; +end; + +procedure TMedianPolishForm.Fact2InClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + Factor2.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + Fact2In.Visible := false; + Fact2Out.Visible := true;; +end; + +procedure TMedianPolishForm.Fact2OutClick(Sender: TObject); +begin + VarList.Items.Add(Factor2.Text); + Factor2.Text := ''; + Fact2In.Visible := true; + Fact2Out.Visible := false; +end; + +procedure TMedianPolishForm.ItersBtnChange(Sender: TObject); +begin + +end; + +function TMedianPolishForm.Median(VAR X : DblDyneVec; size : integer) : double; +var + midpt : integer; + value : double; + i : integer; + cellstring : string; +begin +(* check for correct median calculation + OutPutFrm.RichEdit.Lines.Add('Sorted values to get median'); + cellstring := format('size of array = %d',[size]); + OutPutFrm.RichEdit.Lines.Add(cellstring); + for i := 0 to size do + begin + cellstring := format('no. %d = %9.3f',[i+1,X[i]]); + OutPutFrm.RichEdit.Lines.Add(cellstring); + end; +*) + if size > 2 then + begin + midpt := size div 2; + if 2 * midpt = size then // even no. of values + begin + value := (X[midpt-1] + X[midpt]) / 2; + end + else value := X[midpt]; // odd no. of values + Median := value; + end + else if size = 2 then Median := (X[0] + X[1]) / 2; +// cellstring := format('Median = %9.3f',[value]); +// OutPutFrm.ShowModal; +end; + +procedure TMedianPolishForm.PrintObsTable(ObsTable : DblDyneMat; nrows, ncols : integer); +VAR + cellstring, outline : string; + i, j : integer; +begin + outline := 'Observed Data'; + OutPutFrm.RichEdit.Lines.Add(outline); + outline := 'ROW COLUMNS'; + OutPutFrm.RichEdit.Lines.Add(outline); + outline := ' '; + for i := 1 to ncols do + begin + outline := outline + format('%10d',[i]); + end; + OutPutFrm.RichEdit.Lines.Add(outline); + for i := 1 to nrows do + begin + outline := format('%3d ',[i]); + for j := 1 to ncols do + begin + cellstring := format('%9.3f ',[ObsTable[i-1,j-1]]); + outline := outline + cellstring; + end; + OutPutFrm.RichEdit.Lines.Add(outline); + end; +end; + + procedure TMedianPolishForm.PrintResults(ObsTable : DblDyneMat; + rowmedian,rowresid : DblDyneVec; + comedian, colresid : DblDyneVec; nrows, ncols : integer); +var + i, j : integer; + cellstring, outline : string; +begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := 'Adjusted Data'; + OutPutFrm.RichEdit.Lines.Add(outline); + outline := 'MEDIAN'; + for i := 1 to ncols do + begin + outline := outline + format('%10d',[i]); + end; + outline := outline + ' Residuals'; + OutPutFrm.RichEdit.Lines.Add(outline); + outline := '---------------------------------------------------------'; + OutPutFrm.RichEdit.Lines.Add(outline); + for i := 0 to nrows-1 do + begin + cellstring := format('%9.3f ',[rowmedian[i]]); + outline := cellstring; + for j := 0 to ncols-1 do + begin + cellstring := format('%9.3f ',[ObsTable[i,j]]); + outline := outline + cellstring; + end; + cellstring := format('%9.3f ',[rowresid[i]]); + outline := outline + cellstring; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + outline := '---------------------------------------------------------'; + OutPutFrm.RichEdit.Lines.Add(outline); + cellstring := 'Col.Resid.'; + outline := cellstring; + for j := 0 to ncols-1 do + begin + cellstring := format('%9.3f ',[colresid[j]]); + outline := outline + cellstring; + end; + OutPutFrm.RichEdit.Lines.Add(outline); + cellstring := 'Col.Median'; + outline := cellstring; + for j := 0 to ncols-1 do + begin + cellstring := format('%9.3f ',[comedian[j]]); + outline := outline + cellstring; + end; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Cumulative absolute value of Row Residuals'); + for j := 0 to nrows-1 do + begin + outline := format('Row = %d Cum.Residuals = %9.3f',[j+1,CumRowResiduals[j]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Cumulative absolute value of Column Residuals'); + for j := 0 to ncols-1 do + begin + outline := format('Column = %d Cum.Residuals = %9.3f',[j+1,CumColResiduals[j]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; +end; + +procedure TMedianPolishForm.sortvalues(VAR X : DblDyneVec; size : integer); +VAR + i, j : integer; + temp : double; + cellstring : string; +begin + for i := 0 to size-2 do + begin + for j := i+1 to size-1 do + begin + if X[i] > X[j] then // swap + begin + temp := X[i]; + X[i] := X[j]; + X[j] := temp; + end; + end; + end; +// OutPutFrm.RichEdit.Lines.Add('Sorted values'); +// for i := 0 to size-1 do +// begin +// cellstring := format('no. %d = %9.3f',[i+1,X[i]]); +// OutPutFrm.RichEdit.Lines.Add(cellstring); +// end; +// OutPutFrm.RichEdit.Lines.Add(''); +end; +//----------------------------------------------------------------------- +procedure TMedianPolishForm.TwoWayPlot(NF1cells : integer; + RowSums : DblDyneVec; graphtitle : string; Heading : string); +var + i, j : integer; + minmean, maxmean, XBar : double; + XValue : DblDyneVec; + title : string; + plottype : integer; + setstring : string[11]; + +begin + SetLength(XValue,Nf1cells); + plottype := 2; + setstring := 'Group'; + GraphFrm.SetLabels[1] := setstring; + maxmean := -10000.0; + minmean := 10000.0; + SetLength(GraphFrm.Xpoints,1,NF1cells); + SetLength(GraphFrm.Ypoints,1,NF1cells); + for i := 1 to NF1cells do + begin + GraphFrm.Ypoints[0,i-1] := RowSums[i-1]; + if RowSums[i-1] > maxmean then maxmean := RowSums[i-1]; + if RowSums[i-1] < minmean then minmean := RowSums[i-1]; + XValue[i-1] := i; + GraphFrm.Xpoints[0,i-1] := XValue[i-1]; + end; + GraphFrm.nosets := 1; + GraphFrm.nbars := NF1cells; + GraphFrm.Heading := Heading; + title := graphtitle; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Y Values'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := minmean; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; +end; + +procedure TMedianPolishForm.InteractPlot(NF1cells, NF2Cells : integer; + ObsTable :DblDyneMat; graphtitle : string; + Heading : string); +VAR + i, j : integer; + minmean, maxmean, XBar : double; + XValue, YValue : DblDyneVec; + title : string; + plottype : integer; + setstring : string[11]; + +begin + SetLength(GraphFrm.Ypoints,NF1cells,NF2cells); + SetLength(GraphFrm.Xpoints,1,NF2cells); + SetLength(XValue,Nf1cells+Nf2cells); + plottype := 2; + for i := 1 to NF1cells do + begin + setstring := 'Row ' + IntToStr(i); + GraphFrm.SetLabels[i] := setstring; + for j := 1 to NF2cells do + begin + XBar := ObsTable[i-1,j-1]; + if XBar > maxmean then maxmean := XBar; + if XBar < minmean then minmean := XBar; + GraphFrm.Ypoints[i-1,j-1] := XBar; + end; + end; + for j := 1 to NF2cells do + begin + XValue[j-1] := j; + GraphFrm.Xpoints[0,j-1] := XValue[j-1]; + end; + + GraphFrm.nosets := NF1cells; + GraphFrm.nbars := NF2cells; + GraphFrm.Heading := 'Factor X x Factor Y'; + title := 'Column Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := minmean; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + XValue := nil; + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; +end; + +initialization + {$I medianpolishunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/moveavgunit.lfm b/applications/lazstats/source_orig/moveavgunit.lfm new file mode 100644 index 000000000..4f8eb95b1 --- /dev/null +++ b/applications/lazstats/source_orig/moveavgunit.lfm @@ -0,0 +1,100 @@ +object MoveAvgFrm: TMoveAvgFrm + Left = 180 + Height = 252 + Top = 112 + Width = 276 + Caption = 'Moving Average Specification Form' + ClientHeight = 252 + ClientWidth = 276 + OnShow = FormShow + LCLVersion = '0.9.28.2' + object Label1: TLabel + Left = 8 + Height = 14 + Top = 16 + Width = 36 + Caption = 'Order: ' + ParentColor = False + end + object Label2: TLabel + Left = 8 + Height = 14 + Top = 56 + Width = 65 + Caption = 'Theta Value: ' + ParentColor = False + end + object OrderEdit: TEdit + Left = 48 + Height = 21 + Top = 9 + Width = 37 + OnKeyPress = OrderEditKeyPress + TabOrder = 0 + Text = 'OrderEdit' + end + object ThetaEdit: TEdit + Left = 74 + Height = 21 + Top = 49 + Width = 40 + OnKeyPress = ThetaEditKeyPress + TabOrder = 1 + Text = 'ThetaEdit' + end + object ThetaList: TListBox + Left = 7 + Height = 147 + Top = 80 + Width = 162 + ItemHeight = 0 + OnClick = ThetaListClick + TabOrder = 2 + end + object ResetBtn: TButton + Left = 184 + Height = 32 + Top = 49 + Width = 80 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 3 + end + object CancelBtn: TButton + Left = 184 + Height = 32 + Top = 96 + Width = 80 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 4 + end + object ApplyBtn: TButton + Left = 184 + Height = 32 + Top = 144 + Width = 80 + Caption = 'Apply' + OnClick = ApplyBtnClick + TabOrder = 5 + end + object OKBtn: TButton + Left = 184 + Height = 32 + Top = 195 + Width = 80 + Caption = 'OK' + ModalResult = 1 + TabOrder = 6 + end + object HelpBtn: TButton + Tag = 132 + Left = 184 + Height = 28 + Top = 8 + Width = 81 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 7 + end +end diff --git a/applications/lazstats/source_orig/moveavgunit.lrs b/applications/lazstats/source_orig/moveavgunit.lrs new file mode 100644 index 000000000..73b246e2d --- /dev/null +++ b/applications/lazstats/source_orig/moveavgunit.lrs @@ -0,0 +1,27 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TMoveAvgFrm','FORMDATA',[ + 'TPF0'#11'TMoveAvgFrm'#10'MoveAvgFrm'#4'Left'#3#180#0#6'Height'#3#252#0#3'Top' + +#2'p'#5'Width'#3#20#1#7'Caption'#6'!Moving Average Specification Form'#12'Cl' + +'ientHeight'#3#252#0#11'ClientWidth'#3#20#1#6'OnShow'#7#8'FormShow'#10'LCLVe' + +'rsion'#6#8'0.9.28.2'#0#6'TLabel'#6'Label1'#4'Left'#2#8#6'Height'#2#14#3'Top' + +#2#16#5'Width'#2'$'#7'Caption'#6#7'Order: '#11'ParentColor'#8#0#0#6'TLabel'#6 + +'Label2'#4'Left'#2#8#6'Height'#2#14#3'Top'#2'8'#5'Width'#2'A'#7'Caption'#6#13 + +'Theta Value: '#11'ParentColor'#8#0#0#5'TEdit'#9'OrderEdit'#4'Left'#2'0'#6'H' + +'eight'#2#21#3'Top'#2#9#5'Width'#2'%'#10'OnKeyPress'#7#17'OrderEditKeyPress' + +#8'TabOrder'#2#0#4'Text'#6#9'OrderEdit'#0#0#5'TEdit'#9'ThetaEdit'#4'Left'#2 + +'J'#6'Height'#2#21#3'Top'#2'1'#5'Width'#2'('#10'OnKeyPress'#7#17'ThetaEditKe' + +'yPress'#8'TabOrder'#2#1#4'Text'#6#9'ThetaEdit'#0#0#8'TListBox'#9'ThetaList' + +#4'Left'#2#7#6'Height'#3#147#0#3'Top'#2'P'#5'Width'#3#162#0#10'ItemHeight'#2 + +#0#7'OnClick'#7#14'ThetaListClick'#8'TabOrder'#2#2#0#0#7'TButton'#8'ResetBtn' + +#4'Left'#3#184#0#6'Height'#2' '#3'Top'#2'1'#5'Width'#2'P'#7'Caption'#6#5'Res' + +'et'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#3#0#0#7'TButton'#9'CancelB' + +'tn'#4'Left'#3#184#0#6'Height'#2' '#3'Top'#2'`'#5'Width'#2'P'#7'Caption'#6#6 + +'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#4#0#0#7'TButton'#8'ApplyBtn'#4'Le' + +'ft'#3#184#0#6'Height'#2' '#3'Top'#3#144#0#5'Width'#2'P'#7'Caption'#6#5'Appl' + +'y'#7'OnClick'#7#13'ApplyBtnClick'#8'TabOrder'#2#5#0#0#7'TButton'#5'OKBtn'#4 + +'Left'#3#184#0#6'Height'#2' '#3'Top'#3#195#0#5'Width'#2'P'#7'Caption'#6#2'OK' + +#11'ModalResult'#2#1#8'TabOrder'#2#6#0#0#7'TButton'#7'HelpBtn'#3'Tag'#3#132#0 + +#4'Left'#3#184#0#6'Height'#2#28#3'Top'#2#8#5'Width'#2'Q'#7'Caption'#6#4'Help' + +#7'OnClick'#7#12'HelpBtnClick'#8'TabOrder'#2#7#0#0#0 +]); diff --git a/applications/lazstats/source_orig/moveavgunit.pas b/applications/lazstats/source_orig/moveavgunit.pas new file mode 100644 index 000000000..9a77ce129 --- /dev/null +++ b/applications/lazstats/source_orig/moveavgunit.pas @@ -0,0 +1,129 @@ +unit MoveAvgUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, contexthelpunit; + +type + + { TMoveAvgFrm } + + TMoveAvgFrm = class(TForm) + HelpBtn: TButton; + ResetBtn: TButton; + CancelBtn: TButton; + ApplyBtn: TButton; + OKBtn: TButton; + ThetaList: TListBox; + ThetaEdit: TEdit; + Label2: TLabel; + OrderEdit: TEdit; + Label1: TLabel; + procedure ApplyBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + procedure OrderEditKeyPress(Sender: TObject; var Key: char); + procedure ResetBtnClick(Sender: TObject); + procedure ThetaEditKeyPress(Sender: TObject; var Key: char); + procedure ThetaListClick(Sender: TObject); + private + { private declarations } + public + { public declarations } + W : array[0..20] of double; + order : integer; + currentindex : integer; + + end; + +var + MoveAvgFrm: TMoveAvgFrm; + +implementation + +{ TMoveAvgFrm } + +procedure TMoveAvgFrm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + OrderEdit.Text := ''; + ThetaEdit.Text := ''; + ThetaList.Clear; + currentindex := 0; + for i := 0 to 20 do W[i] := 1.0; +end; + +procedure TMoveAvgFrm.ThetaEditKeyPress(Sender: TObject; var Key: char); +var cellstring : string; + +begin + if currentindex < 1 then exit; + if ord(Key) <> 13 then exit; + cellstring := 'Theta(' + IntToStr(currentindex + 1) + ') = '; + cellstring := cellstring + ThetaEdit.Text; + W[currentindex + 1] := StrToFloat(ThetaEdit.Text); +end; + +procedure TMoveAvgFrm.ThetaListClick(Sender: TObject); +VAR index : integer; +begin + index := ThetaList.ItemIndex; + if index < 0 then exit; + currentindex := index; + ThetaEdit.Text := '1.0'; + ThetaEdit.SetFocus; +end; + +procedure TMoveAvgFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TMoveAvgFrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +procedure TMoveAvgFrm.ApplyBtnClick(Sender: TObject); +var + sum : double; + i : integer; + cellstring : string; + +begin + ThetaList.Clear; + sum := W[0]; + for i := 1 to order do sum := sum + (2.0 * W[i]); + for i := 0 to order do + begin + W[i] := W[i] / sum; + cellstring := 'Theta(' + IntToStr(i+1) + ') = '; + cellstring := cellstring + FloatToStr(W[i]); + ThetaList.Items.Add(cellstring); + end; +end; + +procedure TMoveAvgFrm.OrderEditKeyPress(Sender: TObject; var Key: char); +VAR cellstring : string; + i : integer; + +begin + if ord(Key) <> 13 then exit; + ThetaList.Clear; + order := StrToInt(OrderEdit.Text); + for i := 1 to order do + begin + cellstring := 'Theta(' + IntToStr(i) + ')'; + ThetaList.Items.Add(cellstring); + end; +end; + +initialization + {$I moveavgunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/multgenunit.lfm b/applications/lazstats/source_orig/multgenunit.lfm new file mode 100644 index 000000000..e5ad335f2 --- /dev/null +++ b/applications/lazstats/source_orig/multgenunit.lfm @@ -0,0 +1,129 @@ +object MultGenFrm: TMultGenFrm + Left = 211 + Height = 396 + Top = 108 + Width = 561 + Caption = 'Multivariate Generator' + ClientHeight = 396 + ClientWidth = 561 + OnShow = FormShow + LCLVersion = '0.9.28.2' + object Label1: TLabel + Left = 9 + Height = 14 + Top = 16 + Width = 101 + Caption = 'Number of variables:' + ParentColor = False + end + object Label2: TLabel + Left = 176 + Height = 14 + Top = 16 + Width = 61 + Caption = 'Sample Size:' + ParentColor = False + end + object NoVarsEdit: TEdit + Left = 120 + Height = 21 + Top = 8 + Width = 45 + OnExit = NoVarsEditExit + OnKeyPress = NoVarsEditKeyPress + TabOrder = 0 + Text = 'NoVarsEdit' + end + object NoObsEdit: TEdit + Left = 248 + Height = 21 + Top = 8 + Width = 34 + OnExit = NoObsEditExit + OnKeyPress = NoObsEditKeyPress + TabOrder = 1 + Text = 'NoObsEdit' + end + object ParmsChk: TCheckBox + Left = 304 + Height = 17 + Top = 13 + Width = 100 + Caption = 'Print Parametes:' + TabOrder = 2 + end + object SampleChk: TCheckBox + Left = 416 + Height = 17 + Top = 13 + Width = 111 + Caption = 'Print Sample Stats:' + TabOrder = 3 + end + object PerturbChk: TCheckBox + Left = 304 + Height = 17 + Top = 40 + Width = 227 + Caption = 'Select Distribution Perturbation Parameters' + TabOrder = 4 + end + object ResetBtn: TButton + Left = 128 + Height = 28 + Top = 352 + Width = 71 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 5 + end + object CancelBtn: TButton + Left = 232 + Height = 30 + Top = 352 + Width = 71 + Caption = 'Cancel' + ModalResult = 2 + OnClick = CancelBtnClick + TabOrder = 6 + end + object ComputeBtn: TButton + Left = 336 + Height = 28 + Top = 352 + Width = 71 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 7 + end + object ReturnBtn: TButton + Left = 470 + Height = 28 + Top = 352 + Width = 71 + Caption = 'Return' + ModalResult = 1 + OnClick = ReturnBtnClick + TabOrder = 8 + end + object Grid: TStringGrid + Left = 9 + Height = 265 + Top = 64 + Width = 532 + Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goEditing, goTabs, goSmoothScroll] + TabOrder = 9 + OnKeyPress = GridKeyPress + OnSetEditText = GridSetEditText + end + object HelpBtn: TButton + Tag = 133 + Left = 8 + Height = 28 + Top = 352 + Width = 81 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 10 + end +end diff --git a/applications/lazstats/source_orig/multgenunit.lrs b/applications/lazstats/source_orig/multgenunit.lrs new file mode 100644 index 000000000..7f19d2448 --- /dev/null +++ b/applications/lazstats/source_orig/multgenunit.lrs @@ -0,0 +1,37 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TMultGenFrm','FORMDATA',[ + 'TPF0'#11'TMultGenFrm'#10'MultGenFrm'#4'Left'#3#211#0#6'Height'#3#140#1#3'Top' + +#2'l'#5'Width'#3'1'#2#7'Caption'#6#22'Multivariate Generator'#12'ClientHeigh' + +'t'#3#140#1#11'ClientWidth'#3'1'#2#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#8 + +'0.9.28.2'#0#6'TLabel'#6'Label1'#4'Left'#2#9#6'Height'#2#14#3'Top'#2#16#5'Wi' + +'dth'#2'e'#7'Caption'#6#20'Number of variables:'#11'ParentColor'#8#0#0#6'TLa' + +'bel'#6'Label2'#4'Left'#3#176#0#6'Height'#2#14#3'Top'#2#16#5'Width'#2'='#7'C' + +'aption'#6#12'Sample Size:'#11'ParentColor'#8#0#0#5'TEdit'#10'NoVarsEdit'#4 + +'Left'#2'x'#6'Height'#2#21#3'Top'#2#8#5'Width'#2'-'#6'OnExit'#7#14'NoVarsEdi' + +'tExit'#10'OnKeyPress'#7#18'NoVarsEditKeyPress'#8'TabOrder'#2#0#4'Text'#6#10 + +'NoVarsEdit'#0#0#5'TEdit'#9'NoObsEdit'#4'Left'#3#248#0#6'Height'#2#21#3'Top' + +#2#8#5'Width'#2'"'#6'OnExit'#7#13'NoObsEditExit'#10'OnKeyPress'#7#17'NoObsEd' + +'itKeyPress'#8'TabOrder'#2#1#4'Text'#6#9'NoObsEdit'#0#0#9'TCheckBox'#8'Parms' + +'Chk'#4'Left'#3'0'#1#6'Height'#2#17#3'Top'#2#13#5'Width'#2'd'#7'Caption'#6#16 + +'Print Parametes:'#8'TabOrder'#2#2#0#0#9'TCheckBox'#9'SampleChk'#4'Left'#3 + +#160#1#6'Height'#2#17#3'Top'#2#13#5'Width'#2'o'#7'Caption'#6#19'Print Sample' + +' Stats:'#8'TabOrder'#2#3#0#0#9'TCheckBox'#10'PerturbChk'#4'Left'#3'0'#1#6'H' + +'eight'#2#17#3'Top'#2'('#5'Width'#3#227#0#7'Caption'#6'+Select Distribution ' + +'Perturbation Parameters'#8'TabOrder'#2#4#0#0#7'TButton'#8'ResetBtn'#4'Left' + +#3#128#0#6'Height'#2#28#3'Top'#3'`'#1#5'Width'#2'G'#7'Caption'#6#5'Reset'#7 + +'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#5#0#0#7'TButton'#9'CancelBtn'#4 + +'Left'#3#232#0#6'Height'#2#30#3'Top'#3'`'#1#5'Width'#2'G'#7'Caption'#6#6'Can' + +'cel'#11'ModalResult'#2#2#7'OnClick'#7#14'CancelBtnClick'#8'TabOrder'#2#6#0#0 + +#7'TButton'#10'ComputeBtn'#4'Left'#3'P'#1#6'Height'#2#28#3'Top'#3'`'#1#5'Wid' + +'th'#2'G'#7'Caption'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrde' + +'r'#2#7#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3#214#1#6'Height'#2#28#3'Top'#3 + +'`'#1#5'Width'#2'G'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#7'OnClick'#7 + +#14'ReturnBtnClick'#8'TabOrder'#2#8#0#0#11'TStringGrid'#4'Grid'#4'Left'#2#9#6 + +'Height'#3#9#1#3'Top'#2'@'#5'Width'#3#20#2#7'Options'#11#15'goFixedVertLine' + +#15'goFixedHorzLine'#10'goVertLine'#10'goHorzLine'#13'goRangeSelect'#9'goEdi' + +'ting'#6'goTabs'#14'goSmoothScroll'#0#8'TabOrder'#2#9#10'OnKeyPress'#7#12'Gr' + +'idKeyPress'#13'OnSetEditText'#7#15'GridSetEditText'#0#0#7'TButton'#7'HelpBt' + +'n'#3'Tag'#3#133#0#4'Left'#2#8#6'Height'#2#28#3'Top'#3'`'#1#5'Width'#2'Q'#7 + +'Caption'#6#4'Help'#7'OnClick'#7#12'HelpBtnClick'#8'TabOrder'#2#10#0#0#0 +]); diff --git a/applications/lazstats/source_orig/multgenunit.pas b/applications/lazstats/source_orig/multgenunit.pas new file mode 100644 index 000000000..52faba444 --- /dev/null +++ b/applications/lazstats/source_orig/multgenunit.pas @@ -0,0 +1,452 @@ +unit MultGenUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Grids, Globals, MainUnit, OutPutUnit, Math, + DictionaryUnit, MatrixLib, contexthelpunit; + +type + + { TMultGenFrm } + + TMultGenFrm = class(TForm) + HelpBtn: TButton; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + PerturbChk: TCheckBox; + SampleChk: TCheckBox; + ParmsChk: TCheckBox; + NoObsEdit: TEdit; + Label2: TLabel; + NoVarsEdit: TEdit; + Label1: TLabel; + Grid: TStringGrid; + procedure CancelBtnClick(Sender: TObject); + procedure ComputeBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure GridKeyPress(Sender: TObject; var Key: char); + procedure GridSetEditText(Sender: TObject; ACol, ARow: Integer; + const Value: string); + procedure HelpBtnClick(Sender: TObject); + procedure NoObsEditExit(Sender: TObject); + procedure NoObsEditKeyPress(Sender: TObject; var Key: char); + procedure NoVarsEditExit(Sender: TObject); + procedure NoVarsEditKeyPress(Sender: TObject; var Key: char); + procedure ResetBtnClick(Sender: TObject); + procedure ReturnBtnClick(Sender: TObject); + private + { private declarations } + NoVars : integer; + NoObs : integer; + gridrow, gridcol : integer; + + public + { public declarations } + end; + +var + MultGenFrm: TMultGenFrm; + +implementation + +{ TMultGenFrm } + +procedure TMultGenFrm.ResetBtnClick(Sender: TObject); +VAR i, j : integer; +begin + NoVarsEdit.Text := ''; + NoObsEdit.Text := ''; + ParmsChk.Checked := true; + SampleChk.Checked := true; + Grid.RowCount := 2; + Grid.ColCount := 2; + for i := 0 to 1 do + for j := 0 to 1 do Grid.Cells[i,j] := ''; + CancelBtn.SetFocus; +end; + +procedure TMultGenFrm.ReturnBtnClick(Sender: TObject); +begin + exit; +end; + +procedure TMultGenFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TMultGenFrm.ComputeBtnClick(Sender: TObject); +var + RhoMat : DblDyneMat; + SampMat : DblDyneMat; + Mus : DblDyneVec; + means : DblDyneVec; + Sigmas : DblDyneVec; + stddevs : DblDyneVec; + i, j, k, i1, i2, n2, k1 : integer; + determ, n3, r1, s8, s9, d2, x, y, mean : double; + linestring : string; + cellstring : string; + singular : boolean; + title : string; + RowLabels: StrDyneVec; + ColLabels: StrDyneVec; +begin + OutPutFrm.RichEdit.Clear; + + // get memory allocations + SetLength(RhoMat,NoVars,NoVars); + SetLength(SampMat,NoVars,NoVars); + SetLength(Mus,NoVars); + SetLength(means,NoVars); + SetLength(Sigmas,NoVars); + SetLength(stddevs,NoVars); + SetLength(RowLabels,NoVars); + SetLength(ColLabels,NoVars); + + // get data from grid into arrays + for i := 1 to NoVars do + for j := 1 to NoVars do + begin + RhoMat[i-1,j-1] := StrToFloat(Grid.Cells[i,j]); + end; + for i := 1 to NoVars do + begin + Mus[i-1] := StrToFloat(Grid.Cells[i,NoVars+1]); + Sigmas[i-1] := StrToFloat(Grid.Cells[i,NoVars+2]); + RowLabels[i-1] := Grid.Cells[i,0]; + ColLabels[i-1] := RowLabels[i-1]; + end; + + // get determinant of Rho matrix, i.e. check for singularity + singular := FALSE; + for i := 0 to NoVars-1 do + begin + for j := 0 to NoVars - 1 do + begin + SampMat[i,j] := RhoMat[i,j] * Sigmas[i] * Sigmas[j]; + RhoMat[i,j] := SampMat[i,j]; + end; + end; + + n2 := 1; + i1 := 0; + while (n2 < NoVars) do + begin + for i := n2 to NoVars - 1 do + begin + n3 := RhoMat[i,i1] / RhoMat[i1,i1]; + for j := n2 to NoVars - 1 do RhoMat[i,j] := RhoMat[i,j] - (RhoMat[i1,j] * n3); + end; + i1 := n2; + n2 := N2 + 1; + end; + determ := 1.0; + for i := 0 to NoVars - 1 do determ := determ * RhoMat[i,i]; + linestring := format('Determinant of the population matrix = %10.4f',[determ]); + OutPutFrm.RichEdit.Lines.Add(linestring); + + // triangular factorization + if (abs(determ) > 0.00001) then + begin + if (SampMat[0,0] < 0.0) then SampMat[0,0] := 1.0; + r1 := sqrt(SampMat[0,0]); + for i := 0 to NoVars - 1 do + begin + RhoMat[i,0] := SampMat[i,0] / r1; + for j := 1 to NoVars - 1 do RhoMat[i,j] := 0.0; + end; + for i := 1 to NoVars - 1 do + begin + s9 := 0.0; + k1 := i - 1; + for k := 0 to k1 - 1 do s9 := s9 + (RhoMat[i,k] * RhoMat[i,k]); + d2 := SampMat[i,i] - s9; + if (d2 > 0.0) then + begin + RhoMat[i,i] := sqrt(d2); + for j := 1 to i - 1 do + begin + if (j <> i) then + begin + s8 := 0.0; + k1 := j - 1; + for k := 0 to k1 - 1 do s8 := s8 + (RhoMat[i,k] * RhoMat[j,k]); + RhoMat[i,j] := (SampMat[i,j] - s8) / RhoMat[j,j]; + end; + end; // end j loop + end; // end if d2 > 0 + end; // end i loop +// title := 'Triangularized Matrix'; +// MAT_PRINT(RhoMat,NoVars,NoVars,title,RowLabels,ColLabels,NoObs); + + // initialize variables for mainform grid + NoVariables := 0; + DictionaryFrm.DictGrid.RowCount := 1; + DictionaryFrm.DictGrid.ColCount := 8; + if not PerturbChk.Checked then + begin + for i := 1 to NoVars do + begin + DictionaryFrm.NewVar(i); +// NoVariables := NoVariables + 1; + end; + NoCases := NoObs; + OS3MainFrm.NoVarsEdit.Text := IntToStr(NoVars); + OS3MainFrm.NoCasesEdit.Text := IntToStr(NoObs); + end else + begin + for i := 1 to NoVars*2 do + begin + DictionaryFrm.NewVar(i); +// NoVariables := NoVariables + 1; + end; + NoCases := NoObs; + OS3MainFrm.NoVarsEdit.Text := IntToStr(NoVars*2); + OS3MainFrm.NoCasesEdit.Text := IntToStr(NoObs); + end; + + // Now generate score vectors + for i2 := 0 to NoObs - 1 do // rows + begin // label case heading + cellstring := format('Case%d',[i2+1]); + OS3MainFrm.DataGrid.Cells[0,i2+1] := cellstring; + for i := 0 to NoVars -1 do stddevs[i] := RandG(0.0,1.0); + for i := 0 to NoVars - 1 do + begin + x := 0.0; + for j := 0 to i do x := x + (RhoMat[i,j] * stddevs[j]); + mean := StrToFloat(Grid.Cells[i+1,NoVars+1]); + cellstring := format('%10.3f',[x+mean]); + OS3MainFrm.DataGrid.Cells[i+1,i2+1] := cellstring; + end; // next variable + end; // next observation + end; // if abs(determ > .00001) + + // if perturbation elected, convert generated data to z scores and perturb + // with the selected perturbation coefficients + if PerturbChk.Checked then + begin + for i := 1 to NoVars do + begin + means[i-1] := 0.0; + stddevs[i-1] := 0.0; + end; + for i := 1 to NoVars do + begin + for j := 1 to NoObs do + begin + x := StrToFloat(OS3MainFrm.DataGrid.Cells[i,j]); + means[i-1] := means[i-1] + x; + stddevs[i-1] := stddevs[i-1] + (x * x); + end; + stddevs[i-1] := stddevs[i-1] - (means[i-1] * means[i-1] / NoObs); + stddevs[i-1] := stddevs[i-1] / (NoObs - 1); + stddevs[i-1] := sqrt(stddevs[i-1]); + means[i-1] := means[i-1] / NoObs; + OS3MainFrm.DataGrid.Cells[NoVars+i,0] := OS3MainFrm.DataGrid.Cells[i,0] + 'Z'; + end; + for i := 1 to NoVars do + begin + for j := 1 to NoObs do + begin + x := StrToFloat(OS3MainFrm.DataGrid.Cells[i,j]); + x := (x - means[i-1]) / stddevs[i-1]; + OS3MainFrm.DataGrid.Cells[NoVars+i,j] := FloatToStr(x); + end; + end; + // Now, show perturbation options form and select coefficients + + end; // end if perturbchk is checked + + // print parameters if checked + if ParmsChk.Checked then + begin + for i := 1 to NoVars do + for j := 1 to NoVars do RhoMat[i-1,j-1] := StrToFloat(Grid.Cells[i,j]); + for i := 1 to NoVars do + begin + Mus[i-1] := StrToFloat(Grid.Cells[i,NoVars+1]); + Sigmas[i-1] := StrToFloat(Grid.Cells[i,NoVars+2]); + end; + title := 'Rho Matrix'; + MAT_PRINT(RhoMat,NoVars,NoVars,title,RowLabels,ColLabels,NoObs); + title := 'Population Means'; + DynVectorPrint(Mus,NoVars,title,RowLabels,NoObs); + title := 'Sigmas'; + DynVectorPrint(Sigmas,NoVars,title,RowLabels,NoObs); + OutPutFrm.ShowModal; + end; + + // do sample values if checked + if SampleChk.Checked then + begin + OutPutFrm.RichEdit.Clear; + for i := 1 to NoVars do + begin + for j := 1 to NoVars do SampMat[i-1,j-1] := 0.0; + means[i-1] := 0.0; + stddevs[i-1] := 0.0; + end; + for i := 1 to NoObs do + begin + for j := 0 to NoVars - 1 do + begin + x := StrToFloat(OS3MainFrm.DataGrid.Cells[j+1,i]); + for k := 0 to NoVars - 1 do + begin // cross-products matrix + y := StrToFloat(OS3MainFrm.DataGrid.Cells[k+1,i]); + SampMat[j,k] := SampMat[j,k] + (x * y); + end; + means[j] := means[j] + x; + end; + end; + // variance - covariance matrix + for i := 0 to NoVars - 1 do + begin + for j := 0 to NoVars - 1 do + begin + SampMat[i,j] := SampMat[i,j] - (means[i] * means[j] / NoObs); + SampMat[i,j] := SampMat[i,j] / (NoObs - 1.0); + end; + stddevs[i] := sqrt(SampMat[i][i]); + end; + for i := 0 to NoVars - 1 do + begin + for j := 0 to NoVars - 1 do + begin // correlation matrix + SampMat[i,j] := SampMat[i,j] / (stddevs[i] * stddevs[j]); + end; + means[i] := means[i] / NoObs; + end; + title := 'Sample r Matrix'; + MAT_PRINT(SampMat,NoVars,NoVars,title,RowLabels,ColLabels,NoObs); + title := 'Sample Means'; + DynVectorPrint(means,NoVars,title,RowLabels,NoObs); + title := 'Standard Deviations'; + DynVectorPrint(stddevs,NoVars,title,RowLabels,NoObs); + OutPutFrm.ShowModal; + end; + + // dispose of arrays + ColLabels := nil; + RowLabels := nil; + stddevs := nil; + Sigmas := nil; + means := nil; + Mus := nil; + SampMat := nil; + RhoMat := nil; +end; + +procedure TMultGenFrm.CancelBtnClick(Sender: TObject); +begin + exit; +end; + +procedure TMultGenFrm.GridKeyPress(Sender: TObject; var Key: char); +begin + gridrow := Grid.Row; + gridcol := Grid.Col; + if ord(Key) = 13 then + begin + if (gridrow <= gridcol) then + begin + grid.Cells[gridrow,gridcol] := grid.Cells[gridcol,gridrow]; + end; + end; +end; + +procedure TMultGenFrm.GridSetEditText(Sender: TObject; ACol, ARow: Integer; + const Value: string); +begin + if (gridrow <= gridcol) then + begin + grid.Cells[gridrow,gridcol] := grid.Cells[gridcol,gridrow]; + end; +end; + +procedure TMultGenFrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +procedure TMultGenFrm.NoObsEditExit(Sender: TObject); +var + i, j : integer; + cellstring : string; +begin + NoObs := StrToInt(NoObsEdit.Text); + if NoObs > 0 then + begin + OS3MainFrm.DataGrid.RowCount := NoObs + 1; + OS3MainFrm.DataGrid.ColCount := NoVars + 1; + for i := 1 to NoObs do + begin + for j := 1 to NoVars do + begin + OS3MainFrm.DataGrid.Cells[j,i] := ''; + end; + end; + end; + + for j := 1 to NoVars do + begin + cellstring := format('VAR%d',[j]); + OS3MainFrm.DataGrid.Cells[j,0] := cellstring; + end; + + Grid.Cells[0,0] := 'Variable'; + Grid.Cells[0,NoVars+1] := 'Mean'; + Grid.Cells[0,NoVars+2] := 'Std.Dev.'; +end; + +procedure TMultGenFrm.NoObsEditKeyPress(Sender: TObject; var Key: char); +begin + if ord(Key) = 13 then NoObsEditExit(self); +end; + +procedure TMultGenFrm.NoVarsEditExit(Sender: TObject); +var + i,j : integer; + cellstring : string; +begin + NoVars := StrToInt(NoVarsEdit.Text); + if NoVars > 0 then + begin + Grid.RowCount := NoVars + 3; + Grid.ColCount := NoVars + 1; + for i := 1 to NoVars do + begin + Grid.Cells[i,i] := FloatToStr(1.0); + cellstring := format('VAR%d',[i]); + Grid.Cells[i,0] := cellstring; +{ for j := 1 to NoVars do + begin + if i <> j then + begin + Grid.Cells[i,j] := ''; + Grid.Cells[j,i] := ''; + end; + end; // for j := 1 to NoVars } + end; // for i := 1 to NoVars + + end; // if NoVars > 0 +end; + +procedure TMultGenFrm.NoVarsEditKeyPress(Sender: TObject; var Key: char); +begin + if ord(Key) = 13 then NoVarsEditExit(self); +end; + +initialization + {$I multgenunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/multxvsyunit.lfm b/applications/lazstats/source_orig/multxvsyunit.lfm new file mode 100644 index 000000000..7274eaabf --- /dev/null +++ b/applications/lazstats/source_orig/multxvsyunit.lfm @@ -0,0 +1,433 @@ +object MultXvsYFrm: TMultXvsYFrm + Left = 144 + Height = 362 + Top = 109 + Width = 484 + Caption = 'Multiple X Versus Y Plot' + ClientHeight = 362 + ClientWidth = 484 + OnShow = FormShow + LCLVersion = '0.9.28.2' + object Label1: TLabel + Left = 8 + Height = 14 + Top = 8 + Width = 94 + Caption = 'Available Variables:' + ParentColor = False + end + object Label2: TLabel + Left = 224 + Height = 14 + Top = 24 + Width = 48 + Caption = 'X Variable' + ParentColor = False + end + object Label3: TLabel + Left = 224 + Height = 14 + Top = 104 + Width = 48 + Caption = 'Y Variable' + ParentColor = False + end + object Label4: TLabel + Left = 224 + Height = 14 + Top = 184 + Width = 71 + Caption = 'Group Variable' + ParentColor = False + end + object Label5: TLabel + Left = 8 + Height = 14 + Top = 272 + Width = 51 + Caption = 'Plot Label:' + ParentColor = False + end + object VarList: TListBox + Left = 8 + Height = 225 + Top = 24 + Width = 161 + ItemHeight = 0 + TabOrder = 0 + end + object XInBtn: TBitBtn + Left = 184 + Height = 27 + Top = 24 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = XInBtnClick + TabOrder = 1 + end + object XOutBtn: TBitBtn + Left = 184 + Height = 27 + Top = 56 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = XOutBtnClick + TabOrder = 2 + end + object YInBtn: TBitBtn + Left = 184 + Height = 27 + Top = 104 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = YInBtnClick + TabOrder = 3 + end + object YOutBtn: TBitBtn + Left = 184 + Height = 27 + Top = 136 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = YOutBtnClick + TabOrder = 4 + end + object GroupInBtn: TBitBtn + Left = 184 + Height = 27 + Top = 184 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = GroupInBtnClick + TabOrder = 5 + end + object GroupOutBtn: TBitBtn + Left = 184 + Height = 27 + Top = 216 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = GroupOutBtnClick + TabOrder = 6 + end + object XEdit: TEdit + Left = 224 + Height = 21 + Top = 40 + Width = 139 + TabOrder = 7 + Text = 'XEdit' + end + object YEdit: TEdit + Left = 224 + Height = 21 + Top = 120 + Width = 138 + TabOrder = 8 + Text = 'YEdit' + end + object GroupEdit: TEdit + Left = 222 + Height = 21 + Top = 200 + Width = 138 + TabOrder = 9 + Text = 'GroupEdit' + end + object LabelEdit: TEdit + Left = 67 + Height = 21 + Top = 264 + Width = 295 + TabOrder = 10 + Text = 'LabelEdit' + end + object GroupBox1: TGroupBox + Left = 112 + Height = 56 + Top = 296 + Width = 164 + Caption = 'Options:' + ClientHeight = 38 + ClientWidth = 160 + TabOrder = 11 + object DescChk: TCheckBox + Left = 7 + Height = 17 + Top = 2 + Width = 148 + Caption = 'Show Descriptive Statistics' + TabOrder = 0 + end + object LinesChk: TCheckBox + Left = 6 + Height = 17 + Top = 19 + Width = 142 + Caption = 'Connect Points with Lines' + TabOrder = 1 + end + end + object ResetBtn: TButton + Left = 385 + Height = 28 + Top = 72 + Width = 80 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 12 + end + object CancelBtn: TButton + Left = 385 + Height = 28 + Top = 136 + Width = 81 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 13 + end + object ComputeBtn: TButton + Left = 385 + Height = 28 + Top = 200 + Width = 80 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 14 + end + object ReturnBtn: TButton + Left = 384 + Height = 28 + Top = 258 + Width = 80 + Caption = 'Return' + ModalResult = 1 + TabOrder = 15 + end + object HelpBtn: TButton + Tag = 134 + Left = 383 + Height = 28 + Top = 10 + Width = 81 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 16 + end +end diff --git a/applications/lazstats/source_orig/multxvsyunit.lrs b/applications/lazstats/source_orig/multxvsyunit.lrs new file mode 100644 index 000000000..bd9b03734 --- /dev/null +++ b/applications/lazstats/source_orig/multxvsyunit.lrs @@ -0,0 +1,350 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TMultXvsYFrm','FORMDATA',[ + 'TPF0'#12'TMultXvsYFrm'#11'MultXvsYFrm'#4'Left'#3#144#0#6'Height'#3'j'#1#3'To' + +'p'#2'm'#5'Width'#3#228#1#7'Caption'#6#24'Multiple X Versus Y Plot'#12'Clien' + +'tHeight'#3'j'#1#11'ClientWidth'#3#228#1#6'OnShow'#7#8'FormShow'#10'LCLVersi' + +'on'#6#8'0.9.28.2'#0#6'TLabel'#6'Label1'#4'Left'#2#8#6'Height'#2#14#3'Top'#2 + +#8#5'Width'#2'^'#7'Caption'#6#20'Available Variables:'#11'ParentColor'#8#0#0 + +#6'TLabel'#6'Label2'#4'Left'#3#224#0#6'Height'#2#14#3'Top'#2#24#5'Width'#2'0' + +#7'Caption'#6#10'X Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Lef' + +'t'#3#224#0#6'Height'#2#14#3'Top'#2'h'#5'Width'#2'0'#7'Caption'#6#10'Y Varia' + +'ble'#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#3#224#0#6'Height'#2 + +#14#3'Top'#3#184#0#5'Width'#2'G'#7'Caption'#6#14'Group Variable'#11'ParentCo' + +'lor'#8#0#0#6'TLabel'#6'Label5'#4'Left'#2#8#6'Height'#2#14#3'Top'#3#16#1#5'W' + +'idth'#2'3'#7'Caption'#6#11'Plot Label:'#11'ParentColor'#8#0#0#8'TListBox'#7 + +'VarList'#4'Left'#2#8#6'Height'#3#225#0#3'Top'#2#24#5'Width'#3#161#0#10'Item' + +'Height'#2#0#8'TabOrder'#2#0#0#0#7'TBitBtn'#6'XInBtn'#4'Left'#3#184#0#6'Heig' + +'ht'#2#27#3'Top'#2#24#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6' + +#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0 + +'d'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M' + +#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E' + +#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255 + +#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208 + +#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~' + +#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255 + +#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167 + +#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202 + +#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)' + +#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a' + +#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O' + +#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#9'NumGlyphs'#2#0#7'OnClick'#7#11'XInBtnClick'#8'TabOrder'#2#1#0#0#7'TBitBtn' + +#7'XOutBtn'#4'Left'#3#184#0#6'Height'#2#27#3'Top'#2'8'#5'Width'#2' '#10'Glyp' + +'h.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0 + +#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G' + +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)' + +#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134 + +#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203 + +#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190 + +'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127 + +#204#138#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255 + +#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135 + +#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255 + +#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177 + +'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255 + +'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#12 + +'XOutBtnClick'#8'TabOrder'#2#2#0#0#7'TBitBtn'#6'YInBtn'#4'Left'#3#184#0#6'He' + +'ight'#2#27#3'Top'#2'h'#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM' + +'6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0 + +#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M' + +#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E' + +#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255 + +#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208 + +#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~' + +#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255 + +#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167 + +#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202 + +#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)' + +#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a' + +#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O' + +#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#9'NumGlyphs'#2#0#7'OnClick'#7#11'YInBtnClick'#8'TabOrder'#2#3#0#0#7'TBitBtn' + +#7'YOutBtn'#4'Left'#3#184#0#6'Height'#2#27#3'Top'#3#136#0#5'Width'#2' '#10'G' + +'lyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0 + +#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G' + +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)' + +#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134 + ,#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203 + +#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190 + +'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127 + +#204#138#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255 + +#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135 + +#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255 + +#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177 + +'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255 + +'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#12 + +'YOutBtnClick'#8'TabOrder'#2#4#0#0#7'TBitBtn'#10'GroupInBtn'#4'Left'#3#184#0 + +#6'Height'#2#27#3'Top'#3#184#0#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4 + +#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0 + +#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169 + +'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255 + +'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255 + +#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161 + +#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198 + +#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196 + +#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255 + +#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149 + +#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P' + +#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195 + +'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255 + +'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#15'GroupInBtnClick'#8'TabOrder' + +#2#5#0#0#7'TBitBtn'#11'GroupOutBtn'#4'Left'#3#184#0#6'Height'#2#27#3'Top'#3 + +#216#0#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0 + +'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0 + +#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G' + +#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161 + +'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131 + +#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/' + +'x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e' + +#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255 + +#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132 + +#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255 + +#255#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154 + +#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255 + +#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201 + +#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O' + +#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'Num' + +'Glyphs'#2#0#7'OnClick'#7#16'GroupOutBtnClick'#8'TabOrder'#2#6#0#0#5'TEdit'#5 + +'XEdit'#4'Left'#3#224#0#6'Height'#2#21#3'Top'#2'('#5'Width'#3#139#0#8'TabOrd' + +'er'#2#7#4'Text'#6#5'XEdit'#0#0#5'TEdit'#5'YEdit'#4'Left'#3#224#0#6'Height'#2 + +#21#3'Top'#2'x'#5'Width'#3#138#0#8'TabOrder'#2#8#4'Text'#6#5'YEdit'#0#0#5'TE' + +'dit'#9'GroupEdit'#4'Left'#3#222#0#6'Height'#2#21#3'Top'#3#200#0#5'Width'#3 + +#138#0#8'TabOrder'#2#9#4'Text'#6#9'GroupEdit'#0#0#5'TEdit'#9'LabelEdit'#4'Le' + +'ft'#2'C'#6'Height'#2#21#3'Top'#3#8#1#5'Width'#3''''#1#8'TabOrder'#2#10#4'Te' + +'xt'#6#9'LabelEdit'#0#0#9'TGroupBox'#9'GroupBox1'#4'Left'#2'p'#6'Height'#2'8' + +#3'Top'#3'('#1#5'Width'#3#164#0#7'Caption'#6#8'Options:'#12'ClientHeight'#2 + +'&'#11'ClientWidth'#3#160#0#8'TabOrder'#2#11#0#9'TCheckBox'#7'DescChk'#4'Lef' + +'t'#2#7#6'Height'#2#17#3'Top'#2#2#5'Width'#3#148#0#7'Caption'#6#27'Show Desc' + +'riptive Statistics'#8'TabOrder'#2#0#0#0#9'TCheckBox'#8'LinesChk'#4'Left'#2#6 + +#6'Height'#2#17#3'Top'#2#19#5'Width'#3#142#0#7'Caption'#6#25'Connect Points ' + +'with Lines'#8'TabOrder'#2#1#0#0#0#7'TButton'#8'ResetBtn'#4'Left'#3#129#1#6 + +'Height'#2#28#3'Top'#2'H'#5'Width'#2'P'#7'Caption'#6#5'Reset'#7'OnClick'#7#13 + +'ResetBtnClick'#8'TabOrder'#2#12#0#0#7'TButton'#9'CancelBtn'#4'Left'#3#129#1 + +#6'Height'#2#28#3'Top'#3#136#0#5'Width'#2'Q'#7'Caption'#6#6'Cancel'#11'Modal' + +'Result'#2#2#8'TabOrder'#2#13#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3#129#1#6 + +'Height'#2#28#3'Top'#3#200#0#5'Width'#2'P'#7'Caption'#6#7'Compute'#7'OnClick' + +#7#15'ComputeBtnClick'#8'TabOrder'#2#14#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3 + +#128#1#6'Height'#2#28#3'Top'#3#2#1#5'Width'#2'P'#7'Caption'#6#6'Return'#11'M' + +'odalResult'#2#1#8'TabOrder'#2#15#0#0#7'TButton'#7'HelpBtn'#3'Tag'#3#134#0#4 + +'Left'#3#127#1#6'Height'#2#28#3'Top'#2#10#5'Width'#2'Q'#7'Caption'#6#4'Help' + +#7'OnClick'#7#12'HelpBtnClick'#8'TabOrder'#2#16#0#0#0 +]); diff --git a/applications/lazstats/source_orig/multxvsyunit.pas b/applications/lazstats/source_orig/multxvsyunit.pas new file mode 100644 index 000000000..360baa372 --- /dev/null +++ b/applications/lazstats/source_orig/multxvsyunit.pas @@ -0,0 +1,426 @@ +unit MultXvsYUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, MainUnit, Globals, functionsLib, OutPutUnit, DataProcs, + DictionaryUnit, Math, Clipbrd, contexthelpunit; + + +type + + { TMultXvsYFrm } + + TMultXvsYFrm = class(TForm) + HelpBtn: TButton; + XInBtn: TBitBtn; + XOutBtn: TBitBtn; + YInBtn: TBitBtn; + YOutBtn: TBitBtn; + GroupInBtn: TBitBtn; + GroupOutBtn: TBitBtn; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + DescChk: TCheckBox; + LinesChk: TCheckBox; + XEdit: TEdit; + YEdit: TEdit; + GroupEdit: TEdit; + GroupBox1: TGroupBox; + LabelEdit: TEdit; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + Label5: TLabel; + VarList: TListBox; + procedure ComputeBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure GroupInBtnClick(Sender: TObject); + procedure GroupOutBtnClick(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + procedure XInBtnClick(Sender: TObject); + procedure XOutBtnClick(Sender: TObject); + procedure YInBtnClick(Sender: TObject); + procedure YOutBtnClick(Sender: TObject); + private + { private declarations } + procedure plotxy(var XValues : DblDyneMat; + YValues : DblDyneMat; + MaxX, MinX, MaxY, MinY : double; + N, NoY, MinGrp : integer); + + public + { public declarations } + end; + +var + MultXvsYFrm: TMultXvsYFrm; + +implementation +uses BlankFrmUnit; + +{ TMultXvsYFrm } + +procedure TMultXvsYFrm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + VarList.Clear; + for i := 1 to NoVariables do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); + XEdit.Text := ''; + YEdit.Text := ''; + GroupEdit.Text := ''; + DescChk.Checked := false; + LinesChk.Checked := false; + XInBtn.Visible := true; + YInBtn.Visible := true; + GroupInBtn.Visible := true; + XOutBtn.Visible := false; + YOutBtn.Visible := false; + GroupOutBtn.Visible := false; +end; + +procedure TMultXvsYFrm.GroupInBtnClick(Sender: TObject); +VAR i : integer; +begin + i := VarList.ItemIndex; + GroupEdit.Text := VarList.Items.Strings[i]; + VarList.Items.Delete(i); + GroupInBtn.Visible := false; + GroupOutBtn.Visible := true; +end; + +procedure TMultXvsYFrm.ComputeBtnClick(Sender: TObject); +var + i, j, k, N, NoGrps, XCol, YCol, GrpCol, Grp, MinGrp, MaxGrp : integer; + NoSelected, MaxGrpSize : integer; + selected, NoInGrp : IntDyneVec; + YValues, XValues : DblDyneMat; + Means, StdDevs : DblDyneVec; + MinX, MaxX, MinY, MaxY, X, Y, temp : double; + cellstring, prtline : string; + +begin + MaxGrpSize := 0; + SetLength(selected,3); + MaxX := -1.0e20; + MinX := 1.0e20; + MaxY := -1.0e20; + MinY := 1.0e20; + MinGrp := 1000; + MaxGrp := -1000; + N:=0; + + // Get selected variables + for i := 1 to NoVariables do + begin + cellstring := OS3MainFrm.DataGrid.Cells[i,0]; + if (cellstring = XEdit.Text) then selected[0] := i; + if (cellstring = YEdit.Text) then selected[1] := i; + if (cellstring = GroupEdit.Text) then selected[2] := i; + end; + XCol := selected[0]; + YCol := selected[1]; + GrpCol := selected[2]; + NoSelected := 3; + + // Get number of groups + for i := 1 to NoCases do + begin + Grp := StrToInt(OS3MainFrm.DataGrid.Cells[GrpCol,i]); + if (Grp > MaxGrp) then MaxGrp := Grp; + if (Grp < MinGrp) then MinGrp := Grp; + end; + NoGrps := (MaxGrp - MinGrp) + 1; + + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('X VERSUS Y FOR GROUPS PLOT'); + OutPutFrm.RichEdit.Lines.Add(''); + SetLength(YValues,NoCases+1,NoGrps+1); + SetLength(XValues,NoCases+1,NoGrps+1); + SetLength(Means,2); + SetLength(StdDevs,2); + SetLength(NoInGrp,NoGrps); + + for i := 0 to 1 do + begin + Means[i] := 0.0; + StdDevs[i] := 0.0; + end; + for i := 0 to NoGrps - 1 do NoInGrp[i] := 0; + + for i := 1 to NoCases do + begin + if (not GoodRecord(i,NoSelected,selected))then continue; + N := N + 1; + X := StrToFloat(OS3MainFrm.DataGrid.Cells[XCol,i]); + if (X > MaxX) then MaxX := X; + if (X < MinX) then MinX := X; + Y := StrToFloat(OS3MainFrm.DataGrid.Cells[YCol,i]); + if (Y > MaxY) then MaxY := Y; + if (Y < MinY) then MinY := Y; + end; + + for i := 1 to NoCases do + begin + if (not GoodRecord(i,NoSelected,selected))then continue; + Y := StrToFloat(OS3MainFrm.DataGrid.Cells[YCol,i]); + if (Y > MaxY) then MaxY := Y; + if (Y < MinY) then MinY := Y; + Grp := StrToInt(OS3MainFrm.DataGrid.Cells[GrpCol,i]); + Grp := Grp - MinGrp; + NoInGrp[Grp] := NoInGrp[Grp] + 1; + if (NoInGrp[Grp] > MaxGrpSize) then MaxGrpSize := NoInGrp[Grp]; + YValues[NoInGrp[Grp]-1,Grp] := Y; + XValues[NoInGrp[Grp]-1,Grp] := StrToFloat(OS3MainFrm.DataGrid.Cells[XCol,i]); + end; + + // get descriptive data + if (DescChk.Checked) then + begin + for i := 1 to NoCases do + begin + if (not GoodRecord(i,NoSelected,selected)) then continue; + Y := StrToFloat(OS3MainFrm.DataGrid.Cells[YCol,i]); + X := StrToFloat(OS3MainFrm.DataGrid.Cells[XCol,i]); + Means[0] := Means[0] + X; + StdDevs[0] := StdDevs[0] + (X * X); + Means[1] := Means[1] + Y; + StdDevs[1] := StdDevs[1] + (Y * Y); + end; + for i := 0 to 1 do + begin + StdDevs[i] := StdDevs[i] - (Means[i] * Means[i]) / N; + StdDevs[i] := StdDevs[i] / (N - 1); + StdDevs[i] := sqrt(StdDevs[i]); + Means[i] := Means[i] / N; + end; + OutPutFrm.RichEdit.Lines.Add('VARIABLE MEAN STANDARED DEVIATION'); + prtline := format(' X %9.3f %8.3f',[Means[0],StdDevs[0]]); + OutPutFrm.RichEdit.Lines.Add(prtline); + prtline := format(' Y %9.3f %8.3f',[Means[1],StdDevs[1]]); + OutPutFrm.RichEdit.Lines.Add(prtline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.ShowModal; + end; + + // sort on X + for i := 0 to NoGrps - 1 do + begin + for j := 0 to MaxGrpSize-2 do + begin + for k := j+1 to MaxGrpSize - 1 do + begin + if (XValues[j,i] > XValues[k,i]) then // swap + begin + temp := XValues[j,i]; + XValues[j,i] := XValues[k,i]; + XValues[k,i] := temp; + temp := YValues[j,i]; + YValues[j,i] := YValues[k,i]; + YValues[k,i] := temp; + end; + end; + end; + end; + + BlankFrm.Show; + plotxy(XValues, YValues, MaxX, MinX, MaxY, MinY, MaxGrpSize, NoGrps, MinGrp); + + NoInGrp := nil; + StdDevs := nil; + Means := nil; + XValues := nil; + YValues := nil; +end; + +procedure TMultXvsYFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TMultXvsYFrm.GroupOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(GroupEdit.Text); + GroupEdit.Text := ''; + GroupInBtn.Visible := true; + GroupOutBtn.Visible := false; +end; + +procedure TMultXvsYFrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +procedure TMultXvsYFrm.XInBtnClick(Sender: TObject); +VAR i : integer; +begin + i := VarList.ItemIndex; + XEdit.Text := VarList.Items.Strings[i]; + VarList.Items.Delete(i); + XInBtn.Visible := false; + XOutBtn.Visible := true; +end; + +procedure TMultXvsYFrm.XOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(XEdit.Text); + XEdit.Text := ''; + XInBtn.Visible := true; + XOutBtn.Visible := false; +end; + +procedure TMultXvsYFrm.YInBtnClick(Sender: TObject); +VAR i : integer; +begin + i := VarList.ItemIndex; + YEdit.Text := VarList.Items.Strings[i]; + VarList.Items.Delete(i); + YInBtn.Visible := false; + YOutBtn.Visible := true; +end; + +procedure TMultXvsYFrm.YOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(YEdit.Text); + YEdit.Text := ''; + YInBtn.Visible := true; + YOutBtn.Visible := false; +end; + +procedure TMultXvsYFrm.plotxy(var XValues : DblDyneMat; + YValues : DblDyneMat; + MaxX, MinX, MaxY, MinY : double; + N, NoY, MinGrp : integer); +var + // routine to plot X versus multiple Y values + xpos, ypos, hleft, hright, vtop, vbottom, imagewide : integer; + vhi, hwide, offset, strhi, imagehi, i, j, k, Grp : integer; + maxval, minval, valincr, Yvalue, Xvalue, value : double; + Title, outline : string; + Colors : array[0..12] of TColor; +begin + Colors[1] := clRed; + Colors[2] := clBlue; + Colors[3] := clGreen; + Colors[4] := clNavy; + Colors[5] := clTeal; + Colors[6] := clAqua; + Colors[7] := clLime; + Colors[8] := clFuchsia; + Colors[9] := clGray; + Colors[10] := clPurple; + Colors[11] := clOlive; + Colors[0] := clMaroon; + Title := LabelEdit.Text; + BlankFrm.Image1.Canvas.Clear; + BlankFrm.Caption := Title; + imagewide := BlankFrm.Image1.Width; + imagehi := BlankFrm.Image1.Height; +// ImageFrm.Image.Canvas.FloodFill(0,0,clWhite,fsBorder); + vtop := 20; + vbottom := ceil(imagehi) - 80; + vhi := vbottom - vtop; + hleft := 100; + hright := imagewide - 80; + hwide := hright - hleft; + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + BlankFrm.Image1.Canvas.Brush.Color := clWhite; + + // Draw chart border +// ImageFrm.Image.Canvas.Rectangle(0,0,imagewide,imagehi); + + // draw horizontal axis + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + BlankFrm.Image1.Canvas.MoveTo(hleft,vbottom); + BlankFrm.Image1.Canvas.LineTo(hright,vbottom); + valincr := (MaxX - MinX) / 10.0; + for i := 1 to 10 do + begin + ypos := vbottom; + Xvalue := MinX + valincr * (i - 1); + xpos := ceil(hwide * ((Xvalue - MinX) / (MaxX - MinX))); + xpos := xpos + hleft; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + ypos := ypos + 10; + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + outline := format('%6.2f',[Xvalue]); + Title := outline; + offset := BlankFrm.Image1.Canvas.TextWidth(Title) div 2; + xpos := xpos - offset; + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title); + end; + xpos := hleft + (hwide div 2) - (BlankFrm.Image1.Canvas.TextWidth(XEdit.Text) div 2); + ypos := vbottom + 20; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,XEdit.Text); + + // Draw vertical axis + Title := 'Y VALUES'; + xpos := hleft - BlankFrm.Image1.Canvas.TextWidth(Title) div 2; + ypos := vtop - BlankFrm.Image1.Canvas.TextHeight(Title); + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title); + xpos := hleft; + ypos := vtop; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + ypos := vbottom; + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + valincr := (MaxY - MinY) / 10.0; + for i := 1 to 10 do + begin + value := MaxY - ((i-1) * valincr); + outline := format('%8.2f',[value]); + Title := outline; + strhi := BlankFrm.Image1.Canvas.TextHeight(Title); + xpos := 10; + Yvalue := MaxY - (valincr * (i-1)); + ypos := ceil(vhi * ( (MaxY - Yvalue) / (MaxY - MinY))); + ypos := ypos + vtop - strhi div 2; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title); + xpos := hleft; + ypos := ypos + strhi div 2; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + xpos := hleft - 10; + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + end; + + // draw points for x and y pairs + + for j := 0 to NoY - 1 do + begin + BlankFrm.Image1.Canvas.Brush.Style := bsSolid; + BlankFrm.Image1.Canvas.Brush.Color := Colors[j mod 12]; + BlankFrm.Image1.Canvas.Pen.Color := Colors[j mod 12]; + Grp := MinGrp + j; + Title := 'GROUP ' + IntToStr(Grp); + for i := 1 to N do + begin + ypos := ceil(vhi * ( (MaxY - YValues[i-1,j]) / (MaxY - MinY))); + ypos := ypos + vtop; + xpos := ceil(hwide * ( (XValues[i-1,j] - MinX) / (MaxX - MinX))); + xpos := xpos + hleft; + if (i = 1) then BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + if (LinesChk.Checked) then BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + BlankFrm.Image1.Canvas.Ellipse(xpos,ypos,xpos+5,ypos+5); + end; + strhi := BlankFrm.Image1.Canvas.TextHeight(Title); + BlankFrm.Image1.Canvas.Brush.Color := clWhite; + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + xpos := hwide + hleft; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos-strhi); + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title); + end; +end; + +initialization + {$I multxvsyunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/normalityunit.lfm b/applications/lazstats/source_orig/normalityunit.lfm new file mode 100644 index 000000000..66d6d2c45 --- /dev/null +++ b/applications/lazstats/source_orig/normalityunit.lfm @@ -0,0 +1,311 @@ +object NormalityFrm: TNormalityFrm + Left = 192 + Height = 392 + Top = 90 + Width = 392 + Caption = 'Normality Tests' + ClientHeight = 392 + ClientWidth = 392 + OnShow = FormShow + LCLVersion = '0.9.26.2' + object Label1: TLabel + Left = 6 + Height = 14 + Top = 9 + Width = 59 + Caption = 'VARIABLES:' + ParentColor = False + end + object Label2: TLabel + Left = 233 + Height = 14 + Top = 8 + Width = 87 + Caption = 'Test Normality of:' + ParentColor = False + end + object Label8: TLabel + Left = 5 + Height = 14 + Top = 314 + Width = 33 + Caption = 'Lillifors' + ParentColor = False + end + object Label9: TLabel + Left = 5 + Height = 14 + Top = 329 + Width = 56 + Caption = 'Conclusion:' + ParentColor = False + end + object VarList: TListBox + Left = 5 + Height = 273 + Top = 29 + Width = 162 + TabOrder = 0 + end + object VarInBtn: TBitBtn + Left = 176 + Height = 35 + Top = 13 + Width = 37 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = VarInBtnClick + TabOrder = 1 + end + object VarOutBtn: TBitBtn + Left = 176 + Height = 35 + Top = 56 + Width = 37 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = VarOutBtnClick + TabOrder = 2 + end + object TestVarEdit: TEdit + Left = 231 + Height = 26 + Top = 30 + Width = 153 + TabOrder = 3 + Text = 'TestVarEdit' + end + object GroupBox1: TGroupBox + Left = 178 + Height = 85 + Top = 102 + Width = 209 + Caption = 'Shapiro-Wilkes Rresults' + ClientHeight = 67 + ClientWidth = 205 + TabOrder = 4 + object Label3: TLabel + Left = 7 + Height = 14 + Top = 9 + Width = 45 + Caption = 'WWW = ' + ParentColor = False + end + object Label4: TLabel + Left = 6 + Height = 14 + Top = 37 + Width = 65 + Caption = 'Probability = ' + ParentColor = False + end + object WEdit: TEdit + Left = 82 + Height = 18 + Top = 3 + Width = 100 + TabOrder = 0 + Text = 'WEdit' + end + object ProbEdit: TEdit + Left = 80 + Height = 17 + Top = 32 + Width = 102 + TabOrder = 1 + Text = 'ProbEdit' + end + end + object GroupBox2: TGroupBox + Left = 176 + Height = 102 + Top = 202 + Width = 207 + Caption = 'Lilliefors Test Results' + ClientHeight = 84 + ClientWidth = 203 + TabOrder = 5 + object Label5: TLabel + Left = 6 + Height = 14 + Top = 6 + Width = 52 + Caption = 'Skewness:' + ParentColor = False + end + object Label6: TLabel + Left = 6 + Height = 14 + Top = 34 + Width = 43 + Caption = 'Kurtosis:' + ParentColor = False + end + object Label7: TLabel + Left = 5 + Height = 14 + Top = 61 + Width = 67 + Caption = 'Test Statistic:' + ParentColor = False + end + object SkewEdit: TEdit + Left = 81 + Height = 16 + Top = 4 + Width = 101 + TabOrder = 0 + Text = 'SkewEdit' + end + object KurtosisEdit: TEdit + Left = 82 + Height = 16 + Top = 32 + Width = 99 + TabOrder = 1 + Text = 'KurtosisEdit' + end + object StatEdit: TEdit + Left = 81 + Height = 15 + Top = 60 + Width = 98 + TabOrder = 2 + Text = 'StatEdit' + end + end + object ConclusionEdit: TEdit + Left = 65 + Height = 19 + Top = 320 + Width = 315 + TabOrder = 6 + Text = 'ConclusionEdit' + end + object Panel1: TPanel + Height = 46 + Top = 346 + Width = 392 + Align = alBottom + ClientHeight = 46 + ClientWidth = 392 + TabOrder = 7 + object CancelBtn: TButton + Left = 6 + Height = 28 + Top = 6 + Width = 66 + Caption = 'Cancel' + ModalResult = 2 + OnClick = CancelBtnClick + TabOrder = 0 + end + end + object ResetBtn: TButton + Left = 80 + Height = 28 + Top = 352 + Width = 66 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 8 + end + object PrintBtn: TButton + Left = 160 + Height = 28 + Top = 352 + Width = 66 + Caption = 'Print' + OnClick = PrintBtnClick + TabOrder = 9 + end + object ApplyBtn: TButton + Left = 233 + Height = 28 + Top = 352 + Width = 66 + Caption = 'Apply' + OnClick = ApplyBtnClick + TabOrder = 10 + end + object ReturnBtn: TButton + Left = 314 + Height = 28 + Top = 352 + Width = 66 + Caption = 'Return' + OnClick = ReturnBtnClick + TabOrder = 11 + end +end diff --git a/applications/lazstats/source_orig/normalityunit.lrs b/applications/lazstats/source_orig/normalityunit.lrs new file mode 100644 index 000000000..e39d99e85 --- /dev/null +++ b/applications/lazstats/source_orig/normalityunit.lrs @@ -0,0 +1,156 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TNormalityFrm','FORMDATA',[ + 'TPF0'#13'TNormalityFrm'#12'NormalityFrm'#4'Left'#3#192#0#6'Height'#3#136#1#3 + +'Top'#2'Z'#5'Width'#3#136#1#7'Caption'#6#15'Normality Tests'#12'ClientHeight' + +#3#136#1#11'ClientWidth'#3#136#1#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#8 + +'0.9.26.2'#0#6'TLabel'#6'Label1'#4'Left'#2#6#6'Height'#2#14#3'Top'#2#9#5'Wid' + +'th'#2';'#7'Caption'#6#10'VARIABLES:'#11'ParentColor'#8#0#0#6'TLabel'#6'Labe' + +'l2'#4'Left'#3#233#0#6'Height'#2#14#3'Top'#2#8#5'Width'#2'W'#7'Caption'#6#18 + +'Test Normality of:'#11'ParentColor'#8#0#0#6'TLabel'#6'Label8'#4'Left'#2#5#6 + +'Height'#2#14#3'Top'#3':'#1#5'Width'#2'!'#7'Caption'#6#9'Lillifors'#11'Paren' + +'tColor'#8#0#0#6'TLabel'#6'Label9'#4'Left'#2#5#6'Height'#2#14#3'Top'#3'I'#1#5 + +'Width'#2'8'#7'Caption'#6#11'Conclusion:'#11'ParentColor'#8#0#0#8'TListBox'#7 + +'VarList'#4'Left'#2#5#6'Height'#3#17#1#3'Top'#2#29#5'Width'#3#162#0#8'TabOrd' + +'er'#2#0#0#0#7'TBitBtn'#8'VarInBtn'#4'Left'#3#176#0#6'Height'#2'#'#3'Top'#2 + +#13#5'Width'#2'%'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0 + +#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0 + +#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%' + +'i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a' + +#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O' + +#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D' + +#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255 + +#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152 + +#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193 + +#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h' + +#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255 + +#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139 + +#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255 + +#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h' + +#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z' + +#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I' + +#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O' + +#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7 + +'OnClick'#7#13'VarInBtnClick'#8'TabOrder'#2#1#0#0#7'TBitBtn'#9'VarOutBtn'#4 + +'Left'#3#176#0#6'Height'#2'#'#3'Top'#2'8'#5'Width'#2'%'#10'Glyph.Data'#10':' + ,#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' ' + +#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255 + +#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213 + +#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135 + +#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r' + +#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201''#204#138#255 + +#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154 + +#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194 + +#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h' + +#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169 + +'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255 + +'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h' + +#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199 + +'t'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#14'VarOutBtnClick'#8 + +'TabOrder'#2#2#0#0#5'TEdit'#11'TestVarEdit'#4'Left'#3#231#0#6'Height'#2#26#3 + +'Top'#2#30#5'Width'#3#153#0#8'TabOrder'#2#3#4'Text'#6#11'TestVarEdit'#0#0#9 + +'TGroupBox'#9'GroupBox1'#4'Left'#3#178#0#6'Height'#2'U'#3'Top'#2'f'#5'Width' + +#3#209#0#7'Caption'#6#23'Shapiro-Wilkes Rresults'#12'ClientHeight'#2'C'#11'C' + +'lientWidth'#3#205#0#8'TabOrder'#2#4#0#6'TLabel'#6'Label3'#4'Left'#2#7#6'Hei' + +'ght'#2#14#3'Top'#2#9#5'Width'#2'-'#7'Caption'#6#6'WWW = '#11'ParentColor'#8 + +#0#0#6'TLabel'#6'Label4'#4'Left'#2#6#6'Height'#2#14#3'Top'#2'%'#5'Width'#2'A' + +#7'Caption'#6#14'Probability = '#11'ParentColor'#8#0#0#5'TEdit'#5'WEdit'#4'L' + +'eft'#2'R'#6'Height'#2#18#3'Top'#2#3#5'Width'#2'd'#8'TabOrder'#2#0#4'Text'#6 + +#5'WEdit'#0#0#5'TEdit'#8'ProbEdit'#4'Left'#2'P'#6'Height'#2#17#3'Top'#2' '#5 + +'Width'#2'f'#8'TabOrder'#2#1#4'Text'#6#8'ProbEdit'#0#0#0#9'TGroupBox'#9'Grou' + +'pBox2'#4'Left'#3#176#0#6'Height'#2'f'#3'Top'#3#202#0#5'Width'#3#207#0#7'Cap' + +'tion'#6#23'Lilliefors Test Results'#12'ClientHeight'#2'T'#11'ClientWidth'#3 + +#203#0#8'TabOrder'#2#5#0#6'TLabel'#6'Label5'#4'Left'#2#6#6'Height'#2#14#3'To' + ,'p'#2#6#5'Width'#2'4'#7'Caption'#6#9'Skewness:'#11'ParentColor'#8#0#0#6'TLab' + +'el'#6'Label6'#4'Left'#2#6#6'Height'#2#14#3'Top'#2'"'#5'Width'#2'+'#7'Captio' + +'n'#6#9'Kurtosis:'#11'ParentColor'#8#0#0#6'TLabel'#6'Label7'#4'Left'#2#5#6'H' + +'eight'#2#14#3'Top'#2'='#5'Width'#2'C'#7'Caption'#6#15'Test Statistic:'#11'P' + +'arentColor'#8#0#0#5'TEdit'#8'SkewEdit'#4'Left'#2'Q'#6'Height'#2#16#3'Top'#2 + +#4#5'Width'#2'e'#8'TabOrder'#2#0#4'Text'#6#8'SkewEdit'#0#0#5'TEdit'#12'Kurto' + +'sisEdit'#4'Left'#2'R'#6'Height'#2#16#3'Top'#2' '#5'Width'#2'c'#8'TabOrder'#2 + +#1#4'Text'#6#12'KurtosisEdit'#0#0#5'TEdit'#8'StatEdit'#4'Left'#2'Q'#6'Height' + +#2#15#3'Top'#2'<'#5'Width'#2'b'#8'TabOrder'#2#2#4'Text'#6#8'StatEdit'#0#0#0#5 + +'TEdit'#14'ConclusionEdit'#4'Left'#2'A'#6'Height'#2#19#3'Top'#3'@'#1#5'Width' + +#3';'#1#8'TabOrder'#2#6#4'Text'#6#14'ConclusionEdit'#0#0#6'TPanel'#6'Panel1' + +#6'Height'#2'.'#3'Top'#3'Z'#1#5'Width'#3#136#1#5'Align'#7#8'alBottom'#12'Cli' + +'entHeight'#2'.'#11'ClientWidth'#3#136#1#8'TabOrder'#2#7#0#7'TButton'#9'Canc' + +'elBtn'#4'Left'#2#6#6'Height'#2#28#3'Top'#2#6#5'Width'#2'B'#7'Caption'#6#6'C' + +'ancel'#11'ModalResult'#2#2#7'OnClick'#7#14'CancelBtnClick'#8'TabOrder'#2#0#0 + +#0#0#7'TButton'#8'ResetBtn'#4'Left'#2'P'#6'Height'#2#28#3'Top'#3'`'#1#5'Widt' + +'h'#2'B'#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#8 + +#0#0#7'TButton'#8'PrintBtn'#4'Left'#3#160#0#6'Height'#2#28#3'Top'#3'`'#1#5'W' + +'idth'#2'B'#7'Caption'#6#5'Print'#7'OnClick'#7#13'PrintBtnClick'#8'TabOrder' + +#2#9#0#0#7'TButton'#8'ApplyBtn'#4'Left'#3#233#0#6'Height'#2#28#3'Top'#3'`'#1 + +#5'Width'#2'B'#7'Caption'#6#5'Apply'#7'OnClick'#7#13'ApplyBtnClick'#8'TabOrd' + +'er'#2#10#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3':'#1#6'Height'#2#28#3'Top'#3 + +'`'#1#5'Width'#2'B'#7'Caption'#6#6'Return'#7'OnClick'#7#14'ReturnBtnClick'#8 + +'TabOrder'#2#11#0#0#0 +]); diff --git a/applications/lazstats/source_orig/normalityunit.pas b/applications/lazstats/source_orig/normalityunit.pas new file mode 100644 index 000000000..d5513fb56 --- /dev/null +++ b/applications/lazstats/source_orig/normalityunit.pas @@ -0,0 +1,330 @@ +unit NormalityUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, ExtCtrls, MainUnit, Globals, functionsLib, DataProcs, + OutPutUnit; + + +type + + { TNormalityFrm } + + TNormalityFrm = class(TForm) + CancelBtn: TButton; + ResetBtn: TButton; + PrintBtn: TButton; + ApplyBtn: TButton; + ReturnBtn: TButton; + ConclusionEdit: TEdit; + Label8: TLabel; + Label9: TLabel; + Panel1: TPanel; + StatEdit: TEdit; + KurtosisEdit: TEdit; + SkewEdit: TEdit; + GroupBox2: TGroupBox; + Label5: TLabel; + Label6: TLabel; + Label7: TLabel; + ProbEdit: TEdit; + Label4: TLabel; + WEdit: TEdit; + GroupBox1: TGroupBox; + Label3: TLabel; + TestVarEdit: TEdit; + Label2: TLabel; + VarInBtn: TBitBtn; + VarOutBtn: TBitBtn; + Label1: TLabel; + VarList: TListBox; + procedure ApplyBtnClick(Sender: TObject); + procedure CancelBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure PrintBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + procedure ReturnBtnClick(Sender: TObject); + procedure VarInBtnClick(Sender: TObject); + procedure VarOutBtnClick(Sender: TObject); + private + { private declarations } + function Norm(z : double) : double; + + public + { public declarations } + end; + +var + NormalityFrm: TNormalityFrm; + +implementation + +{ TNormalityFrm } + +procedure TNormalityFrm.FormShow(Sender: TObject); +var + i : integer; +begin + TestVarEdit.Text := ''; + WEdit.Text := ''; + ProbEdit.Text := ''; + ConclusionEdit.Text := ''; + SkewEdit.Text := ''; + KurtosisEdit.Text := ''; + StatEdit.Text := ''; + VarOutBtn.Visible := false; + VarInBtn.Visible := true; + VarList.Items.Clear; + for i := 1 to NoVariables do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); +end; + +procedure TNormalityFrm.PrintBtnClick(Sender: TObject); +begin + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('NORMALITY TESTS FOR '+ TestVarEdit.Text); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Shapiro-Wilkes W = ' + WEdit.Text); + OutPutFrm.RichEdit.Lines.Add('Shapiro-Wilkes Prob. = ' + ProbEdit.Text); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Skew = ' + SkewEdit.Text); + OutPutFrm.RichEdit.Lines.Add('Kurtosis = ' + KurtosisEdit.Text); + OutPutFrm.RichEdit.Lines.Add('Lilliefors Test Statistic = ' + StatEdit.Text); + OutPutFrm.RichEdit.Lines.Add('Conclusion: ' + ConclusionEdit.Text); + OutPutFrm.ShowModal; +end; + +procedure TNormalityFrm.ResetBtnClick(Sender: TObject); +begin + FormShow(self); +end; + +procedure TNormalityFrm.ReturnBtnClick(Sender: TObject); +begin + NormalityFrm.Hide; +end; + +procedure TNormalityFrm.CancelBtnClick(Sender: TObject); +begin + NormalityFrm.Hide; +end; + +procedure TNormalityFrm.ApplyBtnClick(Sender: TObject); +label again; +var + temp, w, pw : double; + skew, kurtosis : double; + mean, variance, stddev, deviation, devsqr, M2, M3, M4 : double; + i, j, n, n1, n2, ier : integer; + varlabel : string; + selcol : integer; + data, a, z, x : DblDyneVec; + freq : IntDyneVec; + fval, jval, DP : DblDyneVec; + F1, DPP, D, D1, A0, C1, D15, D10, D05, D025, t2 : double; + init : boolean; + msg : string; + +begin + init := false; + n := 0; + selcol := 0; + for i := 1 to NoVariables do + if OS3MainFrm.DataGrid.Cells[i,0] = TestVarEdit.Text then selcol := i; + if selcol <> 0 then + begin + varlabel := TestVarEdit.Text; + // place values into the data array + SetLength(data,NoCases+1); // arrays start at 1 + SetLength(a,NoCases+1); + SetLength(freq, NoCases+1); + SetLength(z, NoCases+1); + SetLength(x, NoCases+1); + SetLength(fval,NoCases+1); + SetLength(jval,NoCases+1); + SetLength(DP,NoCases+1); + for i := 1 to NoCases do + begin + if NOT ValidValue(i,selcol) then continue; + n := n + 1; + data[n] := StrToFloat(OS3MainFrm.DataGrid.Cells[selcol,i]); + end; + n1 := n; + n2 := n div 2; + // sort into ascending order + for i := 1 to n - 1 do + begin + for j := i + 1 to n do + begin + if data[i] > data[j] then + begin + temp := data[i]; + data[i] := data[j]; + data[j] := temp; + end; + end; + end; + // call Shapiro-Wilks function + swilk(init, data, n, n1, n2, a, w, pw, ier); + if ier <> 0 then + begin + Msg := 'Error encountered = ' + IntToStr(ier); + ShowMessage(Msg); + DP := nil; + jval := nil; + fval := nil; + data := nil; + a := nil; + freq := nil; + z := nil; + x := nil; + exit; + end; + WEdit.Text := format('%8.4f',[w]); + ProbEdit.Text := format('%8.4f',[pw]); + + // Now do Lilliefors + // get unique scores and their frequencies + n1 := 1; + i := 1; + freq[1] := 1; + x[1] := data[1]; +again: for j := i + 1 to n do + begin + if data[j] = x[n1] then freq[n1] := freq[n1] + 1; + end; + i := i + freq[n1]; + if i <= n then + begin + n1 := n1 + 1; + x[n1] := data[i]; + freq[n1] := 1; + goto again; + end; + // now get skew and kurtosis of scores + mean := 0.0; + variance := 0.0; + for i := 1 to n do + begin + mean := mean + data[i]; + variance := variance + (data[i] * data[i]); + end; + variance := variance - (mean * mean) / n; + variance := variance / (n - 1); + stddev := sqrt(variance); + mean := mean / n; + // obtain skew, kurtosis and z scores + M2 := 0.0; + M3 := 0.0; + M4 := 0.0; + for i := 1 to n do + begin + deviation := data[i] - mean; + devsqr := deviation * deviation; + M2 := M2 + devsqr; + M3 := M3 + (deviation * devsqr); + M4 := M4 + (devsqr * devsqr); + z[i] := (data[i] - mean) / stddev; + end; + for i := 1 to n1 do x[i] := (x[i] - mean) / stddev; + skew := (n * M3) / ((n - 1) * (n - 2) * stddev * variance); + kurtosis := (n * (n + 1) * M4) - (3 * M2 * M2 * (n - 1)); + kurtosis := kurtosis /( (n - 1) * (n - 2) * (n - 3) * (variance * variance) ); + SkewEdit.Text := format('%8.3f',[skew]); + KurtosisEdit.Text := format('%8.3f',[kurtosis]); + // obtain the test statistic + for i := 1 to n1 do + begin + F1 := Norm(x[i]); + if x[i] >= 0 then fval[i] := 1.0 - (F1 / 2.0) + else fval[i] := F1 / 2.0; + end; + // cumulative proportions + jval[1] := freq[1] / n; + for i := 2 to n1 do jval[i] := jval[i-1] + freq[i] / n; + for i := 1 to n1 do DP[i] := abs(jval[i] - fval[i]); + // sort DP + for i := 1 to n1-1 do + begin + for j := i+1 to n1 do + begin + if DP[j] < DP[i] then + begin + temp := DP[i]; + DP[i] := DP[j]; + DP[j] := temp; + end; + end; + end; + DPP := DP[n1]; + D := DPP; + D1 := D; + StatEdit.Text := format('%8.3f',[D]); + A0 := sqrt(n); + C1 := A0 - 0.01 + (0.85 / A0); + D15 := 0.775 / C1; + D10 := 0.819 / C1; + D05 := 0.895 / C1; + D025 := 0.995 / C1; + t2 := D; + if t2 > D025 then ConclusionEdit.Text := 'Strong evidence against normality.'; + if ((t2 <= D025) and (t2 > D05)) then ConclusionEdit.Text := 'Sufficient evidence against normality.'; + if ((t2 <= D05) and (t2 > D10)) then ConclusionEdit.Text := 'Suggestive evidence against normality.'; + if ((t2 <= D10) and (t2 > D15)) then ConclusionEdit.Text := 'Little evidence against normality.'; + if (t2 <= D15) then ConclusionEdit.Text := 'No evidence against normality.'; + end; + DP := nil; + jval := nil; + fval := nil; + data := nil; + a := nil; + freq := nil; + z := nil; + x := nil; +end; + +procedure TNormalityFrm.VarInBtnClick(Sender: TObject); +var + i : integer; +begin + i := VarList.ItemIndex; + if i < 0 then exit; + TestVarEdit.Text := VarList.Items.Strings[i]; + VarList.Items.Delete(i); + VarInBtn.Visible := false; + VarOutBtn.Visible := true; + +end; + +procedure TNormalityFrm.VarOutBtnClick(Sender: TObject); +begin + if TestVarEdit.Text = '' then exit; + VarList.Items.Add(TestVarEdit.Text); + TestVarEdit.Text := ''; + VarOutBtn.Visible := false; + VarInBtn.Visible := true; +end; + +function TNormalityFrm.Norm(z : double) : double; +var + p : double; +begin + z := abs(z); + p := 1.0 + z * (0.04986735 + z * (0.02114101 + z * (0.00327763 + + z * (0.0000380036 + z * (0.0000488906 + z * 0.000005383))))); + p := p * p; + p := p * p; + p := p * p; + Result := 1.0 / (p * p); +end; +//------------------------------------------------------------------- + +initialization + {$I normalityunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/onecaseanovaunit.lfm b/applications/lazstats/source_orig/onecaseanovaunit.lfm new file mode 100644 index 000000000..2e68881a5 --- /dev/null +++ b/applications/lazstats/source_orig/onecaseanovaunit.lfm @@ -0,0 +1,621 @@ +object OneCaseAnovaForm: TOneCaseAnovaForm + Left = 288 + Height = 510 + Top = 161 + Width = 728 + Caption = 'OneCaseAnovaForm' + ClientHeight = 510 + ClientWidth = 728 + OnShow = FormShow + LCLVersion = '0.9.30' + object Label1: TLabel + Left = 8 + Height = 16 + Top = 11 + Width = 51 + Caption = 'Variables:' + ParentColor = False + end + object VarList: TListBox + Left = 8 + Height = 368 + Top = 29 + Width = 185 + ItemHeight = 0 + TabOrder = 0 + end + object DepIn: TBitBtn + Left = 208 + Height = 29 + Top = 25 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = DepInClick + TabOrder = 1 + end + object StaticText1: TStaticText + Left = 256 + Height = 15 + Top = 21 + Width = 73 + Caption = 'Dependent Variable' + TabOrder = 2 + end + object DepOut: TBitBtn + Left = 208 + Height = 29 + Top = 64 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = DepOutClick + TabOrder = 3 + end + object Fact1In: TBitBtn + Left = 208 + Height = 29 + Top = 120 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = Fact1InClick + TabOrder = 4 + end + object Fact1Out: TBitBtn + Left = 208 + Height = 29 + Top = 160 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = Fact1OutClick + TabOrder = 5 + end + object Fact2In: TBitBtn + Left = 208 + Height = 29 + Top = 216 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = Fact2InClick + TabOrder = 6 + end + object Fact2Out: TBitBtn + Left = 208 + Height = 29 + Top = 256 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = Fact2OutClick + TabOrder = 7 + end + object StaticText2: TStaticText + Left = 256 + Height = 17 + Top = 112 + Width = 83 + Caption = 'Factor 1 Variable' + TabOrder = 8 + end + object Factor1: TEdit + Left = 256 + Height = 23 + Top = 136 + Width = 135 + TabOrder = 9 + Text = 'Edit1' + end + object StaticText3: TStaticText + Left = 256 + Height = 13 + Top = 216 + Width = 95 + Caption = 'Factor 2 Variable' + TabOrder = 10 + end + object Factor2: TEdit + Left = 256 + Height = 23 + Top = 240 + Width = 135 + TabOrder = 11 + Text = 'Edit1' + end + object Fact3In: TBitBtn + Left = 208 + Height = 29 + Top = 312 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = Fact3InClick + TabOrder = 12 + end + object Fact3Out: TBitBtn + Left = 208 + Height = 29 + Top = 352 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = Fact3OutClick + TabOrder = 13 + end + object StaticText4: TStaticText + Left = 256 + Height = 12 + Top = 312 + Width = 88 + Caption = 'Factor 3 Clark' + TabOrder = 14 + end + object Factor3: TEdit + Left = 256 + Height = 23 + Top = 336 + Width = 135 + TabOrder = 15 + Text = 'Edit1' + end + object DepVar: TEdit + Left = 257 + Height = 23 + Top = 41 + Width = 135 + TabOrder = 16 + Text = 'DepVar' + end + object GroupBox1: TGroupBox + Left = 502 + Height = 163 + Top = 21 + Width = 194 + Caption = 'Post-Hoc Comparisons:' + ClientHeight = 145 + ClientWidth = 190 + TabOrder = 17 + object ScheffeChk: TCheckBox + Left = 8 + Height = 19 + Top = 8 + Width = 80 + Caption = 'ScheffeChk' + TabOrder = 0 + end + object TukeyHSDChk: TCheckBox + Left = 8 + Height = 19 + Top = 35 + Width = 115 + Caption = 'Tukey HSD (= n''s)' + TabOrder = 1 + end + object TukeyBChk: TCheckBox + Left = 8 + Height = 19 + Top = 59 + Width = 99 + Caption = 'Tukey B (= n''s)' + TabOrder = 2 + end + object TukeyKramerChk: TCheckBox + Left = 8 + Height = 19 + Top = 83 + Width = 95 + Caption = 'Tukey-Kramer' + TabOrder = 3 + end + object NewmanKeulsChk: TCheckBox + Left = 8 + Height = 19 + Top = 107 + Width = 138 + Caption = 'Newman-Keuls (= n''s)' + TabOrder = 4 + end + end + object OptionsBox: TGroupBox + Left = 502 + Height = 104 + Top = 248 + Width = 193 + Caption = 'Options' + ClientHeight = 86 + ClientWidth = 189 + TabOrder = 18 + object PlotMeans: TCheckBox + Left = 8 + Height = 19 + Top = 6 + Width = 154 + Caption = 'Plot Means Using 3D bars' + TabOrder = 0 + end + object Plot2DLines: TCheckBox + Left = 8 + Height = 19 + Top = 29 + Width = 154 + Caption = 'Plot Means Using 2D bars' + TabOrder = 1 + end + object Plot3DLines: TCheckBox + Left = 8 + Height = 19 + Top = 53 + Width = 171 + Caption = 'Plot Means Horizontally (3D)' + TabOrder = 2 + end + end + object Label3: TLabel + Left = 7 + Height = 16 + Top = 415 + Width = 150 + Caption = 'Alpha Level for Overall Tests' + ParentColor = False + end + object OverAllAlpha: TEdit + Left = 158 + Height = 23 + Top = 408 + Width = 45 + TabOrder = 19 + Text = 'OverAllAlpha' + end + object Label4: TLabel + Left = 223 + Height = 16 + Top = 415 + Width = 166 + Caption = 'Alpha Level for Post-Hoc Tests:' + ParentColor = False + end + object PostAlpha: TEdit + Left = 384 + Height = 23 + Top = 408 + Width = 51 + TabOrder = 20 + Text = 'PostAlpha' + end + object HelpBtn: TButton + Tag = 107 + Left = 96 + Height = 32 + Top = 447 + Width = 78 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 21 + end + object ResetBtn: TButton + Left = 207 + Height = 32 + Top = 447 + Width = 77 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 22 + end + object CancelBtn: TButton + Left = 320 + Height = 32 + Top = 448 + Width = 77 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 23 + end + object ComputeBtn: TButton + Left = 432 + Height = 31 + Top = 448 + Width = 77 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 24 + end + object ReturnBtn: TButton + Left = 544 + Height = 31 + Top = 448 + Width = 77 + Caption = 'Return' + ModalResult = 1 + TabOrder = 25 + end + object InteractBtn: TRadioButton + Left = 512 + Height = 19 + Top = 408 + Width = 103 + Caption = 'Get Interactions' + TabOrder = 26 + end +end diff --git a/applications/lazstats/source_orig/onecaseanovaunit.lrs b/applications/lazstats/source_orig/onecaseanovaunit.lrs new file mode 100644 index 000000000..4adcf591a --- /dev/null +++ b/applications/lazstats/source_orig/onecaseanovaunit.lrs @@ -0,0 +1,477 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TOneCaseAnovaForm','FORMDATA',[ + 'TPF0'#17'TOneCaseAnovaForm'#16'OneCaseAnovaForm'#4'Left'#3' '#1#6'Height'#3 + +#254#1#3'Top'#3#161#0#5'Width'#3#216#2#7'Caption'#6#16'OneCaseAnovaForm'#12 + +'ClientHeight'#3#254#1#11'ClientWidth'#3#216#2#6'OnShow'#7#8'FormShow'#10'LC' + +'LVersion'#6#6'0.9.30'#0#6'TLabel'#6'Label1'#4'Left'#2#8#6'Height'#2#16#3'To' + +'p'#2#11#5'Width'#2'3'#7'Caption'#6#10'Variables:'#11'ParentColor'#8#0#0#8'T' + +'ListBox'#7'VarList'#4'Left'#2#8#6'Height'#3'p'#1#3'Top'#2#29#5'Width'#3#185 + +#0#10'ItemHeight'#2#0#8'TabOrder'#2#0#0#0#7'TBitBtn'#5'DepIn'#4'Left'#3#208#0 + +#6'Height'#2#29#3'Top'#2#25#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0 + +'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4 + +#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\' + +#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?' + +#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0 + +#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255 + +#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137 + +#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255 + +#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158 + +#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255 + +#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255 + +'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q' + +#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G' + +#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#10'DepInClick'#8'TabOrder'#2#1#0 + +#0#11'TStaticText'#11'StaticText1'#4'Left'#3#0#1#6'Height'#2#15#3'Top'#2#21#5 + +'Width'#2'I'#7'Caption'#6#18'Dependent Variable'#8'TabOrder'#2#2#0#0#7'TBitB' + +'tn'#6'DepOut'#4'Left'#3#208#0#6'Height'#2#29#3'Top'#2'@'#5'Width'#2' '#10'G' + +'lyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0 + +#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G' + +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)' + +#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134 + +#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203 + +#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190 + +'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127 + +#204#138#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255 + +#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135 + +#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255 + +#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177 + +'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255 + +'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11 + +'DepOutClick'#8'TabOrder'#2#3#0#0#7'TBitBtn'#7'Fact1In'#4'Left'#3#208#0#6'He' + +'ight'#2#29#3'Top'#2'x'#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM' + +'6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0 + +#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + ,#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M' + +#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E' + +#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255 + +#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208 + +#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~' + +#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255 + +#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167 + +#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202 + +#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)' + +#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a' + +#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O' + +#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#9'NumGlyphs'#2#0#7'OnClick'#7#12'Fact1InClick'#8'TabOrder'#2#4#0#0#7'TBitBt' + +'n'#8'Fact1Out'#4'Left'#3#208#0#6'Height'#2#29#3'Top'#3#160#0#5'Width'#2' ' + +#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16 + +#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8' + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255 + +'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%' + +'i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200 + +#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139 + +#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v' + +#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201 + +#127#204#138#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159 + +#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197 + ,#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0 + +#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X' + +#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B' + +#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#13 + +'Fact1OutClick'#8'TabOrder'#2#5#0#0#7'TBitBtn'#7'Fact2In'#4'Left'#3#208#0#6 + +'Height'#2#29#3'Top'#3#216#0#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0 + +#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0 + +#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\' + +#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?' + +#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0 + +#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255 + +#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137 + +#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255 + +#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158 + +#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255 + +#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255 + +'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q' + +#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G' + +#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#12'Fact2InClick'#8'TabOrder'#2#6 + +#0#0#7'TBitBtn'#8'Fact2Out'#4'Left'#3#208#0#6'Height'#2#29#3'Top'#3#0#1#5'Wi' + +'dth'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'(' + +#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0 + +#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247 + +'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'[' + +#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255 + +'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q' + +#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206 + +#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z' + +#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0 + +'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154#212#163 + +#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199 + +#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0 + +#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135#255']' + +#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I' + +#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7 + +'OnClick'#7#13'Fact2OutClick'#8'TabOrder'#2#7#0#0#11'TStaticText'#11'StaticT' + +'ext2'#4'Left'#3#0#1#6'Height'#2#17#3'Top'#2'p'#5'Width'#2'S'#7'Caption'#6#17 + +'Factor 1 Variable'#8'TabOrder'#2#8#0#0#5'TEdit'#7'Factor1'#4'Left'#3#0#1#6 + ,'Height'#2#23#3'Top'#3#136#0#5'Width'#3#135#0#8'TabOrder'#2#9#4'Text'#6#5'Ed' + +'it1'#0#0#11'TStaticText'#11'StaticText3'#4'Left'#3#0#1#6'Height'#2#13#3'Top' + +#3#216#0#5'Width'#2'_'#7'Caption'#6#17'Factor 2 Variable'#8'TabOrder'#2#10#0 + +#0#5'TEdit'#7'Factor2'#4'Left'#3#0#1#6'Height'#2#23#3'Top'#3#240#0#5'Width'#3 + +#135#0#8'TabOrder'#2#11#4'Text'#6#5'Edit1'#0#0#7'TBitBtn'#7'Fact3In'#4'Left' + +#3#208#0#6'Height'#2#29#3'Top'#3'8'#1#5'Width'#2' '#10'Glyph.Data'#10':'#4#0 + +#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0 + +#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S' + +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';' + +#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255 + +#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211 + +#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130 + +#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$' + +#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171 + +#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204 + +#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J' + +#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255 + +'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161 + +'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#12'Fact3InClick'#8'TabOrd' + +'er'#2#12#0#0#7'TBitBtn'#8'Fact3Out'#4'Left'#3#208#0#6'Height'#2#29#3'Top'#3 + +'`'#1#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6' + +#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0 + +#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153 + +'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V' + +#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255 + +'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5' + +#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195 + +'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255 + +#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255 + +#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135 + +#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#13'Fact3OutClick'#8'TabOrder'#2#13#0#0#11'TStaticText' + +#11'StaticText4'#4'Left'#3#0#1#6'Height'#2#12#3'Top'#3'8'#1#5'Width'#2'X'#7 + +'Caption'#6#14'Factor 3 Clark'#8'TabOrder'#2#14#0#0#5'TEdit'#7'Factor3'#4'Le' + +'ft'#3#0#1#6'Height'#2#23#3'Top'#3'P'#1#5'Width'#3#135#0#8'TabOrder'#2#15#4 + +'Text'#6#5'Edit1'#0#0#5'TEdit'#6'DepVar'#4'Left'#3#1#1#6'Height'#2#23#3'Top' + +#2')'#5'Width'#3#135#0#8'TabOrder'#2#16#4'Text'#6#6'DepVar'#0#0#9'TGroupBox' + +#9'GroupBox1'#4'Left'#3#246#1#6'Height'#3#163#0#3'Top'#2#21#5'Width'#3#194#0 + +#7'Caption'#6#21'Post-Hoc Comparisons:'#12'ClientHeight'#3#145#0#11'ClientWi' + +'dth'#3#190#0#8'TabOrder'#2#17#0#9'TCheckBox'#10'ScheffeChk'#4'Left'#2#8#6'H' + +'eight'#2#19#3'Top'#2#8#5'Width'#2'P'#7'Caption'#6#10'ScheffeChk'#8'TabOrder' + +#2#0#0#0#9'TCheckBox'#11'TukeyHSDChk'#4'Left'#2#8#6'Height'#2#19#3'Top'#2'#' + +#5'Width'#2's'#7'Caption'#6#17'Tukey HSD (= n''s)'#8'TabOrder'#2#1#0#0#9'TCh' + +'eckBox'#9'TukeyBChk'#4'Left'#2#8#6'Height'#2#19#3'Top'#2';'#5'Width'#2'c'#7 + +'Caption'#6#15'Tukey B (= n''s)'#8'TabOrder'#2#2#0#0#9'TCheckBox'#14'TukeyKr' + +'amerChk'#4'Left'#2#8#6'Height'#2#19#3'Top'#2'S'#5'Width'#2'_'#7'Caption'#6 + +#12'Tukey-Kramer'#8'TabOrder'#2#3#0#0#9'TCheckBox'#14'NewmanKeulsChk'#4'Left' + +#2#8#6'Height'#2#19#3'Top'#2'k'#5'Width'#3#138#0#7'Caption'#6#20'Newman-Keul' + +'s (= n''s)'#8'TabOrder'#2#4#0#0#0#9'TGroupBox'#10'OptionsBox'#4'Left'#3#246 + +#1#6'Height'#2'h'#3'Top'#3#248#0#5'Width'#3#193#0#7'Caption'#6#7'Options'#12 + +'ClientHeight'#2'V'#11'ClientWidth'#3#189#0#8'TabOrder'#2#18#0#9'TCheckBox'#9 + +'PlotMeans'#4'Left'#2#8#6'Height'#2#19#3'Top'#2#6#5'Width'#3#154#0#7'Caption' + ,#6#24'Plot Means Using 3D bars'#8'TabOrder'#2#0#0#0#9'TCheckBox'#11'Plot2DLi' + +'nes'#4'Left'#2#8#6'Height'#2#19#3'Top'#2#29#5'Width'#3#154#0#7'Caption'#6#24 + +'Plot Means Using 2D bars'#8'TabOrder'#2#1#0#0#9'TCheckBox'#11'Plot3DLines'#4 + +'Left'#2#8#6'Height'#2#19#3'Top'#2'5'#5'Width'#3#171#0#7'Caption'#6#28'Plot ' + +'Means Horizontally (3D)'#8'TabOrder'#2#2#0#0#0#6'TLabel'#6'Label3'#4'Left'#2 + +#7#6'Height'#2#16#3'Top'#3#159#1#5'Width'#3#150#0#7'Caption'#6#29'Alpha Leve' + +'l for Overall Tests'#11'ParentColor'#8#0#0#5'TEdit'#12'OverAllAlpha'#4'Left' + +#3#158#0#6'Height'#2#23#3'Top'#3#152#1#5'Width'#2'-'#8'TabOrder'#2#19#4'Text' + +#6#12'OverAllAlpha'#0#0#6'TLabel'#6'Label4'#4'Left'#3#223#0#6'Height'#2#16#3 + +'Top'#3#159#1#5'Width'#3#166#0#7'Caption'#6#31'Alpha Level for Post-Hoc Test' + +'s:'#11'ParentColor'#8#0#0#5'TEdit'#9'PostAlpha'#4'Left'#3#128#1#6'Height'#2 + +#23#3'Top'#3#152#1#5'Width'#2'3'#8'TabOrder'#2#20#4'Text'#6#9'PostAlpha'#0#0 + +#7'TButton'#7'HelpBtn'#3'Tag'#2'k'#4'Left'#2'`'#6'Height'#2' '#3'Top'#3#191#1 + +#5'Width'#2'N'#7'Caption'#6#4'Help'#7'OnClick'#7#12'HelpBtnClick'#8'TabOrder' + +#2#21#0#0#7'TButton'#8'ResetBtn'#4'Left'#3#207#0#6'Height'#2' '#3'Top'#3#191 + +#1#5'Width'#2'M'#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetBtnClick'#8'TabO' + +'rder'#2#22#0#0#7'TButton'#9'CancelBtn'#4'Left'#3'@'#1#6'Height'#2' '#3'Top' + +#3#192#1#5'Width'#2'M'#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder' + +#2#23#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3#176#1#6'Height'#2#31#3'Top'#3 + +#192#1#5'Width'#2'M'#7'Caption'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick' + +#8'TabOrder'#2#24#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3' '#2#6'Height'#2#31#3 + +'Top'#3#192#1#5'Width'#2'M'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#8'Tab' + +'Order'#2#25#0#0#12'TRadioButton'#11'InteractBtn'#4'Left'#3#0#2#6'Height'#2 + +#19#3'Top'#3#152#1#5'Width'#2'g'#7'Caption'#6#16'Get Interactions'#8'TabOrde' + +'r'#2#26#0#0#0 +]); diff --git a/applications/lazstats/source_orig/onecaseanovaunit.pas b/applications/lazstats/source_orig/onecaseanovaunit.pas new file mode 100644 index 000000000..52415cd7b --- /dev/null +++ b/applications/lazstats/source_orig/onecaseanovaunit.pas @@ -0,0 +1,1913 @@ +unit OneCaseAnovaUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, ExtCtrls, MainUnit, Globals, FunctionsLib, OutPutUnit, + DataProcs, GraphLib, ANOVATESTSUnit, Math, contexthelpunit, BLKANOVAUNIT; +type + + { TOneCaseAnovaForm } + + TOneCaseAnovaForm = class(TForm) + CancelBtn: TButton; + ComputeBtn: TButton; + DepIn: TBitBtn; + DepOut: TBitBtn; + DepVar: TEdit; + Fact1In: TBitBtn; + Fact1Out: TBitBtn; + Fact2In: TBitBtn; + Fact2Out: TBitBtn; + Fact3In: TBitBtn; + Fact3Out: TBitBtn; + Factor1: TEdit; + Factor2: TEdit; + Factor3: TEdit; + GroupBox1: TGroupBox; + OptionsBox: TGroupBox; + HelpBtn: TButton; + Label1: TLabel; + Label3: TLabel; + Label4: TLabel; + NewmanKeulsChk: TCheckBox; + OverAllAlpha: TEdit; + Plot2DLines: TCheckBox; + Plot3DLines: TCheckBox; + PlotMeans: TCheckBox; + PostAlpha: TEdit; + InteractBtn: TRadioButton; + ResetBtn: TButton; + ReturnBtn: TButton; + ScheffeChk: TCheckBox; + StaticText1: TStaticText; + StaticText2: TStaticText; + StaticText3: TStaticText; + StaticText4: TStaticText; + TukeyBChk: TCheckBox; + TukeyHSDChk: TCheckBox; + TukeyKramerChk: TCheckBox; + VarList: TListBox; + procedure ComputeBtnClick(Sender: TObject); + procedure DepInClick(Sender: TObject); + procedure DepOutClick(Sender: TObject); + procedure Fact1InClick(Sender: TObject); + procedure Fact1OutClick(Sender: TObject); + procedure Fact2InClick(Sender: TObject); + procedure Fact2OutClick(Sender: TObject); + procedure Fact3InClick(Sender: TObject); + procedure Fact3OutClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + private + { private declarations } + NoSelected, intvalue, N : integer; + ColNoSelected : IntDyneVec; + DepVarCol, F1Col, F2Col, F3Col, Nf1cells, Nf2cells, Nf3cells : integer; + minf1, maxf1, minf2, maxf2, minf3, maxf3, nofactors, totcells : integer; + NoGrpsA, NoGrpsB, NoGrpsC : integer; + SSDep, SSErr, SSF1, SSF2, SSF3, SSF1F2, SSF1F3, SSF2F3, SSF1F2F3 : double; + MSDep, MSErr, MSF1, MSF2, MSF3, MSF1F2, MSF1F3, MSF2F3, MSF1F2F3 : double; + DFTot, DFErr, DFF1, DFF2, DFF3, DFF1F2, DFF1F3, DFF2F3, DFF1F2F3 : double; + Omega, OmegaF1, OmegaF2, OmegaF3, OmegaF1F2, F, MinSize, MaxSize : double; + OmegaF1F3, OmegaF2F3, OmegaF1F2F3 : double; + FF1, FF2, FF1F2, ProbF1, ProbF2, ProbF3, ProbF1F2, ProbF1F3 : double; + FF3, FF2F3, FF1F3, FF1F2F3, ProbF2F3, ProbF1F2F3 : double; + MeanDep, MeanF1, MeanF2, MeanF3, X : double; + SSNonAdd, SSBalance,MSNonAdd, MSBalance, GrandMean, DFBalance : double; + FNonAdd, ProbNonAdd : double; + rowmean, colmean, slicemean, temp : double; + cellcnts : DblDyneVec; // array of cell counts + cellvars : DblDyneVec; // arrray of cell sums of squares then variances + cellsums : DblDyneVec; // array of cell sums then means + counts : DblDyneMat; // matrix for 2-way containing cell sizes + sums : DblDyneMat; // matrix for 2-way containing cell sums + vars : DblDyneMat; // matrix for 2-way containing sums of squares + RowSums : DblDyneVec; // 2 way row sums + ColSums : DblDyneVec; // 2 way col sums + RowCount : DblDyneVec; // 2 way row count + ColCount : DblDyneVec; // 2 way col count + SlcSums : DblDyneVec; // 3 way slice sums + SlcCount : DblDyneVec; // 3 way slice counts + OrdMeansA, OrdMeansB, OrdMeansC : DblDyneVec; // reordered means for f1, f2, f3 + OverAll, PostHocAlpha : double; // alphas for tests + wsum, wx2 : DblDyneCube; // : DblDyneCube + ncnt : IntDyneCube; // : IntDyneCube; + OKterms : IntDyneVec; + CompError : boolean; + equal_grp : boolean; // check for equal groups for post-hoc tests + comparisons : boolean; + interacts : boolean; // true if 2 way interactions to be included in 3 way design + outline : string; + cellstring : string; + + procedure getlevels(Sender: TObject); + procedure Calc2Way(Sender: TObject); + procedure TwoWayTable(Sender: TObject); + procedure TwoWayPlot(Sender: TObject); + procedure Calc3Way(Sender: TObject); + procedure ThreeWayTable(Sender: TObject); + procedure ThreeWayPlot(Sender: TObject); + procedure TwoWayContrasts(Sender: TObject); + procedure ThreeWayContrasts(Sender: TObject); + + public + { public declarations } + end; + +var + OneCaseAnovaForm: TOneCaseAnovaForm; + +implementation + +{ TOneCaseAnovaForm } + +procedure TOneCaseAnovaForm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + VarList.Clear; + DepIn.Visible := true; + Fact1In.Visible := true; + Fact2In.Visible := true; + Fact3In.Visible := true; + DepOut.Visible := false; + Fact1Out.Visible := false; + Fact2Out.Visible := false; + Fact3Out.Visible := false; + DepVar.Text := ''; + Factor1.Text := ''; + Factor2.Text := ''; + Factor3.Text := ''; +// Fact1Grp.ItemIndex := 0; +// Fact2Grp.ItemIndex := 0; +// Fact3Grp.ItemIndex := 0; + PlotMeans.Checked := false; + ScheffeChk.Checked := false; + TukeyHSDChk.Checked := false; + TukeyBChk.Checked := false; + TukeyKramerChk.Checked := false; + NewmanKeulsChk.Checked := false; +// BonferroniChk.Checked := false; + PostAlpha.Text := '0.05'; + OverAllAlpha.Text := '0.05'; + for i := 1 to NoVariables do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); +end; + +procedure TOneCaseAnovaForm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TOneCaseAnovaForm.DepInClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + DepVar.Text := VarList.Items.Strings[index]; + DepIn.Visible := false; + DepOut.Visible := true; + VarList.Items.Delete(index); +end; + +procedure TOneCaseAnovaForm.DepOutClick(Sender: TObject); +begin + VarList.Items.Add(DepVar.Text); + DepVar.Text := ''; + DepOut.Visible := false; + DepIn.Visible := true; +end; + +procedure TOneCaseAnovaForm.Fact1InClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + Factor1.Text := VarList.Items.Strings[index]; + Fact1In.Visible := false; + Fact1Out.Visible := true; + VarList.Items.Delete(index); +end; + +procedure TOneCaseAnovaForm.Fact1OutClick(Sender: TObject); +begin + VarList.Items.Add(DepVar.Text); + Factor1.Text := ''; + Fact1Out.Visible := false; + Fact1In.Visible := true; +end; + +procedure TOneCaseAnovaForm.Fact2InClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + Factor2.Text := VarList.Items.Strings[index]; + Fact2In.Visible := false; + Fact2Out.Visible := true; + VarList.Items.Delete(index); +end; + +procedure TOneCaseAnovaForm.Fact2OutClick(Sender: TObject); +begin + VarList.Items.Add(DepVar.Text); + Factor2.Text := ''; + Fact2Out.Visible := false; + Fact2In.Visible := true; +end; + +procedure TOneCaseAnovaForm.Fact3InClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + Factor3.Text := VarList.Items.Strings[index]; + Fact3In.Visible := false; + Fact3Out.Visible := true; + VarList.Items.Delete(index); +end; + +procedure TOneCaseAnovaForm.Fact3OutClick(Sender: TObject); +begin + VarList.Items.Add(DepVar.Text); + Factor3.Text := ''; + Fact3Out.Visible := false; + Fact3In.Visible := true; +end; + +procedure TOneCaseAnovaForm.ComputeBtnClick(Sender: TObject); +Var + result, i : integer; +// nofactors : integer; +Label cleanit; +label nexttwo; +label nextthree; + +begin + nofactors := 0; + if ((Factor1.Text <> '') and (Factor2.Text <> '')) then nofactors := 2; + if ((Factor1.Text <> '') and (Factor2.Text <> '') and (Factor3.Text <> '')) + then nofactors := 3; + if (nofactors < 2) then + begin + ShowMessage('ERROR! Selection of 2 or 3 factors required!'); + exit; + end; + OutPutFrm.RichEdit.Clear; + // initialize values + if (ScheffeChk.Checked) then comparisons := true; + if (TukeyHSDChk.Checked) then comparisons := true; + if (TukeyBChk.Checked) then comparisons := true; + if (TukeyKramerChk.Checked) then comparisons := true; + if (NewmanKeulsChk.Checked) then comparisons := true; +// if (BonferroniChk.Checked) then comparisons := true; +// if (OrthogonalChk.Checked) then comparisons := true; + SetLength(ColNoSelected,NoVariables); + DepVarCol := 0; + F1Col := 0; + F2Col := 0; + F3Col := 0; + SSDep := 0.0; + SSF1 := 0.0; + SSF2 := 0.0; + SSF3 := 0.0; + SSF1F2 := 0.0; + SSF1F3 := 0.0; + SSF2F3 := 0.0; + SSF1F2F3 := 0.0; + MeanDep := 0.0; + MeanF1 := 0.0; + MeanF2 := 0.0; + MeanF3 := 0.0; + Nf1cells := 0; + Nf2cells := 0; + Nf3cells := 0; + N := 0; + NoSelected := 0; + minf1 := 0; + maxf1 := 0; + minf2 := 0; + maxf2 := 0; + minf3 := 0; + maxf3 := 0; + // setup posthoc comparisons + BlksAnovaFrm.PostAlpha.Text := PostAlpha.Text; + + // Get column numbers of dependent variable and factors + for i := 1 to NoVariables do + begin + cellstring := OS3MainFrm.DataGrid.Cells[i,0]; + if (cellstring = DepVar.Text) then + begin + DepVarCol := i; + NoSelected := NoSelected + 1; + ColNoSelected[NoSelected-1] := DepVarCol; + end; + if (cellstring = Factor1.Text) then + begin + F1Col := i; + NoSelected := NoSelected + 1; + ColNoSelected[NoSelected-1] := F1Col; + end; + if (cellstring = Factor2.Text) then + begin + F2Col := i; + NoSelected := NoSelected + 1; + ColNoSelected[NoSelected-1] := F2Col; + end; + if (cellstring = Factor3.Text) then + begin + F3Col := i; + NoSelected := NoSelected + 1; + ColNoSelected[NoSelected-1] := F3Col; + end; + end; + OverAll := StrToFloat(OverAllAlpha.Text); + PostHocAlpha := StrToFloat(PostAlpha.Text); + // get min and max of each factor code + getlevels(self); + + // allocate space + SetLength(cellcnts,totcells); // array of cell counts + SetLength(cellvars,totcells); // arrray of cell sums of squares variances + SetLength(cellsums,totcells); // array of cell sums means + + // initialize array values + for i := 1 to totcells do + begin + cellsums[i-1] := 0.0; + cellvars[i-1] := 0.0; + cellcnts[i-1] := 0; + end; + + // analysis + case nofactors of + 2 : // two-way anova + begin + SetLength(counts,Nf1cells,Nf2cells); // matrix for 2-way containing cell sizes + SetLength(sums,Nf1cells,Nf2cells); // matrix for 2-way containing cell sums + SetLength(vars,Nf1cells,Nf2cells); // matrix for 2-way containing sums of squares + SetLength(RowSums,Nf1cells); // 2 way row sums + SetLength(ColSums,Nf2cells); // 2 way col sums + SetLength(RowCount,Nf1cells); // 2 way row count + SetLength(ColCount,Nf2cells); // 2 way col count + SetLength(OrdMeansA,Nf1cells); // ordered means for factor 1 + SetLength(OrdMeansB,Nf2cells); // ordered means for factor 2 + + Calc2Way(self); + if (CompError) then goto nexttwo; + TwoWayTable(self); + TwoWayContrasts(self); + OutPutFrm.ShowModal; + if ((PlotMeans.checked) or (Plot2DLines.Checked) or (Plot3DLines.Checked)) then TwoWayPlot(self); +nexttwo: OrdMeansB := nil; + OrdMeansA := nil; + ColCount := nil; + RowCount := nil; + ColSums := nil; + RowSums := nil; + vars := nil; + sums := nil; + counts := nil; + end; + 3 : // three way anova + begin + SetLength(RowSums,Nf1cells); // 2 way row sums + SetLength(ColSums,Nf2cells); // 2 way col sums + SetLength(RowCount,Nf1cells); // 2 way row count + SetLength(ColCount,Nf2cells); // 2 way col count + SetLength(SlcSums,Nf3cells); // 3 way slice sums + SetLength(SlcCount,Nf3cells); // 3 way slice counts + SetLength(OrdMeansA,Nf1cells); // ordered means for factor 1 + SetLength(OrdMeansB,Nf2cells); // ordered means for factor 2 + SetLength(OrdMeansC,Nf3cells); // ordered means for factor 3 + SetLength(wsum,Nf1cells,Nf2cells,Nf3cells); + SetLength(wx2,Nf1cells,Nf2cells,Nf3cells); + SetLength(ncnt,Nf1cells,Nf2cells,Nf3cells); + Calc3Way(self); + if (CompError) then goto nextthree; + ThreeWayTable(self); + ThreeWayContrasts(self); + OutPutFrm.ShowModal; + if ((PlotMeans.checked) or (Plot2DLines.Checked) or (Plot3DLines.Checked)) then ThreeWayPlot(self); +nextthree: + ncnt := nil; + wx2 := nil; + wsum := nil; + OrdMeansC := nil; + OrdMeansB := nil; + OrdMeansA := nil; + SlcCount := nil; + SlcSums := nil; + ColCount := nil; + ColSums := nil; + RowCount := nil; + RowSums := nil; + end; + end; // end switch +cleanit: + cellcnts := nil; + cellvars := nil; + cellsums := nil; + ColNoSelected := nil; +end; + +procedure TOneCaseAnovaForm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +procedure TOneCaseAnovaForm.getlevels(Sender: TObject); +VAR + i, result, avalue : integer; + dblvalue : double; + strvalue : string; + +begin + minf1 := ceil(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[F1Col,1]))); + maxf1 := minf1; + for i := 2 to NoCases do + begin + if not GoodRecord(i,NoSelected,ColNoSelected) then continue; + intvalue := floor(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[F1Col,i]))); + if (intvalue > maxf1) then maxf1 := intvalue; + if (intvalue < minf1) then minf1 := intvalue; + end; + Nf1cells := maxf1 - minf1 + 1; + if (nofactors > 1) then + begin + minf2 := floor(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[F2Col,1]))); + maxf2 := minf2; + for i := 2 to NoCases do + begin + if not GoodRecord(i,NoSelected,ColNoSelected) then continue; + intvalue := floor(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[F2Col,i]))); + if (intvalue > maxf2) then maxf2 := intvalue; + if (intvalue < minf2) then minf2 := intvalue; + end; + Nf2cells := maxf2 - minf2 + 1; + end; + if (nofactors = 3) then + begin + minf3 := floor(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[F3Col,1]))); + maxf3 := minf3; + for i := 2 to NoCases do + begin + if not GoodRecord(i,NoSelected,ColNoSelected) then continue; + intvalue := floor(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[F3Col,i]))); + if (intvalue > maxf3) then maxf3 := intvalue; + if (intvalue < minf3) then minf3 := intvalue; + end; + Nf3cells := maxf3 - minf3 + 1; + end; + totcells := Nf1cells + Nf2cells + Nf3cells; +end; + +procedure TOneCaseAnovaForm.Calc2Way(Sender: TObject); +VAR + i, j, grpA, grpB : integer; + Constant, RowsTotCnt, ColsTotCnt, SSCells : double; + +begin + CompError := false; + // initialize matrix values + NoGrpsA := maxf1 - minf1 + 1; + NoGrpsB := maxf2 - minf2 + 1; + for i := 1 to NoGrpsA do + begin + RowSums[i-1] := 0.0; + RowCount[i-1] := 0.0; + for j := 1 to NoGrpsB do + begin + counts[i-1,j-1] := 0.0; + sums[i-1,j-1] := 0.0; + vars[i-1,j-1] := 0.0; + end; + end; + for i := 1 to NoGrpsB do + begin + ColCount[i-1] := 0.0; + ColSums[i-1] := 0.0; + end; + N := 0; + MeanDep := 0.0; + SSDep := 0.0; + SSCells := 0.0; + RowsTotCnt := 0.0; + ColsTotCnt := 0.0; + SSNonAdd := 0.0; + SSBalance := 0.0; + MSNonAdd := 0.0; + MSBalance := 0.0; + // get working totals + for i := 1 to NoCases do + begin + if not GoodRecord(i,NoSelected,ColNoSelected) then continue; + grpA := floor(StrToFloat(OS3MainFrm.DataGrid.Cells[F1Col,i])); + grpB := floor(StrToFloat(OS3MainFrm.DataGrid.Cells[F2Col,i])); + X := StrToFloat(OS3MainFrm.DataGrid.Cells[DepVarCol,i]); + grpA := grpA - minf1 + 1; + grpB := grpB - minf2 + 1; + counts[grpA-1,grpB-1] := counts[grpA-1,grpB-1] + 1; + sums[grpA-1,grpB-1] := sums[grpA-1,grpB-1] + X; + vars[grpA-1,grpB-1] := vars[grpA-1,grpB-1] + (X * X); + RowSums[grpA-1] := RowSums[grpA-1] + X; + ColSums[grpB-1] := ColSums[grpB-1] + X; + RowCount[grpA-1] := RowCount[grpA-1] + 1.0; + ColCount[grpB-1] := ColCount[grpB-1] + 1.0; + MeanDep := MeanDep + X; + SSDep := SSDep + (X * X); + N := N + 1; + end; + + // Calculate results + for i := 0 to NoGrpsA - 1 do + begin + SSF1 := SSF1 + ((RowSums[i] * RowSums[i]) / RowCount[i]); + RowsTotCnt := RowsTotCnt + RowCount[i]; + end; + for j := 0 to NoGrpsB - 1 do + begin + SSF2 := SSF2 + ((ColSums[j] * ColSums[j]) / ColCount[j]); + ColsTotCnt := ColsTotCnt + ColCount[j]; + end; + + GrandMean := MeanDep / N; + + for i := 0 to NoGrpsA - 1 do + begin + rowmean := RowSums[i] / RowCount[i]; + for j := 0 to NoGrpsB - 1 do + begin + colmean := ColSums[j] / ColCount[j]; + SSNonAdd := SSNonAdd + + ( (colmean - GrandMean) * (rowmean - GrandMean) * sums[i,j] ); + end; + end; + + if (N > 0) then Constant := (MeanDep * MeanDep) / N + else Constant := 0.0; + SSF1 := SSF1 - Constant; + SSF2 := SSF2 - Constant; + SSDep := SSDep - Constant; + SSErr := SSDep - (SSF1 + SSF2); + SSNonAdd := (SSNonAdd * SSNonAdd) / ((SSF1 * SSF2) / (NoGrpsA * NoGrpsB) ); + MSNonAdd := SSNonAdd; + SSBalance := SSErr - SSNonAdd; + if ((SSF1 < 0) or (SSF2 < 0)) then + begin + ShowMessage('ERROR! A negative SS found. Unbalanced design? Ending analysis.'); + CompError := true; + exit; + end; + DFTot := N - 1; + DFF1 := NoGrpsA - 1; + DFF2 := NoGrpsB - 1; + DFErr := DFF1 * DFF2; + DFBalance := DFErr - 1; + MSF1 := SSF1 / DFF1; + MSF2 := SSF2 / DFF2; + MSErr := SSErr / DFErr; + MSDep := SSDep / DFTot; + MSBalance := SSBalance / DFBalance; + OmegaF1 := (SSF1 - DFF1 * MSErr) / (SSDep + MSErr); + OmegaF2 := (SSF2 - DFF2 * MSErr) / (SSDep + MSErr); + Omega := OmegaF1 + OmegaF2; + MeanDep := MeanDep / N; + // f tests for fixed effects + FF1 := abs(MSF1 / MSErr); + FF2 := abs(MSF2 / MSErr); + if (MSBalance > 0.0) then FNonAdd := MSNonAdd / MSBalance + else FNonAdd := 0.0; + ProbF1 := probf(FF1,DFF1,DFErr); + ProbF2 := probf(FF2,DFF2,DFErr); + ProbNonAdd := probf(FNonAdd,1.0,DFBalance); + if (ProbF1 > 1.0) then ProbF1 := 1.0; + if (ProbF2 > 1.0) then ProbF2 := 1.0; + + // Obtain omega squared (proportion of dependent variable explained) + if (OmegaF1 < 0.0) then OmegaF1 := 0.0; + if (OmegaF2 < 0.0) then OmegaF2 := 0.0; + if (Omega < 0.0) then Omega := 0.0; +end; + +procedure TOneCaseAnovaForm.TwoWayTable(Sender: TObject); +VAR + i, j, groupsize : integer; + MinVar, MaxVar, sumvars, sumDFrecip, XBar, V, S, RowSS, ColSS : double; + sumfreqlogvar, c, bartlett, cochran, hartley, chiprob : double; + astring : string; + +begin + if (CompError) then exit; + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('Two Way Analysis of Variance'); + OutPutFrm.RichEdit.Lines.Add(''); + astring := format('Variable analyzed: %s',[DepVar.Text]); + OutPutFrm.RichEdit.Lines.Add(astring); + OutPutFrm.RichEdit.Lines.Add(''); + astring := format('Factor A (rows) variable: %s',[Factor1.Text]); + OutPutFrm.RichEdit.Lines.Add(astring); + astring := format('Factor B (columns) variable: %s',[Factor2.Text]); + OutPutFrm.RichEdit.Lines.Add(astring); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('SOURCE D.F. SS MS F PROB.> F Omega Squared'); + OutPutFrm.RichEdit.Lines.Add(''); + astring := format('Among Rows %4.0f %8.3f %8.3f %8.3f %6.3f %6.3f', + [DFF1,SSF1,MSF1,FF1,ProbF1,OmegaF1]); + OutPutFrm.RichEdit.Lines.Add(astring); + astring := format('Among Columns %4.0f %8.3f %8.3f %8.3f %6.3f %6.3f', + [DFF2,SSF2,MSF2,FF2,ProbF2,OmegaF2]); + OutPutFrm.RichEdit.Lines.Add(astring); + astring := format('Residual %4.0f %8.3f %8.3f', + [DFErr,SSErr,MSErr]); + OutPutFrm.RichEdit.Lines.Add(astring); + astring := format(' NonAdditivity %4.0f %8.3f %8.3f %8.3f %6.3f', + [1.0,SSNonAdd,MSNonAdd,FNonAdd,ProbNonAdd]); + OutPutFrm.RichEdit.Lines.Add(astring); + astring := format(' Balance %4.0f %8.3f %8.3f',[DFBalance,SSBalance,MSBalance]); + OutPutFrm.RichEdit.Lines.Add(astring); + astring := format('Total %4.0f %8.3f %8.3f', + [DFTot,SSDep,MSDep]); + OutPutFrm.RichEdit.Lines.Add(astring); + OutPutFrm.RichEdit.Lines.Add(''); + astring := format('Omega squared for combined effects = %8.3f',[Omega]); + OutPutFrm.RichEdit.Lines.Add(astring); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Descriptive Statistics'); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('GROUP Row Col. N MEAN VARIANCE STD.DEV.'); + groupsize := ceil(counts[0,0]); + equal_grp := true; + MaxVar := 0.0; + MinVar := 1e20; + sumvars := 0.0; + sumfreqlogvar := 0.0; + sumDFrecip := 0.0; + + // Display cell means, variances, standard deviations + V := 0.0; + XBar := 0.0; + S := 0.0; + for i := 0 to NoGrpsA - 1 do + begin + for j := 0 to NoGrpsB - 1 do + begin + if (counts[i,j] > 1) then + begin + XBar := sums[i][j] / counts[i,j]; + V := vars[i][j] - ( (sums[i,j] * sums[i,j]) / counts[i,j]); + V := V / (counts[i,j] - 1.0); + S := sqrt(V); + sumvars := sumvars + V; + if (V > MaxVar) then MaxVar := V; + if (V < MinVar) then MinVar := V; + sumDFrecip := sumDFrecip + (1.0 / (counts[i,j] - 1.0)); + sumfreqlogvar := sumfreqlogvar + ((counts[i,j] - 1.0) * ln(V)); + if (counts[i,j] <> groupsize) then equal_grp := false; + end + else XBar := sums[i][j]; + astring := format('Cell %3d %3d %3.0f %8.3f %8.3f %8.3f', + [minf1+i,minf2+j,counts[i,j],XBar,V,S]); + OutPutFrm.RichEdit.Lines.Add(astring); + end; + end; + + //Display Row means, variances, standard deviations + for i := 0 to NoGrpsA - 1 do + begin + XBar := RowSums[i] / RowCount[i]; + OrdMeansA[i] := XBar; + RowSS := 0.0; + for j := 0 to NoGrpsB - 1 do RowSS := RowSS + vars[i,j]; + V := RowSS - (RowSums[i] * RowSums[i] / RowCount[i]); + V := V / (RowCount[i] - 1.0); + S := sqrt(V); + astring := format('Row %3d %3.0f %8.3f %8.3f %8.3f', + [minf1+i,RowCount[i],XBar,V,S]); + OutPutFrm.RichEdit.Lines.Add(astring); + end; + + //Display means, variances and standard deviations for columns + for j := 0 to NoGrpsB - 1 do + begin + XBar := ColSums[j] / ColCount[j]; + OrdMeansB[j] := XBar; + ColSS := 0.0; + for i := 0 to NoGrpsA - 1 do ColSS := ColSS + vars[i,j]; + if (ColCount[j] > 0) then V := ColSS - (ColSums[j] * ColSums[j] / ColCount[j]); + if (ColCount[j] > 1) then V := V / (ColCount[j] - 1.0); + if (V > 0.0) then S := sqrt(V); + astring := format('Col %3d %3.0f %8.3f %8.3f %8.3f', + [minf2+j,ColCount[j],XBar,V,S]); + OutPutFrm.RichEdit.Lines.Add(astring); + end; + + astring := format('TOTAL %3d %8.3f %8.3f %8.3f', + [N,MeanDep,MSDep,sqrt(MSDep)]); + OutPutFrm.RichEdit.Lines.Add(astring); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add(''); +end; + +procedure TOneCaseAnovaForm.TwoWayPlot(Sender: TObject); +VAR + i, j : integer; + maxmean, XBar : double; + XValue : DblDyneVec; + title : string; + plottype : integer; + setstring : string; + +begin + if (CompError) then exit; + SetLength(XValue,Nf1cells+Nf2cells); + if (PlotMeans.Checked) then PlotType := 2; + if (Plot2DLines.Checked) then PlotType := 1; + if (Plot3DLines.Checked) then PlotType := 10; + + // Factor A first + setstring := 'FACTOR A'; + GraphFrm.SetLabels[1] := setstring; + maxmean := 0.0; + SetLength(GraphFrm.Xpoints,1,Nf1cells); + SetLength(GraphFrm.Ypoints,1,Nf1cells); + for i := 1 to Nf1cells do + begin + RowSums[i-1] := RowSums[i-1] / RowCount[i-1]; + GraphFrm.Ypoints[0,i-1] := RowSums[i-1]; + if (RowSums[i-1] > maxmean) then maxmean := RowSums[i-1]; + XValue[i-1] := minf1 + i - 1; + GraphFrm.Xpoints[0,i-1] := XValue[i-1]; + end; + GraphFrm.nosets := 1; + GraphFrm.nbars := Nf1cells; + GraphFrm.Heading := Factor1.Text; + title := Factor1.Text + ' Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal(); + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; + + // Factor B next + setstring := 'FACTOR B'; + GraphFrm.SetLabels[1] := setstring; + maxmean := 0.0; + SetLength(GraphFrm.Xpoints,1,Nf2cells); + SetLength(GraphFrm.Ypoints,1,Nf2cells); + for i := 1 to Nf2cells do + begin + ColSums[i-1] := ColSums[i-1] / ColCount[i-1]; + GraphFrm.Ypoints[0,i-1] := ColSums[i-1]; + if (ColSums[i-1] > maxmean) then maxmean := ColSums[i-1]; + XValue[i-1] := minf1 + i - 1; + GraphFrm.Xpoints[0,i-1] := XValue[i-1]; + end; + GraphFrm.nosets := 1; + GraphFrm.nbars := Nf2cells; + GraphFrm.Heading := Factor2.Text; + title := FActor2.Text + ' Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal(); + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; + + // Factor A x B Interaction next + maxmean := 0.0; + SetLength(GraphFrm.Ypoints,Nf1cells,Nf2cells); + SetLength(GraphFrm.Xpoints,1,Nf2cells); + for i := 1 to Nf1cells do + begin + setstring := Factor1.Text + ' ' + IntToStr(i); + GraphFrm.SetLabels[i] := setstring; + for j := 1 to Nf2cells do + begin + XBar := sums[i-1,j-1] / counts[i-1,j-1]; + if (XBar > maxmean) then maxmean := XBar; + GraphFrm.Ypoints[i-1,j-1] := XBar; + end; + end; + for j := 1 to Nf2cells do + begin + XValue[j-1] := minf2 + j - 1; + GraphFrm.Xpoints[0,j-1] := XValue[j-1]; + end; + + GraphFrm.nosets := Nf1cells; + GraphFrm.nbars := Nf2cells; + GraphFrm.Heading := 'Factor A x Factor B'; + title := Factor2.Text + ' Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal(); + XValue := nil; + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; +end; + +procedure TOneCaseAnovaForm.Calc3Way(Sender: TObject); +VAR + i, j, k, grpA, grpB, grpC : integer; + Constant, RowsTotCnt, ColsTotCnt, SlcsTotCnt, SSCells, p, n2 : double; +label loop; + +begin + if (InteractBtn.Checked) then interacts := true + else interacts := false; + + CompError := false; + // initialize matrix values + NoGrpsA := maxf1 - minf1 + 1; + NoGrpsB := maxf2 - minf2 + 1; + NoGrpsC := maxf3 - minf3 + 1; + for i := 0 to NoGrpsA - 1 do + begin + RowSums[i] := 0.0; + RowCount[i] := 0.0; + for j := 0 to NoGrpsB - 1 do + begin + for k := 0 to NoGrpsC - 1 do + begin + wsum[i,j,k] := 0.0; + ncnt[i,j,k] := 0; + wx2[i,j,k] := 0.0; + end; + end; + end; + for i := 0 to NoGrpsB - 1 do + begin + ColCount[i] := 0.0; + ColSums[i] := 0.0; + end; + for i := 0 to NoGrpsC - 1 do + begin + SlcCount[i] := 0.0; + SlcSums[i] := 0.0; + end; + N := 0; + MeanDep := 0.0; + SSDep := 0.0; + RowsTotCnt := 0.0; + ColsTotCnt := 0.0; + SlcsTotCnt := 0.0; + SSF1 := 0.0; + SSF2 := 0.0; + SSF3 := 0.0; + SSF1F2 := 0.0; + SSF1F3 := 0.0; + SSF2F3 := 0.0; + SSF1F2F3 := 0.0; + SSCells := 0.0; + SSNonAdd := 0.0; + + // get working totals + for i := 1 to NoCases do + begin + if not GoodRecord(i,NoSelected,ColNoSelected) then continue; + grpA := floor(StrToFloat(OS3MainFrm.DataGrid.Cells[F1Col,i])); + grpB := floor(StrToFloat(OS3MainFrm.DataGrid.Cells[F2Col,i])); + grpC := floor(StrToFloat(OS3MainFrm.DataGrid.Cells[F3Col,i])); + X := StrToFloat(OS3MainFrm.DataGrid.Cells[DepVarCol,i]); + grpA := grpA - minf1 + 1; + grpB := grpB - minf2 + 1; + grpC := grpC - minf3 + 1; + ncnt[grpA-1,grpB-1,grpC-1] := ncnt[grpA-1,grpB-1,grpC-1] + 1; + wsum[grpA-1,grpB-1,grpC-1] := wsum[grpA-1,grpB-1,grpC-1] + X; + wx2[grpA-1,grpB-1,grpC-1] := wx2[grpA-1,grpB-1,grpC-1] + (X * X); + RowSums[grpA-1] := RowSums[grpA-1] + X; + ColSums[grpB-1] := ColSums[grpB-1] + X; + SlcSums[grpC-1] := SlcSums[grpC-1] + X; + RowCount[grpA-1] := RowCount[grpA-1] + 1.0; + ColCount[grpB-1] := ColCount[grpB-1] + 1.0; + SlcCount[grpC-1] := SlcCount[grpC-1] + 1.0; + MeanDep := MeanDep + X; + SSDep := SSDep + (X * X); + N := N + 1; + end; + + // Calculate results + Constant := (MeanDep * MeanDep) / N; + GrandMean := MeanDep / N; + + // get ss for rows + for i := 0 to NoGrpsA - 1 do + begin + SSF1 := SSF1 + ((RowSums[i] * RowSums[i]) / RowCount[i]); + RowsTotCnt := RowsTotCnt + RowCount[i]; + end; + SSF1 := SSF1 - Constant; + + // get ss for columns + for j := 0 to NoGrpsB - 1 do + begin + SSF2 := SSF2 + ((ColSums[j] * ColSums[j]) / ColCount[j]); + ColsTotCnt := ColsTotCnt + ColCount[j]; + end; + SSF2 := SSF2 - Constant; + + // get ss for slices + for k := 0 to NoGrpsC - 1 do + begin + SSF3 := SSF3 + ((SlcSums[k] * SlcSums[k]) / SlcCount[k]); + SlcsTotCnt := SlcsTotCnt + SlcCount[k]; + end; + SSF3 := SSF3 - Constant; + + // get ss for row x col interaction + p := 0.0; + n2 := 0.0; + for i := 0 to NoGrpsA - 1 do + begin + for j := 0 to NoGrpsB - 1 do + begin + for k := 0 to NoGrpsC - 1 do + begin + p := p + wsum[i,j,k]; + n2 := n2 + ncnt[i,j,k]; + end; + SSF1F2 := SSF1F2 + ((p * p) / n2); + p := 0.0; + n2 := 0.0; + end; + end; + SSF1F2 := SSF1F2 - SSF1 - SSF2 - Constant; + + // get ss for row x slice interaction + for i := 0 to NoGrpsA - 1 do + begin + for k := 0 to NoGrpsC - 1 do + begin + for j := 0 to NoGrpsB - 1 do + begin + p := p + wsum[i,j,k]; + n2 := n2 + ncnt[i,j,k]; + end; + SSF1F3 := SSF1F3 + ((p * p) / n2); + p := 0.0; + n2 := 0.0; + end; + end; + SSF1F3 := SSF1F3 - SSF1 - SSF3 - Constant; + + // get ss for columns x slices interaction + for j := 0 to NoGrpsB - 1 do + begin + for k := 0 to NoGrpsC - 1 do + begin + for i := 0 to NoGrpsA - 1 do + begin + p := p + wsum[i,j,k]; + n2 := n2 + ncnt[i,j,k]; + end; + SSF2F3 := SSF2F3 + ((p * p) / n2); + p := 0.0; + n2 := 0.0; + end; + end; + SSF2F3 := SSF2F3 - SSF2 - SSF3 - Constant; + +(* + // get ss for cells + for (i := 0; i < NoGrpsA; i++) + for (j := 0; j < NoGrpsB; j++) + for (k := 0; k < NoGrpsC; k++) + SSCells := SSCells + ((wsum[i][j][k] * wsum[i][j][k]) / ncnt[i][j][k]); + + SSF1F2F3 := SSCells - SSF1 - SSF2 - SSF3 - SSF1F2 - SSF1F3 - SSF2F3 - Constant; +*) + for i := 0 to NoGrpsA - 1 do + begin + rowmean := RowSums[i] / RowCount[i]; + for j := 0 to NoGrpsB - 1 do + begin + colmean := ColSums[j] / ColCount[j]; + for k := 0 to NoGrpsC - 1 do + begin + slicemean := SlcSums[k] / SlcCount[k]; + SSNonAdd := SSNonAdd + + ( (colmean - GrandMean) * (rowmean - GrandMean) * + (slicemean - GrandMean) * wsum[i,j,k] ); + end; + end; + end; +loop: + SSDep := SSDep - Constant; + if (interacts = false) then SSErr := SSDep - (SSF1 + SSF2 + SSF3) + else SSErr := SSDep - (SSF1 + SSF2 + SSF3 + SSF1F2 + SSF1F3 + SSF2F3); + SSNonAdd := (SSNonAdd * SSNonAdd) / (SSF1 * SSF2 * SSF3); + SSNonAdd := SSNonAdd * (NoGrpsA * NoGrpsB * NoGrpsC) * (NoGrpsA * NoGrpsB * NoGrpsC ); + MSNonAdd := SSNonAdd; + SSBalance := SSErr - SSNonAdd; + + if ((SSF1 < 0.0) or (SSF2 < 0.0) or (SSF3 < 0.0) or (SSF1F2 < 0.0) or + (SSF1F3 < 0.0) or (SSF2F3 < 0.0)) then + begin + ShowMessage('ERROR! A negative SS found. Unbalanced Design? Ending analysis.'); + CompError := true; + exit; + end; + + DFTot := N - 1; + DFF1 := NoGrpsA - 1; + DFF2 := NoGrpsB - 1; + DFF3 := NoGrpsC - 1; + DFF1F2 := DFF1 * DFF2; + DFF1F3 := DFF1 * DFF3; + DFF2F3 := DFF2 * DFF3; + if (interacts = false) then DFErr := DFTot - DFF1 - DFF2 - DFF3 + else DFErr := DFTot - DFF1 - DFF2 - DFF3 - DFF1F2 - DFF1F3 - DFF2F3; + DFBalance := DFErr - 1; + MSF1 := SSF1 / DFF1; + MSF2 := SSF2 / DFF2; + MSF3 := SSF3 / DFF3; + MSF1F2 := SSF1F2 / DFF1F2; + MSF1F3 := SSF1F3 / DFF1F3; + MSF2F3 := SSF2F3 / DFF2F3; + MSErr := SSErr / DFErr; + MSDep := SSDep / DFTot; + MSBalance := SSBalance / DFBalance; + OmegaF1 := (SSF1 - DFF1 * MSErr) / (SSDep + MSErr); + OmegaF2 := (SSF2 - DFF2 * MSErr) / (SSDep + MSErr); + OmegaF3 := (SSF3 - DFF3 * MSErr) / (SSDep + MSErr); + OmegaF1F2 := (SSF1F2 - DFF1F2 * MSErr) / (SSDep + MSErr); + OmegaF1F3 := (SSF1F3 - DFF1F3 * MSErr) / (SSDep + MSErr); + OmegaF2F3 := (SSF2F3 - DFF2F3 * MSErr) / (SSDep + MSErr); + if (interacts = false) then Omega := OmegaF1 + OmegaF2 + OmegaF3 + else Omega := OmegaF1 + OmegaF2 + OmegaF3 + OmegaF1F2 + OmegaF1F3 + OmegaF2F3; + MeanDep := MeanDep / N; + + FF1 := abs(MSF1 / MSErr); + FF2 := abs(MSF2 / MSErr); + FF3 := abs(MSF3 / MSErr); + FF1F2 := abs(MSF1F2 / MSErr); + FF1F3 := abs(MSF1F3 / MSErr); + FF2F3 := abs(MSF2F3 / MSErr); + if (MSBalance > 0.0) then FNonAdd := MSNonAdd / MSBalance + else FNonAdd := 0.0; + + ProbF1 := probf(FF1,DFF1,DFErr); + ProbF2 := probf(FF2,DFF2,DFErr); + ProbF3 := probf(FF3,DFF3,DFErr); + ProbF1F2 := probf(FF1F2,DFF1F2,DFErr); + ProbF1F3 := probf(FF1F3,DFF1F3,DFErr); + ProbF2F3 := probf(FF2F3,DFF2F3,DFErr); + ProbNonAdd := probf(FNonAdd,1.0,DFBalance); + + if (ProbF1 > 1.0) then ProbF1 := 1.0; + if (ProbF2 > 1.0) then ProbF2 := 1.0; + if (ProbF3 > 1.0) then ProbF3 := 1.0; + if (ProbF1F2 > 1.0) then ProbF1F2 := 1.0; + if (ProbF1F3 > 1.0) then ProbF1F3 := 1.0; + if (ProbF2F3 > 1.0) then ProbF2F3 := 1.0; + + // Obtain omega squared (proportion of dependent variable explained) + if (OmegaF1 < 0.0) then OmegaF1 := 0.0; + if (OmegaF2 < 0.0) then OmegaF2 := 0.0; + if (OmegaF3 < 0.0) then OmegaF3 := 0.0; + if (OmegaF1F2 < 0.0) then OmegaF1F2 := 0.0; + if (OmegaF1F3 < 0.0) then OmegaF1F3 := 0.0; + if (OmegaF2F3 < 0.0) then OmegaF2F3 := 0.0; + if (Omega < 0.0) then Omega := 0.0; +end; + +procedure TOneCaseAnovaForm.ThreeWayTable(Sender: TObject); +VAR + groupsize : integer; + MinVar, MaxVar, sumvars, sumDFrecip : double; + i, j, k : integer; + XBar, V, S, RowSS, ColSS, SlcSS : double; + sumfreqlogvar, c, bartlett, cochran, hartley, chiprob : double; + problem : boolean; + astring : string; + +begin + if (CompError) then exit; + OutPutFrm.RichEdit.Clear; + problem := false; + OutPutFrm.RichEdit.Lines.Add('Three Way Analysis of Variance'); + OutPutFrm.RichEdit.Lines.Add(''); + astring := format('Variable analyzed: %s',[DepVar.Text]); + OutPutFrm.RichEdit.Lines.Add(astring); + OutPutFrm.RichEdit.Lines.Add(''); + astring := format('Factor A (rows) variable: %s',[Factor1.Text]); + OutPutFrm.RichEdit.Lines.Add(astring); + astring := format('Factor B (columns) variable: %s',[Factor2.Text]); + OutPutFrm.RichEdit.Lines.Add(astring); + astring := format('Factor C (slices) variable: %s',[Factor3.Text]); + OutPutFrm.RichEdit.Lines.Add(astring); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('SOURCE D.F. SS MS F PROB.> F Omega Squared'); + OutPutFrm.RichEdit.Lines.Add(''); + astring := format('Among Rows %4.0f %12.4f %12.4f %12.4f %6.3f %6.3f', + [DFF1,SSF1,MSF1,FF1,ProbF1,OmegaF1]); + OutPutFrm.RichEdit.Lines.Add(astring); + astring := format('Among Columns %4.0f %12.4f %12.4f %12.4f %6.3f %6.3f', + [DFF2,SSF2,MSF2,FF2,ProbF2,OmegaF2]); + OutPutFrm.RichEdit.Lines.Add(astring); + astring := format('Among Slices %4.0f %12.4f %12.4f %12.4f %6.3f %6.3f', + [DFF3,SSF3,MSF3,FF3,ProbF3,OmegaF3]); + OutPutFrm.RichEdit.Lines.Add(astring); + if (interacts) then + begin + astring := format('A x B Inter. %4.0f %12.4f %12.4f %12.4f %6.3f %6.3f', + [DFF1F2,SSF1F2,MSF1F2,FF1F2,ProbF1F2,OmegaF1F2]); + OutPutFrm.RichEdit.Lines.Add(astring); + astring := format('A x C Inter. %4.0f %12.4f %12.4f %12.4f %6.3f %6.3f', + [DFF1F3,SSF1F3,MSF1F3,FF1F3,ProbF1F3,OmegaF1F3]); + OutPutFrm.RichEdit.Lines.Add(astring); + astring := format('B x C Inter. %4.0f %12.4f %12.4f %12.4f %6.3f %6.3f', + [DFF2F3,SSF2F3,MSF2F3,FF2F3,ProbF2F3,OmegaF2F3]); + OutPutFrm.RichEdit.Lines.Add(astring); + end; + astring := format('Residual %4.0f %12.4f %12.4f', [DFErr,SSErr,MSErr]); + OutPutFrm.RichEdit.Lines.Add(astring); + astring := format(' NonAdditivity %4.0f %12.4f %12.4f %12.4f %6.3f', + [1.0,SSNonAdd,MSNonAdd,FNonAdd,ProbNonAdd]); + OutPutFrm.RichEdit.Lines.Add(astring); + astring := format(' Balance %4.0f %12.4f %12.4f',[DFBalance,SSBalance,MSBalance]); + OutPutFrm.RichEdit.Lines.Add(astring); + astring := format('Total %4.0f %12.4f %12.4f',[DFTot,SSDep,MSDep]); + OutPutFrm.RichEdit.Lines.Add(astring); + OutPutFrm.RichEdit.Lines.Add(''); + astring := format('Omega squared for combined effects := %8.4f',[Omega]); + OutPutFrm.RichEdit.Lines.Add(astring); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Descriptive Statistics'); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('GROUP N MEAN VARIANCE STD.DEV.'); + groupsize := ncnt[1][1][1]; + equal_grp := true; + MaxVar := 0.0; + MinVar := 1e20; + sumvars := 0.0; + sumfreqlogvar := 0.0; + sumDFrecip := 0.0; + + // Display cell means, variances, standard deviations + for i := 0 to NoGrpsA - 1 do + begin + for j := 0 to NoGrpsB - 1 do + begin + for k := 0 to NoGrpsC - 1 do + begin + XBar := wsum[i,j,k] / ncnt[i,j,k]; + V := 0.0; + S := 0.0; + end; + end; + end; + + //Display Row means, variances, standard deviations + for i := 0 to NoGrpsA - 1 do + begin + XBar := RowSums[i] / RowCount[i]; + OrdMeansA[i] := XBar; + RowSS := 0.0; + for j := 0 to NoGrpsB - 1 do + for k := 0 to NoGrpsC - 1 do RowSS := RowSS + wx2[i,j,k]; + V := RowSS - (RowSums[i] * RowSums[i] / RowCount[i]); + V := V / (RowCount[i] - 1.0); + S := sqrt(V); + astring := format('Row %3d %3.0f %8.3f %8.3f %8.3f', + [minf1+i,RowCount[i],XBar,V,S]); + OutPutFrm.RichEdit.Lines.Add(astring); + end; + + //Display means, variances and standard deviations for columns + for j := 0 to NoGrpsB - 1 do + begin + XBar := ColSums[j] / ColCount[j]; + OrdMeansB[j] := XBar; + ColSS := 0.0; + for i := 0 to NoGrpsA - 1 do + for k := 0 to NoGrpsC - 1 do ColSS := ColSS + wx2[i,j,k]; + V := ColSS - (ColSums[j] * ColSums[j] / ColCount[j]); + V := V / (ColCount[j] - 1.0); + S := sqrt(V); + astring := format('Col %3d %3.0f %8.3f %8.3f %8.3f', + [minf2+j,ColCount[j],XBar,V,S]); + OutPutFrm.RichEdit.Lines.Add(astring); + end; + + //Display means, variances and standard deviations for slices + for k := 0 to NoGrpsC - 1 do + begin + XBar := SlcSums[k] / SlcCount[k]; + OrdMeansC[k] := XBar; + SlcSS := 0.0; + for i := 0 to NoGrpsA - 1 do + for j := 0 to NoGrpsB - 1 do SlcSS := SlcSS + wx2[i,j,k]; + V := SlcSS - (SlcSums[k] * SlcSums[k] / SlcCount[k]); + V := V / (SlcCount[k] - 1.0); + S := sqrt(V); + astring := format('Slice %3d %3.0f %8.3f %8.3f %8.3f', + [minf3+k,SlcCount[k],XBar,V,S]); + OutPutFrm.RichEdit.Lines.Add(astring); + end; + + astring := format('TOTAL %3d %8.3f %8.3f %8.3f', + [N,MeanDep,MSDep,sqrt(MSDep)]); + OutPutFrm.RichEdit.Lines.Add(astring); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add(''); +end; + +procedure TOneCaseAnovaForm.ThreeWayPlot(Sender: TObject); +VAR + i, j, k : integer; + maxmean, XBar : double; + XValue : DblDyneVec; + title : string; + plottype : integer; + setstring : string; + +begin + if (CompError) then exit; + SetLength(XValue,totcells); + if (PlotMeans.Checked) then PlotType := 2; + if (Plot2DLines.Checked) then PlotType := 1; + if (Plot3DLines.Checked) then PlotType := 10; + + // Factor A first + setstring := 'FACTOR A'; + GraphFrm.SetLabels[1] := setstring; + maxmean := 0.0; + SetLength(GraphFrm.Xpoints,1,Nf1cells); + SetLength(GraphFrm.Ypoints,1,Nf1cells); + for i := 0 to Nf1cells - 1 do + begin + RowSums[i] := RowSums[i] / RowCount[i]; + GraphFrm.Ypoints[0,i] := RowSums[i]; + if (RowSums[i] > maxmean) then maxmean := RowSums[i]; + XValue[i] := minf1 + i; + GraphFrm.Xpoints[0,i] := XValue[i]; + end; + GraphFrm.nosets := 1; + GraphFrm.nbars := Nf1cells; + GraphFrm.Heading := Factor1.Text; + title := Factor1.Text + ' Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; + + // Factor B next + setstring := 'FACTOR B'; + GraphFrm.SetLabels[1] := setstring; + maxmean := 0.0; + SetLength(GraphFrm.Xpoints,1,Nf2cells); + SetLength(GraphFrm.Ypoints,1,Nf2cells); + for i := 0 to Nf2cells - 1 do + begin + ColSums[i] := ColSums[i] / ColCount[i]; + GraphFrm.Ypoints[0,i] := ColSums[i]; + if (ColSums[i] > maxmean) then maxmean := ColSums[i]; + XValue[i] := minf2 + i; + GraphFrm.Xpoints[0,i] := XValue[i]; + end; + GraphFrm.nosets := 1; + GraphFrm.nbars := Nf2cells; + GraphFrm.Heading := Factor2.Text; + title := Factor2.Text + ' Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; + + // Factor C next + setstring := 'FACTOR C'; + GraphFrm.SetLabels[1] := setstring; + maxmean := 0.0; + SetLength(GraphFrm.Xpoints,1,Nf3cells); + SetLength(GraphFrm.Ypoints,1,Nf3cells); + for i := 0 to Nf3cells - 1 do + begin + SlcSums[i] := SlcSums[i] / SlcCount[i]; + GraphFrm.Ypoints[0,i] := SlcSums[i]; + if (SlcSums[i] > maxmean) then maxmean := SlcSums[i]; + XValue[i] := minf3 + i; + GraphFrm.Xpoints[0,i] := XValue[i]; + end; + GraphFrm.nosets := 1; + GraphFrm.nbars := Nf3cells; + GraphFrm.Heading := Factor3.Text; + title := Factor2.Text + ' Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; + + // Factor A x B Interaction within each slice next + SetLength(GraphFrm.Ypoints,Nf1cells,Nf2cells); + SetLength(GraphFrm.Xpoints,1,Nf2cells); + for k := 0 to Nf3cells - 1 do + begin + maxmean := 0.0; + for i := 0 to Nf1cells - 1 do + begin + setstring := Factor1.Text + ' ' + IntToStr(i+1); + GraphFrm.SetLabels[i+1] := setstring; + for j := 0 to Nf2cells - 1 do + begin + XBar := wsum[i,j,k] / ncnt[i,j,k]; + if (XBar > maxmean) then maxmean := XBar; + GraphFrm.Ypoints[i,j] := XBar; + end; + end; + for j := 0 to Nf2cells - 1 do + begin + XValue[j] := minf2 + j ; + GraphFrm.Xpoints[0,j] := XValue[j]; + end; + + GraphFrm.nosets := Nf1cells; + GraphFrm.nbars := Nf2cells; + GraphFrm.Heading := 'Factor A x Factor B Within C ' + IntToStr(k+1); + title := Factor2.Text + ' Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.2; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + end; + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; + + // Factor A x C Interaction within each Column next + SetLength(GraphFrm.Xpoints,1,Nf3cells); + SetLength(GraphFrm.Ypoints,Nf1cells,Nf3cells); + for j := 0 to Nf2cells - 1 do + begin + maxmean := 0.0; + for i := 0 to Nf1cells - 1 do + begin + setstring := Factor1.Text + ' ' + IntToStr(i+1); + GraphFrm.SetLabels[i+1] := setstring; + for k := 0 to Nf3cells - 1 do + begin + XBar := wsum[i,j,k] / ncnt[i,j,k]; + if (XBar > maxmean) then maxmean := XBar; + GraphFrm.Ypoints[i,k] := XBar; + end; + end; + for k := 0 to Nf3cells - 1 do + begin + XValue[k] := minf3 + k; + GraphFrm.Xpoints[0,k] := XValue[k]; + end; + + GraphFrm.nosets := Nf1cells; + GraphFrm.nbars := Nf3cells; + GraphFrm.Heading := 'Factor A x Factor C Within B ' + IntToStr(j+1); + title := Factor3.Text + ' Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.2; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + end; + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; + + // Factor B x C Interaction within each row next + SetLength(GraphFrm.Xpoints,1,Nf3cells); + SetLength(GraphFrm.Ypoints,Nf2cells,Nf3cells); + for i := 0 to Nf1cells - 1 do + begin + maxmean := 0.0; + for j := 0 to Nf2cells - 1 do + begin + setstring := Factor2.Text + ' ' + IntToStr(j+1); + GraphFrm.SetLabels[j+1] := setstring; + for k := 0 to Nf3cells - 1 do + begin + XBar := wsum[i,j,k] / ncnt[i,j,k]; + if (XBar > maxmean) then maxmean := XBar; + GraphFrm.Ypoints[j,k] := XBar; + end; + end; + for j := 0 to Nf3cells - 1 do + begin + XValue[j] := minf3 + j; + GraphFrm.Xpoints[0,j] := XValue[j]; + end; + + GraphFrm.nosets := Nf2cells; + GraphFrm.nbars := Nf3cells; + GraphFrm.Heading := 'Factor B x Factor C Within A ' + IntToStr(i+1); + title := Factor3.Text + ' Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.2; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + end; // next row + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; + XValue := nil; +end; + +procedure TOneCaseAnovaForm.TwoWayContrasts(Sender: TObject); +VAR + i, j : integer; + value, alpha : double; +// outline : string; + variances : DblDyneVec; + RowSS, ColSS : double; + +begin + if (comparisons = false) then exit; + if (CompError) then exit; + SetLength(variances,totcells); + alpha := StrToFloat(PostAlpha.Text); + // row comparisons + if ((Nf1cells > 2) and (ProbF1 < Overall) ) then + begin + for i := 0 to NoGrpsA - 1 do + begin + RowSS := 0.0; + for j := 0 to NoGrpsB - 1 do RowSS := RowSS + vars[i,j]; + variances[i] := RowSS - (RowSums[i] * RowSums[i] / RowCount[i]); + variances[i] := variances[i] / (RowCount[i] - 1.0); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('COMPARISONS AMONG ROWS'); + // get smallest group size + value := 1e20; + for i := 0 to Nf1cells - 1 do if (RowCount[i] < value) then value := RowCount[i]; + if (ScheffeChk.Checked) then + SCHEFFETEST(MSErr,RowSums,RowCount,minf1,maxf1,N); + if ((TukeyHSDChk.Checked) and (equal_grp)) then + TUKEY(MSErr,DFErr,value,RowSums,RowCount,minf1,maxf1); + if ((TukeyBChk.Checked) and (equal_grp)) then + TUKEYBTEST(MSErr,DFErr,RowSums,RowCount,minf1,maxf1,value); + if ((TukeyKramerChk.Checked) and (equal_grp)) then + TUKEY_KRAMER(MSErr,DFErr,value,RowSums,RowCount,minf1,maxf1); +// if (BonferroniChk.Checked) then +// Bonferroni(RowSums,RowCount,variances,minf1,maxf1); +// if (OrthogonalChk.Checked) then +// CONTRASTS(MSErr,DFErr,RowSums,RowCount,minf1,maxf1,Alpha); + if ((NewmanKeulsChk.Checked) and (equal_grp)) then + Newman_Keuls(MSErr,DFErr,value,RowSums,RowCount,minf1,maxf1); + end; + + // column comparisons + if ((Nf2cells > 2) and (ProbF2 < Alpha) ) then + begin + for j := 0 to NoGrpsB - 1 do + begin + ColSS := 0.0; + for i := 0 to NoGrpsA - 1 do ColSS := ColSS + vars[i,j]; + variances[j] := ColSS - (ColSums[j] * ColSums[j] / ColCount[j]); + variances[j] := variances[j] / (ColCount[j] - 1.0); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('COMPARISONS AMONG COLUMNS'); + value := 1e20; + for i := 0 to Nf2cells - 1 do if (ColCount[i] < value) then value := ColCount[i]; + if (ScheffeChk.Checked) then + SCHEFFETEST(MSErr,ColSums,ColCount,minf2,maxf2,N); + if ((TukeyHSDChk.Checked) and (equal_grp)) then + TUKEY(MSErr,DFErr,value,ColSums,ColCount,minf2,maxf2); + if ((TukeyBChk.Checked) and (equal_grp)) then + TUKEYBTEST(MSErr,DFErr,ColSums,ColCount,minf2,maxf2,value); + if ((TukeyKramerChk.Checked) and (equal_grp)) then + TUKEY_KRAMER(MSErr,DFErr,value,ColSums,ColCount,minf2,maxf2); +// if (BonferroniChk.Checked) then +// Bonferroni(ColSums,ColCount,variances,minf2,maxf2); +// if (OrthogonalChk.Checked) then +// CONTRASTS(MSErr,DFErr,ColSums,ColCount,minf2,maxf2,Alpha); + if ((NewmanKeulsChk.Checked) and (equal_grp)) then + Newman_Keuls(MSErr,DFErr,value,ColSums,ColCount,minf2,maxf2); + end; + + // simple effects for columns within each row + if (ProbF3 < Alpha) then + begin + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('COMPARISONS AMONG COLUMNS WITHIN EACH ROW'); + for i := 0 to Nf1cells - 1 do + begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('ROW %d COMPARISONS',[i+1]); + OutPutFrm.RichEdit.Lines.Add(outline); + // move cell sums and counts to cellsums and cellcnts + for j := 0 to Nf2cells - 1 do + begin + cellsums[j] := sums[i,j]; + cellcnts[j] := counts[i,j]; + cellvars[j] := vars[i,j]; + end; + value := 1e20; + for j := 0 to Nf2cells - 1 do if (cellcnts[j] < value) then value := cellcnts[j]; + if (ScheffeChk.Checked) then + SCHEFFETEST(MSErr,cellsums,cellcnts,minf2,maxf2,N); + if ((TukeyHSDChk.Checked) and (equal_grp)) then + TUKEY(MSErr,DFErr,value,cellsums,cellcnts,minf2,maxf2); + if ((TukeyBChk.Checked) and (equal_grp)) then + TUKEYBTEST(MSErr,DFErr,cellsums,cellcnts,minf2,maxf2,value); + if ((TukeyKramerChk.Checked) and (equal_grp)) then + TUKEY_KRAMER(MSErr,DFErr,value,cellsums,cellcnts,minf2,maxf2); +// if (BonferroniChk.Checked) then +// Bonferroni(cellsums,cellcnts,cellvars,minf2,maxf2); +// if (OrthogonalChk.Checked) then +// CONTRASTS(MSErr,DFErr,cellsums,cellcnts,minf2,maxf2,0.05); + if ((NewmanKeulsChk.Checked) and (equal_grp)) then + Newman_Keuls(MSErr,DFErr,value,cellsums,cellcnts,minf2,maxf2); + end; + end; + + // simple effects for rows within each column + if (ProbF3 < Alpha) then + begin + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('COMPARISONS AMONG ROWS WITHIN EACH COLUMN'); + for j := 0 to Nf2cells - 1 do + begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('COLUMN %d COMPARISONS', [j+1]); + OutPutFrm.RichEdit.Lines.Add(outline); + // move cell sums and counts to cellsums and cellcnts + for i := 0 to Nf1cells - 1 do + begin + cellsums[i] := sums[i,j]; + cellcnts[i] := counts[i,j]; + cellvars[i] := vars[i,j]; + end; + value := 1e20; + for i := 0 to Nf1cells - 1 do if (cellcnts[j] < value) then value := cellcnts[j]; + if (ScheffeChk.Checked) then + SCHEFFETEST(MSErr,cellsums,cellcnts,minf1,maxf1,N); + if ((TukeyHSDChk.Checked) and (equal_grp)) then + TUKEY(MSErr,DFErr,value,cellsums,cellcnts,minf1,maxf1); + if ((TukeyBChk.Checked) and (equal_grp)) then + TUKEYBTEST(MSErr,DFErr,cellsums,cellcnts,minf1,maxf1,value); + if ((TukeyKramerChk.Checked) and (equal_grp)) then + TUKEY_KRAMER(MSErr,DFErr,value,cellsums,cellcnts,minf1,maxf1); +// if (BonferroniChk.Checked) then +// Bonferroni(cellsums,cellcnts,cellvars,minf1,maxf1); +// if (OrthogonalChk.Checked) then +// CONTRASTS(MSErr,DFErr,cellsums,cellcnts,minf1,maxf1,0.05); + if ((NewmanKeulsChk.Checked) and (equal_grp)) then + Newman_Keuls(MSErr,DFErr,value,cellsums,cellcnts,minf1,maxf1); + end; + end; + variances := nil; +end; + +procedure TOneCaseAnovaForm.ThreeWayContrasts(Sender: TObject); +VAR + i, j, k : integer; + value, alpha : double; +// outline : string; + variances : DblDyneVec; + RowSS, ColSS, SlcSS : double; + +begin + if (comparisons = false) then exit; + if (CompError) then exit; + alpha := StrToFloat(PostAlpha.Text); + if ((ScheffeChk.Checked = false) and (TukeyHSDChk.Checked = false) and + (TukeyBChk.Checked = false) and (TukeyKramerChk.Checked = false) and + (NewmanKeulsChk.Checked = false)) then exit; + SetLength(variances,totcells); + + // row comparisons + if ((Nf1cells > 2) and (ProbF1 < Alpha)) then + begin + for i := 0 to NoGrpsA - 1 do + begin + RowSS := 0.0; + for j := 0 to NoGrpsB - 1 do + for k := 0 to NoGrpsC - 1 do RowSS := RowSS + wx2[i,j,k]; + variances[i] := RowSS - (RowSums[i] * RowSums[i] / RowCount[i]); + variances[i] := variances[i] / (RowCount[i] - 1.0); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('COMPARISONS AMONG ROWS'); + // get smallest group size + value := 1e20; + for i := 0 to Nf1cells - 1 do if (RowCount[i] < value) then value := RowCount[i]; + if (ScheffeChk.Checked) then + SCHEFFETEST(MSErr,RowSums,RowCount,minf1,maxf1,N); + if ((TukeyHSDChk.Checked) and (equal_grp)) then + TUKEY(MSErr,DFErr,value,RowSums,RowCount,minf1,maxf1); + if ((TukeyBChk.Checked) and (equal_grp)) then + TUKEYBTEST(MSErr,DFErr,RowSums,RowCount,minf1,maxf1,value); + if ((TukeyKramerChk.Checked) and (equal_grp)) then + TUKEY_KRAMER(MSErr,DFErr,value,RowSums,RowCount,minf1,maxf1); +// if (BonferroniChk.Checked) then +// Bonferroni(RowSums,RowCount,variances,minf1,maxf1); +// if (OrthogonalChk.Checked) then +// CONTRASTS(MSErr,DFErr,RowSums,RowCount,minf1,maxf1,Alpha); + if ((NewmanKeulsChk.Checked) and (equal_grp)) then + Newman_Keuls(MSErr,DFErr,value,RowSums,RowCount,minf1,maxf1); + end; + + // column comparisons + if ((Nf2cells > 2) and (ProbF2 < Alpha)) then + begin + for j := 0 to NoGrpsB - 1 do + begin + ColSS := 0.0; + for i := 0 to NoGrpsA - 1 do + for k := 0 to NoGrpsC - 1 do ColSS := ColSS + wx2[i,j,k]; + variances[j] := ColSS - (ColSums[j] * ColSums[j] / ColCount[j]); + variances[j] := variances[j] / (ColCount[j] - 1.0); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('COMPARISONS AMONG COLUMNS'); + value := 1e20; + for i := 0 to Nf2cells - 1 do if (ColCount[i] < value) then value := ColCount[i]; + if (ScheffeChk.Checked) then + SCHEFFETEST(MSErr,ColSums,ColCount,minf2,maxf2,N); + if ((TukeyHSDChk.Checked) and (equal_grp)) then + TUKEY(MSErr,DFErr,value,ColSums,ColCount,minf2,maxf2); + if ((TukeyBChk.Checked) and (equal_grp)) then + TUKEYBTEST(MSErr,DFErr,ColSums,ColCount,minf2,maxf2,value); + if ((TukeyKramerChk.Checked) and (equal_grp)) then + TUKEY_KRAMER(MSErr,DFErr,value,ColSums,ColCount,minf2,maxf2); +// if (BonferroniChk.Checked) then +// Bonferroni(ColSums,ColCount,variances,minf2,maxf2); +// if (OrthogonalChk.Checked) then +// CONTRASTS(MSErr,DFErr,ColSums,ColCount,minf2,maxf2,Alpha); + if ((NewmanKeulsChk.Checked) and (equal_grp)) then + Newman_Keuls(MSErr,DFErr,value,ColSums,ColCount,minf2,maxf2); + end; + + // slice comparisons + if ((Nf3cells > 2) and (ProbF3 < Alpha)) then + begin + for k := 0 to NoGrpsC - 1 do + begin + SlcSS := 0.0; + for i := 0 to NoGrpsA - 1 do + for j := 0 to NoGrpsB - 1 do SlcSS := SlcSS + wx2[i,j,k]; + variances[k] := SlcSS - (SlcSums[k] * SlcSums[k] / SlcCount[k]); + variances[k] := variances[k] / (SlcCount[k] - 1.0); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('COMPARISONS AMONG SLICES'); + value := 1e20; + for i := 0 to Nf3cells - 1 do if (SlcCount[i] < value) then value := SlcCount[i]; + if (ScheffeChk.Checked) then + SCHEFFETEST(MSErr,SlcSums,SlcCount,minf3,maxf3,N); + if ((TukeyHSDChk.Checked) and (equal_grp)) then + TUKEY(MSErr,DFErr,value,SlcSums,SlcCount,minf3,maxf3); + if ((TukeyBChk.Checked) and (equal_grp)) then + TUKEYBTEST(MSErr,DFErr,SlcSums,SlcCount,minf3,maxf3,value); + if ((TukeyKramerChk.Checked) and (equal_grp)) then + TUKEY_KRAMER(MSErr,DFErr,value,SlcSums,SlcCount,minf3,maxf3); +// if (BonferroniChk.Checked) then +// Bonferroni(SlcSums,SlcCount,variances,minf3,maxf3); +// if (OrthogonalChk.Checked) then +// CONTRASTS(MSErr,DFErr,SlcSums,SlcCount,minf3,maxf3,Alpha); + if ((NewmanKeulsChk.Checked) and (equal_grp)) then + Newman_Keuls(MSErr,DFErr,value,SlcSums,SlcCount,minf3,maxf3); + end; + + // simple effects for columns within each row + if (ProbF1F2 < Alpha) then + begin + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('COMPARISONS AMONG COLUMNS WITHIN EACH ROW'); + for i := 0 to Nf1cells - 1 do + begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('ROW %d COMPARISONS',[i+1]); + OutPutFrm.RichEdit.Lines.Add(outline); + // move cell sums && counts to cellsums && cellcnts + for j := 0 to Nf2cells - 1 do + begin + for k := 0 to Nf3cells - 1 do + begin + cellsums[j] := wsum[i,j,k]; + cellcnts[j] := ncnt[i,j,k]; + cellvars[j] := wx2[i,j,k]; + end; + end; + value := 1e20; + for j := 0 to Nf2cells - 1 do if (cellcnts[j] < value) then value := cellcnts[j]; + if (ScheffeChk.Checked) then + SCHEFFETEST(MSErr,cellsums,cellcnts,minf2,maxf2,N); + if ((TukeyHSDChk.Checked) and (equal_grp)) then + TUKEY(MSErr,DFErr,value,cellsums,cellcnts,minf2,maxf2); + if ((TukeyBChk.Checked) and (equal_grp)) then + TUKEYBTEST(MSErr,DFErr,cellsums,cellcnts,minf2,maxf2,value); + if ((TukeyKramerChk.Checked) and (equal_grp)) then + TUKEY_KRAMER(MSErr,DFErr,value,cellsums,cellcnts,minf2,maxf2); +// if (BonferroniChk.Checked) then +// Bonferroni(cellsums,cellcnts,cellvars,minf2,maxf2); +// if (OrthogonalChk.Checked) then +// CONTRASTS(MSErr,DFErr,cellsums,cellcnts,minf2,maxf2,0.05); + if ((NewmanKeulsChk.Checked) and (equal_grp)) then + Newman_Keuls(MSErr,DFErr,value,cellsums,cellcnts,minf2,maxf2); + end; + end; + + // simple effects for rows within each column + if (ProbF1F2 < Alpha) then + begin + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('COMPARISONS AMONG ROWS WITHIN EACH COLUMN'); + for j := 0 to Nf2cells - 1 do + begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('COLUMN %d COMPARISONS',[j+1]); + OutPutFrm.RichEdit.Lines.Add(outline); + // move cell sums && counts to cellsums && cellcnts + for i := 0 to Nf1cells - 1 do + begin + for k := 0 to Nf3cells - 1 do + begin + cellsums[i] := wsum[i,j,k]; + cellcnts[i] := ncnt[i,j,k]; + cellvars[i] := wx2[i,j,k]; + end; + end; + value := 1e20; + for i := 0 to Nf1cells - 1 do if (cellcnts[j] < value) then value := cellcnts[j]; + if (ScheffeChk.Checked) then + SCHEFFETEST(MSErr,cellsums,cellcnts,minf1,maxf1,N); + if ((TukeyHSDChk.Checked) and (equal_grp)) then + TUKEY(MSErr,DFErr,value,cellsums,cellcnts,minf1,maxf1); + if ((TukeyBChk.Checked) and (equal_grp)) then + TUKEYBTEST(MSErr,DFErr,cellsums,cellcnts,minf1,maxf1,value); + if ((TukeyKramerChk.Checked) and (equal_grp)) then + TUKEY_KRAMER(MSErr,DFErr,value,cellsums,cellcnts,minf1,maxf1); +// if (BonferroniChk.Checked) then +// Bonferroni(cellsums,cellcnts,cellvars,minf1,maxf1); +// if (OrthogonalChk.Checked) then +// CONTRASTS(MSErr,DFErr,cellsums,cellcnts,minf1,maxf1,0.05); + if ((NewmanKeulsChk.Checked) and (equal_grp)) then + Newman_Keuls(MSErr,DFErr,value,cellsums,cellcnts,minf1,maxf1); + end; + end; + + // simple effects for columns within each slice + if (ProbF2F3 < Alpha) then + begin + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('COMPARISONS AMONG COLUMNS WITHIN EACH SLICE'); + for k := 0 to Nf3cells - 1 do + begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('SLICE %d COMPARISONS',[k+1]); + OutPutFrm.RichEdit.Lines.Add(outline); + // move cell sums && counts to cellsums && cellcnts + for j := 0 to Nf2cells - 1 do + begin + for i := 0 to Nf1cells - 1 do + begin + cellsums[j] := wsum[i,j,k]; + cellcnts[j] := ncnt[i,j,k]; + cellvars[j] := wx2[i,j,k]; + end; + end; + value := 1e20; + for j := 0 to Nf2cells-1 do if (cellcnts[j] < value) then value := cellcnts[j]; + if (ScheffeChk.Checked) then + SCHEFFETEST(MSErr,cellsums,cellcnts,minf2,maxf2,N); + if ((TukeyHSDChk.Checked) and (equal_grp)) then + TUKEY(MSErr,DFErr,value,cellsums,cellcnts,minf2,maxf2); + if ((TukeyBChk.Checked) and (equal_grp)) then + TUKEYBTEST(MSErr,DFErr,cellsums,cellcnts,minf2,maxf2,value); + if ((TukeyKramerChk.Checked) and (equal_grp)) then + TUKEY_KRAMER(MSErr,DFErr,value,cellsums,cellcnts,minf2,maxf2); +// if (BonferroniChk.Checked) then +// Bonferroni(cellsums,cellcnts,cellvars,minf2,maxf2); +// if (OrthogonalChk.Checked) then +// CONTRASTS(MSErr,DFErr,cellsums,cellcnts,minf2,maxf2,0.05); + if ((NewmanKeulsChk.Checked) and (equal_grp)) then + Newman_Keuls(MSErr,DFErr,value,cellsums,cellcnts,minf2,maxf2); + end; + end; + + // simple effects for rows within each slice + if (ProbF1F3 < Alpha) then + begin + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('COMPARISONS AMONG ROWS WITHIN EACH SLICE'); + for k := 0 to Nf3cells - 1 do + begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('SLICE %d COMPARISONS',[k+1]); + OutPutFrm.RichEdit.Lines.Add(outline); + // move cell sums && counts to cellsums && cellcnts + for i := 0 to Nf1cells - 1 do + begin + for j := 0 to Nf2cells - 1 do + begin + cellsums[j] := wsum[i,j,k]; + cellcnts[j] := ncnt[i,j,k]; + cellvars[j] := wx2[i,j,k]; + end; + end; + value := 1e20; + for i := 0 to Nf1cells - 1 do if (cellcnts[i] < value) then value := cellcnts[i]; + if (ScheffeChk.Checked) then + SCHEFFETEST(MSErr,cellsums,cellcnts,minf1,maxf1,N); + if ((TukeyHSDChk.Checked) and (equal_grp)) then + TUKEY(MSErr,DFErr,value,cellsums,cellcnts,minf1,maxf1); + if ((TukeyBChk.Checked) and (equal_grp)) then + TUKEYBTEST(MSErr,DFErr,cellsums,cellcnts,minf1,maxf1,value); + if ((TukeyKramerChk.Checked) and (equal_grp)) then + TUKEY_KRAMER(MSErr,DFErr,value,cellsums,cellcnts,minf1,maxf1); +// if (BonferroniChk.Checked) then +// Bonferroni(cellsums,cellcnts,cellvars,minf1,maxf1); +// if (OrthogonalChk.Checked) then +// CONTRASTS(MSErr,DFErr,cellsums,cellcnts,minf1,maxf1,0.05); + if ((NewmanKeulsChk.Checked) and (equal_grp)) then + Newman_Keuls(MSErr,DFErr,value,cellsums,cellcnts,minf1,maxf1); + end; + end; + + variances := nil; +end; + +initialization + {$I onecaseanovaunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/onesampunit.lfm b/applications/lazstats/source_orig/onesampunit.lfm new file mode 100644 index 000000000..3939ab7dd --- /dev/null +++ b/applications/lazstats/source_orig/onesampunit.lfm @@ -0,0 +1,163 @@ +object OneSampFrm: TOneSampFrm + Left = 163 + Height = 256 + Top = 117 + Width = 487 + Caption = 'One Sample Tests' + ClientHeight = 256 + ClientWidth = 487 + OnShow = FormShow + LCLVersion = '0.9.30' + object RadioGroup1: TRadioGroup + Left = 8 + Height = 184 + Top = 8 + Width = 196 + AutoFill = True + Caption = 'Statistic of Interest' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 166 + ClientWidth = 192 + ItemIndex = 0 + Items.Strings = ( + 'Sample Mean' + 'Sample Proportion' + 'Sample Correlation' + 'Sample Variance' + ) + OnClick = RadioGroup1Click + TabOrder = 0 + end + object Panel1: TPanel + Left = 218 + Height = 177 + Top = 15 + Width = 254 + ClientHeight = 177 + ClientWidth = 254 + TabOrder = 1 + object Label1: TLabel + Left = 16 + Height = 16 + Top = 17 + Width = 100 + Caption = 'Sample Proportion' + ParentColor = False + end + object Label2: TLabel + Left = 16 + Height = 16 + Top = 49 + Width = 119 + Caption = 'Population Parameter:' + ParentColor = False + end + object Label3: TLabel + Left = 16 + Height = 16 + Top = 81 + Width = 66 + Caption = 'Sample Size:' + ParentColor = False + end + object Label4: TLabel + Left = 18 + Height = 16 + Top = 113 + Width = 113 + Caption = 'Confidence Level (%)' + ParentColor = False + end + object Label5: TLabel + Left = 16 + Height = 16 + Top = 145 + Width = 146 + Caption = 'Sample Standard Deviation:' + ParentColor = False + end + object Statistic: TEdit + Left = 150 + Height = 23 + Top = 9 + Width = 83 + TabOrder = 0 + Text = 'Statistic' + end + object StdDev: TEdit + Left = 150 + Height = 23 + Top = 137 + Width = 83 + TabOrder = 1 + Text = 'Edit1' + end + end + object Parameter: TEdit + Left = 368 + Height = 23 + Top = 56 + Width = 83 + TabOrder = 2 + Text = 'Edit1' + end + object Size: TEdit + Left = 368 + Height = 23 + Top = 88 + Width = 83 + TabOrder = 3 + Text = 'Edit1' + end + object CInterval: TEdit + Left = 368 + Height = 23 + Top = 120 + Width = 83 + TabOrder = 4 + Text = 'Edit1' + end + object ResetBtn: TButton + Left = 8 + Height = 31 + Top = 208 + Width = 89 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 5 + end + object CancelBtn: TButton + Left = 115 + Height = 31 + Top = 209 + Width = 89 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 6 + end + object OKBtn: TButton + Left = 376 + Height = 31 + Top = 209 + Width = 89 + Caption = 'Return' + ModalResult = 1 + TabOrder = 7 + end + object ComputeBtn: TButton + Left = 264 + Height = 31 + Top = 209 + Width = 89 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 8 + end +end diff --git a/applications/lazstats/source_orig/onesampunit.lrs b/applications/lazstats/source_orig/onesampunit.lrs new file mode 100644 index 000000000..8b2dc080c --- /dev/null +++ b/applications/lazstats/source_orig/onesampunit.lrs @@ -0,0 +1,44 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TOneSampFrm','FORMDATA',[ + 'TPF0'#11'TOneSampFrm'#10'OneSampFrm'#4'Left'#3#163#0#6'Height'#3#0#1#3'Top'#2 + +'u'#5'Width'#3#231#1#7'Caption'#6#16'One Sample Tests'#12'ClientHeight'#3#0#1 + +#11'ClientWidth'#3#231#1#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#6'0.9.30'#0 + +#11'TRadioGroup'#11'RadioGroup1'#4'Left'#2#8#6'Height'#3#184#0#3'Top'#2#8#5 + +'Width'#3#196#0#8'AutoFill'#9#7'Caption'#6#21'Statistic of Interest'#28'Chil' + +'dSizing.LeftRightSpacing'#2#6#28'ChildSizing.TopBottomSpacing'#2#6#29'Child' + +'Sizing.EnlargeHorizontal'#7#24'crsHomogenousChildResize'#27'ChildSizing.Enl' + +'argeVertical'#7#24'crsHomogenousChildResize'#28'ChildSizing.ShrinkHorizonta' + +'l'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVertical'#7#14'crsScaleChilds' + +#18'ChildSizing.Layout'#7#29'cclLeftToRightThenTopToBottom'#27'ChildSizing.C' + +'ontrolsPerLine'#2#1#12'ClientHeight'#3#166#0#11'ClientWidth'#3#192#0#9'Item' + +'Index'#2#0#13'Items.Strings'#1#6#11'Sample Mean'#6#17'Sample Proportion'#6 + +#18'Sample Correlation'#6#15'Sample Variance'#0#7'OnClick'#7#16'RadioGroup1C' + +'lick'#8'TabOrder'#2#0#0#0#6'TPanel'#6'Panel1'#4'Left'#3#218#0#6'Height'#3 + +#177#0#3'Top'#2#15#5'Width'#3#254#0#12'ClientHeight'#3#177#0#11'ClientWidth' + +#3#254#0#8'TabOrder'#2#1#0#6'TLabel'#6'Label1'#4'Left'#2#16#6'Height'#2#16#3 + +'Top'#2#17#5'Width'#2'd'#7'Caption'#6#17'Sample Proportion'#11'ParentColor'#8 + +#0#0#6'TLabel'#6'Label2'#4'Left'#2#16#6'Height'#2#16#3'Top'#2'1'#5'Width'#2 + +'w'#7'Caption'#6#21'Population Parameter:'#11'ParentColor'#8#0#0#6'TLabel'#6 + +'Label3'#4'Left'#2#16#6'Height'#2#16#3'Top'#2'Q'#5'Width'#2'B'#7'Caption'#6 + +#12'Sample Size:'#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#2#18#6'H' + +'eight'#2#16#3'Top'#2'q'#5'Width'#2'q'#7'Caption'#6#20'Confidence Level (%)' + +#11'ParentColor'#8#0#0#6'TLabel'#6'Label5'#4'Left'#2#16#6'Height'#2#16#3'Top' + +#3#145#0#5'Width'#3#146#0#7'Caption'#6#26'Sample Standard Deviation:'#11'Par' + +'entColor'#8#0#0#5'TEdit'#9'Statistic'#4'Left'#3#150#0#6'Height'#2#23#3'Top' + +#2#9#5'Width'#2'S'#8'TabOrder'#2#0#4'Text'#6#9'Statistic'#0#0#5'TEdit'#6'Std' + +'Dev'#4'Left'#3#150#0#6'Height'#2#23#3'Top'#3#137#0#5'Width'#2'S'#8'TabOrder' + +#2#1#4'Text'#6#5'Edit1'#0#0#0#5'TEdit'#9'Parameter'#4'Left'#3'p'#1#6'Height' + +#2#23#3'Top'#2'8'#5'Width'#2'S'#8'TabOrder'#2#2#4'Text'#6#5'Edit1'#0#0#5'TEd' + +'it'#4'Size'#4'Left'#3'p'#1#6'Height'#2#23#3'Top'#2'X'#5'Width'#2'S'#8'TabOr' + +'der'#2#3#4'Text'#6#5'Edit1'#0#0#5'TEdit'#9'CInterval'#4'Left'#3'p'#1#6'Heig' + +'ht'#2#23#3'Top'#2'x'#5'Width'#2'S'#8'TabOrder'#2#4#4'Text'#6#5'Edit1'#0#0#7 + +'TButton'#8'ResetBtn'#4'Left'#2#8#6'Height'#2#31#3'Top'#3#208#0#5'Width'#2'Y' + +#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#5#0#0#7 + +'TButton'#9'CancelBtn'#4'Left'#2's'#6'Height'#2#31#3'Top'#3#209#0#5'Width'#2 + +'Y'#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#6#0#0#7'TButton' + +#5'OKBtn'#4'Left'#3'x'#1#6'Height'#2#31#3'Top'#3#209#0#5'Width'#2'Y'#7'Capti' + +'on'#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#7#0#0#7'TButton'#10'Compu' + +'teBtn'#4'Left'#3#8#1#6'Height'#2#31#3'Top'#3#209#0#5'Width'#2'Y'#7'Caption' + +#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#8#0#0#0 +]); diff --git a/applications/lazstats/source_orig/onesampunit.pas b/applications/lazstats/source_orig/onesampunit.pas new file mode 100644 index 000000000..b06edc649 --- /dev/null +++ b/applications/lazstats/source_orig/onesampunit.pas @@ -0,0 +1,226 @@ +unit OneSampUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + ExtCtrls, StdCtrls; + +type + + { TOneSampFrm } + + TOneSampFrm = class(TForm) + ComputeBtn: TButton; + ResetBtn: TButton; + CancelBtn: TButton; + OKBtn: TButton; + Statistic: TEdit; + Parameter: TEdit; + Size: TEdit; + CInterval: TEdit; + StdDev: TEdit; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + Label5: TLabel; + Panel1: TPanel; + RadioGroup1: TRadioGroup; + procedure ComputeBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure RadioGroup1Click(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + OneSampFrm: TOneSampFrm; + +implementation +uses OutPutUnit, FunctionsLib; + +{ TOneSampFrm } + +procedure TOneSampFrm.ResetBtnClick(Sender: TObject); +begin + Statistic.Text := ''; + Parameter.Text := ''; + Size.Text := ''; + CInterval.Text := '95.0'; + StdDev.Text := ''; + RadioGroup1.ItemIndex := 0; +end; + +procedure TOneSampFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TOneSampFrm.RadioGroup1Click(Sender: TObject); +begin + if RadioGroup1.ItemIndex <> 0 then + begin + Label5.Visible := false; + StdDev.Visible := false; + end + else + begin + Label5.Visible := true; + StdDev.Visible := true; + end; +end; + +procedure TOneSampFrm.ComputeBtnClick(Sender: TObject); +var + i, N : integer; + sampmean, sampprop, sampcor, sampvar, Confidence, alpha, df : double; + sampsize, popmean, popprop, popcor, popvar, stderr : double; + z, zprobability, zreject, zconf, UCL, LCL, sampsd : double; + t, tprobability, testt : double; + poptrans, samptrans, chisqrval, chiprob, lowchi, hichi, testchi : double; + outline : string; + +begin + // Initialize output form + OutPutFrm.RichEdit.Clear; +// OutPutFrm.RichEdit.ParaGraph.Alignment := taLeftJustify; + N := round(StrToFloat(Size.Text)); + Confidence := StrToFloat(CInterval.Text) / 100.0; + Case RadioGroup1.ItemIndex of + 0 : begin + sampmean := StrToFloat(Statistic.Text); + popmean := StrToFloat(Parameter.Text); + sampsd := StrToFloat(StdDev.Text); + df := N; + stderr := sampsd / sqrt(df); + df := N-1; + t := (sampmean - popmean) / stderr; + tprobability := probt(t,df); + alpha := (1.0 - confidence) / 2.0; + testt := inverset((1.0 - alpha),df); + UCL := sampmean + testt * stderr; + LCL := sampmean - testt * stderr; + OutPutFrm.RichEdit.Lines.Add('ANALYSIS OF A SAMPLE MEAN'); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Sample Mean = %6.3f',[sampmean]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Population Mean = %6.3f',[popmean]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Sample Size = %d',[N]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Standard error of Mean = %6.3f',[stderr]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('t test statistic = %6.3f with probability %6.3f',[t,tprobability]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('t value required for rejection = %6.3f',[testt]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Confidence Interval = (%6.3f,%6.3f)',[LCL,UCL]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + 1 : begin + sampprop := StrToFloat(Statistic.Text); + popprop := StrToFloat(Parameter.Text); + stderr := sqrt((sampprop * (1.0 - sampprop)) / N); + z := (sampprop - popprop) / StdErr; + zprobability := 1.0 - probz(z); + zreject := inversez(confidence); + zconf := abs(inversez((1.0 - confidence) / 2.0)); + UCL := sampprop + (zconf * stderr); + LCL := sampprop - (zconf * stderr); + OutPutFrm.RichEdit.Lines.Add('ANALYSIS OF A SAMPLE PROPORTION'); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Sample Proportion = %6.3f',[sampprop]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Population Proportion = %6.3f',[popprop]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Sample Size = %d',[N]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Standard error of proportion = %6.3f',[stderr]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('z test statistic = %6.3f with probability > P = %6.3f',[z,zprobability]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('z value required for rejection = %6.3f',[zreject]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Confidence Interval = (%6.3f,%6.3f)',[LCL,UCL]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + 2 : begin + sampcor := StrToFloat(Statistic.Text); + popcor := StrToFloat(Parameter.Text); + zconf := abs(inversez((1.0 - confidence) / 2.0)); + samptrans := ln((1.0 + sampcor) / (1.0 - sampcor)) / 2.0; + poptrans := ln((1.0 + popcor) / (1.0 - popcor)) / 2.0; + stderr := sqrt(1.0 / (N - 3.0)); + z := (samptrans - poptrans) / stderr; + zprobability := probz(z); + alpha := (1.0 - confidence) / 2.0; + zreject := inversez(1.0 - alpha); + UCL := samptrans + (zconf * stderr); + LCL := samptrans - (zconf * stderr); + UCL := (exp(2.0 * UCL) - 1.0) / (exp(2.0 * UCL) + 1.0); + LCL := (exp(2.0 * LCL) - 1.0) / (exp(2.0 * LCL) + 1.0); + OutPutFrm.RichEdit.Lines.Add('ANALYSIS OF A SAMPLE CORRELATION'); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Sample Correlation = %6.3f',[sampcor]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Population Correlation = %6.3f',[popcor]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Sample Size = %d',[N]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('z Transform of sample correlation = %6.3f',[samptrans]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('z Transform of population correlation = %6.3f',[poptrans]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Standard error of transform = %6.3f',[stderr]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('z test statistic = %6.3f with probability %6.3f',[z,zprobability]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('z value required for rejection = %6.3f',[zreject]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Confidence Interval for sample correlation = (%6.3f,%6.3f)',[LCL,UCL]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + 3 : begin + sampvar := StrToFloat(Statistic.Text); + popvar := StrToFloat(Parameter.Text); + alpha := 1.0 - confidence; + chisqrval := ((N - 1.0) * sampvar) / Popvar; + chiprob := 1.0 - chisquaredprob(chisqrval,N-1); + lowchi := inversechi((1.0 - alpha / 2.0),N-1); + hichi := inversechi((alpha / 2.0),N-1); + LCL := ((N - 1.0) * sampvar) / lowchi; + UCL := ((N - 1.0) * sampvar) / hichi; + if sampvar > popvar then testchi := lowchi + else testchi := hichi; + OutPutFrm.RichEdit.Lines.Add('ANALYSIS OF A SAMPLE VARIANCE'); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Sample Variance = %6.3f',[sampvar]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Population Variance = %6.3f',[popvar]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Sample Size = %d',[N]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Chi-square statistic = %6.3f with probability > chisquare = %6.3f and D.F. = %d',[chisqrval,chiprob, N-1]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Chi-square value required for rejection = %6.3f',[testchi]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Chi-square Confidence Interval = (%6.3f,%6.3f)',[lowchi,hichi]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Variance Confidence Interval = (%6.3f,%6.3f)',[LCL,UCL]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + end; + OutPutFrm.ShowModal; +end; + +initialization + {$I onesampunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/optionsunit.lfm b/applications/lazstats/source_orig/optionsunit.lfm new file mode 100644 index 000000000..052027306 --- /dev/null +++ b/applications/lazstats/source_orig/optionsunit.lfm @@ -0,0 +1,147 @@ +object OptionsFrm: TOptionsFrm + Left = 189 + Height = 383 + Top = 95 + Width = 441 + Caption = 'Options' + ClientHeight = 383 + ClientWidth = 441 + OnShow = FormShow + LCLVersion = '0.9.28.2' + object Label1: TLabel + Left = 9 + Height = 14 + Top = 280 + Width = 98 + Caption = 'Default File Location' + ParentColor = False + end + object FractionTypeGrp: TRadioGroup + Left = 9 + Height = 61 + Top = 16 + Width = 414 + AutoFill = True + Caption = 'Decimal Fraction Usage' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 43 + ClientWidth = 410 + ItemIndex = 0 + Items.Strings = ( + 'English (default) period separator' + 'European (comma) separator' + ) + OnClick = FractionTypeGrpClick + TabOrder = 0 + end + object MissValsGrp: TRadioGroup + Left = 9 + Height = 98 + Top = 88 + Width = 409 + AutoFill = True + Caption = 'Default Missing Values' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 80 + ClientWidth = 405 + ItemIndex = 3 + Items.Strings = ( + 'Blank ' + 'Period ' + 'Zero (0) ' + '99999' + ) + OnClick = MissValsGrpClick + TabOrder = 1 + end + object JustificationGrp: TRadioGroup + Left = 9 + Height = 68 + Top = 200 + Width = 407 + AutoFill = True + Caption = 'Justification' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 50 + ClientWidth = 403 + ItemIndex = 2 + Items.Strings = ( + 'Left' + 'Center' + 'Right' + ) + OnClick = JustificationGrpClick + TabOrder = 2 + end + object FilePathEdit: TEdit + Left = 10 + Height = 21 + Top = 296 + Width = 404 + TabOrder = 3 + end + object CancelBtn: TButton + Left = 216 + Height = 28 + Top = 336 + Width = 82 + Cancel = True + Caption = 'Cancel' + OnClick = CancelBtnClick + TabOrder = 4 + end + object SaveBtn: TButton + Left = 328 + Height = 28 + Top = 336 + Width = 78 + Caption = 'Save' + ModalResult = 1 + OnClick = SaveBtnClick + TabOrder = 5 + end + object BrowseBtn: TButton + Left = 112 + Height = 28 + Top = 336 + Width = 76 + Caption = 'Browse...' + OnClick = BrowseBtnClick + TabOrder = 6 + end + object HelpBtn: TButton + Tag = 135 + Left = 10 + Height = 28 + Top = 336 + Width = 81 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 7 + end + object SelDir: TSelectDirectoryDialog + left = 408 + top = 264 + end +end diff --git a/applications/lazstats/source_orig/optionsunit.lrs b/applications/lazstats/source_orig/optionsunit.lrs new file mode 100644 index 000000000..049e0300e --- /dev/null +++ b/applications/lazstats/source_orig/optionsunit.lrs @@ -0,0 +1,50 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TOptionsFrm','FORMDATA',[ + 'TPF0'#11'TOptionsFrm'#10'OptionsFrm'#4'Left'#3#189#0#6'Height'#3#127#1#3'Top' + +#2'_'#5'Width'#3#185#1#7'Caption'#6#7'Options'#12'ClientHeight'#3#127#1#11'C' + +'lientWidth'#3#185#1#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#8'0.9.28.2'#0#6 + +'TLabel'#6'Label1'#4'Left'#2#9#6'Height'#2#14#3'Top'#3#24#1#5'Width'#2'b'#7 + +'Caption'#6#21'Default File Location'#11'ParentColor'#8#0#0#11'TRadioGroup' + +#15'FractionTypeGrp'#4'Left'#2#9#6'Height'#2'='#3'Top'#2#16#5'Width'#3#158#1 + +#8'AutoFill'#9#7'Caption'#6#22'Decimal Fraction Usage'#28'ChildSizing.LeftRi' + +'ghtSpacing'#2#6#28'ChildSizing.TopBottomSpacing'#2#6#29'ChildSizing.Enlarge' + +'Horizontal'#7#24'crsHomogenousChildResize'#27'ChildSizing.EnlargeVertical'#7 + +#24'crsHomogenousChildResize'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScale' + +'Childs'#26'ChildSizing.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSizing.' + +'Layout'#7#29'cclLeftToRightThenTopToBottom'#27'ChildSizing.ControlsPerLine' + +#2#1#12'ClientHeight'#2'+'#11'ClientWidth'#3#154#1#9'ItemIndex'#2#0#13'Items' + +'.Strings'#1#6'"English (default) period separator'#6#26'European (comma) se' + +'parator'#0#7'OnClick'#7#20'FractionTypeGrpClick'#8'TabOrder'#2#0#0#0#11'TRa' + +'dioGroup'#11'MissValsGrp'#4'Left'#2#9#6'Height'#2'b'#3'Top'#2'X'#5'Width'#3 + +#153#1#8'AutoFill'#9#7'Caption'#6#22'Default Missing Values'#28'ChildSizing.' + +'LeftRightSpacing'#2#6#28'ChildSizing.TopBottomSpacing'#2#6#29'ChildSizing.E' + +'nlargeHorizontal'#7#24'crsHomogenousChildResize'#27'ChildSizing.EnlargeVert' + +'ical'#7#24'crsHomogenousChildResize'#28'ChildSizing.ShrinkHorizontal'#7#14 + +'crsScaleChilds'#26'ChildSizing.ShrinkVertical'#7#14'crsScaleChilds'#18'Chil' + +'dSizing.Layout'#7#29'cclLeftToRightThenTopToBottom'#27'ChildSizing.Controls' + +'PerLine'#2#1#12'ClientHeight'#2'P'#11'ClientWidth'#3#149#1#9'ItemIndex'#2#3 + +#13'Items.Strings'#1#6#6'Blank '#6#7'Period '#6#9'Zero (0) '#6#5'99999'#0#7 + +'OnClick'#7#16'MissValsGrpClick'#8'TabOrder'#2#1#0#0#11'TRadioGroup'#16'Just' + +'ificationGrp'#4'Left'#2#9#6'Height'#2'D'#3'Top'#3#200#0#5'Width'#3#151#1#8 + +'AutoFill'#9#7'Caption'#6#13'Justification'#28'ChildSizing.LeftRightSpacing' + +#2#6#28'ChildSizing.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7 + +#24'crsHomogenousChildResize'#27'ChildSizing.EnlargeVertical'#7#24'crsHomoge' + +'nousChildResize'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'C' + +'hildSizing.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29 + +'cclLeftToRightThenTopToBottom'#27'ChildSizing.ControlsPerLine'#2#1#12'Clien' + +'tHeight'#2'2'#11'ClientWidth'#3#147#1#9'ItemIndex'#2#2#13'Items.Strings'#1#6 + +#4'Left'#6#6'Center'#6#5'Right'#0#7'OnClick'#7#21'JustificationGrpClick'#8'T' + +'abOrder'#2#2#0#0#5'TEdit'#12'FilePathEdit'#4'Left'#2#10#6'Height'#2#21#3'To' + +'p'#3'('#1#5'Width'#3#148#1#8'TabOrder'#2#3#0#0#7'TButton'#9'CancelBtn'#4'Le' + +'ft'#3#216#0#6'Height'#2#28#3'Top'#3'P'#1#5'Width'#2'R'#6'Cancel'#9#7'Captio' + +'n'#6#6'Cancel'#7'OnClick'#7#14'CancelBtnClick'#8'TabOrder'#2#4#0#0#7'TButto' + +'n'#7'SaveBtn'#4'Left'#3'H'#1#6'Height'#2#28#3'Top'#3'P'#1#5'Width'#2'N'#7'C' + +'aption'#6#4'Save'#11'ModalResult'#2#1#7'OnClick'#7#12'SaveBtnClick'#8'TabOr' + +'der'#2#5#0#0#7'TButton'#9'BrowseBtn'#4'Left'#2'p'#6'Height'#2#28#3'Top'#3'P' + +#1#5'Width'#2'L'#7'Caption'#6#9'Browse...'#7'OnClick'#7#14'BrowseBtnClick'#8 + +'TabOrder'#2#6#0#0#7'TButton'#7'HelpBtn'#3'Tag'#3#135#0#4'Left'#2#10#6'Heigh' + +'t'#2#28#3'Top'#3'P'#1#5'Width'#2'Q'#7'Caption'#6#4'Help'#7'OnClick'#7#12'He' + +'lpBtnClick'#8'TabOrder'#2#7#0#0#22'TSelectDirectoryDialog'#6'SelDir'#4'left' + +#3#152#1#3'top'#3#8#1#0#0#0 +]); diff --git a/applications/lazstats/source_orig/optionsunit.pas b/applications/lazstats/source_orig/optionsunit.pas new file mode 100644 index 000000000..a0c5a5624 --- /dev/null +++ b/applications/lazstats/source_orig/optionsunit.pas @@ -0,0 +1,194 @@ +unit OptionsUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, ExtCtrls, Globals, Clipbrd, EditBtn, contexthelpunit; + +type + + { TOptionsFrm } + + TOptionsFrm = class(TForm) + BrowseBtn: TButton; + CancelBtn: TButton; + HelpBtn: TButton; + SaveBtn: TButton; + FilePathEdit: TEdit; + Label1: TLabel; + FractionTypeGrp: TRadioGroup; + MissValsGrp: TRadioGroup; + JustificationGrp: TRadioGroup; + SelDir: TSelectDirectoryDialog; + procedure BrowseBtnClick(Sender: TObject); + procedure CancelBtnClick(Sender: TObject); + procedure FractionTypeGrpClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + procedure JustificationGrpClick(Sender: TObject); + procedure MissValsGrpClick(Sender: TObject); + procedure SaveBtnClick(Sender: TObject); + procedure InitOptions(Sender: TObject); + + private + { private declarations } + public + { public declarations } + DefaultPath : string; + FractionType : integer; + DefaultMiss : integer; + DefaultJust : integer; + end; + +var + OptionsFrm: TOptionsFrm; + +implementation + +{ TOptionsFrm } + +procedure TOptionsFrm.FormShow(Sender: TObject); +begin + InitOptions(Self); +end; + +procedure TOptionsFrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +procedure TOptionsFrm.JustificationGrpClick(Sender: TObject); +begin + DefaultJust := JustificationGrp.ItemIndex; +end; + +procedure TOptionsFrm.MissValsGrpClick(Sender: TObject); +begin + DefaultMiss := MissValsGrp.ItemIndex; +end; + +procedure TOptionsFrm.SaveBtnClick(Sender: TObject); +var + pathname : string; + filename : string; + priorfile : string; + F : TextFile; + i : integer; + approved : integer; +begin + if LoggedOn then approved := 1 else approved := 0; + if FilePathEdit.Text <> '' then pathname := FilePathEdit.Text + else pathname := OpenStatPath; + FractionType := FractionTypeGrp.ItemIndex; + DefaultMiss := MissValsGrp.ItemIndex; + DefaultJust := JustificationGrp.ItemIndex; + filename := 'Options.txt'; + AssignFile(F,filename); + ReWrite(F); + Writeln(F,approved); + Writeln(F,FractionType); + Writeln(F,DefaultMiss); + Writeln(F,DefaultJust); + Writeln(F,pathname); +{ for i := 0 to 7 do + begin + priorfile := OS3MainFrm.MainMenu1.Items[0].Items[11].Items[i].Caption; + Writeln(F,priorfile); + end; } + CloseFile(F); +end; + +procedure TOptionsFrm.CancelBtnClick(Sender: TObject); +begin + OptionsFrm.Hide; +end; + +procedure TOptionsFrm.BrowseBtnClick(Sender: TObject); +begin + if SelDir.Execute then + begin + FilePathEdit.Text := SelDir.FileName; + end; +end; + +procedure TOptionsFrm.FractionTypeGrpClick(Sender: TObject); +begin + if FractionTypeGrp.ItemIndex = 0 then + begin + FractionType := 0; + DecimalSeparator := '.' + end + else begin + FractionType := 1; + DecimalSeparator := ','; + end; +end; + +procedure TOptionsFrm.InitOptions(Sender: TObject); +label full; +var + pathname : string; + filename : string; + priorfile : string; + F : TextFile; + i : integer; + approved : integer; + +begin + ChDir(OpenStatPath); + filename := 'Options.txt'; + if fileexists(filename) then + begin + AssignFile(F,filename); + Reset(F); + Readln(F,approved); + if approved = 0 then LoggedOn := false else LoggedOn := true; + Readln(F,FractionType); + FractionTypeGrp.ItemIndex := FractionType; + Readln(F,DefaultMiss); + MissValsGrp.ItemIndex := DefaultMiss; + Readln(F,DefaultJust); + JustificationGrp.ItemIndex := DefaultJust; + Readln(F,pathname); + FilePathEdit.Text := pathname; + i := 0; +{ while NOT Eof(F) do + begin + Readln(F,priorfile); + OS3MainFrm.MainMenu1.Items[0].Items[11].Items[i].Action := OS3MainFrm.ActionList1.Actions[i]; + OS3MainFrm.MainMenu1.Items[0].Items[11].Items[i].Caption := priorfile; + i := i + 1; + if i > 7 then goto full; + end; } +full: CloseFile(F); + end; + + if FilePathEdit.Text = '' then + begin + pathname := GetCurrentDir; + ChDir(pathname); + FilePathEdit.Text := pathname; + end; +{ else begin + pathname := FilePathEdit.Text; + ChDir(pathname); + end; } + if FractionTypeGrp.ItemIndex = 0 then + begin + FractionType := 0; + DecimalSeparator := '.' + end + else begin + FractionType := 1; + DecimalSeparator := ','; + end; +end; + +initialization + {$I optionsunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/outputunit.lfm b/applications/lazstats/source_orig/outputunit.lfm new file mode 100644 index 000000000..e9062b739 --- /dev/null +++ b/applications/lazstats/source_orig/outputunit.lfm @@ -0,0 +1,125 @@ +object OutputFrm: TOutputFrm + Left = 61 + Height = 535 + Top = 91 + Width = 825 + Caption = 'Output' + ClientHeight = 535 + ClientWidth = 825 + Font.CharSet = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -13 + Font.Name = 'Courier New' + Font.Pitch = fpFixed + Font.Quality = fqDraft + LCLVersion = '0.9.30.4' + object Panel1: TPanel + Left = 0 + Height = 49 + Top = 0 + Width = 825 + Align = alTop + ClientHeight = 49 + ClientWidth = 825 + TabOrder = 0 + object SaveFileBtn: TButton + Left = 7 + Height = 28 + Top = 8 + Width = 65 + Caption = 'Save' + OnClick = SaveFileBtnClick + TabOrder = 0 + end + object OpenFileBtn: TButton + Left = 80 + Height = 26 + Top = 9 + Width = 84 + Caption = 'Open File' + OnClick = OpenFileBtnClick + TabOrder = 1 + end + object FontBtn: TButton + Left = 176 + Height = 27 + Top = 8 + Width = 72 + Caption = 'Font' + OnClick = FontBtnClick + TabOrder = 2 + end + object CutBtn: TButton + Left = 336 + Height = 25 + Top = 9 + Width = 73 + Caption = 'Cut' + OnClick = CutBtnClick + TabOrder = 3 + end + object CopyBtn: TButton + Left = 415 + Height = 26 + Top = 8 + Width = 73 + Caption = 'Copy' + OnClick = CopyBtnClick + TabOrder = 4 + end + object PasteBtn: TButton + Left = 495 + Height = 25 + Top = 9 + Width = 70 + Caption = 'Paste' + OnClick = PasteBtnClick + TabOrder = 5 + end + object PrintBtn: TButton + Left = 584 + Height = 24 + Top = 10 + Width = 65 + Caption = 'Print' + OnClick = PrintBtnClick + TabOrder = 6 + end + object ReturnBtn: TButton + Left = 663 + Height = 27 + Top = 9 + Width = 68 + Caption = 'Return' + ModalResult = 1 + TabOrder = 7 + end + end + object RichEdit: TMemo + Left = 0 + Height = 486 + Top = 49 + Width = 825 + Align = alClient + ScrollBars = ssBoth + TabOrder = 1 + end + object OpenDialog1: TOpenDialog + left = 35 + top = 218 + end + object SaveDialog1: TSaveDialog + left = 100 + top = 217 + end + object FontDialog1: TFontDialog + MinFontSize = 0 + MaxFontSize = 0 + left = 208 + top = 214 + end + object PrintDialog1: TPrintDialog + left = 296 + top = 218 + end +end diff --git a/applications/lazstats/source_orig/outputunit.lrs b/applications/lazstats/source_orig/outputunit.lrs new file mode 100644 index 000000000..502bfb04a --- /dev/null +++ b/applications/lazstats/source_orig/outputunit.lrs @@ -0,0 +1,31 @@ +LazarusResources.Add('TOutputFrm','FORMDATA',[ + 'TPF0'#10'TOutputFrm'#9'OutputFrm'#4'Left'#2'='#6'Height'#3#23#2#3'Top'#2'['#5 + +'Width'#3'9'#3#7'Caption'#6#6'Output'#12'ClientHeight'#3#23#2#11'ClientWidth' + +#3'9'#3#12'Font.CharSet'#7#12'ANSI_CHARSET'#10'Font.Color'#7#7'clBlack'#11'F' + +'ont.Height'#2#243#9'Font.Name'#6#11'Courier New'#10'Font.Pitch'#7#7'fpFixed' + +#12'Font.Quality'#7#7'fqDraft'#10'LCLVersion'#6#8'0.9.30.4'#0#6'TPanel'#6'Pa' + +'nel1'#4'Left'#2#0#6'Height'#2'1'#3'Top'#2#0#5'Width'#3'9'#3#5'Align'#7#5'al' + +'Top'#12'ClientHeight'#2'1'#11'ClientWidth'#3'9'#3#8'TabOrder'#2#0#0#7'TButt' + +'on'#11'SaveFileBtn'#4'Left'#2#7#6'Height'#2#28#3'Top'#2#8#5'Width'#2'A'#7'C' + +'aption'#6#4'Save'#7'OnClick'#7#16'SaveFileBtnClick'#8'TabOrder'#2#0#0#0#7'T' + +'Button'#11'OpenFileBtn'#4'Left'#2'P'#6'Height'#2#26#3'Top'#2#9#5'Width'#2'T' + +#7'Caption'#6#9'Open File'#7'OnClick'#7#16'OpenFileBtnClick'#8'TabOrder'#2#1 + +#0#0#7'TButton'#7'FontBtn'#4'Left'#3#176#0#6'Height'#2#27#3'Top'#2#8#5'Width' + +#2'H'#7'Caption'#6#4'Font'#7'OnClick'#7#12'FontBtnClick'#8'TabOrder'#2#2#0#0 + +#7'TButton'#6'CutBtn'#4'Left'#3'P'#1#6'Height'#2#25#3'Top'#2#9#5'Width'#2'I' + +#7'Caption'#6#3'Cut'#7'OnClick'#7#11'CutBtnClick'#8'TabOrder'#2#3#0#0#7'TBut' + +'ton'#7'CopyBtn'#4'Left'#3#159#1#6'Height'#2#26#3'Top'#2#8#5'Width'#2'I'#7'C' + +'aption'#6#4'Copy'#7'OnClick'#7#12'CopyBtnClick'#8'TabOrder'#2#4#0#0#7'TButt' + +'on'#8'PasteBtn'#4'Left'#3#239#1#6'Height'#2#25#3'Top'#2#9#5'Width'#2'F'#7'C' + +'aption'#6#5'Paste'#7'OnClick'#7#13'PasteBtnClick'#8'TabOrder'#2#5#0#0#7'TBu' + +'tton'#8'PrintBtn'#4'Left'#3'H'#2#6'Height'#2#24#3'Top'#2#10#5'Width'#2'A'#7 + +'Caption'#6#5'Print'#7'OnClick'#7#13'PrintBtnClick'#8'TabOrder'#2#6#0#0#7'TB' + +'utton'#9'ReturnBtn'#4'Left'#3#151#2#6'Height'#2#27#3'Top'#2#9#5'Width'#2'D' + +#7'Caption'#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#7#0#0#0#5'TMemo'#8 + +'RichEdit'#4'Left'#2#0#6'Height'#3#230#1#3'Top'#2'1'#5'Width'#3'9'#3#5'Align' + +#7#8'alClient'#10'ScrollBars'#7#6'ssBoth'#8'TabOrder'#2#1#0#0#11'TOpenDialog' + +#11'OpenDialog1'#4'left'#2'#'#3'top'#3#218#0#0#0#11'TSaveDialog'#11'SaveDial' + +'og1'#4'left'#2'd'#3'top'#3#217#0#0#0#11'TFontDialog'#11'FontDialog1'#11'Min' + +'FontSize'#2#0#11'MaxFontSize'#2#0#4'left'#3#208#0#3'top'#3#214#0#0#0#12'TPr' + +'intDialog'#12'PrintDialog1'#4'left'#3'('#1#3'top'#3#218#0#0#0#0 +]); diff --git a/applications/lazstats/source_orig/outputunit.pas b/applications/lazstats/source_orig/outputunit.pas new file mode 100644 index 000000000..b2f3f9ff4 --- /dev/null +++ b/applications/lazstats/source_orig/outputunit.pas @@ -0,0 +1,132 @@ +unit OutPutUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + ExtCtrls, Buttons, StdCtrls, Printers, clipbrd, PrintersDlgs; + +type + + { TOutputFrm } + + TOutputFrm = class(TForm) + PrintDialog1: TPrintDialog; + RichEdit: TMemo; + ReturnBtn: TButton; + PrintBtn: TButton; + PasteBtn: TButton; + CopyBtn: TButton; + CutBtn: TButton; + FontBtn: TButton; + FontDialog1: TFontDialog; + OpenFileBtn: TButton; + SaveFileBtn: TButton; + OpenDialog1: TOpenDialog; + Panel1: TPanel; + SaveDialog1: TSaveDialog; + procedure CopyBtnClick(Sender: TObject); + procedure CutBtnClick(Sender: TObject); + procedure FontBtnClick(Sender: TObject); + procedure OpenFileBtnClick(Sender: TObject); + procedure PasteBtnClick(Sender: TObject); + procedure PrintBtnClick(Sender: TObject); + procedure SaveFileBtnClick(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + OutputFrm: TOutputFrm; + +implementation + +{ TOutputFrm } + +procedure TOutputFrm.PrintBtnClick(Sender: TObject); +VAR + aline : string; + NoLines, i, X, Y, txthi : integer; +begin + Printer.Orientation := poPortrait; + NoLines := OutPutFrm.RichEdit.Lines.Count; + X := 5; // left margin + Y := 5; // top margin + PrintDialog1.MinPage := 1; + PrintDialog1.MaxPage := 1; + PrintDialog1.ToPage := 1; + PrintDialog1.Options := [poPageNums]; + Printer.Copies := PrintDialog1.Copies; + if FontDialog1.Execute then + begin + Printer.Canvas.Font := FontDialog1.Font; + Printer.Canvas.Font.Height := FontDialog1.Font.Height; + end; + if PrintDialog1.Execute then + begin +// Printer.Canvas.Font.Height := 50; + Printer.Canvas.Font.Height := Printer.PageHeight div 80; + txthi := Printer.Canvas.Font.Height; + Printer.BeginDoc; + for i := 0 to NoLines-1 do + begin + aline := OutPutFrm.RichEdit.Lines[i]; + Printer.Canvas.TextOut(X,Y,aline); +// txthi := Printer.Canvas.Font.Height; + Y := Y + abs(txthi); + if Y >= Printer.PageHeight - 10 then + begin + Printer.NewPage; + Y := 5; + end; + end; + Printer.EndDoc; + end; +end; + +procedure TOutputFrm.OpenFileBtnClick(Sender: TObject); +begin + OpenDialog1.Filter := 'LazStats text files (*.txt)|*.TXT|All files (*.*)|*.*'; + OpenDialog1.FilterIndex := 1; {text file} + if OpenDialog1.Execute then RichEdit.Lines.LoadFromFile(OpenDialog1.FileName); +end; + +procedure TOutputFrm.PasteBtnClick(Sender: TObject); +begin + RichEdit.PasteFromClipboard; +end; + +procedure TOutputFrm.CutBtnClick(Sender: TObject); +begin + RichEdit.CutToClipboard; +end; + +procedure TOutputFrm.FontBtnClick(Sender: TObject); +begin + FontDialog1.Execute; + RichEdit.Font := FontDialog1.Font; +// RichEdit.SelAttributes.Assign(FontDialog1.Font); +end; + +procedure TOutputFrm.CopyBtnClick(Sender: TObject); +begin + RichEdit.CopyToClipboard; +end; + +procedure TOutputFrm.SaveFileBtnClick(Sender: TObject); +begin + SaveDialog1.Filter := 'LazStats text files (*.txt|*.TXT|All files (*.*)|*.*'; + SaveDialog1.FilterIndex := 1; {text file} + SaveDialog1.Title := 'Print to File: '; + if SaveDialog1.Execute then RichEdit.Lines.SaveToFile(SaveDialog1.FileName); +end; + +initialization + {$I outputunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/partialsunit.lfm b/applications/lazstats/source_orig/partialsunit.lfm new file mode 100644 index 000000000..cdea6705b --- /dev/null +++ b/applications/lazstats/source_orig/partialsunit.lfm @@ -0,0 +1,392 @@ +object PartialsFrm: TPartialsFrm + Left = 190 + Height = 401 + Top = 104 + Width = 381 + Caption = 'Partial Correlation' + ClientHeight = 401 + ClientWidth = 381 + OnShow = FormShow + LCLVersion = '0.9.28.2' + object Label1: TLabel + Left = 7 + Height = 14 + Top = 8 + Width = 94 + Caption = 'Available Variables:' + ParentColor = False + end + object Label2: TLabel + Left = 224 + Height = 14 + Top = 8 + Width = 143 + Caption = 'Selected Dependent Variable:' + ParentColor = False + end + object Label3: TLabel + Left = 223 + Height = 14 + Top = 120 + Width = 134 + Caption = 'Selected Predictor Variables' + ParentColor = False + end + object Label4: TLabel + Left = 32 + Height = 14 + Top = 280 + Width = 114 + Caption = 'Variables Partialed Out:' + ParentColor = False + end + object VarList: TListBox + Left = 8 + Height = 209 + Top = 24 + Width = 154 + ItemHeight = 0 + MultiSelect = True + TabOrder = 0 + end + object DepInBtn: TBitBtn + Left = 174 + Height = 31 + Top = 24 + Width = 37 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = DepInBtnClick + TabOrder = 1 + end + object DepOutBtn: TBitBtn + Left = 174 + Height = 31 + Top = 56 + Width = 37 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = DepOutBtnClick + TabOrder = 2 + end + object PredInBtn: TBitBtn + Left = 174 + Height = 31 + Top = 136 + Width = 37 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = PredInBtnClick + TabOrder = 3 + end + object PredOutBtn: TBitBtn + Left = 174 + Height = 31 + Top = 168 + Width = 37 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = PredOutBtnClick + TabOrder = 4 + end + object PartInBtn: TBitBtn + Left = 48 + Height = 31 + Top = 240 + Width = 37 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00256929C4216425C9FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002D7533CF488F4DFF458C4AFF2265 + 26D1FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF003C8A430638833ED9519957FF79C07EFF76BF7CFF468D + 4BFF236627DB20622306FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0042924AB83D8C45F765AD6CFF7DC282FF7AC180FF4B92 + 50FF276D2CF7246828BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0043944B384E9A55FF81C587FF7EC385FF317A + 36FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0045954CFF85C78CFF82C689FF3682 + 3DFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A9E53FF8ACA91FF87C98EFF3C8A + 43FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0050A659FF8ECC95FF8BCB93FF4292 + 4AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0056AD5FFF93CF9AFF90CE98FF489A + 50FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005BB465FF96D29FFF94D09CFF4EA2 + 57FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005FBB6AFF9AD4A3FF98D3A1FF53AA + 5DFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0063C06FFF9ED6A7FF9CD4A5FF59B2 + 63FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0066C572FFA2D8ABFFA0D7A9FF5DB8 + 68FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0068C774FF67C673FF65C270FF62BE + 6DFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = PartInBtnClick + TabOrder = 5 + end + object PartOutBtn: TBitBtn + Left = 88 + Height = 31 + Top = 240 + Width = 37 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00286E2DFF256929FF216425FF1E60 + 22FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002D7533FF74BD7AFF72BD78FF2265 + 26FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00337D39FF79C07EFF76BF7CFF266B + 2BFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0039853FFF7DC282FF7AC180FF2B72 + 30FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003F8D46FF81C587FF7EC385FF317A + 36FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0045954CFF85C78CFF82C689FF3682 + 3DFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A9E53FF8ACA91FF87C98EFF3C8A + 43FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0050A659FF8ECC95FF8BCB93FF4292 + 4AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0056AD5FFF93CF9AFF90CE98FF489A + 50FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005BB465FF96D29FFF94D09CFF5DAC + 65FF499C5238FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0065C371BB62BF6EF779C683FF9AD4A3FF98D3A1FF7DC3 + 86FF4FA458F74A9E53B8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0068C7740666C472DB7CCA87FF9ED6A7FF9CD4A5FF73C0 + 7DFF55AC5ED950A65906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0066C572D17ECA88FF7BC885FF5DB8 + 68CFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0067C673C965C270C4FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = PartOutBtnClick + TabOrder = 6 + end + object DepVar: TEdit + Left = 224 + Height = 21 + Top = 40 + Width = 142 + TabOrder = 7 + Text = 'DepVar' + end + object PredList: TListBox + Left = 224 + Height = 108 + Top = 136 + Width = 144 + ItemHeight = 0 + TabOrder = 8 + end + object PartList: TListBox + Left = 8 + Height = 92 + Top = 296 + Width = 155 + ItemHeight = 0 + TabOrder = 9 + end + object ResetBtn: TButton + Left = 288 + Height = 29 + Top = 280 + Width = 77 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 10 + end + object CancelBtn: TButton + Left = 178 + Height = 29 + Top = 320 + Width = 77 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 11 + end + object ComputeBtn: TButton + Left = 288 + Height = 29 + Top = 320 + Width = 77 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 12 + end + object ReturnBtn: TButton + Left = 232 + Height = 29 + Top = 359 + Width = 77 + Caption = 'Return' + ModalResult = 1 + TabOrder = 13 + end + object HelpBtn: TButton + Tag = 136 + Left = 174 + Height = 28 + Top = 280 + Width = 81 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 14 + end +end diff --git a/applications/lazstats/source_orig/partialsunit.lrs b/applications/lazstats/source_orig/partialsunit.lrs new file mode 100644 index 000000000..6d62e5146 --- /dev/null +++ b/applications/lazstats/source_orig/partialsunit.lrs @@ -0,0 +1,341 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TPartialsFrm','FORMDATA',[ + 'TPF0'#12'TPartialsFrm'#11'PartialsFrm'#4'Left'#3#190#0#6'Height'#3#145#1#3'T' + +'op'#2'h'#5'Width'#3'}'#1#7'Caption'#6#19'Partial Correlation'#12'ClientHeig' + +'ht'#3#145#1#11'ClientWidth'#3'}'#1#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6 + +#8'0.9.28.2'#0#6'TLabel'#6'Label1'#4'Left'#2#7#6'Height'#2#14#3'Top'#2#8#5'W' + +'idth'#2'^'#7'Caption'#6#20'Available Variables:'#11'ParentColor'#8#0#0#6'TL' + +'abel'#6'Label2'#4'Left'#3#224#0#6'Height'#2#14#3'Top'#2#8#5'Width'#3#143#0#7 + +'Caption'#6#28'Selected Dependent Variable:'#11'ParentColor'#8#0#0#6'TLabel' + +#6'Label3'#4'Left'#3#223#0#6'Height'#2#14#3'Top'#2'x'#5'Width'#3#134#0#7'Cap' + +'tion'#6#28'Selected Predictor Variables'#11'ParentColor'#8#0#0#6'TLabel'#6 + +'Label4'#4'Left'#2' '#6'Height'#2#14#3'Top'#3#24#1#5'Width'#2'r'#7'Caption'#6 + +#24'Variables Partialed Out:'#11'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4 + +'Left'#2#8#6'Height'#3#209#0#3'Top'#2#24#5'Width'#3#154#0#10'ItemHeight'#2#0 + +#11'MultiSelect'#9#8'TabOrder'#2#0#0#0#7'TBitBtn'#8'DepInBtn'#4'Left'#3#174#0 + +#6'Height'#2#31#3'Top'#2#24#5'Width'#2'%'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0 + +'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4 + +#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\' + +#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?' + +#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0 + +#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255 + +#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137 + +#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255 + +#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158 + +#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255 + +#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255 + +'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q' + +#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G' + +#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#13'DepInBtnClick'#8'TabOrder'#2 + ,#1#0#0#7'TBitBtn'#9'DepOutBtn'#4'Left'#3#174#0#6'Height'#2#31#3'Top'#2'8'#5 + +'Width'#2'%'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0 + +'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0 + +#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O' + +#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V' + +#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255 + +'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5' + +#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195 + +'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255 + +#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255 + +#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135 + +#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#14'DepOutBtnClick'#8'TabOrder'#2#2#0#0#7'TBitBtn'#9'Pr' + +'edInBtn'#4'Left'#3#174#0#6'Height'#2#31#3'Top'#3#136#0#5'Width'#2'%'#10'Gly' + +'ph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0 + +#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$' + +#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X' + +#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B' + +#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255 + +#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165 + +#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201 + +#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140 + +'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255 + +#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154 + +#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194 + +#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h' + +#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\' + +#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/' + +'x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#14'PredInBtnClick' + +#8'TabOrder'#2#3#0#0#7'TBitBtn'#10'PredOutBtn'#4'Left'#3#174#0#6'Height'#2#31 + +#3'Top'#3#168#0#5'Width'#2'%'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0 + +#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0 + +#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V' + +#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217 + +'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193 + +#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';' + +#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255 + +#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157 + ,#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195 + +#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0 + +#255#255#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255 + +#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144 + +#255#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255 + +#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|' + +#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153 + +'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#15'PredOutBtnClick'#8'TabOrder'#2#4#0#0 + +#7'TBitBtn'#9'PartInBtn'#4'Left'#2'0'#6'Height'#2#31#3'Top'#3#240#0#5'Width' + +#2'%'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0 + +#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'%i)'#196'!d%'#201#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'-u3'#207'H'#143'M'#255'E'#140'J'#255'"e&'#209#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'<'#138'C'#6'8'#131'>'#217'Q'#153'W' + +#255'y'#192'~'#255'v'#191'|'#255'F'#141'K'#255'#f'''#219' b#'#6#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'B'#146'J'#184'='#140'E'#247'e'#173'l'#255'}'#194#130 + +#255'z'#193#128#255'K'#146'P'#255'''m,'#247'$h('#187#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'C'#148'K8N'#154'U'#255#129#197#135#255'~'#195 + +#133#255'1z6'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0'E'#149'L'#255#133#199#140#255#130#198#137 + +#255'6'#130'='#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'J'#158'S'#255#138#202#145#255#135#201 + +#142#255'<'#138'C'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'P'#166'Y'#255#142#204#149#255#139#203 + +#147#255'B'#146'J'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'V'#173'_'#255#147#207#154#255#144#206 + +#152#255'H'#154'P'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'['#180'e'#255#150#210#159#255#148#208 + +#156#255'N'#162'W'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'_'#187'j'#255#154#212#163#255#152#211 + ,#161#255'S'#170']'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'c'#192'o'#255#158#214#167#255#156#212 + +#165#255'Y'#178'c'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'f'#197'r'#255#162#216#171#255#160#215 + +#169#255']'#184'h'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#255'g'#198's'#255'e'#194'p' + +#255'b'#190'm'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#14'PartInBtnClick' + +#8'TabOrder'#2#5#0#0#7'TBitBtn'#10'PartOutBtn'#4'Left'#2'X'#6'Height'#2#31#3 + +'Top'#3#240#0#5'Width'#2'%'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0 + +#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0 + +'d'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0'(n-'#255'%i)'#255'!d%'#255#30'`"'#255#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'-u3'#255't'#189'z'#255'r'#189'x'#255'"e&'#255#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'3}9'#255'y'#192'~'#255'v'#191'|'#255'&k+'#255#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'9'#133 + +'?'#255'}'#194#130#255'z'#193#128#255'+r0'#255#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'?'#141'F' + +#255#129#197#135#255'~'#195#133#255'1z6'#255#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'E'#149'L'#255 + +#133#199#140#255#130#198#137#255'6'#130'='#255#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'J'#158'S' + +#255#138#202#145#255#135#201#142#255'<'#138'C'#255#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'P'#166'Y' + +#255#142#204#149#255#139#203#147#255'B'#146'J'#255#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'V'#173'_' + +#255#147#207#154#255#144#206#152#255'H'#154'P'#255#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'['#180'e' + +#255#150#210#159#255#148#208#156#255']'#172'e'#255'I'#156'R8'#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#187'b'#191'n'#247'y'#198#131 + +#255#154#212#163#255#152#211#161#255'}'#195#134#255'O'#164'X'#247'J'#158'S' + +#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'f'#196'r'#219'|'#202 + +#135#255#158#214#167#255#156#212#165#255's'#192'}'#255'U'#172'^'#217'P'#166 + +'Y'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'f'#197 + +'r'#209'~'#202#136#255'{'#200#133#255']'#184'h'#207#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'g'#198's'#201'e'#194'p'#196#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7 + +'OnClick'#7#15'PartOutBtnClick'#8'TabOrder'#2#6#0#0#5'TEdit'#6'DepVar'#4'Lef' + +'t'#3#224#0#6'Height'#2#21#3'Top'#2'('#5'Width'#3#142#0#8'TabOrder'#2#7#4'Te' + +'xt'#6#6'DepVar'#0#0#8'TListBox'#8'PredList'#4'Left'#3#224#0#6'Height'#2'l'#3 + +'Top'#3#136#0#5'Width'#3#144#0#10'ItemHeight'#2#0#8'TabOrder'#2#8#0#0#8'TLis' + +'tBox'#8'PartList'#4'Left'#2#8#6'Height'#2'\'#3'Top'#3'('#1#5'Width'#3#155#0 + +#10'ItemHeight'#2#0#8'TabOrder'#2#9#0#0#7'TButton'#8'ResetBtn'#4'Left'#3' '#1 + +#6'Height'#2#29#3'Top'#3#24#1#5'Width'#2'M'#7'Caption'#6#5'Reset'#7'OnClick' + +#7#13'ResetBtnClick'#8'TabOrder'#2#10#0#0#7'TButton'#9'CancelBtn'#4'Left'#3 + +#178#0#6'Height'#2#29#3'Top'#3'@'#1#5'Width'#2'M'#7'Caption'#6#6'Cancel'#11 + +'ModalResult'#2#2#8'TabOrder'#2#11#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3' ' + +#1#6'Height'#2#29#3'Top'#3'@'#1#5'Width'#2'M'#7'Caption'#6#7'Compute'#7'OnCl' + +'ick'#7#15'ComputeBtnClick'#8'TabOrder'#2#12#0#0#7'TButton'#9'ReturnBtn'#4'L' + +'eft'#3#232#0#6'Height'#2#29#3'Top'#3'g'#1#5'Width'#2'M'#7'Caption'#6#6'Retu' + +'rn'#11'ModalResult'#2#1#8'TabOrder'#2#13#0#0#7'TButton'#7'HelpBtn'#3'Tag'#3 + +#136#0#4'Left'#3#174#0#6'Height'#2#28#3'Top'#3#24#1#5'Width'#2'Q'#7'Caption' + +#6#4'Help'#7'OnClick'#7#12'HelpBtnClick'#8'TabOrder'#2#14#0#0#0 +]); diff --git a/applications/lazstats/source_orig/partialsunit.pas b/applications/lazstats/source_orig/partialsunit.pas new file mode 100644 index 000000000..2f04a53d7 --- /dev/null +++ b/applications/lazstats/source_orig/partialsunit.pas @@ -0,0 +1,374 @@ +unit PartialsUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, MainUnit, MatrixLib, FunctionsLib, OutPutUnit, Globals, + contexthelpunit; + +type + + { TPartialsFrm } + + TPartialsFrm = class(TForm) + DepInBtn: TBitBtn; + DepOutBtn: TBitBtn; + HelpBtn: TButton; + PredInBtn: TBitBtn; + PredOutBtn: TBitBtn; + PartInBtn: TBitBtn; + PartOutBtn: TBitBtn; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + DepVar: TEdit; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + PartList: TListBox; + PredList: TListBox; + VarList: TListBox; + procedure ComputeBtnClick(Sender: TObject); + procedure DepInBtnClick(Sender: TObject); + procedure DepOutBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + procedure PartInBtnClick(Sender: TObject); + procedure PartOutBtnClick(Sender: TObject); + procedure PredInBtnClick(Sender: TObject); + procedure PredOutBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + PartialsFrm: TPartialsFrm; + +implementation + +{ TPartialsFrm } + +procedure TPartialsFrm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + DepVar.Text := ''; + VarList.Clear; + PartList.Clear; + PredList.Clear; + DepInBtn.Visible := true; + DepOutBtn.Visible := false; + PredInBtn.Visible := true; + PredOutBtn.Visible := false; + PartInBtn.Visible := true; + PartOutBtn.Visible := false; + for i := 1 to OS3MainFrm.DataGrid.ColCount - 1 do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); +end; + +procedure TPartialsFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TPartialsFrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +procedure TPartialsFrm.PartInBtnClick(Sender: TObject); +VAR i, index : integer; +begin + index := VarList.Items.Count; + i := 0; + while i < index do + begin + if (VarList.Selected[i]) then + begin + PartList.Items.Add(VarList.Items.Strings[i]); + VarList.Items.Delete(i); + index := index - 1; + i := 0; + end + else i := i + 1; + end; + PartOutBtn.Visible := true; +end; + +procedure TPartialsFrm.PartOutBtnClick(Sender: TObject); +VAR index : integer; +begin + index := PartList.ItemIndex; + VarList.Items.Add(PartList.Items.Strings[index]); + PartList.Items.Delete(index); + if PartList.Items.Count = 0 then PartOutBtn.Visible := false; +end; + +procedure TPartialsFrm.PredInBtnClick(Sender: TObject); +VAR i, index : integer; +begin + index := VarList.Items.Count; + i := 0; + while i < index do + begin + if (VarList.Selected[i]) then + begin + PredList.Items.Add(VarList.Items.Strings[i]); + VarList.Items.Delete(i); + index := index - 1; + i := 0; + end + else i := i + 1; + end; + PredOutBtn.Visible:= true; +end; + +procedure TPartialsFrm.PredOutBtnClick(Sender: TObject); +VAR index : integer; +begin + index := PredList.ItemIndex; + VarList.Items.Add(PredList.Items.Strings[index]); + PredList.Items.Delete(index); + if PredList.Items.Count = 0 then PredOutBtn.Visible := false; +end; + +procedure TPartialsFrm.DepInBtnClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + if index < 0 then exit; + DepVar.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + DepOutBtn.Visible := true; + DepInBtn.Visible := false; +end; + +procedure TPartialsFrm.ComputeBtnClick(Sender: TObject); +var + rmatrix, workmat : DblDyneMat; + Means, Variances, StdDevs, W, Betas : DblDyneVec; + R2Full, R2Cntrl, SemiPart, Partial, df1, df2, F, Prob : double; + NoPredVars, NoCntrlVars, DepVarNo, TotNoVars, pcnt, ccnt, count : integer; + PredVars, CntrlVars : IntDyneVec; + MatVars : IntDyneVec; + outline, varstring : string; + i, j, K, L, NCases : integer; + errorcode : boolean; + vtimesw, W1, v : DblDyneMat; + +begin + DepVarNo := 1; + errorcode := false; + + // Get no. of predictor and control variables + NoPredVars := PredList.Items.Count; + NoCntrlVars := PartList.Items.Count; + if (NoPredVars = 0) or (NoCntrlVars = 0) then + begin + ShowMessage('You must select at least one predictor and one control variable!'); + exit; + end; + TotNoVars := NoPredVars + NoCntrlVars + 1; + count := NoCases; + NCases := NoCases; + + // Allocate space required + SetLength(vtimesw,NoVariables,NoVariables); + SetLength(v,NoVariables,NoVariables); + SetLength(W1,NoVariables,NoVariables); + SetLength(rmatrix,NoVariables+1,NoVariables+1); // augmented + SetLength(workmat,NoVariables+1,NoVariables+1); // augmented + SetLength(PredVars,NoVariables); + SetLength(CntrlVars,NoVariables); + SetLength(Means,NoVariables); + SetLength(Variances,NoVariables); + SetLength(StdDevs,NoVariables); + SetLength(W,NoVariables); + SetLength(Betas,NoVariables); + SetLength(MatVars,NoVariables); + + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('Partial and Semi-Partial Correlation Analysis'); + OutPutFrm.RichEdit.Lines.Add(''); + + // Get column numbers of dependent, predictor and control variables + pcnt := 1; + for i := 0 to NoPredVars - 1 do + begin + varstring := PredList.Items.Strings[i]; + for j := 1 to NoVariables do + begin + if varstring = OS3MainFrm.DataGrid.Cells[j,0] then + begin + PredVars[pcnt-1] := j; + pcnt := pcnt + 1; + end; + end; + end; + ccnt := 1; + for i := 0 to NoCntrlVars - 1 do + begin + varstring := PartList.Items.Strings[i]; + for j := 1 to NoVariables do + begin + if varstring = OS3MainFrm.DataGrid.Cells[j,0] then + begin + CntrlVars[ccnt-1] := j; + ccnt := ccnt + 1; + end; + end; + end; + varstring := DepVar.Text; + for i := 1 to NoVariables do + if varstring = OS3MainFrm.DataGrid.Cells[i,0] then DepVarNo := i; + + outline := format('Dependent variable = %s',[OS3MainFrm.DataGrid.Cells[DepVarNo,0]]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Predictor Variables:'); + for i := 1 to NoPredVars do + begin + outline := format('Variable %d = %s',[i+1,OS3MainFrm.DataGrid.Cells[PredVars[i-1],0]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Control Variables:'); + for i := 1 to NoCntrlVars do + begin + outline := format('Variable %d = %s',[i+1,OS3MainFrm.DataGrid.Cells[CntrlVars[i-1],0]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + if NoPredVars > 1 then + begin + outline := format('Higher order partialling at level = %d',[NoPredVars]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + end; + if NoCntrlVars > 1 then + begin + outline := format('Multiple partialling with %d variables.',[NoCntrlVars]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + end; + + // Now, build the correlation matrix + MatVars[0] := DepVarNo; + for i := 1 to NoPredVars do MatVars[i] := PredVars[i-1]; + for i := 1 to NoCntrlVars do MatVars[i + NoPredVars] := CntrlVars[i-1]; + Correlations(TotNoVars, MatVars, rmatrix, Means, Variances, StdDevs, errorcode, count); + + // Now do Multiple regression models required + // Full model first + for i := 2 to TotNoVars do + for j := 2 to TotNoVars do + workmat[i-2,j-2] := rmatrix[i-1,j-1]; + + matinv(workmat, vtimesw, v, W1, TotNoVars-1); + R2Full := 0.0; + for i := 1 to TotNoVars-1 do // rows + begin + W[i-1] := 0.0; + for j := 1 to TotNoVars - 1 do W[i-1] := W[i-1] + (workmat[i-1,j-1] * rmatrix[0,j]); + R2Full := R2Full + W[i-1] * rmatrix[0,i]; + end; + outline := format('Squared Multiple Correlation with all variables = %6.3f',[R2Full]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Standardized Regression Coefficients:'); + for i := 1 to TotNoVars - 1 do + begin + outline := format('%10s = %6.3f',[OS3MainFrm.DataGrid.Cells[MatVars[i],0],W[i-1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + + // Now do model for Partial and Semi-partial + for i := 1 to NoCntrlVars do + begin + K := i + 1 + NoPredVars; + for j := 1 to NoCntrlVars do + begin + L := j + 1 + NoPredVars; + workmat[i-1,j-1] := rmatrix[K-1,L-1]; + end; + end; + matinv(workmat, vtimesw, v, W1, NoCntrlVars); + R2Cntrl := 0.0; + for i := 1 to NoCntrlVars do + begin + L := i + 1 + NoPredVars; + W[i-1] := 0.0; + for j := 1 to NoCntrlVars do + begin + K := j + 1 + NoPredVars; + W[i-1] := W[i-1] + (workmat[i-1,j-1] * rmatrix[0,K-1]); + end; + R2Cntrl := R2Cntrl + W[i-1] * rmatrix[0,L-1]; + end; + outline := format('Squared Multiple Correlation with control variables = %6.3f',[R2Cntrl]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Standardized Regression Coefficients:'); + for i := 1 to NoCntrlVars do + begin + outline := format('%10s = %6.3f',[OS3MainFrm.DataGrid.Cells[MatVars[i+NoPredVars],0],W[i-1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + + SemiPart := R2Full - R2Cntrl; + Partial := SemiPart / (1.0 - R2Cntrl); + df1 := TotNoVars - 1 - NoCntrlVars; + df2 := count - TotNoVars; + F := (SemiPart / (1.0 - R2Full)) * (df2 / df1); + Prob := probf(F,df1,df2); + + // Report results + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Partial Correlation = %6.3f',[sqrt(Partial)]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Semi-Partial Correlation = %6.3f',[sqrt(SemiPart)]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('F = %8.3f with probability = %6.4f, D.F.1 = %3.0f and D.F.2 = %3.0f',[F,Prob,df1,df2]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.ShowModal; + + // clean up the heap + MatVars := nil; + Betas := nil; + W := nil; + Variances := nil; + StdDevs := nil; + Means := nil; + CntrlVars := nil; + PredVars := nil; + workmat := nil; + rmatrix := nil; + v := nil; + W1 := nil; + vtimesw := nil; +end; + +procedure TPartialsFrm.DepOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(DepVar.Text); + DepVar.Text := ''; + DepInBtn.Visible := true; + DepOutBtn.Visible := false; +end; + +initialization + {$I partialsunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/pathunit.lfm b/applications/lazstats/source_orig/pathunit.lfm new file mode 100644 index 000000000..dcd76acff --- /dev/null +++ b/applications/lazstats/source_orig/pathunit.lfm @@ -0,0 +1,461 @@ +object PathFrm: TPathFrm + Left = 135 + Height = 388 + Top = 96 + Width = 601 + Caption = 'Path Analysis' + ClientHeight = 388 + ClientWidth = 601 + OnShow = FormShow + LCLVersion = '0.9.26.2' + object Label1: TLabel + Left = 8 + Height = 14 + Top = 2 + Width = 90 + Caption = 'Available Variables' + ParentColor = False + end + object Label2: TLabel + Left = 218 + Height = 14 + Top = 2 + Width = 88 + Caption = 'Selected Variables' + ParentColor = False + end + object Label3: TLabel + Left = 440 + Height = 14 + Top = 13 + Width = 73 + Caption = 'Model Number:' + ParentColor = False + end + object Label4: TLabel + Left = 438 + Height = 14 + Top = 77 + Width = 86 + Caption = '"Caused" Variable' + ParentColor = False + end + object Label5: TLabel + Left = 438 + Height = 14 + Top = 145 + Width = 93 + Caption = '"Causing" Variables' + ParentColor = False + end + object ListBox1: TListBox + Left = 6 + Height = 256 + Top = 15 + Width = 156 + MultiSelect = True + TabOrder = 0 + end + object InBtn: TBitBtn + Left = 174 + Height = 29 + Top = 18 + Width = 35 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = InBtnClick + TabOrder = 1 + end + object OutBtn: TBitBtn + Left = 174 + Height = 29 + Top = 56 + Width = 35 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = OutBtnClick + TabOrder = 2 + end + object VarList: TListBox + Left = 222 + Height = 252 + Top = 17 + Width = 160 + MultiSelect = True + TabOrder = 3 + end + object ModelNo: TEdit + Left = 552 + Height = 19 + Top = 8 + Width = 37 + TabOrder = 4 + Text = 'ModelNo' + end + object ScrollBar: TScrollBar + Left = 440 + Height = 22 + Top = 39 + Width = 151 + TabOrder = 5 + OnChange = ScrollBarChange + end + object CausedEdit: TEdit + Left = 437 + Height = 20 + Top = 95 + Width = 156 + TabOrder = 6 + Text = 'CausedEdit' + end + object CausingList: TListBox + Left = 437 + Height = 106 + Top = 161 + Width = 152 + TabOrder = 7 + end + object CausedInBtn: TBitBtn + Left = 392 + Height = 29 + Top = 78 + Width = 34 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = CausedInBtnClick + TabOrder = 8 + end + object CausedOutBtn: TBitBtn + Left = 392 + Height = 29 + Top = 112 + Width = 34 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = CausedOutBtnClick + TabOrder = 9 + end + object CausingInBtn: TBitBtn + Left = 392 + Height = 29 + Top = 168 + Width = 34 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = CausingInBtnClick + TabOrder = 10 + end + object CausingOutBtn: TBitBtn + Left = 392 + Height = 29 + Top = 200 + Width = 34 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = CausingOutBtnClick + TabOrder = 11 + end + object ResetModelBtn: TButton + Left = 438 + Height = 21 + Top = 280 + Width = 148 + Caption = 'Reset Current Model' + OnClick = ResetModelBtnClick + TabOrder = 12 + end + object GroupBox1: TGroupBox + Left = 5 + Height = 96 + Top = 280 + Width = 210 + Caption = 'Options' + ClientHeight = 78 + ClientWidth = 206 + TabOrder = 13 + object StatsChk: TCheckBox + Left = 9 + Height = 17 + Top = 6 + Width = 118 + Caption = 'Descriptive Statistics' + TabOrder = 0 + end + object ModelChk: TCheckBox + Left = 9 + Height = 17 + Top = 24 + Width = 161 + Caption = 'Each Model Correlation Matrix' + TabOrder = 1 + end + object Reprochk: TCheckBox + Left = 9 + Height = 17 + Top = 40 + Width = 163 + Caption = 'Reproduced Correlation Matrix' + TabOrder = 2 + end + object SaveChk: TCheckBox + Left = 9 + Height = 17 + Top = 56 + Width = 129 + Caption = 'Save Correlation Matrix' + TabOrder = 3 + end + end + object ResetBtn: TButton + Left = 224 + Height = 27 + Top = 321 + Width = 69 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 14 + end + object CancelBtn: TButton + Left = 320 + Height = 27 + Top = 321 + Width = 69 + Caption = 'Cancel' + ModalResult = 2 + OnClick = CancelBtnClick + TabOrder = 15 + end + object ComputeBtn: TButton + Left = 416 + Height = 27 + Top = 321 + Width = 69 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 16 + end + object ReturnBtn: TButton + Left = 518 + Height = 27 + Top = 321 + Width = 69 + Caption = 'Return' + ModalResult = 1 + OnClick = ReturnBtnClick + TabOrder = 17 + end + object SaveDialog1: TSaveDialog + left = 230 + top = 286 + end +end diff --git a/applications/lazstats/source_orig/pathunit.lrs b/applications/lazstats/source_orig/pathunit.lrs new file mode 100644 index 000000000..9a81f28e8 --- /dev/null +++ b/applications/lazstats/source_orig/pathunit.lrs @@ -0,0 +1,358 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TPathFrm','FORMDATA',[ + 'TPF0'#8'TPathFrm'#7'PathFrm'#4'Left'#3#135#0#6'Height'#3#132#1#3'Top'#2'`'#5 + +'Width'#3'Y'#2#7'Caption'#6#13'Path Analysis'#12'ClientHeight'#3#132#1#11'Cl' + +'ientWidth'#3'Y'#2#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#8'0.9.26.2'#0#6 + +'TLabel'#6'Label1'#4'Left'#2#8#6'Height'#2#14#3'Top'#2#2#5'Width'#2'Z'#7'Cap' + +'tion'#6#19'Available Variables'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4 + +'Left'#3#218#0#6'Height'#2#14#3'Top'#2#2#5'Width'#2'X'#7'Caption'#6#18'Selec' + +'ted Variables'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#3#184#1#6 + +'Height'#2#14#3'Top'#2#13#5'Width'#2'I'#7'Caption'#6#13'Model Number:'#11'Pa' + +'rentColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#3#182#1#6'Height'#2#14#3'Top'#2 + +'M'#5'Width'#2'V'#7'Caption'#6#17'"Caused" Variable'#11'ParentColor'#8#0#0#6 + +'TLabel'#6'Label5'#4'Left'#3#182#1#6'Height'#2#14#3'Top'#3#145#0#5'Width'#2 + +']'#7'Caption'#6#19'"Causing" Variables'#11'ParentColor'#8#0#0#8'TListBox'#8 + +'ListBox1'#4'Left'#2#6#6'Height'#3#0#1#3'Top'#2#15#5'Width'#3#156#0#11'Multi' + +'Select'#9#8'TabOrder'#2#0#0#0#7'TBitBtn'#5'InBtn'#4'Left'#3#174#0#6'Height' + +#2#29#3'Top'#2#18#5'Width'#2'#'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0 + +#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0 + +#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161 + +'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255 + +'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255 + +#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157 + +#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195 + +#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0 + +#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255 + +#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144 + +#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201 + +#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190 + +'m'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255 + +'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#9'NumGlyphs'#2#0#7'OnClick'#7#10'InBtnClick'#8'TabOrder'#2#1#0#0#7'TBitBtn' + +#6'OutBtn'#4'Left'#3#174#0#6'Height'#2#29#3'Top'#2'8'#5'Width'#2'#'#10'Glyph' + +'.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16 + +#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255 + +'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$' + +#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156 + +#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255 + +#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255 + +'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201''#204#138 + +#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207 + +#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}' + +#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S' + +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';' + +#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'OutBtnClick'#8 + +'TabOrder'#2#2#0#0#8'TListBox'#7'VarList'#4'Left'#3#222#0#6'Height'#3#252#0#3 + +'Top'#2#17#5'Width'#3#160#0#11'MultiSelect'#9#8'TabOrder'#2#3#0#0#5'TEdit'#7 + +'ModelNo'#4'Left'#3'('#2#6'Height'#2#19#3'Top'#2#8#5'Width'#2'%'#8'TabOrder' + +#2#4#4'Text'#6#7'ModelNo'#0#0#10'TScrollBar'#9'ScrollBar'#4'Left'#3#184#1#6 + +'Height'#2#22#3'Top'#2''''#5'Width'#3#151#0#8'TabOrder'#2#5#8'OnChange'#7#15 + +'ScrollBarChange'#0#0#5'TEdit'#10'CausedEdit'#4'Left'#3#181#1#6'Height'#2#20 + +#3'Top'#2'_'#5'Width'#3#156#0#8'TabOrder'#2#6#4'Text'#6#10'CausedEdit'#0#0#8 + +'TListBox'#11'CausingList'#4'Left'#3#181#1#6'Height'#2'j'#3'Top'#3#161#0#5'W' + +'idth'#3#152#0#8'TabOrder'#2#7#0#0#7'TBitBtn'#11'CausedInBtn'#4'Left'#3#136#1 + +#6'Height'#2#29#3'Top'#2'N'#5'Width'#2'"'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0 + +'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4 + +#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255 + ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\' + +#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?' + +#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0 + +#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255 + +#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137 + +#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255 + +#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158 + +#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255 + +#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255 + +'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q' + +#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G' + +#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#16'CausedInBtnClick'#8'TabOrder' + +#2#8#0#0#7'TBitBtn'#12'CausedOutBtn'#4'Left'#3#136#1#6'Height'#2#29#3'Top'#2 + +'p'#5'Width'#2'"'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0 + +#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0 + +#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153 + ,'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V' + +#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255 + +'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5' + +#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195 + +'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255 + +#255#0'h'#199't'#201''#204#138#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255 + +#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135 + +#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#17'CausedOutBtnClick'#8'TabOrder'#2#9#0#0#7'TBitBtn'#12 + +'CausingInBtn'#4'Left'#3#136#1#6'Height'#2#29#3'Top'#3#168#0#5'Width'#2'"'#10 + +'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0 + +#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184 + +'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255 + +';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$' + +#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255 + +#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147 + +#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|' + +#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218 + +#174#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147 + ,#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255 + +'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't' + +#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S' + +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\' + +#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#17'CausingI' + +'nBtnClick'#8'TabOrder'#2#10#0#0#7'TBitBtn'#13'CausingOutBtn'#4'Left'#3#136#1 + +#6'Height'#2#29#3'Top'#3#200#0#5'Width'#2'"'#10'Glyph.Data'#10':'#4#0#0'6'#4 + +#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0 + +#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207 + +'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';' + +#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255 + +#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152#211 + +#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130 + +#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$' + +#255#255#255#255#0#255#255#255#0'h'#199't'#201''#204#138#255#162#216#171#255 + +#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149 + +#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~' + +#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205 + +#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V' + +#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/' + +#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e' + +#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199 + +'t'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#18'CausingOutBtnClick'#8'TabOrder'#2 + +#11#0#0#7'TButton'#13'ResetModelBtn'#4'Left'#3#182#1#6'Height'#2#21#3'Top'#3 + +#24#1#5'Width'#3#148#0#7'Caption'#6#19'Reset Current Model'#7'OnClick'#7#18 + +'ResetModelBtnClick'#8'TabOrder'#2#12#0#0#9'TGroupBox'#9'GroupBox1'#4'Left'#2 + +#5#6'Height'#2'`'#3'Top'#3#24#1#5'Width'#3#210#0#7'Caption'#6#7'Options'#12 + +'ClientHeight'#2'N'#11'ClientWidth'#3#206#0#8'TabOrder'#2#13#0#9'TCheckBox'#8 + +'StatsChk'#4'Left'#2#9#6'Height'#2#17#3'Top'#2#6#5'Width'#2'v'#7'Caption'#6 + +#22'Descriptive Statistics'#8'TabOrder'#2#0#0#0#9'TCheckBox'#8'ModelChk'#4'L' + +'eft'#2#9#6'Height'#2#17#3'Top'#2#24#5'Width'#3#161#0#7'Caption'#6#29'Each M' + +'odel Correlation Matrix'#8'TabOrder'#2#1#0#0#9'TCheckBox'#8'Reprochk'#4'Lef' + +'t'#2#9#6'Height'#2#17#3'Top'#2'('#5'Width'#3#163#0#7'Caption'#6#29'Reproduc' + +'ed Correlation Matrix'#8'TabOrder'#2#2#0#0#9'TCheckBox'#7'SaveChk'#4'Left'#2 + +#9#6'Height'#2#17#3'Top'#2'8'#5'Width'#3#129#0#7'Caption'#6#23'Save Correlat' + +'ion Matrix'#8'TabOrder'#2#3#0#0#0#7'TButton'#8'ResetBtn'#4'Left'#3#224#0#6 + +'Height'#2#27#3'Top'#3'A'#1#5'Width'#2'E'#7'Caption'#6#5'Reset'#7'OnClick'#7 + +#13'ResetBtnClick'#8'TabOrder'#2#14#0#0#7'TButton'#9'CancelBtn'#4'Left'#3'@' + +#1#6'Height'#2#27#3'Top'#3'A'#1#5'Width'#2'E'#7'Caption'#6#6'Cancel'#11'Moda' + +'lResult'#2#2#7'OnClick'#7#14'CancelBtnClick'#8'TabOrder'#2#15#0#0#7'TButton' + +#10'ComputeBtn'#4'Left'#3#160#1#6'Height'#2#27#3'Top'#3'A'#1#5'Width'#2'E'#7 + +'Caption'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#16#0#0 + +#7'TButton'#9'ReturnBtn'#4'Left'#3#6#2#6'Height'#2#27#3'Top'#3'A'#1#5'Width' + +#2'E'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#7'OnClick'#7#14'ReturnBtnCl' + +'ick'#8'TabOrder'#2#17#0#0#11'TSaveDialog'#11'SaveDialog1'#4'left'#3#230#0#3 + +'top'#3#30#1#0#0#0 +]); diff --git a/applications/lazstats/source_orig/pathunit.pas b/applications/lazstats/source_orig/pathunit.pas new file mode 100644 index 000000000..c00109a04 --- /dev/null +++ b/applications/lazstats/source_orig/pathunit.pas @@ -0,0 +1,777 @@ +unit PathUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, MainUnit, OutPutUnit, FunctionsLib, + GraphLib, Globals, MatrixLib, DataProcs, Math; + +type + + { TPathFrm } + + TPathFrm = class(TForm) + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + SaveDialog1: TSaveDialog; + StatsChk: TCheckBox; + ModelChk: TCheckBox; + Reprochk: TCheckBox; + SaveChk: TCheckBox; + GroupBox1: TGroupBox; + ResetModelBtn: TButton; + CausedInBtn: TBitBtn; + CausedOutBtn: TBitBtn; + CausingInBtn: TBitBtn; + CausingOutBtn: TBitBtn; + CausedEdit: TEdit; + Label4: TLabel; + Label5: TLabel; + CausingList: TListBox; + ModelNo: TEdit; + InBtn: TBitBtn; + Label3: TLabel; + OutBtn: TBitBtn; + Label1: TLabel; + Label2: TLabel; + VarList: TListBox; + ScrollBar: TScrollBar; + ListBox1: TListBox; + procedure CancelBtnClick(Sender: TObject); + procedure CausedInBtnClick(Sender: TObject); + procedure CausedOutBtnClick(Sender: TObject); + procedure CausingInBtnClick(Sender: TObject); + procedure CausingOutBtnClick(Sender: TObject); + procedure ComputeBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure InBtnClick(Sender: TObject); + procedure OutBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + procedure ResetModelBtnClick(Sender: TObject); + procedure ReturnBtnClick(Sender: TObject); + procedure ScrollBarChange(Sender: TObject); + private + { private declarations } + Model : integer; + ModelDefined : BoolDyneVec; + causedseq : IntDyneVec; + nocausing : IntDyneVec; + causingseq : IntDyneMat; + NoModels : integer; + public + { public declarations } + end; + +var + PathFrm: TPathFrm; + +implementation + +{ TPathFrm } + +procedure TPathFrm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + if causingseq = nil then SetLength(causingseq,NoVariables,NoVariables); + if ModelDefined = nil then SetLength(ModelDefined,NoVariables); + if nocausing = nil then SetLength(nocausing,NoVariables); + if causedseq = nil then SetLength(causedseq,NoVariables); + ListBox1.Clear; + CausingList.Clear; + VarList.Clear; + OutBtn.Visible := false; + InBtn.Visible := true; + CausedOutBtn.Visible := false; + CausedInBtn.Visible := true; + CausingInBtn.Visible := true; + CausingOutBtn.Visible := false; + ModelNo.Text := '1'; + ScrollBar.Position := 1; + CausedEdit.Text := ''; + StatsChk.Checked := true; + ModelChk.Checked := true; + ReproChk.Checked := true; + SaveChk.Checked := false; + NoModels := 0; + for i := 1 to NoVariables do + ListBox1.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); + for i := 1 to NoVariables do ModelDefined[i-1] := false; +end; + +procedure TPathFrm.ResetModelBtnClick(Sender: TObject); +VAR i : integer; +begin + Model := ScrollBar.Position; + if CausedEdit.Text <> '' then CausedOutBtnClick(self); + if CausingList.Items.Count > 0 then CausingList.Clear; + causedseq[Model-1] := 0; + nocausing[Model-1] := 0; + for i := 1 to nocausing[Model-1] do causingseq[Model-1,i-1] := 0; + ModelDefined[Model-1] := false; +end; + +procedure TPathFrm.ReturnBtnClick(Sender: TObject); +begin + causedseq := nil; + nocausing := nil; + causingseq := nil; + ModelDefined := nil; + PathFrm.Hide; +end; + +procedure TPathFrm.ScrollBarChange(Sender: TObject); +var + i, j, col : integer; + cellstring : string; +begin + ScrollBar.Max := NoVariables + 1; + if ScrollBar.Position > NoVariables then + begin + ScrollBar.Position := NoVariables; + exit; + end; + if ScrollBar.Position > NoModels then + begin + if (CausedEdit.Text <> '') and (CausingList.Items.Count > 0) then + begin // save model information + Model := ScrollBar.Position - 1; + ModelDefined[Model-1] := true; + nocausing[Model-1] := CausingList.Items.Count; + NoModels := NoModels + 1; + for i := 1 to NoVariables do + begin + cellstring := OS3MainFrm.DataGrid.Cells[i,0]; + if cellstring = CausedEdit.Text then causedseq[Model-1] := i; + for j := 0 to CausingList.Items.Count - 1 do + begin + if cellstring = CausingList.Items.Strings[j] then + causingseq[Model-1,j] := i; + end; + end; + CausingList.Clear; + CausedEdit.Text := ''; + CausedInBtn.Visible := true; + CausedOutBtn.Visible := false; + CausingInBtn.Visible := true; + CausingOutBtn.Visible := false; + end; + end; + + if ScrollBar.Position <> Model then + begin + CausingList.Clear; + ModelNo.Text := IntToStr(ScrollBar.Position); + Model := ScrollBar.Position; + CausedEdit.Text := ''; + if ModelDefined[Model-1] then // model exists - reload data + begin + col := causedseq[Model-1]; + if col <> 0 then + begin + CausedEdit.Text := OS3MainFrm.DataGrid.Cells[col,0]; + CausingList.Clear; + end + else + begin + CausedEdit.Text := ''; + CausingList.Clear; + exit; + end; + for i := 1 to nocausing[Model-1] do + begin + col := causingseq[Model-1,i-1]; + cellstring := OS3MainFrm.DataGrid.Cells[col,0]; + CausingList.Items.Add(cellstring); + end; + end; + end; +end; + +procedure TPathFrm.FormShow(Sender: TObject); +begin + causedseq := nil; + nocausing := nil; + causingseq := nil; + ModelDefined := nil; + ResetBtnClick(self); +end; + +procedure TPathFrm.InBtnClick(Sender: TObject); +VAR i, index : integer; +begin + index := ListBox1.Items.Count; + i := 0; + while i < index do + begin + if (ListBox1.Selected[i]) then + begin + VarList.Items.Add(ListBox1.Items.Strings[i]); + ListBox1.Items.Delete(i); + index := index - 1; + i := 0; + end + else i := i + 1; + end; + OutBtn.Visible := true; +end; + +procedure TPathFrm.OutBtnClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + if index < 0 then + begin + OutBtn.Visible := false; + exit; + end; + VarList.Items.Delete(index); +end; + +procedure TPathFrm.CancelBtnClick(Sender: TObject); +begin + causedseq := nil; + nocausing := nil; + causingseq := nil; + ModelDefined := nil; + PathFrm.Hide; +end; + +procedure TPathFrm.CausedInBtnClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + CausedEdit.Text := VarList.Items.Strings[index]; + CausedOutBtn.Visible := true; + CausedInBtn.Visible := false; +end; + +procedure TPathFrm.CausedOutBtnClick(Sender: TObject); +begin + CausedEdit.Text := ''; + CausedOutBtn.Visible := false; + CausedInBtn.Visible := true; +end; + +procedure TPathFrm.CausingInBtnClick(Sender: TObject); +VAR i, index : integer; +begin + index := VarList.Items.Count; + for i := 0 to index-1 do + begin + if (VarList.Selected[i]) then + CausingList.Items.Add(VarList.Items.Strings[i]); + end; + CausingOutBtn.Visible := true; +end; + +procedure TPathFrm.CausingOutBtnClick(Sender: TObject); +VAR index : integer; +begin + index := CausingList.ItemIndex; + if index < 0 then + begin + CausingOutBtn.Visible := false; + exit; + end; + CausingList.Items.Delete(index); +end; + +procedure TPathFrm.ComputeBtnClick(Sender: TObject); +var + i, j, k, col, row, NoVars, nocaused, NoSelected, NoIndepVars : integer; + count, IER, NoIndep, dep, indep, noexogenous, t, L, L2 : integer; + constant, StdErrEst, ProbOut, R2, Temp, d2, sum, absdiff : double; + cellstring, outline : string; + ColNoSelected, selected : IntDyneVec; + IndepIndex : IntDyneVec; + rmat, WorkMat, PathCoef, IndMatrix, InvMatrix, e, W : DblDyneMat; + means, variances, stddevs, beta, p : DblDyneVec; + zvals : DblDyneMat; // z scores for path model + genedz : IntDyneVec; // list of z's created for path models + causal : IntDyneMat; + exogenous : IntDyneVec; + RowLabels, ColLabels, Labels: StrDyneVec; + title : string; + matched : boolean; + prtopt : boolean; + errorcode : boolean; + done : boolean; + zscore : double; +begin + if NoModels < ScrollBar.Position then + begin + Model := ScrollBar.Position; + ModelDefined[Model-1] := true; + nocausing[Model-1] := CausingList.Items.Count; + NoModels := NoModels + 1; + for i := 1 to NoVariables do + begin + cellstring := OS3MainFrm.DataGrid.Cells[i,0]; + if cellstring = CausedEdit.Text then causedseq[Model-1] := i; + for j := 0 to CausingList.Items.Count - 1 do + begin + if cellstring = CausingList.Items.Strings[j] then + causingseq[Model-1,j] := i; + end; + end; + CausingList.Clear; + CausedEdit.Text := ''; + CausedInBtn.Visible := true; + CausedOutBtn.Visible := false; + CausingInBtn.Visible := true; + CausingOutBtn.Visible := false; + end; + + nocaused := NoModels; + SetLength(rmat,NoVariables+1,NoVariables+1); + SetLength(WorkMat,NoVariables+1,NoVariables+1); + SetLength(PathCoef,NoVariables,NoVariables); + SetLength(IndMatrix,NoVariables,NoVariables); + SetLength(InvMatrix,NoVariables,NoVariables); + SetLength(e,NoVariables,NoVariables); + SetLength(W,NoVariables,NoVariables); + SetLength(means,NoVariables); + SetLength(variances,NoVariables); + SetLength(stddevs,NoVariables); + SetLength(beta,NoVariables); + SetLength(p,NoVariables*NoVariables); + SetLength(Causal,2,NoVariables*NoVariables); + SetLength(RowLabels,NoCases); + SetLength(ColLabels,NoVariables); + SetLength(Labels,NoVariables); + SetLength(IndepIndex,NoVariables); + SetLength(exogenous,NoVariables); + SetLength(ColNoSelected,NoVariables); + SetLength(selected,NoVariables); + SetLength(zvals,NoCases,NoVariables); + SetLength(genedz,NoVariables); + + // get and show model parameters + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('PATH ANALYSIS RESULTS'); + OutPutFrm.RichEdit.Lines.Add(''); + + for i := 1 to nocaused do + begin + col := causedseq[i-1]; + outline := 'CAUSED VARIABLE: '; + outline := outline + OS3MainFrm.DataGrid.Cells[col,0]; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(' Causing Variables:'); + for j := 1 to nocausing[i-1] do + begin + col := causingseq[i-1,j-1]; + outline := ' '; + outline := outline + OS3MainFrm.DataGrid.Cells[col,0]; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + end; + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + + // get correlations among all variables selected for the analysis + NoSelected := VarList.Items.Count; + for j := 1 to NoVariables do + begin + cellstring := OS3MainFrm.DataGrid.Cells[j,0]; + for i := 1 to NoSelected do + begin + if cellstring = VarList.Items.Strings[i-1] then + begin + ColNoSelected[i-1] := j; + RowLabels[i-1] := cellstring; + end; + end; + end; + count := NoCases; + Correlations(NoSelected,ColNoSelected,rmat,means,variances,stddevs, + errorcode,count); + if SaveChk.Checked then + begin + SaveDialog1.Filter := 'Matrix files (*.MAT)|*.MAT|All files (*.*)|*.*'; + SaveDialog1.FilterIndex := 1; + SaveDialog1.Execute; + MATSAVE(rmat,NoSelected,NoSelected,means,stddevs,count,RowLabels, + RowLabels,SaveDialog1.FileName); + end; + + if StatsChk.Checked then + begin + title := 'Correlation Matrix'; + MAT_PRINT(rmat,NoSelected,NoSelected,title,RowLabels,RowLabels,count); + title := 'MEANS'; + DynVectorPrint(means,NoSelected,title,RowLabels,count); + title := 'VARIANCES'; + DynVectorPrint(variances,NoSelected,title,RowLabels,count); + title := 'STANDARD DEVIATIONS'; + DynVectorPrint(stddevs,NoSelected,title,RowLabels,count); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + + // initialize reconstruction matrix, weights matrix and path coefficients + for i := 0 to NoSelected-1 do + begin + for j := 0 to NoSelected-1 do + begin + e[i,j] := 0.0; + W[i,j] := 0.0; + PathCoef[i,j] := 0.0; + end; + end; + + //Now, do the regression analysis for each model + for i := 1 to nocaused do + begin + NoVars := nocausing[i-1] + 1; + for j := 1 to nocausing[i-1] do + begin + col := causingseq[i-1,j-1]; + IndepIndex[j-1] := j; // independents + selected[j-1] := col; + Labels[j-1] := OS3MainFrm.DataGrid.Cells[col,0]; + end; + row := causedseq[i-1]; //sequence no. of caused variable + IndepIndex[NoVars-1] := row; // dependent + selected[NoVars-1] := row; + Labels[NoVars-1] := OS3MainFrm.DataGrid.Cells[row,0]; + + // get correlation matrix for this model + Correlations(NoVars,selected,WorkMat,means,variances,stddevs, + errorcode,count); + if ModelChk.Checked then + begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Dependent Variable = %s',[OS3MainFrm.DataGrid.Cells[row,0]]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + title := 'Correlation Matrix'; + MAT_PRINT(WorkMat,NoVars,NoVars,title,Labels,Labels,count); + title := 'MEANS'; + DynVectorPrint(means,NoVars,title,Labels,count); + title := 'VARIANCES'; + DynVectorPrint(variances,NoVars,title,Labels,count); + title := 'STANDARD DEVIATIONS'; + DynVectorPrint(stddevs,NoVars,title,Labels,count); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + + // Get regression analysis for this model + ProbOut := 0.999; + NoIndepVars := NoVars - 1; + if StatsChk.Checked then + begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Dependent Variable = %s',[OS3MainFrm.DataGrid.Cells[row,0]]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + end; + if StatsChk.Checked then prtopt := true else prtopt := false; + MReg2(count,NoVars,NoIndepVars,IndepIndex,WorkMat,IndMatrix, + Labels,R2,beta,means,variances,IER,StdErrEst,constant, + ProbOut,prtopt,false,false); + if prtopt then + begin + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + + for j := 1 to nocausing[i-1] do + begin + col := causingseq[i-1,j-1]; + PathCoef[row-1,col-1] := beta[j-1]; + end; + end; // next i (caused regressions) + + //Now, reconstruct the correlation matrix from path coefficients + //First, obtain list of exogenous variables + noexogenous := 0; + for i := 1 to NoSelected do + begin + matched := false; + col := ColNoSelected[i-1]; + for j := 1 to nocaused do + if (causedseq[j-1] = col) then matched := true; + if ( not matched) then + begin + exogenous[noexogenous] := col; + noexogenous := noexogenous + 1; + end; + end; + + // transform raw scores to z scores for exogenous variables + Correlations(NoSelected,ColNoSelected,rmat,means,variances,stddevs, + errorcode,count); + for i := 1 to noselected do genedz[i-1] := 0; // initialize + for k := 1 to noexogenous do + begin + col := exogenous[k-1]; + for j := 1 to noselected do + begin // find position of corresponding mean and std.dev. + if ColNoSelected[j-1] = col then row := j; + end; + for i := 1 to NoCases do + begin + zvals[i-1,col-1] := StrToFloat(OS3MainFrm.DataGrid.Cells[col,i]); + zvals[i-1,col-1] := (zvals[i-1,col-1] - means[row-1]) / stddevs[row-1]; + RowLabels[i-1] := format('Subject %d',[i]); + end; + genedz[col-1] := 1; // mark as generated + end; +{ + // print matrix of path z scores for exogenous variables + title := 'Data Array of Subject exogenous z Scores'; + MAT_PRINT(zvals,NoCases,NoSelected,title,RowLabels,ColLabels,NoCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; +} + + for i := 1 to NoVariables do + begin + cellstring := OS3MainFrm.DataGrid.Cells[i,0]; + for j := 1 to NoSelected do + begin + if cellstring = VarList.Items.Strings[j-1] then + begin + RowLabels[i-1] := cellstring; + ColLabels[i-1] := cellstring; + end; + end; + end; + + //Build matrix of path coefficients + for i := 1 to nocaused do + begin + row := causedseq[i-1]; + for j := 1 to nocausing[i-1] do + begin + col := causingseq[i-1,j-1]; + W[row-1,col-1] := PathCoef[row-1,col-1]; + end; + end; + + //Print results + if StatsChk.Checked then + begin + title := 'Matrix of Path Coefficients in Rows'; + MAT_PRINT(W,NoSelected,NoSelected,title,ColLabels,ColLabels,count); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + + //Build models vectors + k := 0; + for i := 1 to nocaused do + begin + for j := 1 to nocausing[i-1] do + begin + k := k + 1; + causal[0,k-1] := causedseq[i-1]; + causal[1,k-1] := causingseq[i-1,j-1]; + row := causedseq[i-1]; + col := causingseq[i-1,j-1]; + p[k-1] := PathCoef[row-1,col-1]; + end; + end; + NoModels := k; + + //Sort on resultant then causing variables + for i := 1 to NoModels - 1 do + begin + for j := i + 1 to NoModels do + begin + if (causal[0,i-1] > causal[0,j-1]) then // swap + begin + t := causal[0,i-1]; + causal[0,i-1] := causal[0,j-1]; + causal[0,j-1] := t; + t := causal[1,i-1]; + causal[1,i-1] := causal[1,j-1]; + causal[1,j-1] := t; + Temp := p[i-1]; + p[i-1] := p[j-1]; + p[j-1] := Temp; + end; + end; + end; + for i := 1 to NoModels - 1 do + begin + for j := i + 1 to NoModels do + begin + if ((causal[0,i-1] = causal[0,j-1]) and (causal[1,i-1] > causal[1,j-1])) then + begin + t := causal[0,i-1]; + causal[0,i-1] := causal[0,j-1]; + causal[0,j-1] := t; + t := causal[1,i-1]; + causal[1,i-1] := causal[1,j-1]; + causal[1,j-1] := t; + Temp := p[i-1]; + p[i-1] := p[j-1]; + p[j-1] := Temp; + end; + end; + end; + + OutPutFrm.RichEdit.Lines.Add('SUMMARY OF CAUSAL MODELS'); + OutPutFrm.RichEdit.Lines.Add('Var. Caused Causing Var. Path Coefficient'); + + for i := 1 to NoModels do + begin + outline := format('%12s %12s %6.3f', + [OS3MainFrm.DataGrid.Cells[causal[0,i-1],0], + OS3MainFrm.DataGrid.Cells[causal[1,i-1],0], + p[i-1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + + //Get reproduced correlation matrix in e + done := false; + while not done do + begin + for i := 1 to nocaused do // check each caused for use of existing z values + begin + for j := 1 to nocausing[i-1] do + begin + count := 0; + for L := 1 to noselected do + begin + if genedz[L-1] = 1 then count := count + 1; + end; + end; + if count >= nocausing[i-1] then // calculate path z + begin + row := causedseq[i-1]; // generation z column & row of path coef. + for j := 1 to nocausing[i-1] do + begin // sum of Path coefficients times corresponding z's + col := causingseq[i-1,j-1]; // column of path coefficient + for k := 1 to NoCases do + begin + zscore := zvals[k-1,col-1]; // causing z score + zvals[k-1,row-1] := zvals[k-1,row-1] + zscore * PathCoef[row-1,col-1]; + end; + end; + genedz[row-1] := 1; // mark as generated + end; // if count equals no. of causing variables + count := 0; // check for completion of all z's + for j := 1 to noselected do + if genedz[j-1] = 1 then count := count + 1; + if count = noselected then done := true; + end; // next i caused variable + end; // while not done + + // print matrix of path z scores + for i := 1 to NoCases do RowLabels[i-1] := format('Subject %d',[i]); + title := 'Data Array of Subject Path z Scores'; + MAT_PRINT(zvals,NoCases,NoSelected,title,RowLabels,ColLabels,NoCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + + // now calculate the correlation among the generated z values + for i := 1 to noselected do + begin // initialize arrays + for j := 1 to noselected do + begin + e[i-1,j-1] := 0.0; + end; + means[i-1] := 0.0; + stddevs[i-1] := 0.0; + end; + for k := 1 to NoCases do + begin + for i := 1 to noselected do + begin + for j := 1 to noselected do + begin + e[i-1,j-1] := e[i-1,j-1] + zvals[k-1,i-1] * zvals[k-1,j-1]; + end; + means[i-1] := means[i-1] + zvals[k-1,i-1]; + stddevs[i-1] := stddevs[i-1] + (zvals[k-1,i-1] * zvals[k-1,i-1]); + end; + end; + for i := 1 to noselected do + begin + stddevs[i-1] := stddevs[i-1] - (means[i-1] * means[i-1] / NoCases); + stddevs[i-1] := stddevs[i-1] / (NoCases - 1); + stddevs[i-1] := sqrt(stddevs[i-1]); + for j := 1 to noselected do + begin // covariances + e[i-1,j-1] := e[i-1,j-1] - (means[i-1] * means[j-1] / NoCases); + e[i-1,j-1] := e[i-1,j-1] / (NoCases - 1); + end; + means[i-1] := means[i-1] / NoCases; + end; + for i := 1 to noselected do + begin + for j := 1 to noselected do + begin + e[i-1,j-1] := e[i-1,j-1] / (stddevs[i-1]*stddevs[j-1]); + end; + end; + + if (ReproChk.Checked) then + begin + title := 'Reproduced Correlation Matrix'; + MAT_PRINT(e,NoSelected,NoSelected,title,ColLabels,ColLabels,count); + end; + + //Examine discrepencies + d2 := 0.0; + sum := 0.0; + for i := 1 to NoSelected do + begin + for j := 1 to NoSelected do + begin + absdiff := abs(rmat[i-1,j-1] - e[i-1,j-1]); + sum := sum + absdiff; + if (absdiff > d2) then d2 := absdiff; + end; + end; + + OutPutFrm.RichEdit.Lines.Add('Average absolute difference between observed and reproduced'); + outline := format('coefficients := %5.3f',[sum / (NoSelected * NoSelected)]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Maximum difference found := %5.3f',[d2]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.ShowModal; + + // clean up heap (delete last allocated first) + genedz := nil; + zvals := nil; + selected := nil; + ColNoSelected := nil; + exogenous := nil; + IndepIndex := nil; + Labels := nil; + ColLabels := nil; + RowLabels := nil; + Causal := nil; + p := nil; + beta := nil; + stddevs := nil; + variances := nil; + means := nil; + W := nil; + e := nil; + InvMatrix := nil; + IndMatrix := nil; + PathCoef := nil; + WorkMat := nil; + rmat := nil; +end; + +initialization + {$I pathunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/pchartunit.lfm b/applications/lazstats/source_orig/pchartunit.lfm new file mode 100644 index 000000000..5b69d827f --- /dev/null +++ b/applications/lazstats/source_orig/pchartunit.lfm @@ -0,0 +1,155 @@ +object pChartFrm: TpChartFrm + Left = 143 + Height = 264 + Top = 120 + Width = 512 + Caption = 'p Control Chart' + ClientHeight = 264 + ClientWidth = 512 + OnShow = FormShow + LCLVersion = '0.9.28.2' + object Label1: TLabel + Left = 10 + Height = 14 + Top = 8 + Width = 90 + Caption = 'Selection Variables' + ParentColor = False + end + object Label2: TLabel + Left = 183 + Height = 14 + Top = 8 + Width = 107 + Caption = 'Measurement Variable' + ParentColor = False + end + object Label3: TLabel + Left = 186 + Height = 14 + Top = 72 + Width = 106 + Caption = 'No. of Parts Sampled:' + ParentColor = False + end + object Label4: TLabel + Left = 184 + Height = 14 + Top = 103 + Width = 156 + Caption = 'Expected Proportion of Defects:' + ParentColor = False + end + object VarList: TListBox + Left = 10 + Height = 221 + Top = 24 + Width = 162 + ItemHeight = 0 + OnClick = VarListClick + TabOrder = 0 + end + object MeasEdit: TEdit + Left = 183 + Height = 21 + Top = 32 + Width = 152 + TabOrder = 1 + Text = 'MeasEdit' + end + object NEdit: TEdit + Left = 344 + Height = 21 + Top = 65 + Width = 42 + TabOrder = 2 + Text = 'NEdit' + end + object PEdit: TEdit + Left = 344 + Height = 21 + Top = 96 + Width = 42 + TabOrder = 3 + Text = 'Edit1' + end + object SigmaOpts: TRadioGroup + Left = 184 + Height = 122 + Top = 128 + Width = 202 + AutoFill = True + Caption = 'No. Of Sigma Units for UCL and LCL' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 104 + ClientWidth = 198 + Items.Strings = ( + '3 Sigma (Default)' + '2 Sigma' + '1 Sigma' + 'X Sigma where X = ' + ) + TabOrder = 4 + end + object ResetBtn: TButton + Left = 417 + Height = 29 + Top = 72 + Width = 75 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 5 + end + object CancelBtn: TButton + Left = 417 + Height = 29 + Top = 120 + Width = 75 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 6 + end + object ComputeBtn: TButton + Left = 416 + Height = 29 + Top = 168 + Width = 75 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 7 + end + object Return: TButton + Left = 416 + Height = 29 + Top = 216 + Width = 75 + Caption = 'Return' + ModalResult = 1 + TabOrder = 8 + end + object XSigmaEdit: TEdit + Left = 320 + Height = 21 + Top = 216 + Width = 41 + TabOrder = 9 + Text = 'XSigmaEdit' + end + object HelpBtn: TButton + Tag = 137 + Left = 416 + Height = 28 + Top = 24 + Width = 76 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 10 + end +end diff --git a/applications/lazstats/source_orig/pchartunit.lrs b/applications/lazstats/source_orig/pchartunit.lrs new file mode 100644 index 000000000..c731f8399 --- /dev/null +++ b/applications/lazstats/source_orig/pchartunit.lrs @@ -0,0 +1,43 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TpChartFrm','FORMDATA',[ + 'TPF0'#10'TpChartFrm'#9'pChartFrm'#4'Left'#3#143#0#6'Height'#3#8#1#3'Top'#2'x' + +#5'Width'#3#0#2#7'Caption'#6#15'p Control Chart'#12'ClientHeight'#3#8#1#11'C' + +'lientWidth'#3#0#2#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#8'0.9.28.2'#0#6 + +'TLabel'#6'Label1'#4'Left'#2#10#6'Height'#2#14#3'Top'#2#8#5'Width'#2'Z'#7'Ca' + +'ption'#6#19'Selection Variables'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4 + +'Left'#3#183#0#6'Height'#2#14#3'Top'#2#8#5'Width'#2'k'#7'Caption'#6#20'Measu' + +'rement Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#3#186#0#6 + +'Height'#2#14#3'Top'#2'H'#5'Width'#2'j'#7'Caption'#6#21'No. of Parts Sampled' + +':'#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#3#184#0#6'Height'#2#14 + +#3'Top'#2'g'#5'Width'#3#156#0#7'Caption'#6#31'Expected Proportion of Defects' + +':'#11'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4'Left'#2#10#6'Height'#3#221 + +#0#3'Top'#2#24#5'Width'#3#162#0#10'ItemHeight'#2#0#7'OnClick'#7#12'VarListCl' + +'ick'#8'TabOrder'#2#0#0#0#5'TEdit'#8'MeasEdit'#4'Left'#3#183#0#6'Height'#2#21 + +#3'Top'#2' '#5'Width'#3#152#0#8'TabOrder'#2#1#4'Text'#6#8'MeasEdit'#0#0#5'TE' + +'dit'#5'NEdit'#4'Left'#3'X'#1#6'Height'#2#21#3'Top'#2'A'#5'Width'#2'*'#8'Tab' + +'Order'#2#2#4'Text'#6#5'NEdit'#0#0#5'TEdit'#5'PEdit'#4'Left'#3'X'#1#6'Height' + +#2#21#3'Top'#2'`'#5'Width'#2'*'#8'TabOrder'#2#3#4'Text'#6#5'Edit1'#0#0#11'TR' + +'adioGroup'#9'SigmaOpts'#4'Left'#3#184#0#6'Height'#2'z'#3'Top'#3#128#0#5'Wid' + +'th'#3#202#0#8'AutoFill'#9#7'Caption'#6'"No. Of Sigma Units for UCL and LCL' + +#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizing.TopBottomSpacing'#2#6#29 + +'ChildSizing.EnlargeHorizontal'#7#24'crsHomogenousChildResize'#27'ChildSizin' + +'g.EnlargeVertical'#7#24'crsHomogenousChildResize'#28'ChildSizing.ShrinkHori' + +'zontal'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVertical'#7#14'crsScaleCh' + +'ilds'#18'ChildSizing.Layout'#7#29'cclLeftToRightThenTopToBottom'#27'ChildSi' + +'zing.ControlsPerLine'#2#1#12'ClientHeight'#2'h'#11'ClientWidth'#3#198#0#13 + +'Items.Strings'#1#6#17'3 Sigma (Default)'#6#7'2 Sigma'#6#7'1 Sigma'#6#18'X S' + +'igma where X = '#0#8'TabOrder'#2#4#0#0#7'TButton'#8'ResetBtn'#4'Left'#3#161 + +#1#6'Height'#2#29#3'Top'#2'H'#5'Width'#2'K'#7'Caption'#6#5'Reset'#7'OnClick' + +#7#13'ResetBtnClick'#8'TabOrder'#2#5#0#0#7'TButton'#9'CancelBtn'#4'Left'#3 + +#161#1#6'Height'#2#29#3'Top'#2'x'#5'Width'#2'K'#7'Caption'#6#6'Cancel'#11'Mo' + +'dalResult'#2#2#8'TabOrder'#2#6#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3#160#1 + +#6'Height'#2#29#3'Top'#3#168#0#5'Width'#2'K'#7'Caption'#6#7'Compute'#7'OnCli' + +'ck'#7#15'ComputeBtnClick'#8'TabOrder'#2#7#0#0#7'TButton'#6'Return'#4'Left'#3 + +#160#1#6'Height'#2#29#3'Top'#3#216#0#5'Width'#2'K'#7'Caption'#6#6'Return'#11 + +'ModalResult'#2#1#8'TabOrder'#2#8#0#0#5'TEdit'#10'XSigmaEdit'#4'Left'#3'@'#1 + +#6'Height'#2#21#3'Top'#3#216#0#5'Width'#2')'#8'TabOrder'#2#9#4'Text'#6#10'XS' + +'igmaEdit'#0#0#7'TButton'#7'HelpBtn'#3'Tag'#3#137#0#4'Left'#3#160#1#6'Height' + +#2#28#3'Top'#2#24#5'Width'#2'L'#7'Caption'#6#4'Help'#7'OnClick'#7#12'HelpBtn' + +'Click'#8'TabOrder'#2#10#0#0#0 +]); diff --git a/applications/lazstats/source_orig/pchartunit.pas b/applications/lazstats/source_orig/pchartunit.pas new file mode 100644 index 000000000..1f57ea816 --- /dev/null +++ b/applications/lazstats/source_orig/pchartunit.pas @@ -0,0 +1,291 @@ +unit PCHARTUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, ExtCtrls, MainUnit, Globals, Math, OutPutUnit, Buttons, DataProcs, + FunctionsLib, BlankFrmUnit, contexthelpunit; + +type + + { TpChartFrm } + + TpChartFrm = class(TForm) + HelpBtn: TButton; + XSigmaEdit: TEdit; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + Return: TButton; + NEdit: TEdit; + PEdit: TEdit; + Label3: TLabel; + Label4: TLabel; + MeasEdit: TEdit; + Label1: TLabel; + Label2: TLabel; + SigmaOpts: TRadioGroup; + VarList: TListBox; + procedure ComputeBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + procedure VarListClick(Sender: TObject); + private + { private declarations } + procedure PlotMeans(VAR means : DblDyneVec; + NoGrps : integer; + UCL, LCL, GrandMean, Target : double; + Sender: TObject); + public + { public declarations } + end; + +var + pChartFrm: TpChartFrm; + +implementation + +{ TpChartFrm } + +procedure TpChartFrm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + VarList.Clear; + MeasEdit.Text := ''; + NEdit.Text := ''; + PEdit.Text := ''; + XSigmaEdit.Text := ''; + SigmaOpts.ItemIndex := 0; + for i := 1 to NoVariables do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); +end; + +procedure TpChartFrm.VarListClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + MeasEdit.Text := VarList.Items.Strings[index]; +end; + +procedure TpChartFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TpChartFrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +procedure TpChartFrm.ComputeBtnClick(Sender: TObject); +var + P, N, variance, stddev, UCL, LCL, X, Sigma : double; + AVG : double; + i, measvar : integer; + cellstring, outline : string; + Obsp : DblDyneVec; +begin + AVG := 0.0; + measvar := 1; + Sigma := 3; + N := StrToFloat(NEdit.Text); + P := StrToFloat(PEdit.Text); + if SigmaOpts.ItemIndex = 3 then + Sigma := StrToFloat(XSigmaEdit.Text); + if SigmaOpts.ItemIndex = 0 then Sigma := 3.0; + if SigmaOpts.ItemIndex = 1 then Sigma := 2.0; + if SigmaOpts.ItemIndex = 2 then Sigma := 1.0; + for i := 1 to NoVariables do + begin + cellstring := OS3MainFrm.DataGrid.Cells[i,0]; + if cellstring = MeasEdit.Text then measvar := i; + end; + variance := P * (1.0 - P) / N; + stddev := sqrt(variance); + SetLength(obsp,NoCases + 1); + for i := 1 to NoCases do + begin + X := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[measvar,i])); + X := X / N; + obsp[i] := X; + AVG := AVG + X; + end; + AVG := AVG / NoCases; + UCL := P + Sigma * stddev; + LCL := P - Sigma * stddev; + + // output results + OutPutFrm.RichEdit.Lines.Add('Defects p Control Chart Results'); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Sample No. Proportion'); + OutPutFrm.RichEdit.Lines.Add('__________ __________'); + for i := 1 to NoCases do + begin + outline := format(' %5d %6.3f',[i,obsp[i]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Target proportion = %6.4f',[P]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Sample size for each observation = %6.0f',[N]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Average proportion observed = %6.4f',[AVG]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.ShowModal; + + // Now create plot + PlotMeans(obsp,NoCases,UCL,LCL, Avg, P,self); + obsp := nil; +end; + +procedure TpChartFrm.PlotMeans(var means: DblDyneVec; NoGrps: integer; UCL, + LCL, GrandMean, Target: double; Sender: TObject); +var + i, xpos, ypos, hleft, hright, vtop, vbottom, imagewide : integer; + vhi, hwide, offset, strhi, oldxpos : integer; + imagehi, maxval, minval, valincr, Yvalue : double; + Title : string; +begin + maxval := -10000.0; + minval := 10000.0; + for i := 1 to NoGrps do + begin + if means[i] > maxval then maxval := means[i]; + if means[i] < minval then minval := means[i]; + end; + if UCL > maxval then maxval := UCL; + if LCL < minval then minval := LCL; + BlankFrm.Image1.Canvas.Clear; + BlankFrm.Show; + Title := 'p CONTROL CHART FOR : ' + OS3MainFrm.FileNameEdit.Text; + BlankFrm.Caption := Title; + imagewide := BlankFrm.Image1.Width; + imagehi := BlankFrm.Image1.Height; + vtop := 20; + vbottom := round(imagehi) - 80; + vhi := vbottom - vtop; + hleft := 100; + hright := imagewide - 80; + hwide := hright - hleft; + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + BlankFrm.Image1.Canvas.Brush.Color := clWhite; + + // Draw chart border + BlankFrm.Image1.Canvas.Rectangle(hleft,vtop-10,hleft+hwide,vtop+vhi+10); + + // draw Grand Mean + ypos := round(vhi * ( (maxval - GrandMean) / (maxval - minval))); + ypos := ypos + vtop; + xpos := hleft; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + xpos := hright; + BlankFrm.Image1.Canvas.Pen.Color := clBlue; + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + Title := 'MEAN'; + strhi := BlankFrm.Image1.Canvas.TextHeight(Title); + ypos := ypos - strhi div 2; + BlankFrm.Image1.Canvas.Brush.Color := clLtGray; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title); + + // draw target + ypos := round(vhi * ( (maxval - Target) / (maxval - minval))); + ypos := ypos + vtop; + xpos := hleft; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + xpos := hright; + BlankFrm.Image1.Canvas.Pen.Color := clRed; + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + Title := 'TARGET'; + strhi := BlankFrm.Image1.Canvas.TextHeight(Title); + ypos := ypos - strhi div 2; + BlankFrm.Image1.Canvas.Brush.Color := clLtGray; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title); + + // draw horizontal axis + BlankFrm.Image1.Canvas.MoveTo(hleft,vbottom + 20); + BlankFrm.Image1.Canvas.LineTo(hright,vbottom + 20); + oldxpos := 0; + for i := 1 to NoGrps do + begin + ypos := vbottom + 10; + xpos := round((hwide / NoGrps)* i + hleft); + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + ypos := ypos + 10; + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + Title := format('%d',[i]); + offset := BlankFrm.Image1.Canvas.TextWidth(Title) div 2; + strhi := BlankFrm.Image1.Canvas.TextHeight(Title); + xpos := xpos - offset; + ypos := ypos + strhi; + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + if xpos > oldxpos then + begin + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title); + oldxpos := xpos + (offset * 2); + end; + xpos := 10; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,'GROUPS:'); + end; + + // Draw vertical axis + valincr := (maxval - minval) / 10.0; + for i := 1 to 11 do + begin + Title := format('%8.2f',[maxval - ((i-1)*valincr)]); + strhi := BlankFrm.Image1.Canvas.TextHeight(Title); + xpos := 10; + Yvalue := maxval - (valincr * (i-1)); + ypos := round(vhi * ( (maxval - Yvalue) / (maxval - minval))); + ypos := ypos + vtop - strhi div 2; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title); + end; + + // draw lines for means of the groups + ypos := round(vhi * ( (maxval - means[1]) / (maxval - minval))); + ypos := ypos + vtop; + xpos := round((hwide / NoGrps) + hleft); + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + for i := 2 to NoGrps do + begin + ypos := round(vhi * ( (maxval - means[i]) / (maxval - minval))); + ypos := ypos + vtop; + xpos := round((hwide / NoGrps)* i + hleft); + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + end; + + // Draw upper and lower confidence intervals + ypos := round(vhi * ( (maxval - UCL) / (maxval - minval))); + ypos := ypos + vtop; + xpos := hleft; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + xpos := hright; + BlankFrm.Image1.Canvas.Pen.Color := clRed; + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + Title := 'UCL'; + strhi := BlankFrm.Image1.Canvas.TextHeight(Title); + ypos := ypos - strhi div 2; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title); + + ypos := round(vhi * ( (maxval - LCL) / (maxval - minval))); + ypos := ypos + vtop; + xpos := hleft; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + xpos := hright; + BlankFrm.Image1.Canvas.Pen.Color := clRed; + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + Title := 'LCL'; + strhi := BlankFrm.Image1.Canvas.TextHeight(Title); + ypos := ypos - strhi div 2; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title); +end; + +initialization + {$I pchartunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/pcurvesunit.lfm b/applications/lazstats/source_orig/pcurvesunit.lfm new file mode 100644 index 000000000..7335876d5 --- /dev/null +++ b/applications/lazstats/source_orig/pcurvesunit.lfm @@ -0,0 +1,153 @@ +object PCurvesFrm: TPCurvesFrm + Left = 177 + Height = 300 + Top = 88 + Width = 361 + Caption = 'Power Analysis for a z Test' + ClientHeight = 300 + ClientWidth = 361 + OnShow = FormShow + LCLVersion = '0.9.28.2' + object Label1: TLabel + Left = 10 + Height = 14 + Top = 15 + Width = 135 + Caption = 'Mean of the Null Hypothesis' + ParentColor = False + end + object Label2: TLabel + Left = 8 + Height = 14 + Top = 48 + Width = 182 + Caption = 'Standard Deviation of the Distribution' + ParentColor = False + end + object Label3: TLabel + Left = 9 + Height = 14 + Top = 80 + Width = 57 + Caption = 'Sample Size' + ParentColor = False + end + object NullEdit: TEdit + Left = 200 + Height = 21 + Top = 8 + Width = 43 + TabOrder = 0 + Text = 'NullEdit' + end + object SDEdit: TEdit + Left = 200 + Height = 21 + Top = 40 + Width = 43 + TabOrder = 1 + Text = 'Edit1' + end + object NEdit: TEdit + Left = 200 + Height = 21 + Top = 73 + Width = 43 + TabOrder = 2 + Text = 'Edit1' + end + object GroupBox1: TGroupBox + Left = 10 + Height = 172 + Top = 112 + Width = 235 + Caption = 'Probability of a Type I Error:' + ClientHeight = 154 + ClientWidth = 231 + TabOrder = 3 + object Prob01: TCheckBox + Left = 9 + Height = 17 + Top = 0 + Width = 42 + Caption = '0.01' + TabOrder = 0 + end + object Prob025: TCheckBox + Left = 9 + Height = 17 + Top = 24 + Width = 48 + Caption = '0.025' + TabOrder = 1 + end + object Prob05: TCheckBox + Left = 9 + Height = 17 + Top = 48 + Width = 42 + Caption = '0.05' + TabOrder = 2 + end + object Prob075: TCheckBox + Left = 9 + Height = 17 + Top = 72 + Width = 48 + Caption = '0.075' + TabOrder = 3 + end + object Prob10: TCheckBox + Left = 9 + Height = 17 + Top = 96 + Width = 42 + Caption = '0.10' + TabOrder = 4 + end + object Prob20: TCheckBox + Left = 9 + Height = 17 + Top = 120 + Width = 42 + Caption = '0.20' + TabOrder = 5 + end + end + object ResetBtn: TButton + Left = 272 + Height = 28 + Top = 33 + Width = 69 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 4 + end + object CancelBtn: TButton + Left = 272 + Height = 28 + Top = 88 + Width = 69 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 5 + end + object ComputeBtn: TButton + Left = 272 + Height = 28 + Top = 144 + Width = 69 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 6 + end + object ReturnBtn: TButton + Left = 272 + Height = 28 + Top = 200 + Width = 69 + Caption = 'Return' + ModalResult = 1 + TabOrder = 7 + end +end diff --git a/applications/lazstats/source_orig/pcurvesunit.lrs b/applications/lazstats/source_orig/pcurvesunit.lrs new file mode 100644 index 000000000..a00d124f4 --- /dev/null +++ b/applications/lazstats/source_orig/pcurvesunit.lrs @@ -0,0 +1,38 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TPCurvesFrm','FORMDATA',[ + 'TPF0'#11'TPCurvesFrm'#10'PCurvesFrm'#4'Left'#3#177#0#6'Height'#3','#1#3'Top' + +#2'X'#5'Width'#3'i'#1#7'Caption'#6#27'Power Analysis for a z Test'#12'Client' + +'Height'#3','#1#11'ClientWidth'#3'i'#1#6'OnShow'#7#8'FormShow'#10'LCLVersion' + +#6#8'0.9.28.2'#0#6'TLabel'#6'Label1'#4'Left'#2#10#6'Height'#2#14#3'Top'#2#15 + +#5'Width'#3#135#0#7'Caption'#6#27'Mean of the Null Hypothesis'#11'ParentColo' + +'r'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2#8#6'Height'#2#14#3'Top'#2'0'#5'Width' + +#3#182#0#7'Caption'#6'&Standard Deviation of the Distribution'#11'ParentColo' + +'r'#8#0#0#6'TLabel'#6'Label3'#4'Left'#2#9#6'Height'#2#14#3'Top'#2'P'#5'Width' + +#2'9'#7'Caption'#6#11'Sample Size'#11'ParentColor'#8#0#0#5'TEdit'#8'NullEdit' + +#4'Left'#3#200#0#6'Height'#2#21#3'Top'#2#8#5'Width'#2'+'#8'TabOrder'#2#0#4'T' + +'ext'#6#8'NullEdit'#0#0#5'TEdit'#6'SDEdit'#4'Left'#3#200#0#6'Height'#2#21#3 + +'Top'#2'('#5'Width'#2'+'#8'TabOrder'#2#1#4'Text'#6#5'Edit1'#0#0#5'TEdit'#5'N' + +'Edit'#4'Left'#3#200#0#6'Height'#2#21#3'Top'#2'I'#5'Width'#2'+'#8'TabOrder'#2 + +#2#4'Text'#6#5'Edit1'#0#0#9'TGroupBox'#9'GroupBox1'#4'Left'#2#10#6'Height'#3 + +#172#0#3'Top'#2'p'#5'Width'#3#235#0#7'Caption'#6#30'Probability of a Type I ' + +'Error:'#12'ClientHeight'#3#154#0#11'ClientWidth'#3#231#0#8'TabOrder'#2#3#0#9 + +'TCheckBox'#6'Prob01'#4'Left'#2#9#6'Height'#2#17#3'Top'#2#0#5'Width'#2'*'#7 + +'Caption'#6#4'0.01'#8'TabOrder'#2#0#0#0#9'TCheckBox'#7'Prob025'#4'Left'#2#9#6 + +'Height'#2#17#3'Top'#2#24#5'Width'#2'0'#7'Caption'#6#5'0.025'#8'TabOrder'#2#1 + +#0#0#9'TCheckBox'#6'Prob05'#4'Left'#2#9#6'Height'#2#17#3'Top'#2'0'#5'Width'#2 + +'*'#7'Caption'#6#4'0.05'#8'TabOrder'#2#2#0#0#9'TCheckBox'#7'Prob075'#4'Left' + +#2#9#6'Height'#2#17#3'Top'#2'H'#5'Width'#2'0'#7'Caption'#6#5'0.075'#8'TabOrd' + +'er'#2#3#0#0#9'TCheckBox'#6'Prob10'#4'Left'#2#9#6'Height'#2#17#3'Top'#2'`'#5 + +'Width'#2'*'#7'Caption'#6#4'0.10'#8'TabOrder'#2#4#0#0#9'TCheckBox'#6'Prob20' + +#4'Left'#2#9#6'Height'#2#17#3'Top'#2'x'#5'Width'#2'*'#7'Caption'#6#4'0.20'#8 + +'TabOrder'#2#5#0#0#0#7'TButton'#8'ResetBtn'#4'Left'#3#16#1#6'Height'#2#28#3 + +'Top'#2'!'#5'Width'#2'E'#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetBtnClick' + +#8'TabOrder'#2#4#0#0#7'TButton'#9'CancelBtn'#4'Left'#3#16#1#6'Height'#2#28#3 + +'Top'#2'X'#5'Width'#2'E'#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrd' + +'er'#2#5#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3#16#1#6'Height'#2#28#3'Top'#3 + +#144#0#5'Width'#2'E'#7'Caption'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick' + +#8'TabOrder'#2#6#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3#16#1#6'Height'#2#28#3 + +'Top'#3#200#0#5'Width'#2'E'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#8'Tab' + +'Order'#2#7#0#0#0 +]); diff --git a/applications/lazstats/source_orig/pcurvesunit.pas b/applications/lazstats/source_orig/pcurvesunit.pas new file mode 100644 index 000000000..1de147367 --- /dev/null +++ b/applications/lazstats/source_orig/pcurvesunit.pas @@ -0,0 +1,225 @@ +unit PCurvesUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, GraphLib, OutPutUnit, FunctionsLib, Globals; + +type + + { TPCurvesFrm } + + TPCurvesFrm = class(TForm) + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + Prob01: TCheckBox; + Prob025: TCheckBox; + Prob05: TCheckBox; + Prob075: TCheckBox; + Prob10: TCheckBox; + Prob20: TCheckBox; + NullEdit: TEdit; + SDEdit: TEdit; + NEdit: TEdit; + GroupBox1: TGroupBox; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + procedure ComputeBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + PCurvesFrm: TPCurvesFrm; + +implementation + +{ TPCurvesFrm } + +procedure TPCurvesFrm.ResetBtnClick(Sender: TObject); +begin + Prob01.Checked := false; + Prob025.Checked := false; + Prob05.Checked := false; + Prob075.Checked := false; + Prob10.Checked := false; + Prob20.Checked := false; + NullEdit.Text := ''; + SDEdit.Text := ''; + NEdit.Text := ''; + NullEdit.SetFocus; +end; + +procedure TPCurvesFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TPCurvesFrm.ComputeBtnClick(Sender: TObject); +var + mean, stddev, N, increment, althyp, power, zbeta, beta, StdErr : double; + XMax, offset : double; + ii : integer; + j, NoPlots, SetNo : integer; + alphas : array[1..6] of double; + zalphas : array[1..6] of double; + xalphas : array[1..6] of double; + XPlotPts : DblDyneMat; + YPlotPts : DblDyneMat; + LabelStr, outline, xTitle, yTitle : string; + oldCursor : TCursor; +begin + SetLength(YPlotPts,6,80); + SetLength(XPlotPts,1,80); + + XMax := 0.0; + mean := StrToFloat(NullEdit.Text); + stddev := StrToFloat(SDEdit.Text); + N := StrToFloat(NEdit.Text); + StdErr := stddev / sqrt(N); // standard error of mean; + increment := 4.0 * StdErr / 80.0; //scale for 80 points + + // Initialize alternative type I error arrays + for ii := 1 to 6 do + begin + alphas[ii] := 0.0; + zalphas[ii] := 0.0; + xalphas[ii] := 0.0; + end; + + // Get the desired alpha (Beta) curve options + if (Prob01.Checked) then alphas[1] := 0.01; + if (Prob025.Checked) then alphas[2] := 0.025; + if (Prob05.Checked) then alphas[3] := 0.05; + if (Prob075.Checked) then alphas[4] := 0.075; + if (Prob10.Checked) then alphas[5] := 0.10; + if (Prob20.Checked) then alphas[6] := 0.20; + oldCursor := Screen.Cursor; + Screen.Cursor := TCursor(crHourGlass); + + // For curves selected, obtain corresponding z and x values + for ii := 1 to 6 do + begin + if (alphas[ii] <> 0.0) then + begin + zalphas[ii] := inversez(1.0 - alphas[ii]); + xalphas[ii] := (zalphas[ii] * StdErr) + mean; + if (xalphas[ii] > XMax) then XMax := xalphas[ii]; + end; + end; + + // For each curve, obtain and plot 80 alternative hypotheses and + // their corresponding probabilities + NoPlots := 1; + for ii := 1 to 6 do // possible curves + begin + if (alphas[ii] <> 0.0) then // curve selected? + begin + Offset := 0.0; + for j := 1 to 80 do //get points to plot + begin + althyp := mean + Offset; + zbeta := (xalphas[ii] - althyp ) / StdErr; + if ( abs(zbeta) < 5.0) then beta := probz(zbeta) + else beta := 0.0; + power := 1.0 - beta; + XPlotPts[0,j-1] := althyp; + YPlotPts[NoPlots-1,j-1] := power; + Offset := offset + increment; + end; + NoPlots := NoPlots + 1; + end; // if alphas[i] <> 0 + end; // next curve i + + // Plot the points + GraphFrm.BackColor := clWhite; + GraphFrm.ShowLeftWall := true; + GraphFrm.ShowRightWall := true; + GraphFrm.ShowBottomWall := true; + GraphFrm.ShowBackWall := true; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlue; + GraphFrm.FloorColor := clBlue; + outline := format('z-Test Power. Pop. Mean := %6.2f, Sigma := %6.2f, N := %2.0f',[mean,stddev,N]); + GraphFrm.Heading := outline; + xTitle := format('%6.2f x INCREMENT ABOVE HYPOTHESIZED MEAN',[increment]); + GraphFrm.XTitle := xTitle; + yTitle := 'PROBABILITIES'; + GraphFrm.YTitle := yTitle; + GraphFrm.nosets := NoPlots-1; + GraphFrm.nbars := 80; + GraphFrm.barwideprop := 0.5; + GraphFrm.miny := 0.0; + GraphFrm.maxy := 1.0; + GraphFrm.AutoScale := false; + GraphFrm.GraphType := 5; // 2d line charts + GraphFrm.PtLabels := false; + + SetNo := 1; + for ii := 1 to 6 do + begin + if (alphas[ii] <> 0.0) then + begin + LabelStr := format('%4.2f',[alphas[ii]]); + GraphFrm.SetLabels[SetNo] := LabelStr; + SetNo := SetNo + 1; + end; + end; + GraphFrm.Ypoints := YPlotPts; + GraphFrm.Xpoints := XPlotPts; + + Screen.Cursor := oldCursor; + GraphFrm.ShowModal; + + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('Power of the z-test for Alternate Hypotheses'); + OutPutFrm.RichEdit.Lines.Add(''); + outline := 'Alpha Levels: '; + for ii := 1 to 6 do + begin + if (alphas[ii] <> 0.0) then + begin + LabelStr := format(' %4.2f ',[alphas[ii]]); + outline := outline + LabelStr; + end; + end; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := ''; + for ii := 1 to 80 do + begin + outline := format('X := %6.2f ',[XPlotPts[0,ii-1]]); + SetNo := 1; + for j := 1 to 6 do + begin + if (alphas[j] <> 0.0) then + begin + LabelStr := format('%4.3f ',[YPlotPts[SetNo-1,ii-1]]); + outline := outline + LabelStr; + SetNo := SetNo + 1; + end; + end; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.ShowModal; + + // clean up the heap + XPlotPts := nil; + YPlotPts := nil; +end; + +initialization + {$I pcurvesunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/plotxyunit.lfm b/applications/lazstats/source_orig/plotxyunit.lfm new file mode 100644 index 000000000..ead79a236 --- /dev/null +++ b/applications/lazstats/source_orig/plotxyunit.lfm @@ -0,0 +1,343 @@ +object PlotXYFrm: TPlotXYFrm + Left = 94 + Height = 300 + Top = 112 + Width = 605 + Caption = 'Plot X versus Y' + ClientHeight = 300 + ClientWidth = 605 + OnShow = FormShow + LCLVersion = '0.9.30' + object Label1: TLabel + Left = 9 + Height = 16 + Top = 8 + Width = 48 + Caption = 'Variables' + ParentColor = False + end + object Label2: TLabel + Left = 249 + Height = 16 + Top = 26 + Width = 77 + Caption = 'X Axis Variable' + ParentColor = False + end + object Label3: TLabel + Left = 250 + Height = 16 + Top = 165 + Width = 77 + Caption = 'Y Axis Variable' + ParentColor = False + end + object VarList: TListBox + Left = 6 + Height = 259 + Top = 29 + Width = 183 + ItemHeight = 0 + TabOrder = 0 + end + object XinBtn: TBitBtn + Left = 200 + Height = 32 + Top = 29 + Width = 39 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = XinBtnClick + TabOrder = 1 + end + object XOutBtn: TBitBtn + Left = 200 + Height = 32 + Top = 64 + Width = 39 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = XOutBtnClick + TabOrder = 2 + end + object YInBtn: TBitBtn + Left = 200 + Height = 32 + Top = 168 + Width = 39 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = YInBtnClick + TabOrder = 3 + end + object YOutBtn: TBitBtn + Left = 200 + Height = 32 + Top = 208 + Width = 39 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = YOutBtnClick + TabOrder = 4 + end + object XEdit: TEdit + Left = 247 + Height = 23 + Top = 48 + Width = 106 + TabOrder = 5 + Text = 'XEdit' + end + object YEdit: TEdit + Left = 248 + Height = 23 + Top = 183 + Width = 102 + TabOrder = 6 + Text = 'YEdit' + end + object GroupBox1: TGroupBox + Left = 360 + Height = 185 + Top = 16 + Width = 216 + Caption = 'Options' + ClientHeight = 167 + ClientWidth = 212 + TabOrder = 7 + object Label4: TLabel + Left = 27 + Height = 16 + Top = 105 + Width = 75 + Caption = '% Confidence' + ParentColor = False + end + object DescChk: TCheckBox + Left = 8 + Height = 19 + Top = 8 + Width = 155 + Caption = 'Print Descriptive Statistics' + TabOrder = 0 + end + object ConfEdit: TEdit + Left = 107 + Height = 23 + Top = 100 + Width = 57 + TabOrder = 1 + Text = '95.0' + end + end + object ResetBtn: TButton + Left = 384 + Height = 24 + Top = 224 + Width = 81 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 8 + end + object CancelBtn: TButton + Left = 496 + Height = 24 + Top = 224 + Width = 81 + Caption = 'Cancel' + ModalResult = 2 + OnClick = CancelBtnClick + TabOrder = 9 + end + object ComputeBtn: TButton + Left = 384 + Height = 24 + Top = 264 + Width = 81 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 10 + end + object ReturnBtn: TButton + Left = 496 + Height = 24 + Top = 264 + Width = 81 + Caption = 'Return' + ModalResult = 1 + OnClick = ReturnBtnClick + TabOrder = 11 + end + object LineChk: TCheckBox + Left = 376 + Height = 19 + Top = 64 + Width = 146 + Caption = 'Plot the Regression Line' + TabOrder = 12 + end + object MeansChk: TCheckBox + Left = 376 + Height = 19 + Top = 88 + Width = 99 + Caption = 'Plot the Means' + TabOrder = 13 + end + object ConfChk: TCheckBox + Left = 376 + Height = 19 + Top = 112 + Width = 155 + Caption = 'Plot the Confidence Band' + TabOrder = 14 + end + object PrintChk: TCheckBox + Left = 376 + Height = 19 + Top = 165 + Width = 144 + Caption = 'Print Plot on the Printer' + TabOrder = 15 + end +end diff --git a/applications/lazstats/source_orig/plotxyunit.lrs b/applications/lazstats/source_orig/plotxyunit.lrs new file mode 100644 index 000000000..c0a05aa05 --- /dev/null +++ b/applications/lazstats/source_orig/plotxyunit.lrs @@ -0,0 +1,247 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TPlotXYFrm','FORMDATA',[ + 'TPF0'#10'TPlotXYFrm'#9'PlotXYFrm'#4'Left'#2'^'#6'Height'#3','#1#3'Top'#2'p'#5 + +'Width'#3']'#2#7'Caption'#6#15'Plot X versus Y'#12'ClientHeight'#3','#1#11'C' + +'lientWidth'#3']'#2#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#6'0.9.30'#0#6'T' + +'Label'#6'Label1'#4'Left'#2#9#6'Height'#2#16#3'Top'#2#8#5'Width'#2'0'#7'Capt' + +'ion'#6#9'Variables'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#3#249 + +#0#6'Height'#2#16#3'Top'#2#26#5'Width'#2'M'#7'Caption'#6#15'X Axis Variable' + +#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#3#250#0#6'Height'#2#16#3 + +'Top'#3#165#0#5'Width'#2'M'#7'Caption'#6#15'Y Axis Variable'#11'ParentColor' + +#8#0#0#8'TListBox'#7'VarList'#4'Left'#2#6#6'Height'#3#3#1#3'Top'#2#29#5'Widt' + +'h'#3#183#0#10'ItemHeight'#2#0#8'TabOrder'#2#0#0#0#7'TBitBtn'#6'XinBtn'#4'Le' + +'ft'#3#200#0#6'Height'#2' '#3'Top'#2#29#5'Width'#2''''#10'Glyph.Data'#10':'#4 + +#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0 + +#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S' + +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';' + +#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255 + +#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211 + +#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130 + +#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$' + +#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171 + +#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204 + +#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J' + +#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255 + +'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161 + +'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'XinBtnClick'#8'TabOrde' + +'r'#2#1#0#0#7'TBitBtn'#7'XOutBtn'#4'Left'#3#200#0#6'Height'#2' '#3'Top'#2'@' + +#5'Width'#2''''#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0 + +#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0 + ,#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O' + +#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V' + +#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255 + +'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5' + +#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195 + +'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255 + +#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255 + +#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135 + +#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#12'XOutBtnClick'#8'TabOrder'#2#2#0#0#7'TBitBtn'#6'YInB' + +'tn'#4'Left'#3#200#0#6'Height'#2' '#3'Top'#3#168#0#5'Width'#2''''#10'Glyph.D' + +'ata'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0 + +#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184 + +#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177 + +'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255 + +'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255 + +#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255 + +#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142 + +#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J' + +#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162 + +#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255 + +#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130 + +#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199 + +'t'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255 + +'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5' + +#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'YInBtnClick'#8 + +'TabOrder'#2#3#0#0#7'TBitBtn'#7'YOutBtn'#4'Left'#3#200#0#6'Height'#2' '#3'To' + +'p'#3#208#0#5'Width'#2''''#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0 + +#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd' + +#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G' + +#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161 + +'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131 + +#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/' + +'x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e' + +#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255 + +#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132 + +#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255 + +#255#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154 + ,#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255 + +#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201 + +#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O' + +#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'Num' + +'Glyphs'#2#0#7'OnClick'#7#12'YOutBtnClick'#8'TabOrder'#2#4#0#0#5'TEdit'#5'XE' + +'dit'#4'Left'#3#247#0#6'Height'#2#23#3'Top'#2'0'#5'Width'#2'j'#8'TabOrder'#2 + +#5#4'Text'#6#5'XEdit'#0#0#5'TEdit'#5'YEdit'#4'Left'#3#248#0#6'Height'#2#23#3 + +'Top'#3#183#0#5'Width'#2'f'#8'TabOrder'#2#6#4'Text'#6#5'YEdit'#0#0#9'TGroupB' + +'ox'#9'GroupBox1'#4'Left'#3'h'#1#6'Height'#3#185#0#3'Top'#2#16#5'Width'#3#216 + +#0#7'Caption'#6#7'Options'#12'ClientHeight'#3#167#0#11'ClientWidth'#3#212#0#8 + +'TabOrder'#2#7#0#6'TLabel'#6'Label4'#4'Left'#2#27#6'Height'#2#16#3'Top'#2'i' + +#5'Width'#2'K'#7'Caption'#6#12'% Confidence'#11'ParentColor'#8#0#0#9'TCheckB' + +'ox'#7'DescChk'#4'Left'#2#8#6'Height'#2#19#3'Top'#2#8#5'Width'#3#155#0#7'Cap' + +'tion'#6#28'Print Descriptive Statistics'#8'TabOrder'#2#0#0#0#5'TEdit'#8'Con' + +'fEdit'#4'Left'#2'k'#6'Height'#2#23#3'Top'#2'd'#5'Width'#2'9'#8'TabOrder'#2#1 + +#4'Text'#6#4'95.0'#0#0#0#7'TButton'#8'ResetBtn'#4'Left'#3#128#1#6'Height'#2 + +#24#3'Top'#3#224#0#5'Width'#2'Q'#7'Caption'#6#5'Reset'#7'OnClick'#7#13'Reset' + +'BtnClick'#8'TabOrder'#2#8#0#0#7'TButton'#9'CancelBtn'#4'Left'#3#240#1#6'Hei' + +'ght'#2#24#3'Top'#3#224#0#5'Width'#2'Q'#7'Caption'#6#6'Cancel'#11'ModalResul' + +'t'#2#2#7'OnClick'#7#14'CancelBtnClick'#8'TabOrder'#2#9#0#0#7'TButton'#10'Co' + +'mputeBtn'#4'Left'#3#128#1#6'Height'#2#24#3'Top'#3#8#1#5'Width'#2'Q'#7'Capti' + +'on'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#10#0#0#7'TB' + +'utton'#9'ReturnBtn'#4'Left'#3#240#1#6'Height'#2#24#3'Top'#3#8#1#5'Width'#2 + +'Q'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#7'OnClick'#7#14'ReturnBtnClic' + +'k'#8'TabOrder'#2#11#0#0#9'TCheckBox'#7'LineChk'#4'Left'#3'x'#1#6'Height'#2 + +#19#3'Top'#2'@'#5'Width'#3#146#0#7'Caption'#6#24'Plot the Regression Line'#8 + +'TabOrder'#2#12#0#0#9'TCheckBox'#8'MeansChk'#4'Left'#3'x'#1#6'Height'#2#19#3 + +'Top'#2'X'#5'Width'#2'c'#7'Caption'#6#14'Plot the Means'#8'TabOrder'#2#13#0#0 + +#9'TCheckBox'#7'ConfChk'#4'Left'#3'x'#1#6'Height'#2#19#3'Top'#2'p'#5'Width'#3 + +#155#0#7'Caption'#6#24'Plot the Confidence Band'#8'TabOrder'#2#14#0#0#9'TChe' + +'ckBox'#8'PrintChk'#4'Left'#3'x'#1#6'Height'#2#19#3'Top'#3#165#0#5'Width'#3 + +#144#0#7'Caption'#6#25'Print Plot on the Printer'#8'TabOrder'#2#15#0#0#0 +]); diff --git a/applications/lazstats/source_orig/plotxyunit.pas b/applications/lazstats/source_orig/plotxyunit.pas new file mode 100644 index 000000000..d5f6fa2d4 --- /dev/null +++ b/applications/lazstats/source_orig/plotxyunit.pas @@ -0,0 +1,692 @@ +unit PlotXYUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, MainUnit, Globals, Math, OutPutUnit, + FunctionsLib, DataProcs, BlankFrmUnit, Printers; + +type + + { TPlotXYFrm } + + TPlotXYFrm = class(TForm) + ConfEdit: TEdit; + Label4: TLabel; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + DescChk: TCheckBox; + LineChk: TCheckBox; + MeansChk: TCheckBox; + ConfChk: TCheckBox; + PrintChk: TCheckBox; + GroupBox1: TGroupBox; + YEdit: TEdit; + Label3: TLabel; + XEdit: TEdit; + Label2: TLabel; + XinBtn: TBitBtn; + XOutBtn: TBitBtn; + YInBtn: TBitBtn; + YOutBtn: TBitBtn; + Label1: TLabel; + VarList: TListBox; + procedure CancelBtnClick(Sender: TObject); + procedure ComputeBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + procedure ReturnBtnClick(Sender: TObject); + procedure XinBtnClick(Sender: TObject); + procedure XOutBtnClick(Sender: TObject); + procedure YInBtnClick(Sender: TObject); + procedure YOutBtnClick(Sender: TObject); + private + { private declarations } + procedure plotxy(VAR Xpoints : DblDyneVec; + VAR Ypoints : DblDyneVec; + VAR UpConf : DblDyneVec; + VAR LowConf : DblDyneVec; + ConfBand : double; + Xmean, Ymean , R : double; + Slope, Intercept : double; + Xmax, Xmin, Ymax, Ymin : double; + N : integer); + + procedure pplotxy(VAR Xpoints : DblDyneVec; + VAR Ypoints : DblDyneVec; + VAR UpConf : DblDyneVec; + VAR LowConf : DblDyneVec; + ConfBand : double; + Xmean, Ymean , R : double; + Slope, Intercept : double; + Xmax, Xmin, Ymax, Ymin : double; + N : integer); + + public + { public declarations } + end; + +var + PlotXYFrm: TPlotXYFrm; + +implementation + +{ TPlotXYFrm } + +procedure TPlotXYFrm.ResetBtnClick(Sender: TObject); +var i : integer; +begin + XEdit.Text := ''; + YEdit.Text := ''; + ConfEdit.Text := '95.0'; + DescChk.Checked := false; + LineChk.Checked := false; + MeansChk.Checked := false; + ConfChk.Checked := false; + PrintChk.Checked := false; + XInBtn.Visible := true; + XOutBtn.Visible := false; + YInBtn.Visible := true; + YOutBtn.Visible := false; + VarList.Items.Clear; + for i := 1 to NoVariables do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); +end; + +procedure TPlotXYFrm.ReturnBtnClick(Sender: TObject); +begin + PlotXYFrm.Hide; +end; + +procedure TPlotXYFrm.XinBtnClick(Sender: TObject); +var index : integer; +begin + index := VarList.ItemIndex; + XEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + XInBtn.Visible := false; + XOutBtn.Visible := true; +end; + +procedure TPlotXYFrm.XOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(XEdit.Text); + XEdit.Text := ''; + XInBtn.Visible := true; + XOutBtn.Visible := false; +end; + +procedure TPlotXYFrm.YInBtnClick(Sender: TObject); +var index : integer; +begin + index := VarList.ItemIndex; + YEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + YInBtn.Visible := false; + YOutBtn.Visible := true; +end; + +procedure TPlotXYFrm.YOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(YEdit.Text); + YEdit.Text := ''; + YInBtn.Visible := true; + YOutBtn.Visible := false; +end; + +procedure TPlotXYFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TPlotXYFrm.CancelBtnClick(Sender: TObject); +begin + PlotXYFrm.Hide; +end; + +procedure TPlotXYFrm.ComputeBtnClick(Sender: TObject); +var + Xmin, Xmax, Ymin, Ymax, SSx, t, DF : double; + Xmean, Ymean, Xvariance, Yvariance, Xstddev, Ystddev, ConfBand : double; + X, Y, R, temp, SEPred, Slope, Intercept, predicted, sedata : double; + i, j : integer; + Xcol, Ycol, N, NoSelected : integer; + Xpoints : DblDyneVec; + Ypoints : DblDyneVec; + UpConf : DblDyneVec; + lowConf : DblDyneVec; + cellstring, outline : string; + ColNoSelected : IntDyneVec; +begin + SetLength(Xpoints,NoCases + 1); + SetLength(Ypoints,NoCases + 1); + SetLength(UpConf,NoCases + 1); + SetLength(lowConf,NoCases + 1); + SetLength(ColNoSelected,NoVariables); + + Xcol := 0; + Ycol := 0; + + for i := 1 to Novariables do + begin + cellstring := OS3MainFrm.DataGrid.Cells[i,0]; + if cellstring = XEdit.Text then Xcol := i; + if cellstring = YEdit.Text then Ycol := i; + end; + NoSelected := 2; + ColNoSelected[0] := Xcol; + ColNoSelected[1] := Ycol; + N := 0; + Xmax := -1.0e20; + Xmin := 1.0e20; + Ymax := -1.0e20; + Ymin := 1.0e20; + Xmean := 0.0; + Ymean := 0.0; + Xvariance := 0.0; + Yvariance := 0.0; + R := 0.0; + + for i := 1 to NoCases do + begin + if Not GoodRecord(i,NoSelected,ColNoSelected) then continue; + N := N + 1; + X := StrToFloat(OS3MainFrm.DataGrid.Cells[Xcol,i]); + Y := StrToFloat(OS3MainFrm.DataGrid.Cells[Ycol,i]); + Xpoints[N] := X; + Ypoints[N] := Y; + if X > Xmax then Xmax := X; + if X < Xmin then Xmin := X; + if Y > Ymax then Ymax := Y; + if Y < Ymin then Ymin := Y; + Xmean := Xmean + X; + Ymean := Ymean + Y; + Xvariance := Xvariance + (X * X); + Yvariance := Yvariance + (Y * Y); + R := R + (X * Y); + end; + + // sort on X + for i := 1 to N - 1 do + begin + for j := i + 1 to N do + begin + if Xpoints[i] > Xpoints[j] then //swap + begin + temp := Xpoints[i]; + Xpoints[i] := Xpoints[j]; + Xpoints[j] := temp; + temp := Ypoints[i]; + Ypoints[i] := Ypoints[j]; + Ypoints[j] := temp; + end; + end; + end; + + // calculate statistics + Xvariance := Xvariance - (Xmean * Xmean / N); + SSx := Xvariance; + Xvariance := Xvariance / (N - 1); + Xstddev := sqrt(Xvariance); + + Yvariance := Yvariance - (Ymean * Ymean / N); + Yvariance := Yvariance / (N - 1); + Ystddev := sqrt(Yvariance); + + R := R - (Xmean * Ymean / N); + R := R / (N - 1); + R := R / (Xstddev * Ystddev); + SEPred := sqrt(1.0 - (R * R)) * Ystddev; + SEPred := SEPred * sqrt((N - 1) / (N - 2)); + Xmean := Xmean / N; + Ymean := Ymean / N; + Slope := R * Ystddev / Xstddev; + Intercept := Ymean - Slope * Xmean; + + // Now, print the descriptive statistics if requested + if DescChk.Checked then + begin + OutPutFrm.RichEdit.Lines.Add('X versus Y Plot'); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('X = %s, Y = %s from file: %s',[Xedit.Text, + YEdit.Text,OS3MainFrm.FileNameEdit.Text]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Variable Mean Variance Std.Dev.'); + outline := format('%-10s%8.2f %8.2f %8.2f', + [XEdit.Text,Xmean,Xvariance,Xstddev]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('%-10s%8.2f %8.2f %8.2f', + [YEdit.Text,Ymean,Yvariance,Ystddev]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Correlation = %6.4f, Slope = %8.2f, Intercept = %8.2f', + [R, Slope, Intercept]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Standard Error of Estimate = %8.2f',[SEPred]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Number of good cases = %d',[N]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.ShowModal; + end; + + // get upper and lower confidence points for each X value + if ConfChk.Checked then + begin + ConfBand := StrToFloat(ConfEdit.Text) / 100.0; + DF := N - 2; + t := inverset(ConfBand,DF); + for i := 1 to N do + begin + X := Xpoints[i]; + predicted := slope * X + intercept; + sedata := SEPred * sqrt(1.0 + (1.0 / N) + (sqr(X - Xmean) / SSx)); + UpConf[i] := predicted + (t * sedata); + lowConf[i] := predicted - (t * sedata); + if UpConf[i] > Ymax then Ymax := UpConf[i]; + if lowConf[i] < Ymin then Ymin := lowConf[i]; + end; + end + else ConfBand := 0.0; + + // plot the values (and optional line and confidence band if elected) + plotxy(Xpoints, Ypoints, UpConf, LowConf, ConfBand, Xmean, Ymean, R, + Slope, Intercept, Xmax, Xmin, Ymax, Ymin, N); + + // print the same if elected + if PrintChk.Checked then + pplotxy(Xpoints, Ypoints, UpConf, LowConf, ConfBand, Xmean, Ymean, + R, Slope, Intercept, Xmax, Xmin, Ymax, Ymin, N); + + // cleanup + ColNoSelected := nil; + lowConf := nil; + UpConf := nil; + Ypoints := nil; + Xpoints := nil; +end; + +procedure TPlotXYFrm.plotxy(VAR Xpoints : DblDyneVec; + VAR Ypoints : DblDyneVec; + VAR UpConf : DblDyneVec; + VAR LowConf : DblDyneVec; + ConfBand : double; + Xmean, Ymean , R : double; + Slope, Intercept : double; + Xmax, Xmin, Ymax, Ymin : double; + N : integer); +var + i, xpos, ypos, hleft, hright, vtop, vbottom, imagewide : integer; + vhi, hwide, offset, strhi, imagehi : integer; + maxval, minval, valincr, Yvalue, Xvalue : double; + Title : string; + +begin + BlankFrm.Image1.Canvas.Clear; + BlankFrm.Show; + Title := 'X versus Y PLOT Using File: ' + OS3MainFrm.FileNameEdit.Text; + BlankFrm.Caption := Title; + imagewide := BlankFrm.Image1.Width; + imagehi := BlankFrm.Image1.Height; + vtop := 20; + vbottom := round(imagehi) - 80; + vhi := vbottom - vtop; + hleft := 100; + hright := imagewide - 80; + hwide := hright - hleft; + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + BlankFrm.Image1.Canvas.Brush.Color := clWhite; + + // Draw chart border + BlankFrm.Image1.Canvas.Rectangle(0,0,imagewide,imagehi); + + // draw Means + if MeansChk.Checked then + begin + ypos := round(vhi * ( (Ymax - Ymean) / (Ymax - Ymin))); + ypos := ypos + vtop; + xpos := hleft; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + xpos := hright; + BlankFrm.Image1.Canvas.Pen.Color := clGreen; + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + Title := 'MEAN '; + Title := Title + YEdit.Text; + strhi := BlankFrm.Image1.Canvas.TextHeight(Title); + ypos := ypos - strhi div 2; + BlankFrm.Image1.Canvas.Brush.Color := clWhite; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title); + + xpos := round(hwide * ( (Xmean - Xmin) / (Xmax - Xmin))); + xpos := xpos + hleft; + ypos := vtop; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + ypos := vbottom; + BlankFrm.Image1.Canvas.Pen.Color := clGreen; + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + Title := 'MEAN '; + Title := Title + XEdit.Text; + strhi := BlankFrm.Image1.Canvas.TextWidth(Title); + xpos := xpos - strhi div 2; + ypos := vtop - BlankFrm.Image1.Canvas.TextHeight(Title); + BlankFrm.Image1.Canvas.Brush.Color := clWhite; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title); + end; + + // draw slope line + if LineChk.Checked then + begin + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + Yvalue := (Xpoints[1] * slope) + intercept; // predicted score + ypos := round(vhi * ( (Ymax - Yvalue) / (Ymax - Ymin))); + ypos := ypos + vtop; + xpos := round(hwide * ( (Xpoints[1]- Xmin) / (Xmax - Xmin))); + xpos := xpos + hleft; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + Yvalue := (Xpoints[N] * slope) + intercept; // predicted score + ypos := round(vhi * ( (Ymax - Yvalue) / (Ymax - Ymin))); + ypos := ypos + vtop; + xpos := round(hwide * ( (Xpoints[N] - Xmin) / (Xmax - Xmin))); + xpos := xpos + hleft; + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + end; + + // draw horizontal axis + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + BlankFrm.Image1.Canvas.MoveTo(hleft,vbottom); + BlankFrm.Image1.Canvas.LineTo(hright,vbottom); + valincr := (Xmax - Xmin) / 10.0; + for i := 1 to 11 do + begin + ypos := vbottom; + Xvalue := Xmin + valincr * (i - 1); + xpos := round(hwide * ((Xvalue - Xmin) / (Xmax - Xmin))); + xpos := xpos + hleft; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + ypos := ypos + 10; + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + Title := format('%6.2f',[Xvalue]); + offset := BlankFrm.Image1.Canvas.TextWidth(Title) div 2; + xpos := xpos - offset; + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title); + end; + xpos := hleft + (hwide div 2) - (BlankFrm.Image1.Canvas.TextWidth(XEdit.Text) div 2); + ypos := vbottom + 20; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,XEdit.Text); + Title := format('R(X,Y) = %5.3f, Slope = %6.2f, Intercept = %6.2f', + [R,Slope,Intercept]); + xpos := hleft + (hwide div 2) - (BlankFrm.Image1.Canvas.TextWidth(Title) div 2); + ypos := ypos + 15; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title); + + // Draw vertical axis + Title := YEdit.Text; + xpos := hleft - BlankFrm.Image1.Canvas.TextWidth(Title) div 2; + ypos := vtop - BlankFrm.Image1.Canvas.TextHeight(Title); + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,YEdit.Text); + xpos := hleft; + ypos := vtop; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + ypos := vbottom; + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + valincr := (Ymax - Ymin) / 10.0; + for i := 1 to 11 do + begin + Title := format('%8.2f',[Ymax - ((i-1)*valincr)]); + strhi := BlankFrm.Image1.Canvas.TextHeight(Title); + xpos := 10; + Yvalue := Ymax - (valincr * (i-1)); + ypos := round(vhi * ( (Ymax - Yvalue) / (Ymax - Ymin))); + ypos := ypos + vtop - strhi div 2; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title); + xpos := hleft; + ypos := ypos + strhi div 2; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + xpos := hleft - 10; + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + end; + + // draw points for x and y pairs + for i := 1 to N do + begin + ypos := round(vhi * ( (Ymax - Ypoints[i]) / (Ymax - Ymin))); + ypos := ypos + vtop; + xpos := round(hwide * ( (Xpoints[i] - Xmin) / (Xmax - Xmin))); + xpos := xpos + hleft; + BlankFrm.Image1.Canvas.Brush.Color := clNavy; + BlankFrm.Image1.Canvas.Brush.Style := bsSolid; + BlankFrm.Image1.Canvas.Pen.Color := clNavy; + BlankFrm.Image1.Canvas.Ellipse(xpos,ypos,xpos+5,ypos+5); + end; + + // draw confidence bands if requested + if ConfBand <> 0.0 then + begin + BlankFrm.Image1.Canvas.Pen.Color := clRed; + ypos := round(vhi * ((Ymax - UpConf[1]) / (Ymax - Ymin))); + ypos := ypos + vtop; + xpos := round(hwide * ( (Xpoints[1] - Xmin) / (Xmax - Xmin))); + xpos := xpos + hleft; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + for i := 2 to N do + begin + ypos := round(vhi * ((Ymax - UpConf[i]) / (Ymax - Ymin))); + ypos := ypos + vtop; + xpos := round(hwide * ( (Xpoints[i] - Xmin) / (Xmax - Xmin))); + xpos := xpos + hleft; + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + end; + ypos := round(vhi * ((Ymax - lowConf[1]) / (Ymax - Ymin))); + ypos := ypos + vtop; + xpos := round(hwide * ( (Xpoints[1] - Xmin) / (Xmax - Xmin))); + xpos := xpos + hleft; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + for i := 2 to N do + begin + ypos := round(vhi * ((Ymax - lowConf[i]) / (Ymax - Ymin))); + ypos := ypos + vtop; + xpos := round(hwide * ( (Xpoints[i] - Xmin) / (Xmax - Xmin))); + xpos := xpos + hleft; + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + end; + end; +end; +//------------------------------------------------------------------- + +procedure TPlotXYFrm.pplotxy(VAR Xpoints : DblDyneVec; + VAR Ypoints : DblDyneVec; + VAR UpConf : DblDyneVec; + VAR LowConf : DblDyneVec; + ConfBand : double; + Xmean, Ymean , R : double; + Slope, Intercept : double; + Xmax, Xmin, Ymax, Ymin : double; + N : integer); +var + i, xpos, ypos, hleft, hright, vtop, vbottom, imagewide : integer; + vhi, hwide, offset, strhi : integer; + imagehi, maxval, minval, valincr, Yvalue, Xvalue : double; + Title : string; + +begin + Printer.Orientation := poLandscape; + Printer.BeginDoc; + Title := 'X versus Y PLOT Using File: ' + OS3MainFrm.FileNameEdit.Text; + strhi := Printer.Canvas.TextWidth(Title) div 2; + Printer.Canvas.TextOut(strhi,5,Title); + imagewide := Printer.PageWidth - 100; + imagehi := Printer.PageHeight - 100; + vtop := 120; + vbottom := round(imagehi) - 100; + vhi := vbottom - vtop; + hleft := 300; + hright := imagewide - 200; + hwide := hright - hleft; + Printer.Canvas.Pen.Color := clBlack; + Printer.Canvas.Brush.Color := clWhite; + + // draw Means + if MeansChk.Checked then + begin + ypos := round(vhi * ( (Ymax - Ymean) / (Ymax - Ymin))); + ypos := ypos + vtop; + xpos := hleft; + Printer.Canvas.MoveTo(xpos,ypos); + xpos := hright; + Printer.Canvas.Pen.Color := clGreen; + Printer.Canvas.LineTo(xpos,ypos); + Title := 'MEAN '; + Title := Title + YEdit.Text; + strhi := Printer.Canvas.TextHeight(Title); + ypos := ypos - strhi div 2; + Printer.Canvas.Brush.Color := clWhite; + Printer.Canvas.TextOut(xpos,ypos,Title); + + xpos := round(hwide * ( (Xmean - Xmin) / (Xmax - Xmin))); + xpos := xpos + hleft; + ypos := vtop; + Printer.Canvas.MoveTo(xpos,ypos); + ypos := vbottom; + Printer.Canvas.Pen.Color := clGreen; + Printer.Canvas.LineTo(xpos,ypos); + Title := 'MEAN '; + Title := Title + XEdit.Text; + strhi := Printer.Canvas.TextWidth(Title); + xpos := xpos - strhi div 2; + ypos := vtop - Printer.Canvas.TextHeight(Title); + Printer.Canvas.Brush.Color := clWhite; + Printer.Canvas.TextOut(xpos,ypos,Title); + end; + + // draw slope line + if LineChk.Checked then + begin + Printer.Canvas.Pen.Color := clBlack; + Yvalue := (Xpoints[1] * slope) + intercept; // predicted score + ypos := round(vhi * ( (Ymax - Yvalue) / (Ymax - Ymin))); + ypos := ypos + vtop; + xpos := round(hwide * ( (Xpoints[1]- Xmin) / (Xmax - Xmin))); + xpos := xpos + hleft; + Printer.Canvas.MoveTo(xpos,ypos); + Yvalue := (Xpoints[N] * slope) + intercept; // predicted score + ypos := round(vhi * ( (Ymax - Yvalue) / (Ymax - Ymin))); + ypos := ypos + vtop; + xpos := round(hwide * ( (Xpoints[N] - Xmin) / (Xmax - Xmin))); + xpos := xpos + hleft; + Printer.Canvas.LineTo(xpos,ypos); + end; + + // draw horizontal axis + Printer.Canvas.Pen.Color := clBlack; + Printer.Canvas.MoveTo(hleft,vbottom); + Printer.Canvas.LineTo(hright,vbottom); + valincr := (Xmax - Xmin) / 10.0; + for i := 1 to 11 do + begin + ypos := vbottom; + Xvalue := Xmin + valincr * (i - 1); + xpos := round(hwide * ((Xvalue - Xmin) / (Xmax - Xmin))); + xpos := xpos + hleft; + Printer.Canvas.MoveTo(xpos,ypos); + ypos := ypos + 10; + Printer.Canvas.LineTo(xpos,ypos); + Title := format('%6.2f',[Xvalue]); + offset := Printer.Canvas.TextWidth(Title) div 2; + xpos := xpos - offset; + Printer.Canvas.Pen.Color := clBlack; + Printer.Canvas.TextOut(xpos,ypos,Title); + end; + xpos := hleft + (hwide div 2) - (Printer.Canvas.TextWidth(XEdit.Text) div 2); + ypos := vbottom + 40; + Printer.Canvas.TextOut(xpos,ypos,XEdit.Text); + Title := format('R(X,Y) = %5.3f, Slope = %6.2f, Intercept = %6.2f', + [R,Slope,Intercept]); + xpos := hleft + (hwide div 2) - (Printer.Canvas.TextWidth(Title) div 2); + ypos := ypos + 40; + Printer.Canvas.TextOut(xpos,ypos,Title); + + // Draw vertical axis + Title := YEdit.Text; + xpos := hleft - Printer.Canvas.TextWidth(Title) div 2; + ypos := vtop - Printer.Canvas.TextHeight(Title); + Printer.Canvas.TextOut(xpos,ypos,YEdit.Text); + xpos := hleft; + ypos := vtop; + Printer.Canvas.MoveTo(xpos,ypos); + ypos := vbottom; + Printer.Canvas.LineTo(xpos,ypos); + valincr := (Ymax - Ymin) / 10.0; + for i := 1 to 11 do + begin + Title := format('%8.2f',[Ymax - ((i-1)*valincr)]); + strhi := Printer.Canvas.TextHeight(Title); + xpos := 10; + Yvalue := Ymax - (valincr * (i-1)); + ypos := round(vhi * ( (Ymax - Yvalue) / (Ymax - Ymin))); + ypos := ypos + vtop - strhi div 2; + Printer.Canvas.TextOut(xpos,ypos,Title); + xpos := hleft; + ypos := ypos + strhi div 2; + Printer.Canvas.MoveTo(xpos,ypos); + xpos := hleft - 10; + Printer.Canvas.LineTo(xpos,ypos); + end; + + // draw points for x and y pairs + for i := 1 to N do + begin + ypos := round(vhi * ( (Ymax - Ypoints[i]) / (Ymax - Ymin))); + ypos := ypos + vtop; + xpos := round(hwide * ( (Xpoints[i] - Xmin) / (Xmax - Xmin))); + xpos := xpos + hleft; + Printer.Canvas.Pen.Color := clBlack; + Printer.Canvas.Ellipse(xpos,ypos,xpos+15,ypos+15); + end; + + // draw confidence bands if requested + if ConfBand <> 0.0 then + begin + Printer.Canvas.Pen.Color := clRed; + ypos := round(vhi * ((Ymax - UpConf[1]) / (Ymax - Ymin))); + ypos := ypos + vtop; + xpos := round(hwide * ( (Xpoints[1] - Xmin) / (Xmax - Xmin))); + xpos := xpos + hleft; + Printer.Canvas.MoveTo(xpos,ypos); + for i := 2 to N do + begin + ypos := round(vhi * ((Ymax - UpConf[i]) / (Ymax - Ymin))); + ypos := ypos + vtop; + xpos := round(hwide * ( (Xpoints[i] - Xmin) / (Xmax - Xmin))); + xpos := xpos + hleft; + Printer.Canvas.LineTo(xpos,ypos); + end; + ypos := round(vhi * ((Ymax - lowConf[1]) / (Ymax - Ymin))); + ypos := ypos + vtop; + xpos := round(hwide * ( (Xpoints[1] - Xmin) / (Xmax - Xmin))); + xpos := xpos + hleft; + Printer.Canvas.MoveTo(xpos,ypos); + for i := 2 to N do + begin + ypos := round(vhi * ((Ymax - lowConf[i]) / (Ymax - Ymin))); + ypos := ypos + vtop; + xpos := round(hwide * ( (Xpoints[i] - Xmin) / (Xmax - Xmin))); + xpos := xpos + hleft; + Printer.Canvas.LineTo(xpos,ypos); + end; + end; + + Printer.EndDoc; + Printer.Orientation := poPortrait; +end; +//------------------------------------------------------------------- + +initialization + {$I plotxyunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/pointsunit.lfm b/applications/lazstats/source_orig/pointsunit.lfm new file mode 100644 index 000000000..07225494c --- /dev/null +++ b/applications/lazstats/source_orig/pointsunit.lfm @@ -0,0 +1,56 @@ +object PointsFrm: TPointsFrm + Left = 7 + Height = 470 + Top = 144 + Width = 736 + Caption = 'Points Form' + ClientHeight = 470 + ClientWidth = 736 + OnShow = FormShow + LCLVersion = '0.9.30' + object Image1: TImage + Left = 0 + Height = 422 + Top = 0 + Width = 736 + Align = alClient + end + object Panel1: TPanel + Left = 0 + Height = 48 + Top = 422 + Width = 736 + Align = alBottom + BorderStyle = bsSingle + ClientHeight = 44 + ClientWidth = 732 + TabOrder = 0 + object MsgEdit: TEdit + Left = 17 + Height = 23 + Top = 14 + Width = 335 + TabOrder = 0 + Text = 'MsgEdit' + end + object PrintBtn: TButton + Left = 457 + Height = 25 + Top = 14 + Width = 74 + Caption = 'Print' + OnClick = PrintBtnClick + TabOrder = 1 + end + object ReturnBtn: TButton + Left = 561 + Height = 24 + Top = 14 + Width = 74 + Caption = 'Return' + ModalResult = 1 + OnClick = ReturnBtnClick + TabOrder = 2 + end + end +end diff --git a/applications/lazstats/source_orig/pointsunit.lrs b/applications/lazstats/source_orig/pointsunit.lrs new file mode 100644 index 000000000..65399b4d5 --- /dev/null +++ b/applications/lazstats/source_orig/pointsunit.lrs @@ -0,0 +1,17 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TPointsFrm','FORMDATA',[ + 'TPF0'#10'TPointsFrm'#9'PointsFrm'#4'Left'#2#7#6'Height'#3#214#1#3'Top'#3#144 + +#0#5'Width'#3#224#2#7'Caption'#6#11'Points Form'#12'ClientHeight'#3#214#1#11 + +'ClientWidth'#3#224#2#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#6'0.9.30'#0#6 + +'TImage'#6'Image1'#4'Left'#2#0#6'Height'#3#166#1#3'Top'#2#0#5'Width'#3#224#2 + +#5'Align'#7#8'alClient'#0#0#6'TPanel'#6'Panel1'#4'Left'#2#0#6'Height'#2'0'#3 + +'Top'#3#166#1#5'Width'#3#224#2#5'Align'#7#8'alBottom'#11'BorderStyle'#7#8'bs' + +'Single'#12'ClientHeight'#2','#11'ClientWidth'#3#220#2#8'TabOrder'#2#0#0#5'T' + +'Edit'#7'MsgEdit'#4'Left'#2#17#6'Height'#2#23#3'Top'#2#14#5'Width'#3'O'#1#8 + +'TabOrder'#2#0#4'Text'#6#7'MsgEdit'#0#0#7'TButton'#8'PrintBtn'#4'Left'#3#201 + +#1#6'Height'#2#25#3'Top'#2#14#5'Width'#2'J'#7'Caption'#6#5'Print'#7'OnClick' + +#7#13'PrintBtnClick'#8'TabOrder'#2#1#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3'1' + +#2#6'Height'#2#24#3'Top'#2#14#5'Width'#2'J'#7'Caption'#6#6'Return'#11'ModalR' + +'esult'#2#1#7'OnClick'#7#14'ReturnBtnClick'#8'TabOrder'#2#2#0#0#0#0 +]); diff --git a/applications/lazstats/source_orig/pointsunit.pas b/applications/lazstats/source_orig/pointsunit.pas new file mode 100644 index 000000000..01dbbe730 --- /dev/null +++ b/applications/lazstats/source_orig/pointsunit.pas @@ -0,0 +1,211 @@ +unit PointsUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + ExtCtrls, StdCtrls, Printers, Globals; + +type + + { TPointsFrm } + + TPointsFrm = class(TForm) + Image1: TImage; + PrintBtn: TButton; + ReturnBtn: TButton; + MsgEdit: TEdit; + Panel1: TPanel; +// procedure FormPaint(Sender: TObject); +// procedure FormResize(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure PrintBtnClick(Sender: TObject); + procedure PtsPlot(Sender: TObject); + procedure ReturnBtnClick(Sender: TObject); + + private + { private declarations } + + public + { public declarations } + pts : DblDyneVec; + avg : DblDyneVec; + LabelOne : string; + LabelTwo : string; + NoCases : integer; + Title : string; +// Caption : string; + + end; + +var + PointsFrm: TPointsFrm; + +implementation + +{ TPointsFrm } + +procedure TPointsFrm.FormShow(Sender: TObject); +begin + Image1.Canvas.Clear; + PtsPlot(self); +end; + +procedure TPointsFrm.PrintBtnClick(Sender: TObject); +var + r : Trect; +begin + with Printer do + begin + Printer.Orientation := poPortrait; + r := Rect(20,20,printer.pagewidth-20,printer.pageheight div 2 + 20); + BeginDoc; + Canvas.StretchDraw(r,Image1.Picture.BitMap); + EndDoc; + end; +end; + +procedure TPointsFrm.PtsPlot(Sender: TObject); +var + topmarg, botmarg, leftmarg, rightmarg, verthi, horizlong : integer; + X, Y, yincrement, labelheight, i , j : integer; + labelstring, labelstr : string; + Xstep, Ystep, yprop, scaley, xprop, scalex, Min, Max : double; +begin + height := PointsFrm.Image1.Canvas.Height; + width := PointsFrm.Image1.Canvas.Width; + topmarg := height div 10; + verthi := height - (2 * topmarg); + botmarg := topmarg + verthi; + botmarg := height; + leftmarg := width div 10; + horizlong := width - 2 * leftmarg; + rightmarg := leftmarg + horizlong; + // get max and min of values to plot + Max := -1000.0; + Min := 1000.0; + for i := 0 to NoCases - 1 do + begin + if (pts[i] > Max) then Max := pts[i]; + if (avg[i] > Max) then Max := avg[i]; + if (pts[i] < Min) then Min := pts[i]; + if (avg[i] < Min) then Min := avg[i]; + end; + yincrement := verthi div 20; + PointsFrm.Image1.Canvas.Pen.Color := clBlack; + + // print title at top, centered + labelstring := 'Plot of Original and '; + labelstring := labelstring + Title; +// labelstring := labelstring + DepVarEdit.Text; + X := (leftmarg + horizlong div 2) - (PointsFrm.Image1.Canvas.TextWidth(labelstring) div 2); + Y := 1; + PointsFrm.Image1.Canvas.TextOut(X,Y,labelstring); + + // draw left axis + X := leftmarg; + Y := botmarg; + PointsFrm.Image1.Canvas.MoveTo(X,Y); + Y := topmarg; + PointsFrm.Image1.Canvas.LineTo(X,Y); + + // scale to left of vertical axis + Ystep := (Max - Min) / 20; + for i := 0 to 20 do + begin + Y := topmarg + (i * yincrement); + labelstr := format('%4.2f -',[Max - (Ystep * i)]); + labelstring := labelstr; + X := leftmarg - PointsFrm.Image1.Canvas.TextWidth(labelstring); + PointsFrm.Image1.Canvas.TextOut(X,Y,labelstring); + end; + + // Make legend axis on bottom + X := leftmarg; + Y := botmarg; + Xstep := horizlong / 20; + xprop := NoCases / 20; + PointsFrm.Image1.Canvas.MoveTo(X,Y); + X := rightmarg; + PointsFrm.Image1.Canvas.LineTo(X,Y); + for i := 0 to 20 do + begin + X := leftmarg + round(Xstep * i); + labelstring := '|'; + PointsFrm.Image1.Canvas.TextOut(X,Y,labelstring); + labelstring := IntToStr(round((xprop * i) + 1)); + Y := Y + 5; + PointsFrm.Image1.Canvas.TextOut(X,Y,labelstring); + Y := botmarg; + end; + labelstring := 'CASES'; + X := (leftmarg + horizlong div 2) - (PointsFrm.Canvas.TextWidth(labelstring) div 2); + Y := botmarg + PointsFrm.Image1.Canvas.TextHeight(labelstring); + PointsFrm.Image1.Canvas.TextOut(X,Y,labelstring); + + // Plot lines from point to point + PointsFrm.Image1.Canvas.Pen.Color := clRed; + for i := 0 to NoCases - 1 do + begin + yprop := (Max - pts[i]) / (Max - Min); + scaley := yprop * verthi; + xprop := i / NoCases; + scalex := xprop * horizlong; + X := leftmarg + round(scalex); + Y := topmarg + round(scaley); + if (i = 0) then PointsFrm.Image1.Canvas.MoveTo(X,Y) + else PointsFrm.Image1.Canvas.LineTo(X,Y); + PointsFrm.Image1.Canvas.Ellipse(X-3,Y-3,X+3,Y+3); + end; + + // Plot average points + PointsFrm.Image1.Canvas.Pen.Color := clBlue; + for i := 0 to NoCases - 1 do + begin + yprop := (Max - avg[i]) / (Max - Min); + scaley := yprop * verthi; + xprop := i / NoCases; + scalex := xprop * horizlong; + X := leftmarg + round(scalex); + Y := topmarg + round(scaley); + if (i = 0) then PointsFrm.Image1.Canvas.MoveTo(X,Y) + else PointsFrm.Image1.Canvas.LineTo(X,Y); + PointsFrm.Image1.Canvas.Ellipse(X-3,Y-3,X+3,Y+3); + end; + + // Show legend at right + X := rightmarg; + labelstring := LabelOne; + labelheight := PointsFrm.Image1.Canvas.TextHeight(labelstring); + Y := 5 * labelheight; + PointsFrm.Image1.Canvas.Font.Color := clRed; + PointsFrm.Image1.Canvas.TextOut(X,Y,labelstring); + labelstring := LabelTwo; + Y := 6 * labelheight; + PointsFrm.Image1.Canvas.Font.Color := clBlue; + PointsFrm.Image1.Canvas.TextOut(X,Y,labelstring); +end; + +procedure TPointsFrm.ReturnBtnClick(Sender: TObject); +begin + PointsFrm.Hide; +end; + +{ +procedure TPointsFrm.FormPaint(Sender: TObject); +begin + PtsPlot; +end; + +procedure TPointsFrm.FormResize(Sender: TObject); +begin + PtsPlot; +end; +} +initialization + {$I pointsunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/polydifunit.lfm b/applications/lazstats/source_orig/polydifunit.lfm new file mode 100644 index 000000000..1840982cf --- /dev/null +++ b/applications/lazstats/source_orig/polydifunit.lfm @@ -0,0 +1,482 @@ +object PolyDIFFrm: TPolyDIFFrm + Left = 122 + Height = 401 + Top = 100 + Width = 565 + Caption = 'Polytomous Item DIF' + ClientHeight = 401 + ClientWidth = 565 + OnShow = FormShow + LCLVersion = '0.9.28.2' + object Label1: TLabel + Left = 9 + Height = 14 + Top = 8 + Width = 90 + Caption = 'Available Variables' + ParentColor = False + end + object Label2: TLabel + Left = 224 + Height = 14 + Top = 8 + Width = 72 + Caption = 'Items Selected' + ParentColor = False + end + object Label3: TLabel + Left = 220 + Height = 14 + Top = 216 + Width = 85 + Caption = 'Grouping Variable' + ParentColor = False + end + object Label4: TLabel + Left = 384 + Height = 14 + Top = 8 + Width = 114 + Caption = 'No. of Grouping Levels:' + ParentColor = False + end + object Label5: TLabel + Left = 384 + Height = 14 + Top = 40 + Width = 112 + Caption = 'Enter bounds for levels' + ParentColor = False + end + object Label6: TLabel + Left = 384 + Height = 14 + Top = 64 + Width = 28 + Caption = 'Down' + ParentColor = False + end + object Label7: TLabel + Left = 480 + Height = 14 + Top = 64 + Width = 14 + Caption = 'Up' + ParentColor = False + end + object Label8: TLabel + Left = 512 + Height = 14 + Top = 64 + Width = 26 + Caption = 'Level' + ParentColor = False + end + object Label9: TLabel + Left = 431 + Height = 14 + Top = 128 + Width = 63 + Caption = 'Lower Bound' + ParentColor = False + end + object Label10: TLabel + Left = 431 + Height = 14 + Top = 160 + Width = 63 + Caption = 'Upper Bound' + ParentColor = False + end + object Label11: TLabel + Left = 11 + Height = 14 + Top = 296 + Width = 94 + Caption = 'Lowest Item Score:' + ParentColor = False + end + object Label12: TLabel + Left = 9 + Height = 14 + Top = 328 + Width = 96 + Caption = 'Highest Item Score:' + ParentColor = False + end + object Label13: TLabel + Left = 215 + Height = 14 + Top = 289 + Width = 115 + Caption = 'Reference Group Code:' + ParentColor = False + end + object Label14: TLabel + Left = 216 + Height = 14 + Top = 328 + Width = 90 + Caption = 'Focal Group Code:' + ParentColor = False + end + object VarList: TListBox + Left = 8 + Height = 253 + Top = 24 + Width = 157 + ItemHeight = 0 + MultiSelect = True + TabOrder = 0 + end + object ItemInBtn: TBitBtn + Left = 176 + Height = 30 + Top = 24 + Width = 33 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = ItemInBtnClick + TabOrder = 1 + end + object ItemOutBtn: TBitBtn + Left = 176 + Height = 30 + Top = 56 + Width = 33 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = ItemOutBtnClick + TabOrder = 2 + end + object AllBtn: TBitBtn + Left = 176 + Height = 30 + Top = 112 + Width = 33 + Caption = 'ALL' + NumGlyphs = 0 + OnClick = AllBtnClick + TabOrder = 3 + end + object GrpInBtn: TBitBtn + Left = 176 + Height = 30 + Top = 208 + Width = 33 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = GrpInBtnClick + TabOrder = 4 + end + object GrpOutBtn: TBitBtn + Left = 176 + Height = 30 + Top = 240 + Width = 33 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = GrpOutBtnClick + TabOrder = 5 + end + object ItemsList: TListBox + Left = 220 + Height = 183 + Top = 24 + Width = 148 + ItemHeight = 0 + TabOrder = 6 + end + object GroupVarEdit: TEdit + Left = 220 + Height = 21 + Top = 232 + Width = 147 + TabOrder = 7 + Text = 'GroupVarEdit' + end + object LevelsEdit: TEdit + Left = 506 + Height = 21 + Top = 1 + Width = 40 + OnExit = LevelsEditExit + TabOrder = 8 + end + object LevelScroll: TScrollBar + Left = 384 + Height = 18 + Top = 80 + Width = 111 + Min = 1 + PageSize = 0 + Position = 1 + TabOrder = 9 + OnScroll = LevelScrollScroll + end + object LevelNoEdit: TEdit + Left = 512 + Height = 21 + Top = 80 + Width = 39 + TabOrder = 10 + Text = 'LevelNoEdit' + end + object LowBoundEdit: TEdit + Left = 512 + Height = 21 + Top = 121 + Width = 40 + OnExit = LowBoundEditExit + TabOrder = 11 + Text = 'LowBoundEdit' + end + object UpBoundEdit: TEdit + Left = 511 + Height = 21 + Top = 153 + Width = 40 + OnExit = UpBoundEditExit + TabOrder = 12 + Text = 'Edit1' + end + object GroupBox1: TGroupBox + Left = 381 + Height = 50 + Top = 188 + Width = 170 + Caption = 'Option:' + ClientHeight = 32 + ClientWidth = 166 + TabOrder = 13 + object GraphChk: TCheckBox + Left = 7 + Height = 17 + Top = 5 + Width = 124 + Caption = 'Graph of Level Means' + Checked = True + State = cbChecked + TabOrder = 0 + end + end + object LowScoreEdit: TEdit + Left = 122 + Height = 21 + Top = 289 + Width = 43 + TabOrder = 14 + end + object HiScoreEdit: TEdit + Left = 122 + Height = 21 + Top = 321 + Width = 43 + TabOrder = 15 + Text = 'Edit1' + end + object RefGrpEdit: TEdit + Left = 336 + Height = 21 + Top = 280 + Width = 43 + TabOrder = 16 + Text = 'Edit1' + end + object TrgtGrpEdit: TEdit + Left = 336 + Height = 21 + Top = 321 + Width = 43 + TabOrder = 17 + Text = 'Edit1' + end + object ResetBtn: TButton + Left = 104 + Height = 28 + Top = 360 + Width = 71 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 18 + end + object CancelBtn: TButton + Left = 200 + Height = 28 + Top = 360 + Width = 72 + Caption = 'Cancel' + ModalResult = 2 + OnClick = CancelBtnClick + TabOrder = 19 + end + object ComputeBtn: TButton + Left = 296 + Height = 28 + Top = 360 + Width = 71 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 20 + end + object ReturnBtn: TButton + Left = 384 + Height = 28 + Top = 360 + Width = 76 + Caption = 'Return' + ModalResult = 1 + OnClick = ReturnBtnClick + TabOrder = 21 + end + object HelpBtn: TButton + Tag = 138 + Left = 11 + Height = 28 + Top = 360 + Width = 76 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 22 + end +end diff --git a/applications/lazstats/source_orig/polydifunit.lrs b/applications/lazstats/source_orig/polydifunit.lrs new file mode 100644 index 000000000..582caac1d --- /dev/null +++ b/applications/lazstats/source_orig/polydifunit.lrs @@ -0,0 +1,278 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TPolyDIFFrm','FORMDATA',[ + 'TPF0'#11'TPolyDIFFrm'#10'PolyDIFFrm'#4'Left'#2'z'#6'Height'#3#145#1#3'Top'#2 + +'d'#5'Width'#3'5'#2#7'Caption'#6#19'Polytomous Item DIF'#12'ClientHeight'#3 + +#145#1#11'ClientWidth'#3'5'#2#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#8'0.9' + +'.28.2'#0#6'TLabel'#6'Label1'#4'Left'#2#9#6'Height'#2#14#3'Top'#2#8#5'Width' + +#2'Z'#7'Caption'#6#19'Available Variables'#11'ParentColor'#8#0#0#6'TLabel'#6 + +'Label2'#4'Left'#3#224#0#6'Height'#2#14#3'Top'#2#8#5'Width'#2'H'#7'Caption'#6 + +#14'Items Selected'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#3#220#0 + +#6'Height'#2#14#3'Top'#3#216#0#5'Width'#2'U'#7'Caption'#6#17'Grouping Variab' + +'le'#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#3#128#1#6'Height'#2#14 + +#3'Top'#2#8#5'Width'#2'r'#7'Caption'#6#23'No. of Grouping Levels:'#11'Parent' + +'Color'#8#0#0#6'TLabel'#6'Label5'#4'Left'#3#128#1#6'Height'#2#14#3'Top'#2'(' + +#5'Width'#2'p'#7'Caption'#6#23'Enter bounds for levels'#11'ParentColor'#8#0#0 + +#6'TLabel'#6'Label6'#4'Left'#3#128#1#6'Height'#2#14#3'Top'#2'@'#5'Width'#2#28 + +#7'Caption'#6#4'Down'#11'ParentColor'#8#0#0#6'TLabel'#6'Label7'#4'Left'#3#224 + +#1#6'Height'#2#14#3'Top'#2'@'#5'Width'#2#14#7'Caption'#6#2'Up'#11'ParentColo' + +'r'#8#0#0#6'TLabel'#6'Label8'#4'Left'#3#0#2#6'Height'#2#14#3'Top'#2'@'#5'Wid' + +'th'#2#26#7'Caption'#6#5'Level'#11'ParentColor'#8#0#0#6'TLabel'#6'Label9'#4 + +'Left'#3#175#1#6'Height'#2#14#3'Top'#3#128#0#5'Width'#2'?'#7'Caption'#6#11'L' + +'ower Bound'#11'ParentColor'#8#0#0#6'TLabel'#7'Label10'#4'Left'#3#175#1#6'He' + +'ight'#2#14#3'Top'#3#160#0#5'Width'#2'?'#7'Caption'#6#11'Upper Bound'#11'Par' + +'entColor'#8#0#0#6'TLabel'#7'Label11'#4'Left'#2#11#6'Height'#2#14#3'Top'#3'(' + +#1#5'Width'#2'^'#7'Caption'#6#18'Lowest Item Score:'#11'ParentColor'#8#0#0#6 + +'TLabel'#7'Label12'#4'Left'#2#9#6'Height'#2#14#3'Top'#3'H'#1#5'Width'#2'`'#7 + +'Caption'#6#19'Highest Item Score:'#11'ParentColor'#8#0#0#6'TLabel'#7'Label1' + +'3'#4'Left'#3#215#0#6'Height'#2#14#3'Top'#3'!'#1#5'Width'#2's'#7'Caption'#6 + +#21'Reference Group Code:'#11'ParentColor'#8#0#0#6'TLabel'#7'Label14'#4'Left' + +#3#216#0#6'Height'#2#14#3'Top'#3'H'#1#5'Width'#2'Z'#7'Caption'#6#17'Focal Gr' + +'oup Code:'#11'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4'Left'#2#8#6'Heigh' + +'t'#3#253#0#3'Top'#2#24#5'Width'#3#157#0#10'ItemHeight'#2#0#11'MultiSelect'#9 + +#8'TabOrder'#2#0#0#0#7'TBitBtn'#9'ItemInBtn'#4'Left'#3#176#0#6'Height'#2#30#3 + +'Top'#2#24#5'Width'#2'!'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0 + +#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0 + +#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G' + +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^' + +#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195 + +'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255 + +#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255 + +#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255 + +']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145 + +'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#14'ItemInBtnClick'#8'TabOrder'#2#1#0#0#7'TBitBtn'#10'I' + +'temOutBtn'#4'Left'#3#176#0#6'Height'#2#30#3'Top'#2'8'#5'Width'#2'!'#10'Glyp' + +'h.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0 + +#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G' + +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)' + +#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134 + +#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203 + +#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190 + +'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127 + +#204#138#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255 + +#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135 + +#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255 + +#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177 + +'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255 + +'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#15 + +'ItemOutBtnClick'#8'TabOrder'#2#2#0#0#7'TBitBtn'#6'AllBtn'#4'Left'#3#176#0#6 + +'Height'#2#30#3'Top'#2'p'#5'Width'#2'!'#7'Caption'#6#3'ALL'#9'NumGlyphs'#2#0 + +#7'OnClick'#7#11'AllBtnClick'#8'TabOrder'#2#3#0#0#7'TBitBtn'#8'GrpInBtn'#4'L' + +'eft'#3#176#0#6'Height'#2#30#3'Top'#3#208#0#5'Width'#2'!'#10'Glyph.Data'#10 + +':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0 + +' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b' + +#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5' + +#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0 + +#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255 + +#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142 + +#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J' + +#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162 + +#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255 + +#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130 + +#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199 + +'t'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255 + +'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5' + +#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#13'GrpInBtnClick' + +#8'TabOrder'#2#4#0#0#7'TBitBtn'#9'GrpOutBtn'#4'Left'#3#176#0#6'Height'#2#30#3 + +'Top'#3#240#0#5'Width'#2'!'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0 + +#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0 + +'d'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V' + +#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217 + +'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193 + +#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';' + +#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255 + +#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157 + +#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195 + +#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0 + +#255#255#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255 + +#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144 + +#255#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255 + +#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|' + +#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153 + +'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#14'GrpOutBtnClick'#8'TabOrder'#2#5#0#0#8 + +'TListBox'#9'ItemsList'#4'Left'#3#220#0#6'Height'#3#183#0#3'Top'#2#24#5'Widt' + +'h'#3#148#0#10'ItemHeight'#2#0#8'TabOrder'#2#6#0#0#5'TEdit'#12'GroupVarEdit' + +#4'Left'#3#220#0#6'Height'#2#21#3'Top'#3#232#0#5'Width'#3#147#0#8'TabOrder'#2 + +#7#4'Text'#6#12'GroupVarEdit'#0#0#5'TEdit'#10'LevelsEdit'#4'Left'#3#250#1#6 + +'Height'#2#21#3'Top'#2#1#5'Width'#2'('#6'OnExit'#7#14'LevelsEditExit'#8'TabO' + +'rder'#2#8#0#0#10'TScrollBar'#11'LevelScroll'#4'Left'#3#128#1#6'Height'#2#18 + +#3'Top'#2'P'#5'Width'#2'o'#3'Min'#2#1#8'PageSize'#2#0#8'Position'#2#1#8'TabO' + +'rder'#2#9#8'OnScroll'#7#17'LevelScrollScroll'#0#0#5'TEdit'#11'LevelNoEdit'#4 + +'Left'#3#0#2#6'Height'#2#21#3'Top'#2'P'#5'Width'#2''''#8'TabOrder'#2#10#4'Te' + +'xt'#6#11'LevelNoEdit'#0#0#5'TEdit'#12'LowBoundEdit'#4'Left'#3#0#2#6'Height' + +#2#21#3'Top'#2'y'#5'Width'#2'('#6'OnExit'#7#16'LowBoundEditExit'#8'TabOrder' + +#2#11#4'Text'#6#12'LowBoundEdit'#0#0#5'TEdit'#11'UpBoundEdit'#4'Left'#3#255#1 + +#6'Height'#2#21#3'Top'#3#153#0#5'Width'#2'('#6'OnExit'#7#15'UpBoundEditExit' + +#8'TabOrder'#2#12#4'Text'#6#5'Edit1'#0#0#9'TGroupBox'#9'GroupBox1'#4'Left'#3 + +'}'#1#6'Height'#2'2'#3'Top'#3#188#0#5'Width'#3#170#0#7'Caption'#6#7'Option:' + +#12'ClientHeight'#2' '#11'ClientWidth'#3#166#0#8'TabOrder'#2#13#0#9'TCheckBo' + +'x'#8'GraphChk'#4'Left'#2#7#6'Height'#2#17#3'Top'#2#5#5'Width'#2'|'#7'Captio' + +'n'#6#20'Graph of Level Means'#7'Checked'#9#5'State'#7#9'cbChecked'#8'TabOrd' + ,'er'#2#0#0#0#0#5'TEdit'#12'LowScoreEdit'#4'Left'#2'z'#6'Height'#2#21#3'Top'#3 + +'!'#1#5'Width'#2'+'#8'TabOrder'#2#14#0#0#5'TEdit'#11'HiScoreEdit'#4'Left'#2 + +'z'#6'Height'#2#21#3'Top'#3'A'#1#5'Width'#2'+'#8'TabOrder'#2#15#4'Text'#6#5 + +'Edit1'#0#0#5'TEdit'#10'RefGrpEdit'#4'Left'#3'P'#1#6'Height'#2#21#3'Top'#3#24 + +#1#5'Width'#2'+'#8'TabOrder'#2#16#4'Text'#6#5'Edit1'#0#0#5'TEdit'#11'TrgtGrp' + +'Edit'#4'Left'#3'P'#1#6'Height'#2#21#3'Top'#3'A'#1#5'Width'#2'+'#8'TabOrder' + +#2#17#4'Text'#6#5'Edit1'#0#0#7'TButton'#8'ResetBtn'#4'Left'#2'h'#6'Height'#2 + +#28#3'Top'#3'h'#1#5'Width'#2'G'#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetB' + +'tnClick'#8'TabOrder'#2#18#0#0#7'TButton'#9'CancelBtn'#4'Left'#3#200#0#6'Hei' + +'ght'#2#28#3'Top'#3'h'#1#5'Width'#2'H'#7'Caption'#6#6'Cancel'#11'ModalResult' + +#2#2#7'OnClick'#7#14'CancelBtnClick'#8'TabOrder'#2#19#0#0#7'TButton'#10'Comp' + +'uteBtn'#4'Left'#3'('#1#6'Height'#2#28#3'Top'#3'h'#1#5'Width'#2'G'#7'Caption' + +#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#20#0#0#7'TButto' + +'n'#9'ReturnBtn'#4'Left'#3#128#1#6'Height'#2#28#3'Top'#3'h'#1#5'Width'#2'L'#7 + +'Caption'#6#6'Return'#11'ModalResult'#2#1#7'OnClick'#7#14'ReturnBtnClick'#8 + +'TabOrder'#2#21#0#0#7'TButton'#7'HelpBtn'#3'Tag'#3#138#0#4'Left'#2#11#6'Heig' + +'ht'#2#28#3'Top'#3'h'#1#5'Width'#2'L'#7'Caption'#6#4'Help'#7'OnClick'#7#12'H' + +'elpBtnClick'#8'TabOrder'#2#22#0#0#0 +]); diff --git a/applications/lazstats/source_orig/polydifunit.pas b/applications/lazstats/source_orig/polydifunit.pas new file mode 100644 index 000000000..0c701e269 --- /dev/null +++ b/applications/lazstats/source_orig/polydifunit.pas @@ -0,0 +1,584 @@ +unit PolyDIFUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, MainUnit, Globals, Math, OutPutUnit, MatrixLib, + DataProcs, FunctionsLib, GraphLib, ExtCtrls, contexthelpunit; + +type + + { TPolyDIFFrm } + + TPolyDIFFrm = class(TForm) + HelpBtn: TButton; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + LowScoreEdit: TEdit; + HiScoreEdit: TEdit; + RefGrpEdit: TEdit; + TrgtGrpEdit: TEdit; + GraphChk: TCheckBox; + GroupBox1: TGroupBox; + Label11: TLabel; + Label12: TLabel; + Label13: TLabel; + Label14: TLabel; + LowBoundEdit: TEdit; + UpBoundEdit: TEdit; + Label10: TLabel; + Label9: TLabel; + LevelNoEdit: TEdit; + Label5: TLabel; + Label6: TLabel; + Label7: TLabel; + Label8: TLabel; + LevelsEdit: TEdit; + ItemInBtn: TBitBtn; + ItemOutBtn: TBitBtn; + AllBtn: TBitBtn; + GrpInBtn: TBitBtn; + GrpOutBtn: TBitBtn; + GroupVarEdit: TEdit; + Label1: TLabel; + Label2: TLabel; + ItemsList: TListBox; + Label3: TLabel; + Label4: TLabel; + LevelScroll: TScrollBar; + VarList: TListBox; + procedure AllBtnClick(Sender: TObject); + procedure CancelBtnClick(Sender: TObject); + procedure ComputeBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure GrpInBtnClick(Sender: TObject); + procedure GrpOutBtnClick(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + procedure ItemInBtnClick(Sender: TObject); + procedure ItemOutBtnClick(Sender: TObject); + procedure LevelScrollScroll(Sender: TObject; ScrollCode: TScrollCode; + var ScrollPos: Integer); + procedure LevelsEditExit(Sender: TObject); + procedure LowBoundEditExit(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + procedure ReturnBtnClick(Sender: TObject); + procedure UpBoundEditExit(Sender: TObject); + private + { private declarations } + NoItems : integer; + nocats : integer; + ColNoSelected : IntDyneVec; + ColLabels, RowLabels : StrDyneVec; + Ubounds : IntDyneVec; // upper and lower bounds of score groups + Lbounds : IntdyneVec; + + public + { public declarations } + end; + +var + PolyDIFFrm: TPolyDIFFrm; + +implementation + +{ TPolyDIFFrm } + +procedure TPolyDIFFrm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + VarList.Clear; + ItemsList.Clear; + GroupVarEdit.Text := ''; + ItemInBtn.Visible := true; + ItemOutBtn.Visible := false; + AllBtn.Visible := true; + GrpInBtn.Visible := true; + GrpOutBtn.Visible := false; +// MHChk.Checked := true; + RefGrpEdit.Text := ''; + TrgtGrpEdit.Text := ''; + LowScoreEdit.Text := ''; + HiScoreEdit.Text := ''; + LevelsEdit.Text := ''; + for i := 1 to NoVariables do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); + if NoVariables > 0 then LevelScroll.Max := NoVariables; + LevelNoEdit.Text := '1'; + LowBoundEdit.Text := '0'; + UpBoundEdit.Text := '2'; + LevelScroll.Min := 1; + LevelScroll.Position := 1; + //allocate space on heap + SetLength(ColLabels,NoVariables+1); + SetLength(RowLabels,NoVariables+1); + SetLength(ColNoSelected,NoVariables); + SetLength(Lbounds,NoVariables * 10); + SetLength(Ubounds,NoVariables * 10); +end; + +procedure TPolyDIFFrm.ReturnBtnClick(Sender: TObject); +begin + Ubounds := nil; + Lbounds := nil; + ColNoSelected := nil; + RowLabels := nil; + ColLabels := nil; + PolyDIFfrm.Hide; +end; + +procedure TPolyDIFFrm.UpBoundEditExit(Sender: TObject); +VAR i : integer; +begin + i := StrToInt(LevelNoEdit.Text); + Ubounds[i-1] := StrToInt(UpBoundEdit.Text); + if i = StrToInt(LevelsEdit.Text) then + begin + ComputeBtn.SetFocus; + exit; + end; + LowBoundEdit.Text := IntToStr(Ubounds[i-1] + 1); + LowBoundEdit.SetFocus; +end; + +procedure TPolyDIFFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(Self); +end; + +procedure TPolyDIFFrm.GrpInBtnClick(Sender: TObject); +VAR index : integer; +begin + if VarList.ItemIndex < 0 then + begin + GrpInBtn.Visible := false; + exit; + end; + index := VarList.ItemIndex; + GroupVarEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + GrpInBtn.Visible := false; + GrpOutBtn.Visible := true; +end; + +procedure TPolyDIFFrm.GrpOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(GroupVarEdit.Text); + GroupVarEdit.Text := ''; + GrpOutBtn.Visible := false; + GrpInBtn.Visible := true; +end; + +procedure TPolyDIFFrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +procedure TPolyDIFFrm.ItemInBtnClick(Sender: TObject); +VAR i, index : integer; +begin + if VarList.ItemIndex < 0 then + begin + ItemInBtn.Visible := false; + exit; + end; + index := VarList.Items.Count; + i := 0; + while i < index do + begin + if (VarList.Selected[i]) then + begin + ItemsList.Items.Add(VarList.Items.Strings[i]); + VarList.Items.Delete(i); + index := index - 1; + i := 0; + end + else i := i + 1; + end; + ItemOutBtn.Visible := true; +end; + +procedure TPolyDIFFrm.ItemOutBtnClick(Sender: TObject); +VAR index : integer; +begin + index := ItemsList.ItemIndex; + if index < 0 then + begin + ItemOutBtn.Visible := false; + exit; + end; + VarList.Items.Add(ItemsList.Items.Strings[index]); + ItemsList.Items.Delete(index); + ItemInBtn.Visible := true; +end; + +procedure TPolyDIFFrm.LevelScrollScroll(Sender: TObject; + ScrollCode: TScrollCode; var ScrollPos: Integer); +var + scrlpos : integer; + level : integer; +begin + level := StrToInt(LevelNoEdit.Text); + scrlpos := LevelScroll.Position; + if ((scrlpos > level) and (level <= StrToInt(LevelsEdit.Text))) then + begin + LevelNoEdit.Text := IntToStr(scrlpos); + LowBoundEdit.SetFocus; + exit; + end; + if scrlpos < level then + begin + level := scrlpos; + if level > 0 then + begin + LevelNoEdit.Text := IntToStr(level); + LowBoundEdit.Text := IntToStr(Lbounds[level-1]); + UpBoundEdit.Text := IntToStr(Ubounds[level-1]); + end; + LowBoundEdit.SetFocus; + end; +end; + +procedure TPolyDIFFrm.LevelsEditExit(Sender: TObject); +begin + LevelScroll.Max := StrToInt(LevelsEdit.Text); + LowBoundEdit.SetFocus; +end; + +procedure TPolyDIFFrm.LowBoundEditExit(Sender: TObject); +VAR i : integer; +begin + i := StrToInt(LevelNoEdit.Text); + Lbounds[i-1] := StrToInt(LowBoundEdit.Text); + UpBoundEdit.SetFocus; +end; + +procedure TPolyDIFFrm.CancelBtnClick(Sender: TObject); +begin + Ubounds := nil; + Lbounds := nil; + ColNoSelected := nil; + RowLabels := nil; + ColLabels := nil; + PolyDIFfrm.Hide; +end; + +procedure TPolyDIFFrm.AllBtnClick(Sender: TObject); +VAR i : integer; +begin + if VarList.Items.Count < 1 then exit; + for i := 0 to VarList.Items.Count - 1 do + ItemsList.Items.Add(VarList.Items.Strings[i]); + VarList.Clear; + ItemInBtn.Visible := false; + ItemOutBtn.Visible := true; +end; + +procedure TPolyDIFFrm.ComputeBtnClick(Sender: TObject); +Label first; +var + i, j, k : integer; + itm, nolevels, level : integer; + grpvar : integer; + subjgrp : integer; + subjtot : integer; + value : integer; + cellstring : string; + title : string; + nsize : array [1..2] of integer; + FData : IntDyneCube; //no. of category values within item for focal group + RData : IntDyneCube; //no. of category values within item for reference group + TotData : IntDyneCube; // sum of the above two + t, Mf, Mb, Sf, Sb, Nb, Nf, df, d, Sd : DblDyneVec; + Zc, Vart, Probt, g, BigJ, SumE, SumV, Term1, MY, prob : double; + X, BigDnum, BigDden, BigD, BigDS, Zd, M2, E, VarE, Ti, dftot : double; + m : integer; + loscore, hiscore : integer; +begin + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('Polytomous Item DIF Analysis adapted by Bill Miller from'); + OutPutFrm.RichEdit.Lines.Add('Procedures for extending item bias detection techniques'); + OutPutFrm.RichEdit.Lines.Add('by Catherine Welch and H.D. Hoover, 1993'); + OutPutFrm.RichEdit.Lines.Add('Applied Measurement in Education 6(1), pages 1-19.'); + OutPutFrm.RichEdit.Lines.Add(''); + + NoItems := ItemsList.Items.Count; + loscore := StrToInt(LowScoreEdit.Text); + hiscore := StrToInt(HiScoreEdit.Text); + nocats := hiscore - loscore + 1; // 0 to highest score + nolevels := StrToInt(LevelsEdit.Text); + SetLength(FData,NoItems,hiscore+10,nolevels+10); + SetLength(RData,NoItems,hiscore+10,nolevels+10); + SetLength(TotData,NoItems,hiscore+10,nolevels+10); + SetLength(t,nolevels); + SetLength(Mf,nolevels); + SetLength(Mb,nolevels); + SetLength(Sf,nolevels); + SetLength(Sb,nolevels); + SetLength(Nb,nolevels); + SetLength(Nf,nolevels); + SetLength(df,nolevels); + SetLength(d,nolevels); + SetLength(Sd,nolevels); + + for k := 1 to 2 do nsize[k] := 0; + + // get items to analyze and their labels + for i := 1 to NoItems do // items to analyze + begin + for j := 1 to NoVariables do // variables in grid + begin + cellstring := OS3MainFrm.DataGrid.Cells[j,0]; + if cellstring = ItemsList.Items.Strings[i-1] then + begin // matched - save info + ColNoSelected[i-1] := j; + ColLabels[i-1] := cellstring; + RowLabels[i-1] := cellstring; + end; // end match + end; // next j + end; // next i + ColLabels[NoItems] := 'TOTAL'; + RowLabels[NoItems] := 'TOTAL'; + + // get the variable number of the grouping code + grpvar := 0; + for i := 1 to NoVariables do + begin + cellstring := OS3MainFrm.DataGrid.Cells[i,0]; + if cellstring = GroupVarEdit.Text then grpvar := i; + end; + if grpvar = 0 then + begin + ShowMessage('Error - No group variable found.'); + exit; + end; + + // read data (score group and items) + for i := 1 to NoCases do + begin + subjtot := 0; + // Get group (reference or target) + value := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[grpvar,i]))); + subjgrp := 0; + if value = StrToInt(RefGrpEdit.Text) then subjgrp := 1; // reference grp + if value = StrToInt(TrgtGrpEdit.Text) then subjgrp := 2; // target group + if subjgrp = 0 then + begin + ShowMessage('Error - Bad group code for a subject.'); + exit; + end; + nsize[subjgrp] := nsize[subjgrp] + 1; + + for j := 1 to NoItems do // get item score and subject total + begin + itm := ColNoSelected[j-1]; + value := Round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[itm,i]))); + subjtot := subjtot + value; + end; + + level := 0; + for k := 0 to NoLevels-1 do // get score level category + begin + if ((subjtot >= Lbounds[k]) and (subjtot <= Ubounds[k])) then + level := k; + end; + + for j := 1 to NoItems do // add to data + begin + itm := ColNoSelected[j-1]; + value := Round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[itm,i]))); + value := value - loscore; + if subjgrp = 1 then + RData[j-1,value,level] := RData[j-1,value,level] + 1 + else FData[j-1,value,level] := FData[j-1,value,level] + 1; + TotData[j-1,value,level] := TotData[j-1,value,level] + 1; + end; + end; // next case i + + // Show upper and lower bounds for score group bins + OutPutFrm.RichEdit.Lines.Add('Conditioning Levels'); + OutPutFrm.RichEdit.Lines.Add('Lower Upper'); + for i := 0 to nolevels-1 do + begin + cellstring := format('%5d %5d',[Lbounds[i],Ubounds[i]]); + OutPutFrm.RichEdit.Lines.Add(cellstring); + end; + OutPutFrm.RichEdit.Lines.Add(''); + + // obtain statistics and print frequency in categories for each item + for i := 1 to NoItems do + begin + OutPutFrm.RichEdit.Lines.Add('Observed Category Frequencies'); + OutPutFrm.RichEdit.Lines.Add('Item Group Level Category Number'); + Title := ' '; + for j := 0 to nocats-1 do Title := Title + format('%10d',[j+loscore]); + OutPutFrm.RichEdit.Lines.Add(Title); + Zc := 0.0; + dftot := 0.0; + BigDnum := 0.0; + BigDden := 0.0; + M2 := 0.0; + SumE := 0.0; // second term of M2 numerator + SumV := 0.0; // denominator of M2 + Term1 := 0.0; // first term of M2 numerator + for k := 0 to nolevels-1 do + begin + Mf[k] := 0.0; + Mb[k] := 0.0; + Sf[k] := 0.0; + Sb[k] := 0.0; + t[k] := 0.0; + Nb[k] := 0.0; + Nf[k] := 0.0; + df[k] := 0.0; + d[k] := 0.0; + Sd[k] := 0.0; + VarE := 0.0; + E := 0.0; + Ti := 0.0; + MY := 0.0; + Title := format('%3d Ref. %3d',[i,k+1]); + for j := 0 to nocats-1 do + begin + Title := Title + format('%10d',[RData[i-1,j,k]]); + X := RData[i-1,j,k] * (j+loscore); + Mb[k] := Mb[k] + X; + Sb[k] := Sb[k] + (X * X); + Nb[k] := Nb[k] + RData[i-1,j,k]; + end; + OutPutFrm.RichEdit.Lines.Add(Title); + Title := format('%3d Focal %3d',[i,k+1]); + for j := 0 to nocats-1 do + begin + Title := Title + format('%10d',[FData[i-1,j,k]]); + X := FData[i-1,j,k] * (j + loscore); + Mf[k] := Mf[k] + X; + Sf[k] := Sf[k] + (X * X); + Nf[k] := Nf[k] + FData[i-1,j,k]; + end; + OutPutFrm.RichEdit.Lines.Add(Title); + Title := format('%3d Total %3d',[i,k+1]); + for j := 0 to nocats-1 do + Title := Title + format('%10d',[TotData[i-1,j,k]]); + OutPutFrm.RichEdit.Lines.Add(Title); + OutPutFrm.RichEdit.Lines.Add(''); + for j := 0 to nocats-1 do + begin + Term1 := Term1 + FData[i-1,j,k] * (j+loscore); + X := TotData[i-1,j,k] * (j+loscore); + E := E + X; + Ti := Ti + TotData[i-1,j,k]; + MY := MY + TotData[i-1,j,k] * (j + loscore); + VarE := VarE + TotData[i-1,j,k] * (j + loscore)*(j + loscore); + end; + E := E / Ti; + E := Nf[k] * E; + SumE := SumE + E; // second term of num. of m2 + VarE := (Ti * VarE) - (MY * MY); + VarE := ((Nf[k] * Nb[k]) / (Ti * Ti * (Ti - 1.0))) * VarE; + SumV := SumV + VarE; // den. of M2 + if (Nf[k] + Nb[k]) < 5 then continue; + Sf[k] := Sf[k] - (Mf[k] * Mf[k] / Nf[k]); + Sf[k] := Sf[k] / (Nf[k] - 1.0); + Sb[k] := Sb[k] - (Mb[k] * Mb[k] / Nb[k]); + Sb[k] := Sb[k] / (Nb[k] - 1.0); + Mf[k] := Mf[k] / Nf[k]; + Mb[k] := Mb[k] / Nb[k]; + t[k] := Mf[k] - Mb[k]; + df[k] := Nb[k] + Nf[k] - 2.0; + Vart := ((Sf[k] * Nf[k]) + (Sb[k] * Nb[k])) / df[k]; + Vart := sqrt(Vart * ((1.0 / Nf[k]) + (1.0 / Nb[k]))); + t[k] := t[k] / Vart; + Zc := Zc + t[k]; + dftot := dftot + (df[k] / (df[k] - 2.0)); + BigJ := 1.0 - (3.0 / (4.0 * df[k] - 1.0)); + d[k] := BigJ * sqrt((Nb[k] * Nf[k]) / (Nb[k] * Nf[k])); + d[k] := d[k] * t[k]; + Sd[k] := (BigJ * BigJ) * (df[k] / (df[k] - 2.0)); + Sd[k] := Sd[k] * (Nb[k] + Nf[k]) / (Nb[k] * Nf[k]); + Sd[k] := Sd[k] + (d[k] * d[k]) * ((BigJ * BigJ * df[k])/(df[k]-2.0) - 1.0); + BigDnum := BigDnum + d[k] / Sd[k]; + BigDden := BigDden + 1.0 / Sd[k]; + end; // next level k + M2 := (Term1 - SumE) * (Term1 - SumE) / SumV; + Title := 't-test values for Reference and Focus Means for each level'; + OutPutFrm.RichEdit.Lines.Add(Title); + for k := 0 to nolevels-1 do + begin + Title := format('Mean Reference = %10.3f SD = %10.3f N = %5.0f',[Mb[k],sqrt(Sb[k]),Nb[k]]); + OutPutFrm.RichEdit.Lines.Add(Title); + Title := format('Mean Focal = %10.3f SD = %10.3f N = %5.0f',[Mf[k],sqrt(Sf[k]),Nf[k]]); + OutPutFrm.RichEdit.Lines.Add(Title); + Title := format('Level %3d t = %8.3f with deg. freedom = %5.0f',[k+1,t[k],df[k]]); + OutPutFrm.RichEdit.Lines.Add(Title); + end; + Zc := Zc / dftot; // HW1 statistic + prob := 1.0 - probz(Zc); + Title := format('Composite z statistic = %6.3f. Prob. > |z| = %6.3f',[Zc, prob]); + OutPutFrm.RichEdit.Lines.Add(Title); + BigD := BigDnum / BigDden; + BigDS := 1.0 / sqrt(BigDden); + Zd := BigD / BigDS; // HW3 statistic + prob := 1.0 - probz(Zd); + Title := format('Weighted Composite z statistic = %6.3f. Prob. > |z| = %6.3f',[Zd, prob]); + OutPutFrm.RichEdit.Lines.Add(Title); + prob := 1.0 - chisquaredprob(M2,1); + Title := format('Generalized Mantel-Haenszel = %10.3f with D.F. = 1 and Prob. > Chi-Sqr. = %6.3f',[M2, prob]); + OutPutFrm.RichEdit.Lines.Add(Title); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + if GraphChk.Checked then + begin + GraphFrm.nosets := 2; + GraphFrm.nbars := nolevels; + GraphFrm.Heading := 'Level Means'; + GraphFrm.XTitle := 'Level'; + GraphFrm.YTitle := 'Mean'; + SetLength(GraphFrm.Ypoints,2,nolevels+1); + SetLength(GraphFrm.Xpoints,1,nolevels+1); + for k := 0 to nolevels-1 do + begin + GraphFrm.Ypoints[0,k] := Mb[k]; + GraphFrm.Xpoints[0,k] := k+1; + GraphFrm.Ypoints[1,k] := Mf[k]; + end; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := true; + GraphFrm.GraphType := 2; // 3d Vertical Bar Chart + GraphFrm.ShowLeftWall := true; + GraphFrm.ShowRightWall := true; + GraphFrm.ShowBottomWall := true; + GraphFrm.ShowBackWall := true; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.ShowModal; + end; + end; // next item + + // clean up the heap + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; + FData := nil; + RData := nil; + TotData := nil; + t := nil; + Mf := nil; + Mb := nil; + Sf := nil; + Sb := nil; + Nb := nil; + Nf := nil; + df := nil; + d := nil; + Sd:= nil; +end; + +initialization + {$I polydifunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/polynomialunit.lfm b/applications/lazstats/source_orig/polynomialunit.lfm new file mode 100644 index 000000000..a9415f88a --- /dev/null +++ b/applications/lazstats/source_orig/polynomialunit.lfm @@ -0,0 +1,55 @@ +object PolynomialFrm: TPolynomialFrm + Left = 335 + Height = 137 + Top = 138 + Width = 218 + Caption = 'Polynomial Regression Smoothing' + ClientHeight = 137 + ClientWidth = 218 + OnShow = FormShow + LCLVersion = '0.9.28.2' + object Label1: TLabel + Left = 8 + Height = 14 + Top = 16 + Width = 87 + Caption = 'Polynomial order :' + ParentColor = False + end + object PolyEdit: TEdit + Left = 104 + Height = 21 + Top = 9 + Width = 47 + TabOrder = 0 + Text = 'PolyEdit' + end + object CancelBtn: TButton + Left = 120 + Height = 29 + Top = 56 + Width = 70 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 1 + end + object OKBtn: TButton + Left = 56 + Height = 29 + Top = 96 + Width = 80 + Caption = 'OK' + ModalResult = 1 + TabOrder = 2 + end + object HelpBtn: TButton + Tag = 139 + Left = 8 + Height = 28 + Top = 56 + Width = 76 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 3 + end +end diff --git a/applications/lazstats/source_orig/polynomialunit.lrs b/applications/lazstats/source_orig/polynomialunit.lrs new file mode 100644 index 000000000..a182ea6b3 --- /dev/null +++ b/applications/lazstats/source_orig/polynomialunit.lrs @@ -0,0 +1,17 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TPolynomialFrm','FORMDATA',[ + 'TPF0'#14'TPolynomialFrm'#13'PolynomialFrm'#4'Left'#3'O'#1#6'Height'#3#137#0#3 + +'Top'#3#138#0#5'Width'#3#218#0#7'Caption'#6#31'Polynomial Regression Smoothi' + +'ng'#12'ClientHeight'#3#137#0#11'ClientWidth'#3#218#0#6'OnShow'#7#8'FormShow' + +#10'LCLVersion'#6#8'0.9.28.2'#0#6'TLabel'#6'Label1'#4'Left'#2#8#6'Height'#2 + +#14#3'Top'#2#16#5'Width'#2'W'#7'Caption'#6#18'Polynomial order :'#11'ParentC' + +'olor'#8#0#0#5'TEdit'#8'PolyEdit'#4'Left'#2'h'#6'Height'#2#21#3'Top'#2#9#5'W' + +'idth'#2'/'#8'TabOrder'#2#0#4'Text'#6#8'PolyEdit'#0#0#7'TButton'#9'CancelBtn' + +#4'Left'#2'x'#6'Height'#2#29#3'Top'#2'8'#5'Width'#2'F'#7'Caption'#6#6'Cancel' + +#11'ModalResult'#2#2#8'TabOrder'#2#1#0#0#7'TButton'#5'OKBtn'#4'Left'#2'8'#6 + +'Height'#2#29#3'Top'#2'`'#5'Width'#2'P'#7'Caption'#6#2'OK'#11'ModalResult'#2 + +#1#8'TabOrder'#2#2#0#0#7'TButton'#7'HelpBtn'#3'Tag'#3#139#0#4'Left'#2#8#6'He' + +'ight'#2#28#3'Top'#2'8'#5'Width'#2'L'#7'Caption'#6#4'Help'#7'OnClick'#7#12'H' + +'elpBtnClick'#8'TabOrder'#2#3#0#0#0 +]); diff --git a/applications/lazstats/source_orig/polynomialunit.pas b/applications/lazstats/source_orig/polynomialunit.pas new file mode 100644 index 000000000..44c57fbef --- /dev/null +++ b/applications/lazstats/source_orig/polynomialunit.pas @@ -0,0 +1,50 @@ +unit PolynomialUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, contexthelpunit; + +type + + { TPolynomialFrm } + + TPolynomialFrm = class(TForm) + CancelBtn: TButton; + HelpBtn: TButton; + OKBtn: TButton; + PolyEdit: TEdit; + Label1: TLabel; + procedure FormShow(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + PolynomialFrm: TPolynomialFrm; + +implementation + +{ TPolynomialFrm } + +procedure TPolynomialFrm.FormShow(Sender: TObject); +begin + PolyEdit.Text := '1'; +end; + +procedure TPolynomialFrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +initialization + {$I polynomialunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/presentvalueunit.lfm b/applications/lazstats/source_orig/presentvalueunit.lfm new file mode 100644 index 000000000..df541649c --- /dev/null +++ b/applications/lazstats/source_orig/presentvalueunit.lfm @@ -0,0 +1,167 @@ +object PresentValueFrm: TPresentValueFrm + Left = 163 + Height = 480 + Top = 111 + Width = 336 + Caption = 'Present Value' + ClientHeight = 480 + ClientWidth = 336 + OnShow = FormShow + LCLVersion = '0.9.28.2' + object Label1: TLabel + Left = 7 + Height = 14 + Top = 288 + Width = 62 + Caption = 'Future Value' + ParentColor = False + end + object Label2: TLabel + Left = 8 + Height = 14 + Top = 321 + Width = 43 + Caption = 'Payment' + ParentColor = False + end + object Label3: TLabel + Left = 8 + Height = 14 + Top = 354 + Width = 89 + Caption = 'Number of Periods' + ParentColor = False + end + object Label4: TLabel + Left = 8 + Height = 14 + Top = 392 + Width = 76 + Caption = 'Rate Per Period' + ParentColor = False + end + object Label5: TLabel + Left = 8 + Height = 14 + Top = 431 + Width = 67 + Caption = 'Present Value' + ParentColor = False + end + object Memo1: TMemo + Left = 6 + Height = 240 + Top = 8 + Width = 318 + Lines.Strings = ( + 'Description:' + '' + 'This procedure calculates the Present Value of an investment' + 'where Payment is received for N periods and is discounted at' + 'the rate of Rate per period. Future Value is the value the' + 'investment may reach at some point. Payment Time indicates' + 'whether the cash flow occurs at the beginning or end of the' + 'period.' + 'EXAMPLE: What was the amount borrowed in a 7.5% APR' + '(Annual Percentage Rate) four year auto loan when the' + 'payment is $500.00?' + 'Rate per Period = 0.075 / 12 = 0.00625' + 'Number of periods = 4 years * 12 months = 48' + 'Payment = -$500.00' + 'Future Value = 0' + 'Payment Time = End of Period' + 'ANSWER: about $20679.19' + ) + TabOrder = 0 + end + object FutureEdit: TEdit + Left = 104 + Height = 21 + Top = 281 + Width = 68 + TabOrder = 1 + Text = 'FutureEdit' + end + object PaymentEdit: TEdit + Left = 104 + Height = 21 + Top = 314 + Width = 68 + TabOrder = 2 + Text = 'Edit1' + end + object NPeriodsEdit: TEdit + Left = 104 + Height = 21 + Top = 347 + Width = 68 + TabOrder = 3 + Text = 'Edit1' + end + object RateEdit: TEdit + Left = 104 + Height = 21 + Top = 384 + Width = 68 + TabOrder = 4 + Text = 'Edit1' + end + object PresentEdit: TEdit + Left = 104 + Height = 21 + Top = 424 + Width = 68 + TabOrder = 5 + Text = 'Edit1' + end + object PayTimeGrp: TRadioGroup + Left = 191 + Height = 62 + Top = 272 + Width = 131 + AutoFill = True + Caption = 'Payment Time:' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 44 + ClientWidth = 127 + Items.Strings = ( + 'Start of Period' + 'End of Period' + ) + TabOrder = 6 + end + object ResetBtn: TButton + Left = 208 + Height = 34 + Top = 344 + Width = 85 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 7 + end + object ComputeBtn: TButton + Left = 208 + Height = 34 + Top = 392 + Width = 85 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 8 + end + object ReturnBtn: TButton + Left = 208 + Height = 34 + Top = 440 + Width = 85 + Caption = 'Return' + ModalResult = 1 + TabOrder = 9 + end +end diff --git a/applications/lazstats/source_orig/presentvalueunit.lrs b/applications/lazstats/source_orig/presentvalueunit.lrs new file mode 100644 index 000000000..c214d6b67 --- /dev/null +++ b/applications/lazstats/source_orig/presentvalueunit.lrs @@ -0,0 +1,50 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TPresentValueFrm','FORMDATA',[ + 'TPF0'#16'TPresentValueFrm'#15'PresentValueFrm'#4'Left'#3#163#0#6'Height'#3 + +#224#1#3'Top'#2'o'#5'Width'#3'P'#1#7'Caption'#6#13'Present Value'#12'ClientH' + +'eight'#3#224#1#11'ClientWidth'#3'P'#1#6'OnShow'#7#8'FormShow'#10'LCLVersion' + +#6#8'0.9.28.2'#0#6'TLabel'#6'Label1'#4'Left'#2#7#6'Height'#2#14#3'Top'#3' '#1 + +#5'Width'#2'>'#7'Caption'#6#12'Future Value'#11'ParentColor'#8#0#0#6'TLabel' + +#6'Label2'#4'Left'#2#8#6'Height'#2#14#3'Top'#3'A'#1#5'Width'#2'+'#7'Caption' + +#6#7'Payment'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#2#8#6'Height' + +#2#14#3'Top'#3'b'#1#5'Width'#2'Y'#7'Caption'#6#17'Number of Periods'#11'Pare' + +'ntColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#2#8#6'Height'#2#14#3'Top'#3#136#1 + +#5'Width'#2'L'#7'Caption'#6#15'Rate Per Period'#11'ParentColor'#8#0#0#6'TLab' + +'el'#6'Label5'#4'Left'#2#8#6'Height'#2#14#3'Top'#3#175#1#5'Width'#2'C'#7'Cap' + +'tion'#6#13'Present Value'#11'ParentColor'#8#0#0#5'TMemo'#5'Memo1'#4'Left'#2 + +#6#6'Height'#3#240#0#3'Top'#2#8#5'Width'#3'>'#1#13'Lines.Strings'#1#6#12'Des' + +'cription:'#6#0#6''#3'Top'#3#16#1#5'Width'#3#131#0#8'AutoFill'#9#7 + +'Caption'#6#13'Payment Time:'#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildS' + +'izing.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomog' + +'enousChildResize'#27'ChildSizing.EnlargeVertical'#7#24'crsHomogenousChildRe' + +'size'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildSizing.' + +'ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeftToR' + +'ightThenTopToBottom'#27'ChildSizing.ControlsPerLine'#2#1#12'ClientHeight'#2 + +','#11'ClientWidth'#2#127#13'Items.Strings'#1#6#15'Start of Period'#6#13'End' + +' of Period'#0#8'TabOrder'#2#6#0#0#7'TButton'#8'ResetBtn'#4'Left'#3#208#0#6 + +'Height'#2'"'#3'Top'#3'X'#1#5'Width'#2'U'#7'Caption'#6#5'Reset'#7'OnClick'#7 + +#13'ResetBtnClick'#8'TabOrder'#2#7#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3 + +#208#0#6'Height'#2'"'#3'Top'#3#136#1#5'Width'#2'U'#7'Caption'#6#7'Compute'#7 + +'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#8#0#0#7'TButton'#9'ReturnBtn'#4 + +'Left'#3#208#0#6'Height'#2'"'#3'Top'#3#184#1#5'Width'#2'U'#7'Caption'#6#6'Re' + +'turn'#11'ModalResult'#2#1#8'TabOrder'#2#9#0#0#0 +]); diff --git a/applications/lazstats/source_orig/presentvalueunit.pas b/applications/lazstats/source_orig/presentvalueunit.pas new file mode 100644 index 000000000..38f828f65 --- /dev/null +++ b/applications/lazstats/source_orig/presentvalueunit.pas @@ -0,0 +1,99 @@ +unit PresentValueUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, ExtCtrls; + +type + + { TPresentValueFrm } + + TPresentValueFrm = class(TForm) + ResetBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + FutureEdit: TEdit; + PaymentEdit: TEdit; + NPeriodsEdit: TEdit; + RateEdit: TEdit; + PresentEdit: TEdit; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + Label5: TLabel; + Memo1: TMemo; + PayTimeGrp: TRadioGroup; + procedure ComputeBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + function PresentValue(Rate: Extended; NPeriods: Integer; Payment, FutureValue: + Extended; PaymentTime: TPaymentTime): Extended; + + private + { private declarations } + public + { public declarations } + end; + +var + PresentValueFrm: TPresentValueFrm; + +implementation + +{ TPresentValueFrm } + +procedure TPresentValueFrm.ResetBtnClick(Sender: TObject); +begin + FutureEdit.Text := ''; + PaymentEdit.Text := ''; + NPeriodsEdit.Text := ''; + RateEdit.Text := ''; + PresentEdit.Text := ''; +end; + +procedure TPresentValueFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TPresentValueFrm.ComputeBtnClick(Sender: TObject); +VAR + Rate, Payment, PresentVal, FutureVal, Interest : Extended; + NPeriods, When : integer; + Time : TPaymentTime; + +begin + If PayTimeGrp.ItemIndex = 0 then Time := ptStartofPeriod else + Time := ptEndofPeriod; + FutureVal := StrToFloat(FutureEdit.Text); + Rate := StrToFloat(RateEdit.Text); + NPeriods := StrToInt(NPeriodsEdit.Text); + Payment := StrToFloat(PaymentEdit.Text); + PresentVal := PresentValue(Rate, NPeriods, Payment, FutureVal, Time); + PresentEdit.Text := FloatToStr(PresentVal); + +end; + +function TPresentValueFrm.PresentValue(Rate: Extended; NPeriods: Integer; Payment, FutureValue: + Extended; PaymentTime: TPaymentTime): Extended; +var + Annuity, CompoundRN: Extended; +begin + if Rate <= -1.0 then ShowMessage('ERROR! PresentValue Rate <= -1.-'); + Annuity := Annuity2(Rate, NPeriods, PaymentTime, CompoundRN); + if CompoundRN > 1.0E16 then + PresentValue := -(Payment / Rate * Integer(PaymentTime) * Payment) + else + PresentValue := (-Payment * Annuity - FutureValue) / CompoundRN +end; + +initialization + {$I presentvalueunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/probchisqrunit.lfm b/applications/lazstats/source_orig/probchisqrunit.lfm new file mode 100644 index 000000000..9cdcb2ae8 --- /dev/null +++ b/applications/lazstats/source_orig/probchisqrunit.lfm @@ -0,0 +1,96 @@ +object ChiSqrProbForm: TChiSqrProbForm + Left = 288 + Height = 146 + Top = 161 + Width = 389 + Caption = 'Probability of a chisquared value' + ClientHeight = 146 + ClientWidth = 389 + OnShow = ResetBtnClick + LCLVersion = '0.9.30' + object Label1: TLabel + Left = 9 + Height = 16 + Top = 14 + Width = 106 + Caption = 'Chisquared value = ' + ParentColor = False + end + object ChiSqrEdit: TEdit + Left = 123 + Height = 23 + Top = 7 + Width = 62 + TabOrder = 0 + Text = 'ChiSqrEdit' + end + object Label2: TLabel + Left = 195 + Height = 16 + Top = 14 + Width = 112 + Caption = 'with deg. freedom = ' + ParentColor = False + end + object DFEdit: TEdit + Left = 311 + Height = 23 + Top = 7 + Width = 50 + TabOrder = 1 + Text = 'DFEdit' + end + object Label3: TLabel + Left = 8 + Height = 16 + Top = 47 + Width = 136 + Caption = 'Probability larger value = ' + ParentColor = False + end + object ProbEdit: TEdit + Left = 145 + Height = 23 + Top = 39 + Width = 74 + TabOrder = 2 + Text = 'ProbEdit' + end + object CancelBtn: TButton + Left = 8 + Height = 33 + Top = 80 + Width = 82 + Cancel = True + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 3 + end + object ResetBtn: TButton + Left = 104 + Height = 33 + Top = 80 + Width = 82 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 4 + end + object ComputeBtn: TButton + Left = 200 + Height = 33 + Top = 80 + Width = 82 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 5 + end + object ReturnBtn: TButton + Left = 296 + Height = 33 + Top = 80 + Width = 77 + Caption = 'Return' + ModalResult = 1 + TabOrder = 6 + end +end diff --git a/applications/lazstats/source_orig/probchisqrunit.lrs b/applications/lazstats/source_orig/probchisqrunit.lrs new file mode 100644 index 000000000..8ba7bd585 --- /dev/null +++ b/applications/lazstats/source_orig/probchisqrunit.lrs @@ -0,0 +1,26 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TChiSqrProbForm','FORMDATA',[ + 'TPF0'#15'TChiSqrProbForm'#14'ChiSqrProbForm'#4'Left'#3' '#1#6'Height'#3#146#0 + +#3'Top'#3#161#0#5'Width'#3#133#1#7'Caption'#6'!Probability of a chisquared v' + +'alue'#12'ClientHeight'#3#146#0#11'ClientWidth'#3#133#1#6'OnShow'#7#13'Reset' + +'BtnClick'#10'LCLVersion'#6#6'0.9.30'#0#6'TLabel'#6'Label1'#4'Left'#2#9#6'He' + +'ight'#2#16#3'Top'#2#14#5'Width'#2'j'#7'Caption'#6#19'Chisquared value = '#11 + +'ParentColor'#8#0#0#5'TEdit'#10'ChiSqrEdit'#4'Left'#2'{'#6'Height'#2#23#3'To' + +'p'#2#7#5'Width'#2'>'#8'TabOrder'#2#0#4'Text'#6#10'ChiSqrEdit'#0#0#6'TLabel' + +#6'Label2'#4'Left'#3#195#0#6'Height'#2#16#3'Top'#2#14#5'Width'#2'p'#7'Captio' + +'n'#6#20'with deg. freedom = '#11'ParentColor'#8#0#0#5'TEdit'#6'DFEdit'#4'Le' + +'ft'#3'7'#1#6'Height'#2#23#3'Top'#2#7#5'Width'#2'2'#8'TabOrder'#2#1#4'Text'#6 + +#6'DFEdit'#0#0#6'TLabel'#6'Label3'#4'Left'#2#8#6'Height'#2#16#3'Top'#2'/'#5 + +'Width'#3#136#0#7'Caption'#6#27'Probability larger value = '#11'ParentColor' + +#8#0#0#5'TEdit'#8'ProbEdit'#4'Left'#3#145#0#6'Height'#2#23#3'Top'#2''''#5'Wi' + +'dth'#2'J'#8'TabOrder'#2#2#4'Text'#6#8'ProbEdit'#0#0#7'TButton'#9'CancelBtn' + +#4'Left'#2#8#6'Height'#2'!'#3'Top'#2'P'#5'Width'#2'R'#6'Cancel'#9#7'Caption' + +#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#3#0#0#7'TButton'#8'ResetBtn'#4 + +'Left'#2'h'#6'Height'#2'!'#3'Top'#2'P'#5'Width'#2'R'#7'Caption'#6#5'Reset'#7 + +'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#4#0#0#7'TButton'#10'ComputeBtn'#4 + +'Left'#3#200#0#6'Height'#2'!'#3'Top'#2'P'#5'Width'#2'R'#7'Caption'#6#7'Compu' + +'te'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#5#0#0#7'TButton'#9'Retur' + +'nBtn'#4'Left'#3'('#1#6'Height'#2'!'#3'Top'#2'P'#5'Width'#2'M'#7'Caption'#6#6 + +'Return'#11'ModalResult'#2#1#8'TabOrder'#2#6#0#0#0 +]); diff --git a/applications/lazstats/source_orig/probchisqrunit.pas b/applications/lazstats/source_orig/probchisqrunit.pas new file mode 100644 index 000000000..c033e122f --- /dev/null +++ b/applications/lazstats/source_orig/probchisqrunit.pas @@ -0,0 +1,65 @@ +unit ProbChiSqrUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, functionslib; + +type + + { TChiSqrProbForm } + + TChiSqrProbForm = class(TForm) + CancelBtn: TButton; + ChiSqrEdit: TEdit; + ComputeBtn: TButton; + DFEdit: TEdit; + ProbEdit: TEdit; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + ResetBtn: TButton; + ReturnBtn: TButton; + procedure ComputeBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + ChiSqrProbForm: TChiSqrProbForm; + +implementation + +{ TChiSqrProbForm } + +procedure TChiSqrProbForm.ResetBtnClick(Sender: TObject); +begin + ChiSqrEdit.Text := ''; + DFEdit.Text := ''; + ProbEdit.Text := ''; +end; + +procedure TChiSqrProbForm.ComputeBtnClick(Sender: TObject); +VAR + ChiSqr, Prob : double; + DF : integer; + outvalue : string; +begin + ChiSqr := StrToFloat(ChiSqrEdit.Text); + DF := StrToInt(DFEdit.Text); + Prob := 1.0 - chisquaredprob(ChiSqr,DF); + outvalue := format('%6.4f',[Prob]); + ProbEdit.Text := outvalue; +end; + +initialization + {$I probchisqrunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/probsmallerzunit.lfm b/applications/lazstats/source_orig/probsmallerzunit.lfm new file mode 100644 index 000000000..ba608602d --- /dev/null +++ b/applications/lazstats/source_orig/probsmallerzunit.lfm @@ -0,0 +1,80 @@ +object ProbSmallerzForm: TProbSmallerzForm + Left = 288 + Height = 194 + Top = 161 + Width = 320 + Caption = 'Probability of a smaller z score' + ClientHeight = 194 + ClientWidth = 320 + OnShow = ResetBtnClick + LCLVersion = '0.9.30' + object Label1: TLabel + Left = 9 + Height = 16 + Top = 16 + Width = 104 + Caption = 'Observed z score = ' + ParentColor = False + end + object zEdit: TEdit + Left = 113 + Height = 23 + Top = 9 + Width = 83 + TabOrder = 0 + Text = 'zEdit' + end + object Label2: TLabel + Left = 9 + Height = 16 + Top = 46 + Width = 91 + Caption = 'Probability < z = ' + ParentColor = False + end + object ProbzEdit: TEdit + Left = 113 + Height = 23 + Top = 40 + Width = 80 + TabOrder = 1 + Text = 'ProbzEdit' + end + object CancelBtn: TButton + Left = 8 + Height = 33 + Top = 80 + Width = 82 + Cancel = True + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 2 + end + object ResetBtn: TButton + Left = 113 + Height = 33 + Top = 80 + Width = 82 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 3 + end + object ComputeBtn: TButton + Left = 216 + Height = 33 + Top = 80 + Width = 82 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 4 + end + object ReturnBtn: TButton + Left = 115 + Height = 33 + Top = 130 + Width = 77 + Caption = 'Return' + ModalResult = 1 + TabOrder = 5 + end +end diff --git a/applications/lazstats/source_orig/probsmallerzunit.lrs b/applications/lazstats/source_orig/probsmallerzunit.lrs new file mode 100644 index 000000000..cee419817 --- /dev/null +++ b/applications/lazstats/source_orig/probsmallerzunit.lrs @@ -0,0 +1,22 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TProbSmallerzForm','FORMDATA',[ + 'TPF0'#17'TProbSmallerzForm'#16'ProbSmallerzForm'#4'Left'#3' '#1#6'Height'#3 + +#194#0#3'Top'#3#161#0#5'Width'#3'@'#1#7'Caption'#6' Probability of a smaller' + +' z score'#12'ClientHeight'#3#194#0#11'ClientWidth'#3'@'#1#6'OnShow'#7#13'Re' + +'setBtnClick'#10'LCLVersion'#6#6'0.9.30'#0#6'TLabel'#6'Label1'#4'Left'#2#9#6 + +'Height'#2#16#3'Top'#2#16#5'Width'#2'h'#7'Caption'#6#19'Observed z score = ' + +#11'ParentColor'#8#0#0#5'TEdit'#5'zEdit'#4'Left'#2'q'#6'Height'#2#23#3'Top'#2 + +#9#5'Width'#2'S'#8'TabOrder'#2#0#4'Text'#6#5'zEdit'#0#0#6'TLabel'#6'Label2'#4 + +'Left'#2#9#6'Height'#2#16#3'Top'#2'.'#5'Width'#2'['#7'Caption'#6#18'Probabil' + +'ity < z = '#11'ParentColor'#8#0#0#5'TEdit'#9'ProbzEdit'#4'Left'#2'q'#6'Heig' + +'ht'#2#23#3'Top'#2'('#5'Width'#2'P'#8'TabOrder'#2#1#4'Text'#6#9'ProbzEdit'#0 + +#0#7'TButton'#9'CancelBtn'#4'Left'#2#8#6'Height'#2'!'#3'Top'#2'P'#5'Width'#2 + +'R'#6'Cancel'#9#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#2#0 + +#0#7'TButton'#8'ResetBtn'#4'Left'#2'q'#6'Height'#2'!'#3'Top'#2'P'#5'Width'#2 + +'R'#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#3#0#0 + +#7'TButton'#10'ComputeBtn'#4'Left'#3#216#0#6'Height'#2'!'#3'Top'#2'P'#5'Widt' + +'h'#2'R'#7'Caption'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder' + +#2#4#0#0#7'TButton'#9'ReturnBtn'#4'Left'#2's'#6'Height'#2'!'#3'Top'#3#130#0#5 + +'Width'#2'M'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#5#0#0#0 +]); diff --git a/applications/lazstats/source_orig/probsmallerzunit.pas b/applications/lazstats/source_orig/probsmallerzunit.pas new file mode 100644 index 000000000..b3fd17b3c --- /dev/null +++ b/applications/lazstats/source_orig/probsmallerzunit.pas @@ -0,0 +1,60 @@ +unit ProbSmallerzUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, functionslib; + +type + + { TProbSmallerzForm } + + TProbSmallerzForm = class(TForm) + CancelBtn: TButton; + ComputeBtn: TButton; + Label1: TLabel; + Label2: TLabel; + ProbzEdit: TEdit; + ResetBtn: TButton; + ReturnBtn: TButton; + zEdit: TEdit; + procedure ComputeBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + ProbSmallerzForm: TProbSmallerzForm; + +implementation + +{ TProbSmallerzForm } + +procedure TProbSmallerzForm.ResetBtnClick(Sender: TObject); +begin + zEdit.Text := ''; + ProbzEdit.Text := ''; +end; + +procedure TProbSmallerzForm.ComputeBtnClick(Sender: TObject); +VAR + zprob, z : double; + outvalue : string; +begin + z := StrToFloat(zEdit.Text); + zprob := probz(z); + outvalue := format('%6.4f',[zprob]); + ProbzEdit.Text := outvalue; +end; + +initialization + {$I probsmallerzunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/probzunit.lfm b/applications/lazstats/source_orig/probzunit.lfm new file mode 100644 index 000000000..17fa2852d --- /dev/null +++ b/applications/lazstats/source_orig/probzunit.lfm @@ -0,0 +1,80 @@ +object ProbzForm: TProbzForm + Left = 238 + Height = 190 + Top = 161 + Width = 320 + Caption = 'Probability of a larger z score' + ClientHeight = 190 + ClientWidth = 320 + OnShow = ResetBtnClick + LCLVersion = '0.9.30' + object Label1: TLabel + Left = 9 + Height = 16 + Top = 16 + Width = 104 + Caption = 'Observed z score = ' + ParentColor = False + end + object zEdit: TEdit + Left = 113 + Height = 23 + Top = 9 + Width = 83 + TabOrder = 0 + Text = 'zEdit' + end + object Label2: TLabel + Left = 9 + Height = 16 + Top = 46 + Width = 91 + Caption = 'Probability > z = ' + ParentColor = False + end + object ProbzEdit: TEdit + Left = 113 + Height = 23 + Top = 40 + Width = 80 + TabOrder = 1 + Text = 'ProbzEdit' + end + object CancelBtn: TButton + Left = 8 + Height = 33 + Top = 80 + Width = 82 + Cancel = True + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 2 + end + object ResetBtn: TButton + Left = 113 + Height = 33 + Top = 80 + Width = 82 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 3 + end + object ComputeBtn: TButton + Left = 216 + Height = 33 + Top = 80 + Width = 82 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 4 + end + object ReturnBtn: TButton + Left = 115 + Height = 33 + Top = 130 + Width = 77 + Caption = 'Return' + ModalResult = 1 + TabOrder = 5 + end +end diff --git a/applications/lazstats/source_orig/probzunit.lrs b/applications/lazstats/source_orig/probzunit.lrs new file mode 100644 index 000000000..f3e6ad753 --- /dev/null +++ b/applications/lazstats/source_orig/probzunit.lrs @@ -0,0 +1,22 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TProbzForm','FORMDATA',[ + 'TPF0'#10'TProbzForm'#9'ProbzForm'#4'Left'#3#238#0#6'Height'#3#190#0#3'Top'#3 + +#161#0#5'Width'#3'@'#1#7'Caption'#6#31'Probability of a larger z score'#12'C' + +'lientHeight'#3#190#0#11'ClientWidth'#3'@'#1#6'OnShow'#7#13'ResetBtnClick'#10 + +'LCLVersion'#6#6'0.9.30'#0#6'TLabel'#6'Label1'#4'Left'#2#9#6'Height'#2#16#3 + +'Top'#2#16#5'Width'#2'h'#7'Caption'#6#19'Observed z score = '#11'ParentColor' + +#8#0#0#5'TEdit'#5'zEdit'#4'Left'#2'q'#6'Height'#2#23#3'Top'#2#9#5'Width'#2'S' + +#8'TabOrder'#2#0#4'Text'#6#5'zEdit'#0#0#6'TLabel'#6'Label2'#4'Left'#2#9#6'He' + +'ight'#2#16#3'Top'#2'.'#5'Width'#2'['#7'Caption'#6#18'Probability > z = '#11 + +'ParentColor'#8#0#0#5'TEdit'#9'ProbzEdit'#4'Left'#2'q'#6'Height'#2#23#3'Top' + +#2'('#5'Width'#2'P'#8'TabOrder'#2#1#4'Text'#6#9'ProbzEdit'#0#0#7'TButton'#9 + +'CancelBtn'#4'Left'#2#8#6'Height'#2'!'#3'Top'#2'P'#5'Width'#2'R'#6'Cancel'#9 + +#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#2#0#0#7'TButton'#8 + +'ResetBtn'#4'Left'#2'q'#6'Height'#2'!'#3'Top'#2'P'#5'Width'#2'R'#7'Caption'#6 + +#5'Reset'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#3#0#0#7'TButton'#10'C' + +'omputeBtn'#4'Left'#3#216#0#6'Height'#2'!'#3'Top'#2'P'#5'Width'#2'R'#7'Capti' + +'on'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#4#0#0#7'TBu' + +'tton'#9'ReturnBtn'#4'Left'#2's'#6'Height'#2'!'#3'Top'#3#130#0#5'Width'#2'M' + +#7'Caption'#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#5#0#0#0 +]); diff --git a/applications/lazstats/source_orig/probzunit.pas b/applications/lazstats/source_orig/probzunit.pas new file mode 100644 index 000000000..3575f3d00 --- /dev/null +++ b/applications/lazstats/source_orig/probzunit.pas @@ -0,0 +1,60 @@ +unit ProbzUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, functionslib; + +type + + { TProbzForm } + + TProbzForm = class(TForm) + ReturnBtn: TButton; + CancelBtn: TButton; + ResetBtn: TButton; + ComputeBtn: TButton; + ProbzEdit: TEdit; + Label2: TLabel; + zEdit: TEdit; + Label1: TLabel; + procedure ComputeBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + ProbzForm: TProbzForm; + +implementation + +{ TProbzForm } + +procedure TProbzForm.ResetBtnClick(Sender: TObject); +begin + zEdit.Text := ''; + ProbzEdit.Text := ''; +end; + +procedure TProbzForm.ComputeBtnClick(Sender: TObject); +VAR + zprob, z : double; + outvalue : string; +begin + z := StrToFloat(zEdit.Text); + zprob := 1.0 - probz(z); + outvalue := format('%6.4f',[zprob]); + ProbzEdit.Text := outvalue; +end; + +initialization + {$I probzunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/project1.lrs b/applications/lazstats/source_orig/project1.lrs new file mode 100644 index 000000000..6db3489b8 --- /dev/null +++ b/applications/lazstats/source_orig/project1.lrs @@ -0,0 +1,5222 @@ +LazarusResources.Add('MAINICON','ICO',[ + #0#0#1#0#6#0#0#0#0#0#1#0' '#0#226#145#0#0'f'#0#0#0#128#128#0#0#1#0' '#0'('#8#1 + +#0'H'#146#0#0'@@'#0#0#1#0' '#0'(B'#0#0'p'#154#1#0'00'#0#0#1#0' '#0#168'%'#0#0 + +#152#220#1#0' '#0#0#1#0' '#0#168#16#0#0'@'#2#2#0#16#16#0#0#1#0' '#0'h'#4#0#0 + +#232#18#2#0#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#1#0#0#0#1#0#8#6#0#0#0'\r' + +#168'f'#0#0#145#169'IDATx'#218#236']'#5#128#28#245#213''#235'n'#231'w9I.N' + +#136#144#4#139#17#220'['#220#221#138';!'#184'|'#180#148#2#197'Kq'#13'R('#20 + +'(V'#180#197#3#9'!'#144#144#16#187#156#219#202#173#251'~'#239#253'gfo'#246'r' + +'~'#187';{'#242#131#201#236#173#204#204#202#251#253#159'?'#25#140'a'#12'c'#24 + +#181#144'I}'#1'c'#24#195#24#164#195#24#1#140'a'#12#163#24'c'#4'0'#134'1'#140 + +'b'#140#17#192#24#198'0'#138'1F'#0'c'#24#195'('#198#24#1#140'"'#140#155'}2}' + +#223#6#220'L'#184#25'q'#11#227#230#161#173#225#167#21#17#169#175'o'#12#217 + +#199#24#1#12'c'#160'@'#155'q7'#21#183'i'#184'M'#198#173#8'8'#225'N'#217'd2' + +#153'p'#155#132#191#167#239'<'#132#155''''#145'H0B'#224'7'#175#232'v'#7'n' + +#219'p'#219#128#219'F'#220'j'#145'4'#18'R'#6'c'#24#26#198#8' '#199#129'B.' + +#199#221'x'#224#132'|'#170#176#161'P'#211#223'%='#189'N'#214#195'7+'#235#230 + +'+O@'#207'r'#156#232#249#161#0#146#197'&'#232'$'#132#228#134#196#224#145#250 + +'s'#27'C'#255'0F'#0'9'#6#20'x'#18#234#189'q'#219#7#183'=P'#208'ie'#215#136 + +#159'#'#22'nA'#160'e'#194#157#226#199'DO'#20'nwG'#12'b!O'#240'$R'#238#236 + +#230'q'#209#157']I'#2#159#211#136#187#181#184'}'#198'o'#171#145#20'bR'#182 + +'c'#216#17'c'#4' 1P'#224#11'p'#183#20'8'#161#223#27#5'u'#186#240'X'#167'L' + +#239'('#228't'#155#219#0#228#244#12#185#140'{'#158#140'{'#157#140#191'!'#235 + +#250'|'#232'<'#166' '#196#130#252#146'ps'#27'pRM'#255#203#184#191#197#143#209 + +#235#196#247'AbGb'#232'B'#10#29#248#248#255#160#147#16'~'#26'3'#31'r'#3'c'#4 + +#144'e'#160#192'[p'#183#23#240#171'<'#10#229'L'#224#191#7#177#192#203'8)'#6 + +#185'\'#158#20'h'#185#156#187'_.'#227#4#158#30#163#219#10'z'#142#188#203#227 + +#252#30'D'#247#201#21#10#220'+AF{P@\'#22#135'D,'#134#194#26#131'8'#238#227 + +#241#24'/'#216'qn'#31'O'#0#222#194#251#241#223'8@'#28#255#137#199#185#191#227 + +#137#4#187#157#224#239'#'#2#136''''#186''''#134'nH'#193#129#247''#14''#193#238#139#11'['#146'(R'#9#161#139#217'A&'#195#10 + +#220#158'G2'#248'E'#234#239'k4a'#140#0'2'#4#20'z%'#238#246#7'N'#232''#143'{' + +#29#221'/'#172#230#226#21'^,'#240'$'#172'$'#224'J'#165#2#148#180'W)A'#163#214 + +'3'#1#215#144#176'ku'#160#209#242'B'#175'V'#129#10#159#175'T'#202#217's'#233 + +'u'#10#185'p'#172'.'#26#129#130'3'#21#184#251#216#149'p'#23#202'Vn'#224'Vo' + +#129#4#226#156#128#198'x'#1#142#197'8'#161#142'E'#19#16'E!'#143'D'#227#16'Eb' + +#8'!'#9#132#131'~n'#11's'#251#16'#'#135'0>/'#134#207#225'6'#129#16#24'A'#136 + +#8#129#206#215'U;'#192#251#215#224#238#5#220'^B2h'#150#250'{'#28#233#24'#' + +#128'4'#3#5'.'#238'N'#197#237'D'#20#190'b'#186'O,'#244#130#170#174#144#209 + +'*.c'#2#175#228#133'^'#173'T'#162'P'#171'Ao'#178#130'^o'#3#157#209#10'Z'#29 + +#10#187'J'#129#171'=nL'#208#233#182#156#221'V)'#21#201'=#'#11'%G'#0'D$r9g' + +#247#211#185#146'&'#3#179#8'd)'#206'AnE'#134#20'5'#30'e'#149#187#29#231'6"' + +#128'h'#156#132'9'#158'$'#128'H'#132#246'1'#238#182'h'#31#198'}8'#24#130#128 + +#175#3#252'^'''#248'}N'#8#5'}'#236'1'#129#16#162#177#174#132#16'g'#218#1#153 + +#24#220'5'#177']'#12#175#225'c'#224#200#224'M$'#3#191#212#223#237'H'#196#24#1 + +#164#1'('#244#21#184';'#25#183'SQ'#184'v'#162#251#186#21'z~'#133#231'Vv'#18 + +'^'#20'x'#149#10#244'('#232'z'#163#13#12#6#220#27#204#184#226#227#170#175'Q' + +#130'V'#173'`'#194'O'#171'U'#188#192#171':'#133'^'#197#142#195#173#254't'#31 + +'g&p'#171''#210#148#160#235#224#29#132#130#250#159#18#9#224#205#0#178#245 + +#133#21#153#217#251#252#223'$'#155'$'#160#209'8'#183#250'w'#146#0#10'2'#145#0 + +#222#14'G8'#2#160'=m'#161'H'#20#205#132#24#4#195#220#237'@ '#0'~'#143#139#145 + +#1#145'B'#136#204#8#188#159'#'#131#24'gJ'#224'qbq'#193#223#176#131#153#224'E' + +'2'#248'''pd@>'#131#184#212#223#249'H'#193#24#1#12#1'('#248#243'pw='#10#219 + +#17#192'-'#174#12'rN'#210'8'#149'\&O'#170#244'*'#21#9#178#146#9#188#193'd' + +#195'}'#30'nf'#208'jT'#160#19#132#30'7'#29#19'~%G'#4'<'#9#168#149#220#202'O' + +#171'<'#169#253#10#165#12#148'ra'#213#167's'#164#10'>]'#2'wA'#188#192#11#209 + +#129'D*'#1'$U'#239#164'g'#159#255#139#183#215#227#188'3P'#16#206'(o'#14#16#9 + +#196#4'2Hj'#5#164#1#160#208#147#224#135#163'l'#31#8'E!('#222'P'#240#253'>'#31 + +#4#188'.'#240'!'#25#248'<'#14'4'#27#130#248#218'(#'#5'F'#4#140#12'x"'#232#226 + +'3'#192#191')'#25#233'/'#184'='#131'D'#16#146#250'70'#220'1F'#0#131#0#10#254 + +'"'#220#221#128#194'v'#16#253#157'\'#237'y'#207''#198#147'BLl'#30#136#136#0#133'>'#16'N%'#1#250';'#16#196'-'#20#129'` '#2 + +#30#183#3'<'#174'f'#240'x'#218'Q;'#8'32 '#13'C'#236'd'#20'L'#4#17#17#144#227 + +#240'^'#220#30'C"'#240'I'#253#155#24#174#24'#'#128#1#0#5#159#156'z7'#162'0-' + +#161#191#185#24'<-'#181#220'j'#159'j'#203#163'0'#235't`'#182#20#131#201'V'#2 + +'F'#147#25#244'Z'#21#24'p'#163#189'^G'#130#174'b'#194#175#21'V|'#141#130#9'=' + +#17#6#19#252#164#131#143#183#229#153#195#16'D6='''#224#178#174#241#254'.'#215 + +'-'#147#13#236'k'#22''''#1#137's'#4#128#251#159'#'#2#193'THtF'#16#146#132'@' + +#26'B$'#158'4'#11'B'#145'N'#141' '#200#147'A '#24#1'?'#146#128#31'I'#192#239 + +#167#219#184#5#130#224'v'#181#129#219#217#194'i'#6','#242#16'c'#14#199#164 + +#137#16#139#167'h'#5'x'#187#29'/'#233'~'#220#30'F"'#232#144#250'72'#220'0F'#0 + +'}'#128'/'#160#249#29'p+'#254#174't'#31#23'^'#239#12#209'1!Ur'#234#189'V'#171 + +#1#147#165#136#173#244'&K'#30'/'#236'j0'#232'T'#201'M'#199#147#128'V'#195#169 + +#248#156#208'+83A'#201#31'O.'#178#231'{'#17'v'#254'&'#183#239'A'#208#7'"'#255 + +'='#165#254'v%'#133'D'#167#154#176#3')p^'#255#4#243#27#196'D'#142'C'#210#10 + +#194#188'_'#128#153#7'A'#142#8'|'#129'0n'#17#182#249'i'#143'Z'#128#23#205#4 + +#15#18#1#145#129#223#239#193#215'E'#153'f'#192#162#11#188#19#177#139#175#128 + +#146#141#30#193#253'}H'#4#237'R'#255'n'#134#11#198#8#160#7#240'9'#248#199#1 + +'g'#227'S'#178#206#14#130#175#18#236'z\'#189#13'&+X'#243#199#161#224#23#162 + +#144#235'P'#232'U`'#228#5#158#8#192#168#231#132'^'''#8'>'#9#189'Z'#145't'#230 + +'q'#26#132'8'#254'/J'#254#17'.'#170#15'u>['#232#202#17']'#201#128#249#14#4#13 + +'A'#228'?`'#209#4'2'#17'b'#228','#140'32 '#159#0#167#13#136#8#0'5'#2'/'#146 + +#130#159#255#219#227'qA'#135#179#25':'#28#141'hR'#132'92Hj'#5';'#16#129#31 + +#207#255#24#238#239'A"h'#148#224#227#25'V'#24'#'#128'n'#128#194#191#27#238#30 + +'EA'#163#144'^'#138#224'+yU_'#141'6'#188#6'7'#163'9'#15'l'#133#149'`'#177#230 + +#163#176#227'J'#143#130'n'#212#171#217'mN'#232#213'('#244'h'#235'k95_'#205'<' + +#250#188#7'_'#217#25#183#239'N'#173'g'#231#22'.j8|S]'#202#7'RR'#135'E'#230'B' + +','#193#231#20#240#161'Cf"'#136'|'#3'$'#244'^A+'#240#163'6 '#236'}~p'#180#213 + +'!'#17'4'#224#243#130#140#8':#'#9#169'D'#128#231#14#224'%'#220#137#219'_'#198 + +#156#133'=c8'#252#172#178#6#20#252'<'#220#221#137#194'w.'#240'2'#152'"'#248 + +#188#154#175'A'#219#221'd)`'#130'oE5'#223'hP3'#161'7'#25'4L'#232#13#188#202 + +#159#180#241#153#224#139#156'y'#188'z/'#8#190'8?'#165#208'g'#128#182'{'#174 + +#161''''#167'b2'#225#136'O2'#226#180#2'!'#140'H>'#130'X'#167#143#0#137#192'C' + +#194#207#8' '#12'n'#220'{'#188'~p'#182#215#131#203'^'#15'A'#144#249#10'z!'#2 + +#170'X'#188#24'I'#224'?R'#30#185#136#225#253#11'K'#19'x;'#255','#220#238'B' + +#161#203#23#156'{2'#133#160#234's+'#183#22'W|'#147#181#8#242#138'+'#193'l' + +#182#129#137#9'='''#248'&#'#238'Q'#240'uL'#229'W'#177#24#190#134'9'#243'RU|q' + +'r'#14#8#222'z'#254':d#'#248#235#216#161'z0'#25'f'#228'3'#17#197'&'#2'i'#5'Q' + +'^+ '#18#8'F'#152#22#224#245#133#192'C$'#224'#R'#8#129#215#27#0#167#189#1#156 + +#168#21'P'#174'A('#140'D@9'#9'T'#215#192';'#11#227#157#213#141#175#225#238#10 + +'$'#130#6#169'?'#139'\'#194#200#253#197#245#19'('#252#187#224#238'o('#152'{' + +#136#195'y,'#227#142'6'#18'|T'#227'-'#214#18#176#21'U'#160#224'['#153#208#155 + +'I'#232'y'#225'g'#26#128#150#19'|q'#248'N'#156#158'+'#8'>'#147#249#212'z'#222 + +#209#9'Q'#232'1'#233'7'#224#137#128#204#132#8#159'tDQ'#0#166#17#132#200'9' + +#136#155#143#211#8#220'H'#6'D'#4#28')'#4#145#8#26#145#8'j'#193#239#247'!qt' + +#18#1#167'm'#196#5'm'#128#26#156#220#138#219#3'H'#4'Q'#169'?'#130'\'#192'h' + +#253#249#9'Uyw'#160'0^'#128'{'#133#160#238#179'"'#27#222#185'G'#9':'#228#205 + +'/('#169'F'#193'71a'#239'I'#240#5#199#30'K'#203'U'#202'S'#236'zN'#232#187#177 + +#235#199#176'C'#30'BB'#172#25#176#236'CN+'#8'G'#163#157'D'#192#251#4'8m'#128 + +'#'#2#143'@'#4'm'#13#224'h'#169'A'#205'!'#192#136' '#194#155#6']'#204#2'*8' + +#186#16'I'#224#11#169#223#191#212#24#149#191'E'#20#254'Spw'#15#229#234'''Km' + +#21'|J-+'#190'A;'#222'hB'#193#159#4#182#252'"&'#244'f#'''#252'f^'#240#13#188 + +'W_'#219'e'#197'O&'#231#240'R'#223#25#162#147#250']'#231'>D'#193#4'n/'#242#21 + +'$S'#144'{'#210#8#188'!'#232' '#18#160'}'#135#23#218#155#183#130#203#217#4 + +#193'`'#152#249#21#136#8#226#172#246' %'#153#232'y'#220']'#141'D'#208'&'#245 + +'{'#151#10#163#234'g'#137#130'O'#141'0'#31'G'#193'?'#145#254#22'Vh'#5#191#234 + +#171'U*'#180#225'5'#204#185'WP2'#30','#6#29'XL'#26#176#24'9'#2#160'U'#159#9 + +#190'F'#136#225'+9'#167#30#139#219#11'y'#255'\'#213']'#231'''<'#170'>'#226 + +#244'A'#228'@L@gM'#2#249#9'"'#2#17#136#162#6#130'Y'#208#225#9'22'#160#205#225 + +'h'#135#246#166'MH'#10#29#156'6'#192#242#8#226#156''#160'S'#27#160'P'#225 + +#137'H'#2#255#147#250'-K'#129'Q'#243#235'D'#225#159#141#187''#160#144'N'#17 + +'V}'#5#159'i'#199#169#251'h'#215'['#11#160#176't2'#218#251'f&'#244'V'#163#22 + ,#204'D'#0#6'-S'#251'){'#143#4#159#203#244#227#146'u'#196'e'#183'];'#248#140 + +'a'#232#16#151#11#11#230'A,'#193#167#30'G'#184#228'"'#230','#196#205#195#155 + +#5#29#222' '#18'A'#136#237#221'H'#8#237#173#181#224'l'#217#14#254'`'#16'B' + +#225'0'#159'f'#28'Oj'#24#192'U'#30#222#130#251';G['#161#209#168#248#165#162 + +#240#159#135#187#7'PH'#181'2'#190#6'_H'#217#165#144#158#222'`'#196#21'"'#228 + +#229#151#178#149#158'V}+['#249'9'#193'7'#232#213'l'#213#167#172'='#242#234's' + +#9';\'#201#173'Pp'#195'>'#204'Q'#241'iJ'#131#206'DDn'#229'N'#166#31#147'F'#16 + +#229#170#16')'#143#128#210#138#189#188'I'#224#18#17'A'#135#219#11'mM'#155#161 + +#195#209#130'&'#4#146#0'%'#19#9#209#130'Nm'#224'#<'#193')H'#2#173'R'#191#223 + +'laD'#255'd'#249'N<'#143#137'U~'#193#214#167'D'#30#29#174#250'yE'#168#238#23 + +'O'#0#179'Y'#199#4'>'#185#242#27'9[_H'#217'e'#169#186#138#212#226#155#222#26 + +'m'#142'!3'#224#139#21#147#14#195'd>A'#148'K7'#230'2'#11'9"'#224#28#132'H'#4 + +'n$'#0#242#13#144'Y`o'#133#246#230'M'#224#243'x:'#181#129'h\'#28')h'#194'3' + +#156#140'$'#240#153#212#239'5'#27#24#177'?]^'#229''#141#186#234#138'='#252 + +#172#180'VEN>#'#148#148#239#4'V[>'#191#226'k'#25#1#144#202'O'#241'}'#178#245 + +'uj~'#213#23'j'#237'E^}'#246#225#141#216'O/'#247#145'$'#2#232#236'AH)'#199'Q' + +#190#0#137#10#142#168#208#200#231#227#136#128#132#223#229#9'2'#31'A'#135'''' + +#0#173#13#191#177#208'a'#144'O-'#142'&C'#134#236#200#184'K'#220#142#251#255 + +#27#233'&'#193#136#252#9#163#240#255#1'w'#247#139'U~'#174#147#14#197#244'U`' + +#177#21'Cq'#249'4'#176#153#13'('#252'Z&'#252#164#242's'#153'|\'#234'.'#173 + +#250'\5'#30#223'aG&'#235'6'#23''#12#210'"'#145'd'#1#224#27#152#242'D'#16#137 + +#179#162'#"'#2#31#239'$'#228#132'?'#4'N'#158#8#236'm'#13#208#214#248#27'j'#11 + +'A'#150'D$D'#10'D&'#193#167#192'i'#3'#'#182'5'#217#136#250'%'#243'*?y'#249'O' + +#160#191#197'*'#191'FM'#130#173#129#252#210'j(,'#169'bj'#190#213#162#5#155'I' + +#155#12#241#137#227#249'B'#18'Ogn>$k'#236#199#144'['#160#214#229#157#185#4 + +#188'Y'#192#218#152'qY'#133#212#153'('#192#215#23'0'#223#0#145#128';'#128#166 + +#1#238#157'Nh'#169'_'#15'^O'#7#231#27#216#209'$h'#1#206'/'#240#177#212#239'3' + +#19#24'1'#191'f'#20'~'#26#139#245#30#10#255#188#174'I=\\'#159'T'#254#25'`' + +#203#207'c+'#190#205#164#3#171'Y'#203#135#247#212#172'XGH'#221'e'#13'7'#146 + +#234#190'h'#229#151#250'M'#142#161'G'#136'|'#132#220','#131'8'#223#201'('#193 + +'7)'#9'sNB'#210#6#220#188'9@'#190#1#167#155#246#254#164'I'#16#224#27#146'DY' + +#155#244'$'#9'P'#214#224#217'H'#2#207'K'#253'>'#211#141#17#241#155'F'#225#159 + +#128#187#255#160#240'O'#18#132#159'b'#243#228#229'gi'#188#182'"T'#249#167#163 + +#192#163#202#143'B'#159#135#155#133'_'#249#141'|}'#190#154'o'#192'A'#141':' + +#229'2Q'#231#220#17#241#9#141'B'#240#13'L'#200#128#23'Z'#153#9#185#3'T['#224 + +#241#134#185'('#1'j'#1#14#212#6#220#168#21#180#183#212'C['#243'&'#214#152#132 + +#202#142#133#156#1#222'/'#128'<'#144'X'#134'$p'#143#212'o-'#157#24#246'?o' + +#222#217#247#1#10''#137#216#222#167#226#29#157'V'#203#210'x'#11'H'#229''';' + +#223#204#169#252't'#155'e'#243#233':='#252#201#10'='#161':O'#234'76'#134#161 + +'#'#193#165#26#11'-'#200#163#188#147#144#186#19#177#188#1'_8'#169#13'8'#153 + +'F'#16'@'#147#160#3'Z'#234#214'1'#147#128#146#135'('#5'YD'#2't'#172#187'qw' + +#237'H'#153'l4'#172''#231'('#252'4a'#231'-'#20'~'#139' '#252','#163#143'T~' + +#131#1#138'+f@^^A'#167#224#155#185'0'#31#9'?+'#213#229#227#250'B'#231#29#232 + +'R'#142';'#134#145#1'q'#163#211'd'#164' '#202#165#19#11#225'Br'#14':'#220#28 + +#9#208#214'Z'#191#1'\'#246'&'#212#24#194','#170#16''''#191#0'$M'#130#231#240 + +#128#231#140#132#130#162'a'#251'sG'#225'?'#10'w/'#161#240'k'#132#240#28#169 + +#252'j'#170#213'7'#153#160#164'r6'#216'lff'#235#219#204#218#164#189'/'#180 + +#228'R'#243#173#183#200#209''''#212#225#143#9#255#200#133#144'H'#148'lJ'#130 + +'&A'#24#237#252#16'_n'#204#162#4'nN'#27' '#147#128#162#4'-'#13#155#192#209'Z' + +#203#234#9'('#162' '#174'%@'#18#248'7'#30#238'8$'#129#128#212#239'm('#24#150 + +'?y>'#204'G%'#188'r'#193#211'/8'#251#168#15'_i'#213'L'#176'YM'#144'G'#206'>' + +#139'.'#25#226#211#179'&'#29#202'd'#223'='#161'D'#151#251' '#134#229'G1'#134 + +#1'B<'#216'Th^J+'#188'@'#2'd'#18#144'c'#208#217#17'`'#251#182#230#237#208#214 + +#180#9#130#129'03'#7#186'D'#8#190#194'C'#30#142'$'#224#148#250'}'#13#22#195 + +#238'W'#143#194'3'#10#238'mt['#16'~5_'#193'g'#177#22'@i'#229'L'#176'Z'#245 + +'L'#240#137#0#200#233#199#132#159'o'#201'%'#30#160#193'>'#128#177'e'#212'A<' + +#2']'#156''#129#253#135 + +#147'c0'#231#197#1#133#159#198'o'#189#141#178#175#18#219#252':'#173#26#10#203 + +#166'@Aq%'#243#240''''#133#159'<'#253'$'#252#201#10'>'#174'tW6'#22#219#135 + +#223#29'0'#11#2#254#29#167'hi'#181':'#184#231#161#151'`'#234#244'YR_'#162'd' + +#224'9 '#233#23#136'D'#184#209'f'#228#28'd'#21#133#148''''#208#17'd'#161'B' + +#167#203#141'$'#240#19'x<'#29#221#145#192';x'#168'#'#145#4'bR'#191#167#254' ' + +#167'e'#130#239#207#255')'#10#191'A,'#252#180#242#23#148'N'#130#162#210#241 + +'I'#225#23'r'#250#5#225#231'Fi'#203'E='#249'r'#250#173'f'#5''''#31#181#16#218 + +#219#186#175'kQ('#148'p'#239'#'#175#192#244#25#187'H}'#153#146'AhP'#10#2#9'D' + +#185#225'%b'#18'pv'#8#155#27#154'j'#214#128#215#227'fm'#201#187'8'#6#159'F'#2 + +'8['#234#247#211#31#228#172'T'#160#240'O'#193#221'W('#184#5'B'#146#143' '#252 + +#249'EU'#156#205#207#132#159#203#235'gi'#189'z.'#179#143#28#131#138#148#148 + +'^'#24#157'F'#23','#191#252#20#248'i'#245#183'=>N$p'#215#131'/'#194#140#153 + +#243#165#190'T'#233#144#28'f'#2#201#129#167'D'#2#212''#144#230#18#8'$@'#230 + +#128#195#233'B'#18#248#17'|>2:'#192'&'#21'q'#14#198'?#'#9'\'''#245#219#233 + +#11'9)'#21'('#252#165#184#251#26#133''#188'8'#195#143'9'#252#10#199'AI'#197 + +'N,'#185''''#143#247#246#179#236'>'#157#154#13#215'd'#194'/j'#211#149#179'oR' + +#2#216#219'Z'#224#180#227#150#224#15#180#231#18'w'#185'B'#1'w'#222#251'<'#204 + +#156#179#155#212#151'+'#9#196#195'P'#133#206'CD'#2'!VC'#16'e'#221#135#133'""' + +#202#21' '#199' i'#2#1#170#31#160#241#230#204#28'H'#8'$@s'#8#238#151#250'=' + +#245#134#156#147#13#190']'#247#255'Pxg%'#133#31''#148#26#190#168#167#140#226 + +#252#164#242'S'#156#223',R'#251#213'JP'#170#184'>}c!'#190#158'q'#255']'#215 + +#194''''#31#190#217#235's'#228'r'#5#252#249#129#21'h'#14#204#149#250'r%'#133 + +#16'*'#20'r'#5'h'#132#25#149#21#139#205#1#210#4#236#237#173#208#178#253'g'#8 + +#132#130#140'('#132#218#129#4'7R'#249#148#134#159'^zI'#234#247#210#19'rJJP' + +#248#201#21#253#17#141#223#22#170#250#148'|'#134#159#217#146#7'%'#19'fC'#158 + +#201#0'6'#171#150#197#250#217#202#143#194#175#213'(S'#187#246#228#212#187#202 + +'-'#196#227'Q8'#254#176'y'#16#194#31'ko'#208'hu'#240#220'k_'#130'^o'#148#250 + +#146'%'#133#216'1('#152#3#204''''#224#237'L'#27'&'#231' '#151','#180#129#235 + +'0'#20'I!'#129#8#30#225'0$'#129#156#28'M'#150'S'#162#130#4#240#16#10#255#197 + +#226#146'^'#141#138'r'#251'-P:a'#23'\'#249#141'l'#213'g'#194'o'#226'V~-'#133 + +#250'D'#243#246'r'#234#13#229'('#222#254#231#179#240#244#223#255#220#231#243 + +#202'+'#171#225#225#167#222#147#250'r%Grr'#17#175#9#4#187#144#128#144''''#208 + +#218'T'#3#246#166#205#157'$'#208#217'O'#192#145'H'#196'vi\'#251'J'#173#212 + +#239#165'+rF^'#248#226#158''#138#19'}'#168'A'#7'5'#242'('#173#154#11'y63W' + +#213#199#215#242#147#195#143'*'#250#132#129#28#178#177#149'@8'#251#132'%' + +#224't'#244'='#15'c'#191#131#143#133#11#175#184']'#234#203#149#28'B1'#17'9' + +#249'"|'#187'1.O '#204'J'#137#137#4':P'#19'hi'#220#4#246#214#237#16#162#198 + +'"'#169'ME'#190#142#4#28'K[{?"'#245'{'#17'#''D'#134'o'#232#241'#'#149#245#10 + +#225'>'#18'~'#157'^'#15#165#227'w'#1#155#205#154't'#248'Y'#153#218#175#225 + +#235#248';'#213'~!'#183''#12#253#195'/?}'#7#183',;'#163'_'#207#189#234#134 + +#251'`'#193#146#131#164#190'd'#201#145#28'Y'#22#227#204#1#210#4'|B'#155#177 + +'dw'#161' 4'#213#173#131#14#190#148'85<'#24#191#27'M'#129'k!e'#144#186#180 + +#144'\jx'#187#255'K'#20#254']'#187#134#251#138'+w'#134#130#130#210'd'#172#191 + +#179'}'#151#138#235#207#207#183#232#22#6'}'#140'a`8'#239#228#165#168#5#244 + +#221#2#159#194#131#15'='#253#1#20#22#149'I}'#201#146#131'K'#27#230'5'#1#190 + +#185#8'M.'#166#218#1#18'~'#135''''#192'Z'#140'5m'#253#17''#202#242'3'#25#185#149#159#230#241'q'#133'=' + +'\'#168'Oj'#6#251#237#215#31#225#230'kNM'#185#143'H'#224#222#199#222#134#210 + +#210'*'#137#175#174'wl\'#183#26'n'#185#246#180'~?'#238#174'{'#193#178'['#30 + +#145#250#178's'#2#180'|s-'#200#169#187#16#154#3'An"'#17#235','#212#17#20#149 + +#17#175'Ov'#27#22#249#3#190#12'y['#246'n'#223#242#177#228#29#133'$'#147#31#20 + +'~'#146#14#178#251'm'#226'4_='#218#253'e'#19#230#161#221'oa'#130#207'9'#253 + ,'h'#229'W'#179#22'^\I'#175'<9r[j'#220'y'#243'y'#240#243#143#223#236'pqi'#5 + +#220#247'xnz'#208#219'['#155#224#213#23#30#128'5?|'#1'>'#175'{@'#175'='#243 + +#130#27'`'#255'CN'#144#250'-H'#14'![0'#193#135#7'I'#192'i"'#145#208'^'#140'5' + +#20'Am'#160#185#238'Wp'#182#215'C8'#196'u'#26'&'#194#224#15'pg'#253'O+n'#0 + +#137'M'#1'ID'#8#133'_'#5'\'#178#207#30#226'L?'#157'F'#3'E'#21';'#163#250'_' + +#146'l'#229'%T'#246'Q3'#15#214#194'K)'#227#166#239#230#130#244'#'#206'8z.D#;' + +':v'#149'J'#21'<'#251#198'j'#169'//'#137'p8'#12#239#188#254#4#252#247#227'7' + +#193#209#222'2'#232#227#200#240#187':'#253#188#235'`'#191'1'#18'H'#166#13#11 + +#227#203'Y'#162#144'P7'#144#236'%'#224'GS`5x'#221#174#29#252#1'h1'#30'R'#183 + +'f'#197#135' !'#9'HE'#0'w'#161#240'/'#163#219#10#161#139#175'F'#9#249#133#227 + +#161#168'|2o'#247'wv'#239'e'#225#190'd'''#159#220'q'#248#213'l^'#15'7]'#221 + +#179' <'#241#202#183#160#213#234'%'#189#198'`'#208#15''#185#245#15#176'y' + +#227#207#189#166#0#15#20#147#167#205#134#229#183'?'#1'j'#181'V'#210#247'''5' + +#18#162'a'#165'\'#142#0'?{'#128'H'#128#138#134'<\'#205'@'#179#216#31#208'i' + +#10#180'i'#212#138#217'['#191''#190#25'$"'#129#172'K'#18#10#255#28#220#253 + +#128#4#160#16#199#251#141'f'#206#238#183#176#6#158#188#221'o'#224'j'#250#233 + +'q*'#238#145#201'd9'#21#239''#255'_'#207#193'+'#207#253#181#199#199#175#189 + +#237'q'#216'i'#214#238#146']'#223#166#13'?'#193#221'('#252#161'Pf'#202#211 + +#213#26'-\t'#245#221'0g'#254#18#201#222#163#212'H$'''#18#9#21#132#220'\'#194 + +'dk1'#26'C'#198'g'#10#182'5n`'#13'F'#187#148#15#191#220#240#211#10#234'w'#193 + +#15'8'#203'.'#178'*J('#252't'#190#175#197#170#191'`'#247#151#140'G'#187#223 + +'jN'#246#239#167'Q]'#212#193'W'#173#22'M'#229#205#21#201#231#241#183'{'#151 + +#193#247'_'#247#156#225'y'#197#13#15#195#172#185#139'$'#185#182#230#198#237 + +'p'#253#165'G'#166'u'#213#239#9#187'.'#216#31'.'#188#234'nI'#222'g'#174'@(' + +#30'bN'#193#8#231#15#160'Qd'#212'i'#216#201#166#19#147'?`='#184#218#27'v('#26 + +#146#203#18#251#213#173'y'#137#166#17'g'#157#4#178'M'#0#231#2'7'#187#143#169 + +#254#148#234#171'U'#171'Q'#237#223#9#237#254'q,'#212'G'#4'@'#19'z'#141#186'N' + +#187'_'#220#202'+'#151'p'#203'U'#199'A}'#237#166#30#31'?'#245#188#27'a'#233 + +#254'GKrm'#203'/:'#12'W'#157#236#181#168'3'#154#173'p'#205#205#143'Cy'#213'd' + +'I'#222'o.@p'#10'F'#226#220'(2'#214'iX(!&'#18#240#248#161'q'#235#15#224#247 + +'y'#216'0R'#145')'#176#161#208#28#223'e'#205#23'/'#135'`'#164#18#0#10''#1 + +#238'6'#162#240#231#145',+'#168#194#15#5#220'l-'#130#210#170#217#220#136'nQ' + +#129#15#169#254#201#210#222#28#136#245'w'#135#171#207';'#0':\'#237'=>>{'#222 + +#18#184#248#218#236'W'#131#174#250#246#19#248#251'_'#175#201#250'y'#169#148 + +#248#162'k'#254#138'Z'#207#226#172#159';W@>'#129'x'#12#152#199#159':'#10#249 + +#168#183#160#159's'#10#18#17#216#219'['#160#165'v-'#155':'#20#21'B'#131'@?' + +#239#196#245'{L'#14#255#229#181#215'^'#139'C'#22'I '#155#4#240'4'#10#255#153 + +'B'#194#15'e'#242'i'#181#26'('#171#222#21'l'#22'+X-'#26#150#227'o'#210#11#241 + +'~E'#206'W'#247']y'#206#190#224#245#184'z|'#220'`'#180#192'}O}'#154#245#235 + +'z'#230'o'#183#192'7'#255#253#183'$'#159#9'iw'''#156#185#12#246'>0'#247#19 + +#161'2'#1'nE'#231'z'#11'R'#166' '#181#26'gIB'#194'@R'#26'8R'#251#11#184#28'M' + +']K'#135'}'#10'Yd'#230'YG'#236#180#253#214'[o'#205#154')'#144#21#209'B'#225 + +'_'#136#187'/'#196'M=)'#225''''#191'x'#2#20#150'M'#228#236'~'#190#159#31#27 + +#209#205''''#251#200#20'|'#154'o'#142#142#228#190#242#156#165'L'#157#235#13 + +#203'n'#22#170''''#207#204#234'u'#253#241#186#147#160#174'f'#163#148#31#13 + +#236'{'#200#201'p'#236#169'WJz'#13'R!'#217'e'#152'2'#5'Q'#19#160#162'!'#174 + +#155#16'_='#232'rC'#211#214#239'!'#16#12'tI'#16#138#191'5'#217#214'x'#204#231 + +#159'.h'#1#25''''#129#140'K'#22#10#191#18'w'#171'Q'#246'g'#138#29''#6#163#9 + +'W'#255#221'P'#232'u'#220#234'o'#20'B~'#156#221#175#148'Q?'#191#172'\'#226 + +#160'q'#229'YKX'#152#173'7L'#156':'#27#174#186#229')v'#155#190#232#141#235 + +#190#135'_~'#252#2'j6'#255#2#173'-u'#16#14#5#161#176#184#28'f'#238#178#24#150 + +#236','#216#242#139#135'|]w\{<4'#214'm'#145#250#227#129'='#150#28#6#167#157 + +''#171#212#151'!'#13'(*'#144#224#187#9#133'R'#203#135'iko'#222#14#237'M'#155 + +' '#28#230'M'#1#222'!'#168#144#197#143#216'}r'#244#223#217'2'#5#178'A'#0#201 + +'~'#254#130#227#143'V'#255#226#138'Y'#144'_X'#194#170#251#204#204#235#175'f3' + +#251'4'#194#164'^'#5#191#242#231#174#252#195#21'g.'#198'/0'#216#231#243'*''L' + +#135#246#214#6'^['#232#253';'#173#154'8'#3'.^'#246' '#232#141#230'A_'#215#223 + +#239#189#18'~^'#253#133#212#31#15#195#137'g]'#7#139#246'=J'#234#203#200':' + +#196#249#1#194#172#1#242#7'P4'#192#229#14#129#27'I'#160'q'#219#15#204#132#236 + +#146#27#176#173#196#26#155'S]'#20#243'e'#131#4'2*^('#252#229#184#251#21#133 + +#223'(8'#254'h'#245'7'#219#138#161#164'r&'#179#249#201#243'o'#22#169#254#148 + +#240#195#138'j'#134#193#140#238'+'#206'\'#4#209'H8'#237#199#165#234#187#227 + +#207#188#22#246'\'#250#251'A'#189#254#173#151#31#130#143#223'}A'#234#143#135 + +#129'4'#190#229'Z'#1#165#229#19#165#190#148#172'#9'#131#144'R'#133#249#209 + ,'cn'#26'I'#206#180#128#16'8'#236'm'#208'R'#187#134#213#10#136#27#138#202'e' + +#137'?'#21')6'#222#186'j'#213'*j-'#158'QS '#211#4#240','#238'N'#231#194'x\' + +#165#159'N'#167#129#210#9#187#162#218'o'#6'3o'#247#155'x'#213'_'#165'Rt'#198 + +#251's\'#248#9'W'#158#177'p'#135'A'#27#233#2'}'#6'W'#160#233'@'#26#193'@'#225 + +#180#183#192#173#151#255'N'#234#143''''#9#157#222#8'w<'#244'>(G'#227#240#145 + +#132#184#167' '#167#5#176#198#162#158#16#155'@'#220'Z'#255'+t8'#26#152'C0'#22 + +#139#9#164#17#210'(";W'#154'[k>'#255#252's'#129#4'2'#130#140#137#25'_'#236 + +#179#25''#200#202'd'#147#15'\'#225#243'J&Aa'#201#4'&'#248#22'>'#219#143#188 + +#254'B'#194#143#208#214'K6'#28'4'#128'3'#22#160#234#150#185#249#15#148'F'#252 + +#199'G>'#4#165'j'#224#130#243#199'k'#143#131#214#166#237'R~<)'#168#24'?'#13 + +#174#190#253'9'#169'/#'#171'H'#206#31#20'G'#5#130'\'#150' E'#5#152'&'#224#246 + +'A'#211#182#149#16#240#7#146#25#130'd6'#160#22#240#216#30#147'#'#151#226#203 + +'c'#153'4'#5'2I'#0''#195#221#5#194#234'O'#171#187#222'`'#198#213'>'#174#252 + +#186#164#234'O1'#13#175#250#11#173#188's5'#236#215#21'W"'#1'd:'#211'n'#206 + +'n'#251#194#233#23#253'q'#192#175'['#245#205#135#240#226#223'o'#145#234#163 + +#233#22'{'#29'x'#2#28'q'#210#229'R_FV'#145'L'#21'&_'#0#223'T4'#16#226#18#132 + +'H'#3' "ho'#169#5'{'#211#198#174'a'#193#160'Y'#23#157#174#143'ln'#200#164')' + +#144#17'Q'#227#251#250'oCa'#214#8#171#191#150#194'~'#227'v'#130#130#194'q,' + +#233#135'R}'#169#198#159#10'}'#146#173#189#134'Y['#175#171#207'^'#136'_lf'#9 + +'@'#173#209#193#157''#31'\.'#193'u'#231#239#3#225#12#213#1#12#22#231'^y'#31 + +'L'#155#185#135#212#151#145'u'#136'G'#145'S'#130#16#171#21#224'K'#135'I'#19 + +' -'#192#231#245'$'#147#131#226#156'/'#224#129#137#214#198#229#133#133#133 + +#145'Li'#1#153'"'#128'{pw'#149#216#246'7'#24'q'#245#175#222#21'W}m'#146#0'(' + +#215'_'#163'Q'#138'r'#253'3'#253'5'#164#23#203#206'Y'#196#190#172'L'#131#132 + +'f'#234#206#3'/*'#250#199'3'#130#149'_H'#147#16#212#19#242#10'J'#225#250#191 + +#252'S'#234#203#200':'#132#4'!'#161'V'#128#229#6#8#166'@W-'#128#250#8#178'(B' + +#194'k'#209#248#166#203'|'#155'Z'#143'='#246#216'h&'#18#132#210'.r('#252#249 + +#184#219'.'#158#231'G*~~'#233'4(('#174'`'#182#191'9'#153#238#171'J'#233#231 + +'?'#220#176#252#188#197#25#245#1#8#152#188#211#174'H'#2#15#12#248'u~'#159#27 + +'n'#187#252#224#164'-'#154'+'#184#244#198#167#161'|'#252'4'#169'/#'#235'`i' + +#194#162#178'a'#214'U'#152#143#10'Px'#176'i'#203'w'#224#247#251#152#22' D'#4 + +#20#178#248'_'#198#233'jn'#213'h4'#145'L8'#4'3A'#0#255#135#187#27#133#184'?' + +#173#254'z'#189#1#202'&'#238#193#4#159'<'#255#20#243#167#176#31#149#249#178 + +'b'#31#190#189#207'p'#226#128#166#186#205'p'#255'm'#167'g'#229'\&K>'#220'xo' + +#255'z'#247'u'#197#227#247'\'#10'[6'#172#202#230'G'#211'''*'#171'w'#134#139 + +#174'L'#234#203'H'#162'v'#235'z'#248#224#141#191#179'U'#248#202#219'^'#4'm' + +#6#134#161#236'P6LZ'#0's'#8#134'Xkq'#242#7#216'['#182#131#189'y'#19#203#11#16 + +'E'#4':'#10#13#222#25#165#150'p'#187#209'h'#140#166#219#20'H'#171#200#161#240 + +'S'#246#10#173#254#214'd'#193#15#10'y^'#233#20#200'/'#170'd'#4'`'#225'+'#253 + +#132#213'_.'#204#241'K'#251'G'#158'Y<'#245#192#149#176'i'#221#202#172#156#139 + +#138'l'#254#244#232''#7#245'Z'#183#171#13#238#188#246#168#156#210#2'hq'#184 + +#225#158'w'#192'h'#178'Jz'#29'?'#175#250#12#222'z'#233#175#224#245'8'#147#247 + +'Yl'#133'p'#237#157#175#225'oR'#153#246#243#9'#'#200#147#29#132#216#188#193#8 + +'x'#242#5'P'#181#224'w'#16#164#136'@'#172'S'#11'P'#202#227#255'7'#181 + +#208'~'#151#221'n'#15#167#219'!'#152'n'#2#184#30'w'#20#175#254#172#183'' + +#245#238#184#234#235'p'#245'Ws'#157'}'#249'b'#159'd'#216'o8-'#253#192#133'tn' + +#190'x'#31#136'g('#7#160';\'#247#151#183#152'&0'#24';d'#213'_'#204 + +#156#191#15#156'x'#174#180#3'G'#222'|'#225'.'#248#254#203'wv'#184#191'x\5\v' + +#243#243#25'9'#167'0'#130'<'#22#19#194#130#145'd'#243#16#210#4#218#155#183 + +#130#179'uk'#215'r'#225#246#170'<'#255',u'#194#233'L'#183'C0m'#146#135#194'O' + +#189#175'jP'#152#11#133#156'J'#249#205'+'#158#4#249#197#227'q'#245'Ws'#131 + +'6'#209 + +#225'p'#196')'#203'2r^'#241#152'1'#234'#'#232#167#228' >*@Z@'#211#150'o!'#24 + +#10'B4'#210'Y#'#160'R'#196'o'#24#167#171'}'#200#229'r'#133#210#233#16'L'''#1 + +'\'#134#187#251#133#22#223'JV'#238#171#195#213''#15'0'#25#185')'#190#228#249 + +#215#137'W'#255'af'#247#11#248#203'uG'#130#167#195#158#213's'#206#156#191'/' + +#28'w'#214#224#227#250#143#254#249'\h'#172#149#182'B'#176'+'#14':'#234'"X' + +#184#223#241#146#157''#235#198#213#168#29'u'#159#151' '#147#201#225#218#187 + +#254#5#6'cf'#204#148#148#185#2'4v<'#16#6#143#151'#'#129#246#166#205#224'j' + +#171'I'#169#17#192''#154'&'#216#218#230'DC'#30'O:'#29#130#233'$'#128#159#196 + +'#'#189')'#231#223'VT'#13#249'%'#213','#219#143'y'#254'u'#157#147'|'#5#219'' + +#184#161#177#246'7x'#236#174's'#179'~'#222#130#226'J'#184#228#230#193#231#247 + ,'?'#250#167#179#160#185'A'#250#10'A1'#170#167#205#131#211'/'#249#235#208#15 + +'4H'#4#253'^'#184#243#154'C{|'#188'j'#210'l8'#235#138#7'3rn'#161'N'#128#204#0 + +'J'#14#242#5#195#172'd'#152#204#0#183#199#11#205#219'V'#162#22#16'Ji'#29#166 + +'SFO'#221'i\'#224'-$'#128#208#140#25'3'#210#162#5#164'E'#2#199#205':q'#14#200 + +#228'?'#166#14#248'PC'#217#196'='#193'h'#212'%'#195'~]mv'#1#195'L'#5'x'#246 + +#129#203#160'f'#211#154#172#159'W'#161'T'#193'M'#247'<'#232#215'?p'#203#9 + +#224#180'7e'#253#186'{'#131#209#156#15'W'#255#233#13'I'#175#225#214'K'#150'v' + +#186#232#187#193'y'#203#158#128#178#202')i='#167'`'#138'u'#230#5#196'Y#Qj'#28 + +'Bu'#2#20#26'lk'#218#8#238#246':'#22'-'#16#210#131#21#242#196#191''''#231#181 + +#156#145#151#151#231'okkK'#139#22#144#30#2#152'}'#242#189#184#187'R'#156#248 + +'c'#206'+'#133#162#242#25'l'#245#167#141'l'#255#174#5'?'#195'L'#246#25#238 + +#184'|'#191#140#21#0#245#133#195'O'#186#6#230#238'y'#232#160'^{'#207#245'G0_' + +'@.'#129'4'#197#155#30#200'~'#199'$1'#250#250'>+&'#236#12'g]'#249#240#0#142 + +#216'?'#8#26'@gD'#160#179#135' +'#22'r9'#160#173'v'#245#14'EB'#165'F'#215#156 + +'Bs'#188#209'h4'#6#211#161#5#12'Y'#4#11'&'#238#167#212#24#139#235'P'#160'K' + +#196#206#191#194#242'Y`'#205'+J'#18#0'7'#211'O'#148#243#159#246#143'4'#243 + +#168#223#182#14#158#185#255'b'#201#206'o+('#131#139'oZ1'#168#215#222'u'#237 + +#161#16#238#163'y'#137#20#184#225#222#143'@'#174#148#206#17'x'#247#242#195'!' + +#24#240#246#248'8'#249#2#150#223#243'>.j'#233#175'd'#20#198#139#209#198':'#9 + +#135'"\'#15'A$'#0'2'#7#154'k'#190'g'#201'\bg'#160'F'#17#185'~'#130#205#254'x' + +#186#180#128'!'#203#225#184#217''''#29#130#135'yW'#172#254#235'tz('#157#184#7 + +#152#244#26#214#229#135'e'#253#241#171'?'#169#255#220#7#155#246#207'3'#227'x' + +'g'#197#159'a'#237#247#255#25#250#129#134#128'E'#7#158#10'{'#29'|'#230#128'_' + +#247#231#171#15'D{2'#167'F'#211'3\q'#199#27#160#207#144#163#173'?x'#232#182 + +#19#192#237#236'}B'#242#194#253'N'#130#165#135#157#147#145#243''''#135#138 + +#196'83'#128#178#3'='#188')`o'#169#1'g'#203#230'd'#219'0'#190'Jp'#213#228#188 + +#230#223#163#6#224'N'#135'/`'#168'b(C'#245#255'%'#220#159' '#174#250#179#20 + +'TAA'#233'd'#182#242#147#240#179#156'a'#180#215'0'#140#251#11'x'#152'~,'#174 + +#190#199'ig'#18#244#217#157'q'#249'#PZ9'#176'T'#218';'#175#220'/+3'#2#6#138 + +#11#174''#1'l'#133#227'$;'#255'S'#247#156#7'-'#13#155'{}'#142#193'd'#131#203 + +'n'#207'L'#253#2#203#11#192#175'%'#154#156'''@y'#1'\'#207#0#143#199#3#205#219 + +#190#235'j'#6'$'#242#180#158#189#139#140#190'_'#210#161#5#12'I'#18'Kw>'#214 + +'"W'#168#155#240'G'#169#19'w'#252')'#170#154#7#22#139#141#9#191#208#231'O' + +#205#175#254#178'a'#24#247#23'p'#215'5'#251'g'#188#250#175'?'#208'h'#13'p' + +#217'mo'#12'Hu'#206#149'k'#239#138#11'oz'#5#204#214'B'#201#206#255#226#195 + +#151#161'i'#247'K'#159#207';'#227#138'G'#161#164'<'#189#206'@'#1#226'J'#193#0 + +#211#2#194'L'#11' 3'#160#165'n'#13#248#220#246#20'3@'#173#136'>2)'#223#241 + +''''#157'N'#231#25#170#22'0'#20'I'#148#141#155'u'#210'Y('#205'O'#138'c'#255 + +':'#189#25'J&'#236#202'B~F'#3#183#250'k'#133#138'?'#129#0'2'#242'1f'#30'w]' + +#189#159#212#151#144'DE'#245',8'#233#194#254#135#208#238'^v@V*'#23#7#2#250 + +#221','#187#251#163#172#159#215#209'V'#7#171#190#252#23'4'#213'n'#128#182#230 + +'m'#253'j'#235'V5i'#23'8'#225#252#244'O?'#18'$'#150#141#26#143'u:'#3'}'#228 + +#12'D"p'#182'7'#128#189#241#215#20'3@&K'#212'M'#201'k'#222#27'??'#215'P'#181 + +#128#161#17#192#236#147'?'#199#253#18'.'#166#207'M'#248#181#22'q'#153'$'#248 + +#194'`O'#173#134'k'#244#169#16#226#254#195'P'#3#8#6#189#240#208'MGH}'#25')' + +#216#231'w'#23#194#188#197#253'k'#184'y'#239#181#7'f'#165'rq '#160'^'#7#151 + +#221#241#206#208#15#212#7#162#209'0'#252#188#242#3#216#176#230'S'#166#238'G' + +#250#209#200#181'+'#228'r'#5'\q'#231#251#236'w'#158'v'#240#209#0#193#25#200 + +'B'#130#188'/'#192#231#11'@'#243#214'o'#184#190#129#157'f'#0'X'#181#129'S' + +#202#173#190'OQ'#3#240'644'#4#15'?'#252#240#216'`'#180#128'AKb'#217#204#227 + +#170'er'#21#181#252#146#137#213#255#226#234#221#209#246'7'#166#172#254#164 + +#254#211#7''''#31#198#234'['#211'Vx'#238#190'?H}'#25') '#15#245'YW?'#133'6t' + +'y'#159#207#253#235#242#131'r'#142#0#242#138'*'#217#245'g'#18#159#189#243'wX' + +#245#5#229#26#12'='#13'z'#241'Ag'#194#238#251#156#148#145#235'$'#225#23#18 + +#131#184'"!./'#128#234#4#218#234#215#131#167#163#169'Kjp'#236#141')'#5#142 + +#171'U*'#149#203#135',1'#216#26#129#193'J'#163#172'|'#246#201'7'#226#153'n' + +#23'{'#255#141#230#2'('#172#152#205#173#254'z'#21#232#209#12#160'6'#223'*' + +#149#144#246';<'#133#159#176'm'#195'w'#240#230#179'7I}'#25';'#128'<'#232#231 + +#223#248#143'>'#159'w'#255#13#135'd'#181'x'#169'?'#216#251#240#11'`'#151#133 + +'Gf'#236#248#219'6'#174#132'7'#159#185'1m'#199#179#228#149#194#217#203'2'#211 + +#215'P'#152'+'#200':'#8'G'#185#225#162'>'#161'i'#136#179#21#218#235#215#166 + +'$'#5#201' '#209'19'#191'u'#145'\'#150'h'#195#197#215'+'#170#20#28#144#157'7' + +'h'#2'@'#245#159#234'S'#23#139'+'#255#242'J'#167#131'-'#191#12#244'zU2'#244 + +#199#138'~'#134'q'#222#191#128#159#191''#31'>~#'#251's'#254#250#131'I;/'#130 + ,#195'O'#238#157#156#30#188#241'P'#201#18#152#186#3#149'8_v'#251#191'I'#183 + +#206#200#241#253'^'#23''#232#163 + +'7|'#247#217#10#248#230#163#204#148#136#166#3#135#156'p=L'#153#181'W'#143#143 + +'?q'#231#137#224#243'8'#164#190#204'$'#170'&'#207#131'#'#207#252'S'#198#142 + +#255#244#221#167#129#219#217#146#246#227#238#182#247#137#176'`'#255'3'#210'~' + +'\'#241' '#145#168#168'y('#133#4'I'#19'ho\'#7#30'gsJm'#128'^'#21'y'#180#210 + +'b'#191#31'I'#193#129'&'#128'o0'#206#192'A'#17'@'#197#156#147#247#195#235#252 + +#143'X'#253#215#234#200#251'?'#159#9#190#1'5'#0#193#249#199#133#254#134'o' + +#234#175#128#207#223'y'#4#214'~'#155'y'#135#213'`'#161'Ti'#224#194'['#223#234 + +#241#241#247'^'#186#3'6'#175#251'R'#234#203#228#175'U'#13#231',%c+'#233#251 + +#175#222#9#155#214#14#174#129'J'#223#215#174#129#243'o~3#'#206'@ae'#167'h@' + +#152#31'$B'#137'AD'#0'N{=8'#155'6'#166#180#11'S'#202'c'#223'O'#202'k;'#7#175 + +#165'='#18#137#184'='#30'Oh'#160#13'C'#6'E'#0'h'#255#255#9#143#190'\'#28#254 + +'3'#219'*'#209#4#152#204#236''#218'h'#188#183'Z'#24#243'5'#12#171#254#186 + +#226#235#15#159#130#213'_'#190'.'#245'e'#244#138#5#7#156#9's'#23'w?'#149'w' + +#203#250#175#224#253#151#239#144#250#18#25#14';'#229'6'#24'?u'#183#140#28';' + +#232'w'#195#147'>'#161#215#2#159#161'b'#202#172#189#225#128'c3'#215'+'#128 + +#181#12#19#204#0#158#0'|^/'#180#212'|'#151','#17#230#252#0#16#156'\'#208#182 + +#31#138'Y'#227'`'#157#129#3#149'L'#217#173#183#222'*{'#226#205'M_'#225#237'=' + +#196#197'?y'#227'v'#6#171#173#152#23'~n'#245#231#188#255#178'a'#217#240#179 + +'+'#182#172#255#18'>x%s*k:'#160#213#153#224#236#235'^'#237#254'A'#252#209#252 + +#237#182#195'%o'#10'2e'#246#222#176#255#209#215'd'#236#248#159#188'q/lX'#243 + +'IF'#223#3'-|''_'#246'$s'#10#166#27'I3 '#206#153#1','''#0#9#128#136#128#8' ' + +#24#240#165#248#1#10#244#254'K'#11#13#158#143'Q'#11#176'SH'#16#181#128#240'@' + +#204#128#1#19#192#148#221'N2'#251'B'#178'v'#154#248#211'i'#255#171#160#164'z' + +'O'#208#235'u'#172#232#135#156'Z>'#245'W>'#12#219'}w'#7'ZY'#158#185#235'D' + +#169'/'#163'O'#236'{'#212#213'L'#200#186#195#11#247#158#14'^w'#187'd'#215'V4' + +'n2'#28'}^f'#29#169'O'#220'q'#20'D#'#161#140#191#23'K'#254'88'#233#210#199 + +#211'~'#220#174#237#195')'#26'@$'#16' ?@'#211#6#240'8'#27#187#250#1'^'#172'0' + +#183#223#135'ZA'#171'N'#167's'#15#180'Jp'#160#162')/'#159'}'#226'!'#9#144#191 + +'#'#216#244#20#255#215#27#172'PX9'#151#9'?'#249#0#152#250#175'$'#239#191#208 + +#244'cd'#144#192'cl'#5#205#173'l'#186#174'(.'#159#6'G'#158'so'#183#143#173 + +#252#228'9X'#253'E'#223'!'#195'L '#191'x'#2#28'{A'#250#203'j'#197#248'u'#213 + +#7#240#223'w'#30#202#218'{Zt'#240#249#176#243#238#135#167#245#152'|'#247#31 + +#212#0#184'nA'#194'hq6^'#220#209#4#142#166'_'#187#250#1#214'M'#206'o?'#31#9 + +#160#9#205#0'g('#20#242#15#196#12#24#136'X2I.'#159's'#242#221'x'#222'+'#197 + +#14'@s~%'#235#253'G'#194#175'G'#225#167'a'#31'D'#0'r'#133'l'#216#135#255#196 + +'x'#225#222'S'#193#239'u'#14#253'@'#25#132'Zk'#128'3'#175'}'#181#199#199#223 + +'x'#252'rhk'#218'<'#128'#'#14#29#214#130'r8'#254'"'#154#20#151#153#144#159 + +#128#151#30'8'#27'<'#174#244'{'#254'{'#2#245'5fV'#248#219#26'7'#193#191#158#186'2+'#239'I' + +#140#25#187#30#6#11#14'Jo'#134'hgRPg'#159#0#193#20'h'#175#253#129#245#8#16'u' + +#12#134'|'#157#247#230'b'#147#255'}'#148#201#22'$'#128#14'2'#3'P'#3#136'B?' + +#162#1#3#17'O'#249#132'9G'#230#133#19#250'f'#188#173'H'#150#255#170')'#254 + +#191#16#237'~'#174#233#7#197#254'5|'#242#15#215#245'w'#228'0'#128#179'm;'#188 + +#241#152't'#13'A'#250#139#197#135']'#10'S'#230#236#223#235#251'x'#243#241'K3' + +'n'#206#204'^x'#28#204#223#251#212#172#188#231#183#159#190#10'I'#224#183#172 + +#156'K'#12#149'Z'#11#167'-{-'#189#7'Mp9'#1#228#8#140'D'#184'h'#128#16#18't' + +#182'lBS'#160'N'#1'D'#2'd'#226#216#27#215#165'8'#2'U'#242#216'&4'#3'.' + +#198#219#13']'#204#128'>'#163#1#253'&'#0'R'#255#191#217#164#186')'#145#144 + ,#221'"'#216#255'4'#247#207#156'?'#30#172'E'#19#152#240#147#243#143'&'#1#177 + +#220''#249#200#178#255#5'|'#251#225'c'#240#235#170#247#164#190#140'^ '#195 + +#21#233#31'h'#154#245#175#133#213#170#207'_'#128'u+'#223#198#31'T'#223'%'#177 + +'}'#158#25'5'#194#9#211#23#194'B'#212'@2'#209'B'#171'''|'#242#250#157'P'#251 + +#219#183'Y;_W'#152'l%p'#204#5#233#27'u&D'#2#132#226' V'#27#16#138'23 '#16#8 + +'B'#203#182#175#240#251#138''''#29#129'2Y'#194'7'#173#160#245'd4'#11#234'(' + +#26'`6'#155';'#182'l'#217#18'Z'#183'n'#29#153#1#189#170'y'#253'&'#128#165'K' + +#151'*6'#187#198#189#128#231';A'#236#0#180#149'L'#7#147#181#132#9'?'#167#254 + +'wv'#254'aC?F'#152#6#16#143'Ga'#5'j'#1#180#207'E'#232#12'68'#238#146'g'#7#250 + +#174#224#251'O'#158#133#223#214'|0@'#141'@'#198#178#250'4:3'#20#148'N'#130#5 + +#7'_'#12'jm'#250#231#234#245'z'#229#236#251'8N'#210'JG'#146#135#211#174#253 + +'WZ'#143#201'R'#131'y?'#0#155#29#128#4'@'#27#17'A'#235#182#239' '#28#246#167 + +#248#1#198'['#237#231'j'#20#225#245'J'#165#178#9'W'#167'N'#167#11#244#167'6' + +#160#191#210')'#159'7o'#158#162'9:'#141'hv'#174#152#0#10'*'#230#130#201'le' + +#194#175#213't'#134#255#134's'#235#175#190#240#213'{'#15#194#230#28'u'#6#142 + +#199#21'x'#175#223#15'>'#209#134#242#29#234'6}'#7'M'#219#215#178'N4'#241'X' + +#132'U'#17#146#160#145#160'['#242#203#153#176#23'W'#236#4#230'<'#233'Zy'#9 + +#248#254#147#167'a'#253#247#131#27#156#154'N,='#234'Z'#168#154#178'g'#218#142 + +#215'u'#132#24'5'#10#9#242'Z@{'#253'Oh'#246#216'S'#8#160#216#232#249#147'M' + +#235#251#24#239'k'#196#191#237#161'P'#200#215#159#1'"'#253#145'Pf'#255#31'|' + +#240#193#170#181#141'ymx'#219'$'#142#0#20'MX'#8#6#157#134'['#253#133#226#31 + +#249#200'I'#0#234#14'$'#12#175'=tF'#214'<'#233#253#6'~'#224'G'#254#225'Q0Z' + +#138#165#190#146#172#225#229#191#158#136'Z'#203#192#27'|'#164#27#21#147'wC' + +#18#184'.m'#199'K'#13#7'v'#18#0#141#21'w4'#253#6'^WC'#151#6'!'#254#23#139#244 + +#174#151#209#254#175#139'F'#163'mj'#181#218#211#159#18#225'~'#17#0#217#255 + +#171'6'#199'+Cq'#237#214#164#3#16#237'='#181'F'#143#4#176#27#203#250'c'#171 + +#191'Z'#193#186#2')'#21'#'''#249#167''''#216'['#182#192#7'/,'#203'h'#206#249 + +'@Q9e'#15'X'#252#251#204#228#168#231'"6'#253#248#1#172#252'8'#253#217'x'#131 + +#129'Vo'#129#163'/z&'#173#199#20#210#130#201#214''''#2#16#162#1#29#246':'#232 + +'h'#221#156#18#9'0'#168'C'#159'UZ\'#15#163'|'#214#14'$'#28#216#31#17#149#163 + +#253'/'#175'q'#151#238#23#137#201#223'O'#137#0#24#242'!'#191'b'#22#155#3'@' + +#177'F'#0#138#206#8#192'H'#199#154#255#189#0#235'W'#190')'#245'e0'#144#231 + +#253#152'K^'#204#170#243'Mj'#188#249#232#217#16#240#229'Fb'#150#12''#240'''' + +'^'#153#222'b1a'#148'x'#140#207#7' '#2#8#134'#'#224#235#176#131#189#241#231 + +#148'H'#128'F'#25#253#181#218'f'#191#3#229's;'#254#221#20#12#6#157'J'#165#178 + +#207#226#160'~'#17#192#140#25'3'#148'n'#213#172#11#226#9#249#253'b'#2'0'#217 + +#202#193'V<'#25'U'#255'N'#2'H'#142#252#30#225#26#128#128#207'^'#191#29#154'j' + +#178'?*L'#12#242#190#239'}'#204'MPR5['#234#143'#kh'#220#182#26'>'#255'gnT7' + +#10'8'#225#242'W@'#158'&'#2'f'#170'='#223'#@'#240#3#176'~'#129#148#16#228#247 + +'B'#235#246#149')'#4#160#148#199#237#147#242'Z'#175'E'#185#164#9#221#13#129 + +'@'#192#238#247#251'}&'#147#169#215#226#160#190'D'#148#169#255'^'#175'W'#249 + +'K'#147#237#190'xBv'#129#152#0#172#197'S'#192#130'$'#160#161#8#128'J!'#234 + +#254#3#204#30#29#13#4'@'#248#238#195'G`'#235'/'#210'8'#5#233#251'Xr'#228#245 + +'P6a'#174#212#31'CV'#241#239#167'/'#6#143'3'#183'f'#29#238'{'#252#237'l'#28 + +'^'#186#144#236#15' '#26'%N&@'#24'5'#129#230'-_B4'#18'I'#18#0'">5'#191#229'r' + +#20#203#173#248'w]8'#28#166'Va'#30'Q'#143#128'n'#253#0#253'"'#128#182#182'6' + +#213'fW'#217';'#137#132'l?q'#17'P'#222#184#153'`4'#23#178#213#159#171#254#235 + +','#0#26'%'#178#159#196'/'#223#252#3#183'W'#135'~'#160#1#128':'#213'.8'#236 + +'*('#159#180#187#212'o?'#171'p'#182'l'#133#15'Wd'#174#164'x'#176#152#179#228 + +'t'#152'6'#255'wi;'#30'_'#23#196'|'#0#177'(?D'#20'M'#0'r'#6#182'm'#255#1#194 + +'A/'#171#9#16#136#162#210#226#252#139'A'#29#254#142#252#0#161'P'#168#197'`0t' + +#212#214#214#6'{'#203#7#232#147#0'('#254#143'j'#132#250#199'Z'#243'z'#27#205#196#146'wv'#1'RB'#209#132'E'#160#165#236'?u' + +#151#177#223#195#184#253#247'PA'#171#211#234'O'#30#3'G3'#253'@'#211'O'#4'*' + +#181#30'v^t'#18'L'#154's'#176#212'oU'#18#248#221'm'#240#238#147#231'K}'#25 + +#221'b'#210#156#131'`'#151'}'#206'M'#235'1'#217'b'#194#143#14#139#242'&'#0 + +#249#1'\'#246'm'#224'm'#175'I!'#0#139'6'#240'q'#153#201'M'#163#250#182#225 + +#223#141#184'''?'#128#191#188#188'<g'#255#167'$'#0#201'G'#141#237#223#27#130'~'#23#172#254#244 + ,'Ih'#216#250'=2'#248#208#179#212#244'hj'#237#188#231#9'0~'#250'^C>'#214'p' + +#198''#223#248'?h'#169#253'I'#234#203#232#22'S'#230#30#206#204#128'tB'#136#4 + +'P80'#18#163'\'#0#218'"'#172'1'#136#171'ecJ2'#16#170#255'?V'#152#29#143#201 + +#229#242'mx='#154#233#237'}u'#9#234'MTY'#251#175#239#190#251'N'#245'['#171 + +'q~0'#170#254'R'#198#229#246'2'#2#208#26#242#160#160'|6'#18#0'7'#248'S'#171 + +#230#186#255#202'y'#239#255#232#243#2't'#15#250#130'~'#254#250'%'#168#221#240 + +'?'#22#178#234'o'#5#30'y'#246#13#150'"('#169#154#3#147#231#28#2'f'#155#244'Y' + +'wR#'#26#14#194#27#143#158'"y['#179#158'0}'#215#163'`'#214#194#147#211'v'#248'1'#228#14#254#249#192#9'h'#3#167's'#208'gzA+'#255 + +'A'#167#167''#230'A'#178',8'#193'E'#148#136#0'hX('#245#5'h'#221#250#5#27#248 + +'*Z'#145#187#141'N'#20'*'#13#28'}'#233#203#25 + +';'#190#160#248'PYp'#8'5'#0#31#18#128'?D3'#2'VA$'#232'N!'#128#234'<'#251#11 + +#26'Et='#222#220#138#191#231#237'h'#2#244#26#10#236#145#0'('#4'XXX'#168'B3' + +#192#248'K'#147#237#159#241#132'l1{@ '#128'q'#179#193'h'#202#7#147#137''''#0 + +#26#3#206#183#1#207#4#9#188#243#216#185#224#239'E'#160#199#207#216#27'v?'#248 + +#18#230')^'#245#241#19#3'N'#191'U'#170#180#176#199'!'#151#193#184#201#163#171 + +#178'n8'#128'l'#223#215#239';6g3'#0#231#238's6'#211'&3'#5'!'#29#152'"'#1#212 + +#25#200#235#11#177'\'#0'J'#4#10#251#157')'#4'0'#222#234#248#135'N'#21'YK&'#0 + +#229#2#224#234'O'#205'A\'#212'$t'#247#221'w'#143#12#136#0'('#7' '#20#10#25'' + +'m-x'#27#9#128'IF'''#1#204#5#163#217#10'f'#163#22#180'H'#0#212#9'H'#166#200 + ,'\'#15#128#143'W,'#7'{'#227#198#30#31'''/l'#193#184'i'#208'Z'#251#243#144#206 + +'SX1'#3#150#28'u#j'#19#218#204#188#145'1'#12#10#239'>q'#1'x]'#205'R_'#198#14 + +#160#26#141#195#255#144#217#182'd'#9'^d'#217#192#208'p'#20'<^'#158#0#234#215 + +'B8`O!'#128'J'#139#227#13#189'*L'#197#18#201'\'#0#212#226#157'H'#6#221#230#2 + +#244'J'#0'j'#181'Z'#19#139#197#140#155#28'E'#175#196#226#242#165#236#1#222 + +#203'o+'#157#131'&@>'#243#1'P$@'#145't'#2'f'#134#1'V~'#240' l'#203'R'#211#13 + +#5#146#201#220#253#206#131#234#153#251#15#253'`cH'#11#214'|'#254'LN'#166#1#31 + +'p'#234'=`+'#158#148#209's'#8#233#192'q'#158#0#220'D'#0#254'0'#18#192#26'4'#1 + +'\)'#4'0'#193#230'x]'#171#140#172#3'>'#27#144#186#4#247'6-'#168'O'#2#8#135 + +#195#166'm'#29#165'OF'#227'r'#166#227#8#4'`)'#153#9'f['#17#24'y'#2#160'f ' + +#178#12'N'#2'j'#174'Y'#3#255'}'#237#214#140'~'#208']a+'#158#8'K'#143#187'-' + +#235#189#238#199#176'#'#130#254#14'x'#251'og'#230#212't'#230#146#9#187#192'^' + +#199#220#146#241#243#8'EAqf'#2'D'#192#235#14#129#151#8#160'n'#21'DB'#30#238 + +'9<'#1'L'#180#181#189#162'R'#196'6Q='#128#208#30#12'I'#192#209'S2PO'#210#154 + +#204#2'D'#152'6'#180#218#238#143#198#21#201'('#0#17#128#185#136#250#194#151 + +#128#201#164#3#131'^'#197#17'@'#134#235#0'^'#187#247'('#180#131#178#251#3#144 + +#203#149'0{'#233#25'0y'#222'aY='#239#24'v'#196#166#213#239#194#143#159'$'#0 + +'J'#5#142#133#131')'#190#145')'#249'-+'#208#26#175#1'>'#25#8#247#13'('#252 + +#164#1#248#186#235#11#208''''#1#168'T*'#243'f{'#254#31#195'1'#197#25#236#5'<' + +#1#152#10#166#176'D '#179'Y'#139#4#160'a'#4#192'f'#1'f'#144#4#200#14#244'8' + +#26#135'~'#160'A'#192'RP'#9'{'#31''#27'h'#141'y'#146#156''#12#28'>}'#233#6 + +'h'#173#251'E'#210'k'#208#155#242#225#16#18#254',u`f&@'#28'X'#243#15'J'#0'r' + +#187#3#204#7#208'F'#169#192#209#136#152#0#18#211#11'[^'#196#191#235'I'#3'P(' + +#20#219'"'#145'H'#3#222#223'>h'#2'@5'#194'R'#227'*'#188'>'#20'S^'#200'^'#192 + +#11#184')"'#152#11#171#192'l'#210#128#209#160#3#165#138'k'#6#154#201'>'#0 + +#171'>~'#156#173#2'R'#129'Z?'#239#188#240'$'#152#177'gzK>'#135#27#220#246'zh' + +#216#252#29#11#183#6'|.'#8#5#220#172'V_'#165#214#129'Zg'#2#173#222#12'Fk)TN[' + +#12'zsAZ'#207'MCY'#222'J'#186#134#160#244#190#14'9'#231'a'#166#25'f'#11#156 + +#15#144'/'#7#14'F'#160#163'#'#192#178#1#219#182#254#143'/'#20#226#228'Y.KDP' + +#3'x'#149'R'#128#129#171#5'`'#233#192#184#136#183#187'\.ow'#147#130'z%'#0#170 + +#3#192#23'['#234#189#197#151#6'"'#202'd'#23'F"'#1#131#181#10#172'%'#19#193'd' + +#208#130#201#172'I'#154#0#178#12#134#210'i '#194#7'OH?'#158#219'd+'#133#165 + +''''#252#31#232'-'#133'R_J'#198'A'#130']'#187#225'Kh'#218#242#3'ks'#22#244 + +#216#7'4'#135#143#134#148#26#172#197'P1u'#1#236#180#240#184#180#9#206#215'o' + +#221#13'u'#191'~'#153#213#207#194'Z4'#30#14'<'#235'>'#188#149#253'|'#17#166#1 + +#160#249#27'@'#193'w'#185#209#4#240#5#161'}'#235#23#220'c<'#1'('#229#241#224 + +#164#188#214''#226'M'#154#18'L'#234#255#214#190':'#3#245'J'#0#227#198#141 + +#211#6#131'Ak'#141#211'r'#182'/'#172'Nz;H'#208#245#214'r'#176'P='#0#154#0'&' + +#147'6'#217#15' '#211'x'#253#158'c'#210'2'#201'v'#168#160#228#163'Is'#15#129 + +#185#251#159''''#245#165#164#21'm'#245#235#161'n'#195'W'#208'^'#183#142#173 + +#178#209'4'#142'B'#167#207#172#160'b'''#152#179#247#153#144'W:y'#200#199#219 + +#188#250'='#248#241#227'''3>'#168#149#186'/O'#158'8'#204#217#231#172#140#158 + +#167'W$'#184#17'a'#1#180#253']'#164#1'x}`'#223#254#13#255#16''''#207'*E'#204 + +';)'#175#157#6'%'#146#218#207'4'#0#154#24'L#'#195#245'z'#189#167#191#4#192#10 + +#129#208'VPVVVjc'#177#152'e'#187#211'|'#162'7'#172#185'+'#249#4'j'#9'f*'#5'[' + +#201'4\'#253#181','#23'@'#165'Qr'#149#128#221#229'j'#164#145#23#254#243#236 + +#149',3,W@'#17#130'=w5'#148'T'#15#207#190#252'q$'#211#205'?~'#0'5'#235'>' + +#135#142#182#154'n'#11#174'2'#129#252#178#169#176#232#152#27#217'H'#173'!]?' + +#10#255#143#31'?'#1'['#250#152#13'2M+'#240'w^>y'#15#216#253#176'+'#178#155 + +#23#210#141#12'%d'#192'f'#3#4#252'!'#232'p'#5#192#235'q'#131#163'ne'#138#3'P' + +#163#140'vT'#219#236'4'#187#190#129#132#159'6'#165'RY'#135'2'#220'6h'#2#136 + +'D"'#214#6#183#249'w'#238#144#238'!'#241#147#180#166'b'#176#149#206'`y'#0'&' + +#139#142'M'#7'b'#29#129'2'#252#217#172#251#250#31#240#243'_'#200#222#151#209 + +'O'#20#148'O'#135'%'#199#222'<,B'#134'^\'#217'7'#174#252#23#218#241#223#131 + +#223#211'.Y'#145#13#249'T'#166#237'~$'#139#178#12#29'qX'#243#201'3Hd'#255'e' + +#205'C'#134#2#133#146#146#202#166#163#224'_'#206#18'}r'#1'T'#13#24#141#198'P' + +#245#15#129#219#229#7#175#219#1#206#134#31'S'#8'@'#167#140#216#171#172#246 + +#143#128#215#0#168'"'#16#247#140#0#240#182#183#187#138#192'~'#17'@'#179#199 + +#184#175'3hxZ'#252'$'#141#161#0#242#198#237#12'F'#163#14#205#0#29'k'#14#154 + +#169'^'#0'b'#208'D'#222'7'#239#203#205#194#16#25#170#138';-8'#22'v^'#156#190 + +#198#144#233'BG{'#29#252#244#233#211#208#142'*~$'#228#151#250'rR`-'#154#0#251 + +#159'y'#218'j1(g`'#195'7'#175'C'#253#198#175#193#215'A'#3#173#251'&8r`'#22 + +'V'#238#12'Sw;'#2#138#170'fI'#253#145#236#0'z'#7#17'j'#7#230#9#162#9#224#199 + ,#247#213#14#206#198#212#238#200'zU'#184#165#210#226#248#12':}'#0#228#4#172#29 + +#18#1#144#9#208#234#209#237#209#230'7'#254'#'#229#3#211'Z!'#191'b'#14#24'P' + +#253#183#152#245#172''''#0'u'#4#202'F3'#208''#221'w'#18#251#146's'#21'Z'#163 + +#13#22#163'z'#155'?n'#154#212#151#2#174#214#26#248#238#223#247#129#179')w' + +#204#166#238'@'#159#217'!'#231#254#13#212#250#244#14':!'#19#193#217#188#21':' + +'Z'#183#129#27'I'#208#227'jfu"F['#25'X'#11'+Y'#178#151#165#184':'#183#11#193 + +'X'#166#31#215#11#192#235#13#176'('#128#199#209#12#238#150'u)O3'#170'C'#141 + +#21#22#215''#249'N@d'#2'l'#29#148#9'@'#155#216#9#232#244#171'f6z'#172')'#241 + +'7'#133'J'#7#5'U'#187#131#193#160#1'3'#154#0':'#150#11' '#239#182#31'X'#186 + +')'#225#203''#222#153'u'#15#240'`0e'#215#195'a'#222#129#210#12#177#8#251#221 + +#240#217#203'7'#131#163'i'#147#212#31'C'#191'A'#5'Y'#135#156#255'(k'#135'>' + +#154#209#157#190'B'#9'pa>'#9#168#3'M'#0'w'#251'v'#240#218'S'#167'#Y'#180#193 + +#154'2S'#7'y'#6#27#248'$ F'#0#209'ht@N@BJ'#24'P'#169'R'#149'nh-'#250#2'_'#165 + +'I>'#3#5#189'p'#194'"$'#0#29'X'#172'z'#208#27'5'#172'5x'#159'y'#0'i`'#131#230 + +'mk'#224#211#23#174#207#202#151'1T'#152#11'*'#224#128#179#238#205#170'o`'#235 + +#154#255#192#202'w'#31#206#154'C/'#157#160'<'#130#163#174'x!mSv'#135#5#250 + +#180'P'#184#28#128'`0'#2#30'w'#0#220#168#1#184'Z6@'#160'#5)'#174#208#224']W' + +#160#247#253'D'#137'@d'#2#240#142#192#186'A'#135#1#137#0#240#133#164#147#21 + +'ov'#20#191#30'K'#200'''$'#159#129#4#144'W1'#15'L'#22#27'j'#0#6'V'#19#160#226 + +'C'#129']'#223'O&'#140#130'W'#238'8l@'#241'h)A'#177#240#189'N'#184'%+'#145 + +#130'O'#158'_'#14'-5'#185'99'#167#191#176#20#141#135'C'#207'T'#234#203#144#4 + +'='#5#209'('#2#16#12#132'Q'#248#253#168#5#4#192'Q'#207#149#2#139'Qnv'#174'D3' + +'`'#19'%'#255#8#26#128#144#8#132#154#128'o'#192#4' '#164#2#227#193#138#183'8' + +#10#30#12#199#20#139#196#151'E]'#129','#249'e`'#178#234#192'd'#212#129'ZC~' + +#128#236#204#5'x'#239#209#11#192#217#178'-+'#231'J'#23#166#237'q$'#204';(}' + +#195'#S'#128'6'#226'{'#191'h'#216'}&=a'#194#236'}a'#193#145#185'7'#1'X'#10 + +'P'#18#16'E'#0'('#4#200#17'@'#16#218#183'}'#3#177'h0'#229'y'#19#243#218'>U+' + +#226#164#254#215#163#224'3'' j'#2#245#129'@'#192#142'f'#128'w'#208#181#0#248 + +'wQ'#141#211'v'#173'?'#162'Jq'#191#27#242#171#217#20#27#179'Y'#159#12#5#210 + +'x'#176#158'k'#12#211#247#161#172#253#244'yX'#251#249#138#236''#27'C'#196'n' + +#135']'#12'Sv;<'#189#7'E'#251#240#237#135#207'cN'#174#145#3#25#28'~'#201'c`)' + +#172#146#250'B'#178#131'^'#204#0'j'#6#18#165'n'#192'>'#206#254#247'z'#252#208 + +#182#245#139#148#16#160'\'#150#136'N'#201'o'#249#8#5#159#194#30'uB'#30#0'nD' + +#8#246#129#214#2'$'#203#129#241#128'fd'#143#194'F'#143#229#20'wH'#151'B'#201 + +'ZS'#9#228#143#155#1'&'#179#14#204'V=h'#132#178#224',('#1'>W'#11#188'q'#239 + +#169#153'?Q'#154'AYeG]'#189#2't'#166#244#21#21#189#247#247'K'#192#222#176'q' + +#232#7#202'1'#152#242#199#193#17#151'?#'#245'eH'#10'a&'#0#245#1#240'y'#3','#7 + +#192#237'p'#160#9#240'Cj'#18#144'"'#234#169#206#179''#129#247#181#161#204 + +#210'J'#192'f'#3#12#182#28'8'#165#31#0#218#15#133#142#128'ai'#139#215#248#160 + +#248'Ij'#141#5#10#198#207#3'#O'#0','#18#160'R'#176#142'A'#137','#12#7'}'#233 + +#214'Cr"-x'#160'`?'#236'+'#158'K'#203#177'H'#19#250#9#183#145#138'='#143#184 + +#10'&'#205#31#157#163#208'9$ '#30#163#8#0#239#0't'#250#193#213#214#0#238#214 + +#245')'#4#128#182'K'#133#197#245#3#222'l%'#199#31#240#229#192#168#193#147 + +#167'pp'#13'A'#168'%'#152#223#239'7!'#131#20'D'#19#170#201'['#157#133'o'#136 + +'_'#163'P*'#161#176'z1K'#6#162'H'#128#206#168'ERP'#246'/'#23' '#13#252#240 + +#206#131#231#177#24#239'p'#196#188#131#207#131#25#139#143#27#210'1'#236#13 + +#191#193'{'#187'(g{'#229#165#3'r'#133#18#142#185#246#21#208#26#173'R_J'#250 + +#209#143#175#141'u'#2'B'#251#159#28#128#140#0'P'#3'p6o'#1#175'c[J'#6'g'#158 + +#206#191#173#200#224#166#196#128'VJ'#254#17'z'#2#146#6'0'#232#150'`BO@T'#31 + +#10#240'GV'#190#201'Q'#242'J}'#246'F)'#191#167'A'#129'j' + +#227#207#184#251#179'A'#189'6'#28#244#195#138#27'G'#167'c'#172#176'r''8'#248 + +#194#7'Xr'#213#136'@'#143#250'?O'#0#188#253'O+'#191#199#229'C'#18'p'#130#189 + +'v%'#211#12#4'('#229#177#224#228#252#246#175#240#249#2#1#212#0#231#4#164#209 + +'`-h'#198#187#131#136#1'M'#6#18#15#7#141'F'#163'6'#180'%J'#28'~'#221#190'->' + +#243#29#226''''#170#212'z('#172#222#19#140'&'#29#152'mD'#0'\B'#144#208'&<'#27 + +'j'#192#11#215#31#8#145'P'#250#26'Wd'#3#244#3'>'#253#174#143#7#245#218'_'#254 + +#251'*'#172'|{'#244#14'DUi'#13#176#223#153'd~'#148#145#138#4'_'#0'D'#241#255 + +#160'?'#4#30#180#255#189#184'9[j'#192#221#250'['#138#227#215#160#14#219'+' + +#204#142#213'('#252#14#138#251#211'<'#0'>'#19#144'*'#1'['#7'3'#28#148' G'#155 + +#129'U'#4#250'|>'#139'F'#163')'#142#199'a'#194'F{'#225#243#137#132','#217#29 + +#129#170#168#24#1'X,'#204#15'`'#160#210'`'#230#7'P$'#29#129';'#156'-'#205'N' + +#235'_'#191'z'#19#190#249#231'_%'#249#162#6#11's'#193'88'#230#250#193#141#147 + +#254#247#131#23'@k'#141#180#141'1s'#1'TA8m'#193#239'a'#206#1#167'g'#181'G_Z' + +#209#131#134'L+<'#133#255#200#254#15#160#253'/'#16'@{'#221'Z'#8#186'[S'#8#160 + +#208#224#221'R'#160#247'Q'#185'g;'#17'@'#235#0#196#167#239#14';d'#3#226'V' + +#185#197#158#255#167'PL1#'#249'$'#20'rK'#241'N`-'#174#0#147'U'#143#4'`'#0#173 + +'A'#13'*%'#154#1#138#204#205#10#236#138'Wn;'#10'|'#206#214#236#156','#13#152 + +'0go'#216#231#140#255#27#212'k'#159'_~'#0'D'#130#185'U'#211'/%'#168#15'C'#233 + +#164']'#160'z'#151'}'#161'j'#230#226'a'#31'2dFz'#156'S'#255'#A'#222#254#167 + +#30#0#184'o'#222#252#5#196'#'#225#20#2#24'o'#181#175#210#169#162'-x'#179#29#6 + +#144#5#200'>'#187#222'>W'#241't d'#146'B4'#5'*'#154#188#182#179#221'!'#237 + +#209#201'''Q'#131'PK)'#228'W'#206'dQ'#0#163#197#0':'#147#150#21#6#201#149#217 + +#233#15'@h'#217#250#19#252#251#129#225#227'%^t'#194'r'#152#186#231#224'R'#130 + +#159#185'b'#201#176')'#132#146#2#148';'#160'3'#231#225#162'4'#30'J'#170'g' + +#195#196'y'#251#131#9'5'#174'a'#131#4'7'#9#184#211#254#199#213#159'e'#0#182 + +#131#189#230#7'6"L'#144'c'#133'<'#30#153#146#223#246'5'#10#186#7'e'#141'V@' + +#178#251#5#2'h'#196#197#219#217'S'#18#16#161'W'#2#16'&'#4#163#253'o'#212#233 + +'t'#249#241'x'#188#188'#'#168']'#220#232#177#220#156'|'#18#10#184'R'#163#131 + +#226#137#11#153#31#192'h3'#128#158#18#130#180#252#184#176#12'N'#12#238#138 + +#183#239#251#3#180'n'#27#218'l'#192'l'#225#212'?'#0#154'A6'#191'x'#242#210 + +#133#144'v;j'#132#131'HAo)'#128#252#242')P>mw'#152#186#224#240#156'4'#27#216 + +#234#159#224#212#255'('#170#255'd'#255#147#240'3'#251#191'y+'#218#255#155'Xn' + +#128#0#163':'#212'^aq'#145'='#216#129#178#216#140#143#17#1#176#8#0'.'#220#212 + +';'#189#199#193#160#132'>'#9'@'#28#10#196#251#202#240#160#213#155#28'%'#143 + +#196#19'2'#29'{'#18'k'#5'.'#135#194#9'{'#128#201'f'#227#205#0#174'.@AZ'#0#171 + +#14#236'>)'#168#219#147#14#225#195#11#184#29#240#210#141#135#231'|^@~'#197'T' + +'8r'#217#179#131'z-E'#0#158#191'f_'#169#223#194#176#135'J'#171#135#165#167 + +#222#2'U'#179#150'd'#252'\'#253#253#221#211#243'h'#177#140#199'x'#245'?'#20 + +#129#128'7'#136#194#239#227#226#255#219''#132#128#167'-%'#2'Pd'#240'l'#201 + +#211#249#182#163#28#186#144'8'#154#132'$ '#218#227#202#223'b0'#24'X'#8'p'#221 + +#186'u'#20'7'#140'ww'#222#30#175#137'"'#1#223'}'#247#157'*'#16#8#232#208#20 + +#176#161#9'P'#138'D0~'#155'3'#255#250'`T9C8'#4#249#1#172#165#211'Q'#229#170#2 + +#163'@'#0'z'#13#168#132'h@'#182'T'#0#196#202'='#12'k?z1k'#231#27'('#232#179 + +'8'#254#246'7'#192#152'W:'#168#215#7#189'Nx'#241#218#209#25#2#204#4#138#170 + +'g'#194#129#23#220';hm,'#221'`'#222'Z'#253#163'Q'#8#163#250'O'#246#191#151 + +'%'#0#249#161#5#237#255'h'#23#251#191#218#214#190'J'#173#136'R'#248#207#129 + +'6R'#8#144#239#7'H'#154'@k$'#18'q{<'#158'Pw!@B'#175#4'@'#155#16#9#160#230 + +#160#212#23#0#239#171'j'#246'ZNv'#5'uG'#8'O$'#2#208'['#202' '#175'b&'#18#0 + +#154#1'f'#3'W'#23'@'#141'B'#217#200'0'#25'd'#205#14'@'#188#255#224'%'#208#176 + +'ae'#214#206'7'#16'L'#156#191'?'#236'}'#214#29'C:'#198#147#23#238'.'#245#219 + +#24'Q '#243'`'#223's'#239#204#138'6'#208#27'HB'#168#244'7'#30'E'#2#8#161#250 + +#31#8#129#223#205#169#255'n{+'#180'o_'#197'Z'#131'u'#14#2#137#133'&'#229#181 + +'}'#143#194#239#195'?'#237'|'#8#144#217#255#168#181#215#247#214#12'T|'#206'^' + +'?'#27#161'3'#144'^'#175'7'#1#31#9#240#132#212'{'#214'uX'#151''''#15'"''?' + +#128#22#138'''.b'#171'?e'#4#234'L|8'#144#175#13'`'#166'B'#22'?'#204'Wo>'#10 + +#220'm'#245'Y'#3'p' + +';'#202#27#253#221#209'S'#17#144#128'~'#17#0#213#4'x<'#30#180#2#244'Vr'#4'"' + +#17'T5{'#244'G8'#2#198'dA;'#9#184'Zg'#132#162#137'{2'#2' '#13'@'#199#178#2'5' + +#172'6@'#208#2#178#146#27',B'#243#230'5'#240#254'}'#23'B4'#18#202#234'y'#197 + +#216#237#168'K`'#246'Ag'#164#237'x/\'#181#31#174#6'C'#155'~3'#134#238'A'#157 + +#154'N'#185#247#163#172#159#151#171#252#227#212#255'p0'#12'Ao'#144#9'?'#173 + +#254'T'#244#229'j'#222#200#156#131#130#253#175'VD'#253#19#243#236'?'#226#223 + +#148#17#230'@'#18'`'#14'@'#222#254#167#134' }:'#0#9#253#145'F9'#146#128#18'I' + +#128#210''#205'h'#10#20'#'#9'T'#198#19#138')'#155#157#133#183''''#18'2V'#149 + +'A'#194'M'#13'B'#10'*'#231#161#25'P'#8#6#19#18#0#211#2#136#0'T'#160#16'*'#4 + +'3' + +'gK'#198#223#195'h'#197#180'%G'#193#226#211'o'#202#206#201#184#170#31#142#0 + +#248#216''#208#23'd'#130#207#212''#167#19#9#224';'#212#12'"b'#251'?1)'#191 + +'}'#21#170#255#228#8'"'#251#159#26#129#214'R'#248#15#23'h'#234#1#208#136#194 + +#239#232#203#254''''#244'G'#10#153'#'#16#15#166'"?'#0#10'p>'#158#168#140#252 + +#0#206#128'vi'#179#215#194#21'h'#147'#PFf'#128#14#205#128#5#140#0'H'#3#224 + +#162#1#252#244'`j'#24'*'#151'u'#27#17#200#240'P'#225'$'#26']'#9#31'>|%D'#130 + +#190'L|'#157'L'#203#153#186#232#8'Xr'#234#13'd'#23'e'#228#28'O'#253'a7'#246 + +#131#24'Cf`*('#131#19#239'zw'#200#199#233#235'7-<'#206#21#254#196#208'LE'#2 + +' '#231#31#18'@'#160#131'['#253#157'M'#155#192'M'#222#255'h4'#169#254#235'U' + +#225#142'J'#139'c'#29#202'Q'#0#239's'#1#215#4#164'V'#176#255'qk'#17#154#128 + +#160#240'G'#249'S'#13#158#0#186#250#1#144'eJ'#240'~'#234#215'\'#189#201'Q' + +#180'<'#22#151'S'#136#144#17#0'e'#255#217#202'g'#130#185#176#140'#'#1'3o'#6 + +'h'#133#204#192#206'nA;'#148'Bw'#185#154'L'#182#186#219#248#191'7'#224#199'w' + +#159#2'O['#250'Zj'#149'M'#155#15#251'^xOF'#139'Q'#234#214'~'#9#31#220'?z:'#1 + +'I'#1'J_?'#231#137#31#134'D'#224#221')'#184']'#207','#251'/'#193'y'#254#185 + +#213'?'#138#230'j'#136'y'#255'I'#253#15'P'#243#143'-'#223'@'#200#239'I'#137 + +#255#151#24#221'[l'#186#0#165#249#250#241'>'#150#0'$'#148#0#227#177#234'PKo' + +#235#143#253'/\C'#192#252#0#168#5'h'#220'n'#183#5#217#165#8'OXIf@'#131#219 + +'r'#130';'#164#221#141#29#140#198#131'+'#20#172'8('#175'j&o'#6#232#144#0't' + +#160#210#169#147'Z'#128#16#17#200#5'8'#27#182#194#183'/'#255#5#26'~]'#201#134 + +'F'#14#4'T'#133'f-'#29#15#19#230#239#15';'#239'2h'#12#153#207'&{'#239#238'?' + +'@'#195#250'o'#165#250#184'F'#13#246#189#240'n'#168#222#245#128#140#158'#!' + +#168#255#148#249#23#137'B4'#200#169#255'd'#255#7#220'T'#252#211#10#142#237 + +#171'!'#134#143#197#249#231#202'e'#137#216#228#252#182#213'2'#136#7#248#248 + +'?9'#131'X'#252#31#229#170#6'o7'#160#156#182'['#173'V__'#246'?'#161#223#4#128 + +'f'#128'\'#156#15#128#251'rd'#155#9#193#152'v'#238'v'#151#237'\v02'#3'P'#184 + +#149#26'5'#20#146#25'`6'#161#9#192#145#128'Z'#199#229#4#144'/@&'#242#5#236 + +#176#234#15#225'"'#135#2'R'#177#234'~'#254#10#26#214'}'#11'm'#219#214'1'#205 + +#128'&'#203#138#175#130'VvKq'#5's'#16#149'M'#159#15'e;e?#'#239#233'sw'#131'h' + +'X'#186#136#198'hA'#213'.K'#225#192#203#31#24#212'k'#251'j'#132#155'L'#250 + +#137'sC?c'#164#254#211#234#31#8'A'#136#188#255'l'#245'G'#245#191'a=x'#237#245 + +')'#225'?'#179'&'#216'^fr'#209#196'W'#26#11#228#22'*'#0#137#0#132#30#128#129 + +'@'#192#137#230'z'#159#246'w'#215#214#227#243#132'|'#0#178#1#168'0('#26#141 + +#150'Q8'#16#31#155#176#197#145'a8'#166','#226#252#0'\4'#192'R6'#13#204'EU,$' + +'H~'#0#202#9' -@'#201#198#135')'#144#4#184#196#160#28'Q'#4#134#5'>z'#248'*' + ,#216#246'}'#246'CT'#163#17#182#242'Ip'#236#31#223#200#216#241')'#233''''#17#3 + +'V'#214'M+'#249'C'#250#15#156#224#226 + +#254'@'#158#255'8'#231#249#143#6#195','#243#143#169#255#168#250#19#9#216'kV' + +#163#25'`gY'#172#130#250'o'#211#249#27'K'#140#30'R'#247#131'|'#250'/'#27#3'F' + +#241'R'#255#169#1#8#154#19#142#190#242#255#197#24#136#228'%'#195#129'V'#171 + +#213#24#12#6#169'Sp'#25#17#0#238#171'j'#156'yg'#4#162#170'*'#193#12#160#162 + +#10#163#173#4'l'#21#179#144#0#180'<'#9'hy_'#128#154'9'#3#169'T'#24'dBX'#176 + +#135#14#194#144'$'#205'~^e'#250#191'3)A~'#136#215#151#31#1#174#198#209#212#2 + +'\zP'#133#224'9'#207#241'c'#214#135#26#141#226#139#253#19#252#129#216#234#207 + +'l'#170#250#139#176#208#31'9'#255'H'#240#131'H'#0'>G'#27'8jWC$'#28'I'#241 + +#254'O'#176#182#175#213#170'b'#30'R'#255#241'O'#23'5'#0#1#222#254''''#239'?' + +#223#16#164#163#183#6' '#221']Z'#191#223#134#16#14#164#254#0#248#183#21'U'#13 + +#150#21'H='#2':'#130#186#5#141#30'3+'#17'f'#177'~'#185#2'Tj5'#20'T'#239#10'z' + +#139#141'E'#2#136#0'4d'#10#176'f!*'#166#5'0_'#128#140#159'(<'#194#132'w'#168 + +#160#130#159#215#151#253#14''#16'cI?'#217#134'B'#165#129#179#158']'#157#222 + +#131#242#131'>'#133#142'?'#204#246'G'#2#8'3'#225#231#9#0#247#142#186#159#192 + +#239'la'#142'iA'#253#215#169'"'#238#241'V'#199#175#188#250'O'#9'@'#164#254 + +#179#240#31'%'#255#144#250'O'#225'?\'#160'='#253#9#255#9#24#16#1#208'&'#152#1 + +#8#19#153#1#148#21'H'#4#128#143'Umu'#22#156#25#142')'#11#133'.A'#20#247'7' + +#228#149#129'm'#220#206'I-@C$@CDY'#179#16'!/'#128'F'#137'e?E8'#151'AQ'#136'7' + +#174';r'#172#234'O"'#168'tF8'#227#201#244#246#148#16#135#253'('#238'O'#158 + +#255'H'#16'U"'#0#15'n>'#170#254#179#163#250#191#10#205#189'0'#243#15#8#234 + +''#185#217#185#193#168#14#145#211#143#169#255#192#13#1#173#23#17'@'#147#160 + +#254#163'lF'#250#10#255#9#24#168#196'13'#160#176#176'PE#'#195#168':'#144#6 + +#134#224#133'T'#145')'#224#10#234#23'4{'#205#7#2#175#210'S'#21' '#211#2#198 + +#239#14':'#139#5'4F'#29's'#10#170#13'|'#207'@'#181#138'=G!'#231'g'#9#202#248 + +'K'#234'O'#154#224'`'#223#193'0@'#235#166#159#224#223#183#159'6,'''#31#143#20 + +'h'#205'yp'#234'c_u'#255'`_b'#213#205#239#151#21#251#240#163#190'H'#176#227 + +#201#213#191#211#249'G'#171#191#179#254'g\'#253#155'8'#231#31#175#254'k'#149 + +#17#239'x'#171'}='#10'{'#132#138''#200#251'O'#237#191#240#200#181'|'#2#16 + +#169#255#164'&v'#168'T'#170'`w3'#0#251'{'#169'}>_0'#3'('#26#128'['#168'K'#16 + +#158#188#130#8#0#168'm'#184#179#240#244'HLa'#21'j'#3#148#168#234#27#243#202 + +#193':n:'#168'Q'#11#160#193'!D'#4'j'#22#18'$'#18'P'#240'aA9?V|'#16'W5'#130 + +#176#229#235#247#224#243'G'#174'a'#182#223#24#164#3#133#1#143#190#251#157#244 + +#28#140#15#252'S."'#202#175#254'h'#223'G'#130'a^'#253#15#176#172#191'@'#135 + +#19'W'#255#239#185#213'?'#130'$'#193'1'#7#140'3w'#252'f'#214#4')'#244#23'F' + +#185#242#240#201'?'#228#253#167#240'_'#13#202'"'#205#4'l'#31#136#247'_'#192 + +'`D-'#165'8'#8#184#193#161#204#25'H'#154#128'#`X'#208#234'3-'#21'F'#131#145 + +'3P'#169#209'@'#225#132#221'@k'#178'0'#19#128#242#2'Th'#6#8'Z'#0#171#20'Lv' + +#16#150'%'#157'&'#253'm$:R'#176#254'?+'#224#235'g'#239#200'l'#14#244#24#250 + +#133#233#251#159#8#11#207#186'eP'#175'M'#249#221#242'!?'#230#253#143'q'#5'?' + +#156#237#31#134#8#31#250#163#212'_'#218';'#27#214#129#223#209#8#209'H$'#25 + +#251#215'('#162#254#9#182'v'#234#250'K1}'#10#3'Q'#247#223#22'~'#213#175#193 + +#191'k)'#249#167#175#246#223#189']'#235#128#223#159#208'-'#24'm'#13'='#178 + +#143#141#204#0#188#191#146'i'#1'2Y'#229#22'{'#193'I'#145#184#194#196'r'#2#228 + +#10'P'#170#149'`'#200#175#2'k'#233'T\'#253#181'H'#2#168#5#232#185#196' V)H' + +#179#4'),'#168#232#140#10#176#19#245#148'" zk'#178#228'?'#195#27#171'^{'#8'V' + +#191#254#176#212#151'1'#6#30#135#223#186#2'J'#166#207#239#246#177#148#223'_/' + +#191#189#4#223#232'#E'#245#167#213'?'#24'a5'#255#17'?'#231#252#11#177#216'' + +#7#180'o['#9'Q$'#6'z'#14#181#6#163#215#149#153':'#182'X'#180'A'#154#248#19 + +#225'{'#255#145'&@+>'#9'>'#133#255#234'q'#223#170#211#233#220'='#13#0#237#13 + +#131'"'#0'J'#10'B'#150'a'#205'B'#3#129#128#153'J'#132'c'#177'X'#5'e'#6'rZ' + +#128#17#181#0#227#158#130'3'#144'T|'#138#255#231'O'#216#3'W'#19'G'#2#212'4T' + ,#207#151#10#147'CP'#221#233#16#148#241#166#128'l'#7#233#30#204#202#152#251 + +#236#240#213#147#183#192#175#31#189','#245'e'#140#129#7#253#6#207'~'#249#215 + +#129#190'Jt;'#145#12']'''#189#254'd'#207'Gx'#199#31#173#254#254'P'#210#251'O' + +'{W'#227#175#224'u'#212#177'~'#0#148#31'@i'#194'jE4Pmk'#251#5#229'!'#138#199 + +#160#252'o'#15'nT'#250'['#207''''#255'lG'#217'#2p'#244#167#246#191#175#171#30 + +#208#187'%g'#160#201'dR'#163#218'a'#196#191'Yj0'#229#3#224#237'*|'#175#228#11 + +'8>'#154'P'#232#153'3'#16'Ww'#188'P0'#20#146#22'0'#133'9'#1'Y8'#144'6=_)H)' + +#194'h'#6'P'#18#145'L('#22#202#206'lQIa'#175#217#0'o.'#251#157#212#151'1'#6 + +#17'J'#166#205#135#195'niH'#199#232'n'#245#143#161#240#179#184'0'#196'9' + +#255'|A'#206#1#232'qC{'#205'w'#168#25#132'x'#207'?'#183#250#151#24#221#219 + +#172'Z'#155#200#249#151','#253'%'#225'GY'#169'C'#185'k'#182'Z'#173'.'#148 + +#195#192'@'#156''#2#6'M'#0#130'3'#16#153'G'#231'r'#185#200#233'W'#140#23'T' + +#1'\'#153'pe'#155#207#184#208#30'0'#206'Kj'#1'H'#2'*'#141#22#242'(='#216'bE' + +#2#208'$'#137#128#180#3#133'P($T'#11#138#251#6#140'`'#22'x'#251#250'c'#161'u' + +#211#26#169'/c'#12'"'#28'q'#215#155'PP'#189#243#160'_'#207#249#252'D'#141'>H' + +#168'#'#188#227'/'#192#173#254'L'#248'}AF'#4#174'z'#180#253#157'h'#251'S'#211 + +#15'z.'#190'T%'#139#134'&'#230#183#255','#227'l'#255#16#18#0#139#253#163'l4' + +#144#240#227'mr'#0#178#206'?]b'#255#253'V'#255#9#131'&'#0#232#146#19#128#23 + +'H'#163#195'h'#0'[%nU1'#210#2#28#133#199#198'P'#180#217#160'p'#210#2'P'#192 + +'u'#150'"'#176'U'#204'fu'#1'I'#2'`'#14'A$'#1'V.'#204#153#2#192'L'#7#254#242 + +'Fh'#170#176#223#217#10'/'#159#183'p'#204#233#151'C0'#20#148#194#9''#255'b' + +#208#175#151#241#169#190#204#8#136'w'#198#252#185#130#31'A'#245#199#205#31'`' + +#197'?'#1#23'e'#253#173#225'<'#255#209#206#213#191#216#232#169#177'i}'#173 + +#252#234'O'#153''#212#5#150'B}'#245'T'#246'KN@Z'#253#145#0#156'~DSw'#184 + +#222'!|V'#201#10'A'#179#217#172'#g '#222#199'B'#130#184#175#162'=j'#1#11#218 + +#253#134#185#204#169'Ge'#194'D'#2'j'#13'X'#199#205#0'}~)S'#255#213#6#29#211#6 + +'Tz'#13#31#22#228'{'#6'$'#253#1#248#142'd'#217'm)'#158'-|'#244#231's'#161#246 + +#135'O'#165#190#140'1'#136'p'#240#205#207'C'#217#172#133#131'|5'#159#236#203 + +#219#253'B'#177'O'#156#217#254#188#234'O'#4#224#193#149'?'#192#217#254#142 + +#237'?@'#200#211#193'&'#1'1'#2#192#255'T'#242'hp'#162#205#142#182'"'#202#135 + +#254#216#234'/'#196#254#129#235#250'['#143'2'#215'N'#206'?'#170#252#235#173 + +#243'oo'#24#18#1#144'3p'#221#186'u'#172'QH '#16'0'#161#6'P'#128#23'Im'#195 + +#153#22#128'W2n'#155#179#224#247#225#184#202'"h'#1#148#2#172#209#27#208#20 + +#216#13#212#148#19' '#242#5'(u'#184'Qr'#16#159#27' h'#2'2'#161#157'xOq'#193 + +#158#222'E'#142'/'#172#207#158#176#19#174#12'c'#181#253#185#130#202#249#251 + +#192#254#215'='#193#253'1'#136#223#148'X'#248'i'#229#135'8'#151#238'K'#142'=' + +#177#227'/B'#234'?'#222#246#180#214#128#167'e'#243#14#171''#185#197#181#209 + +#168#10'R'#184#143#250#190#177#208#31'n'#173'(_'#245'|'#209#15'%'#0'5S'#230 + +#31'j'#224#254#193'8'#255#4#12'uYMf'#6':'#28#14#189'R'#169#180#225'E'#22#227 + +'F'#137'AL'#11#240#133'5'#211#235#220#182'}'#4'-@'#193#180#0'5'#24#11''''#128 + +#185'x"'#175#5'p$'#192#180#0#161'u'#24#223'>'#172#147#4#248#203#29'A'#138#192 + +'sD'#0'c'#21'~9'#1#26#22'z'#242#243#171'Q'#251'T'#15#238#0#188#25#215#185#242 + +#243#170''#152's'#252#145#131#143#179#253#3#16#246'"'#17'x=,'#233''''#18#12 + +'B'#140#250#253'E'#185#196#31#20'|G'#133#197#181#5#15#21#19'V'#161#237#23 + +#169#253#192#245#252'k'#224#203'~'#221'}'#245#253#239#11'C&'#0'A'#11#160#182 + +#225#168#9#144'/'#160#0#137#128#249#2#144#8'H'#19'(k'#240#216#246#246#132#181 + +#149'r'#150#29#168'`5'#0#10#10#11'V'#206#3#141#201#10#26'#g'#10#168#146#17#1 + +'5'#243#7#176'b!'#218#152'#'#145'+'#27#30'I'#166#192#138#211'v'#129#144#215 + +'%'#245'e'#140'zP'#225#218#161'w'#188#10'E'#211#230#13#234#245#9#174#212#143 + +#247#250#199#217'l'#191#4#223#230'+'#30#140'$W'#138#251'3'#199#31#222'v5' + +#252#2'AWK'#202#234'/C'#218#168'F'#213'_)'#143#134'zZ'#253#5#207'?n'#142#254 + +#182#253#234#245#189#167#227#243#19#215#7'h4'#26#214'4'#148'O'#15#166#188#128 + +#242'h\^'#177#213'Yxp'#2#215'uA'#11'P'#168#212#160#181#20#176'ra'#181#174'S' + +#3'P'#11'Z'#0#229#6#8'Q'#1#190#155'0'#136#202#134'G'#130'_'#240#213's'#22#130 + +#175#189'Q'#234#203#24#213#160#197'e'#191#27#158#132#10'T'#255#7#140#132'x' + +#166#31#231#244'#Afv?'#173#252#225#8'K'#250#137#6'B'#172#221'W'#132#247#250 + +'S'#165#159#139#154'}'#160#240#211' '#16'a'#245'/'#212'{'#234#10#244'>'#10 + +#243'u]'#253'i'#236'7'#181#253#222#142#130#223'@UH'#8#238#129#230#253'w'#251 + +#254#211#241#25'v'#213#2#240#194#10#132#136#128#160#5'8'#2#198'9'#173'~'#211 + +'l'#210#2'@'#161'`'#14'A'#5#154#2#150#178#157'@'#159'W'#202#146#130#152#240 + +#147#22#160#227'H'#128#181#15'S'#241#237#196'EY'#130'2y'#186'.]Z'#252#235#210 + +#3#193'Y'#187'Q'#234#203#24#189#192#223#210#146#203#255#10#19#247#26#194#236 + +#6#22#231#7#214#224#143#229#250#243'N'#191'X'#132#19#254#8#175#250'G|'#156#6 + +#16#246#243#142'?'#159#155#21#4#9'q'#149'<'#26#168#206'k_'#143#199#139#241 + ,#171'?y'#254'Y'#213#31#173#254#184#175'U('#20#181#180#250'k'#181'Z'#7#146#192 + +#144'W'#246#17#164#235#163#236'N'#11' _'#0'p'#17#1#26'$R'#180#213#153#191'' + +'8'#166#178#10#217#129'$'#220'j'#189#145#229#6#168#13'z.)'#136'O'#17'V'#178 + +#220#0#222#20'`'#141'D'#249#14'Bra'#196#24'$'#213#128#225'J'#5#31#222'r24' + +#174#249'R'#234#203#24#149' '#13't'#191#27#159#134#178'9'#139#7#252'Za'#213 + +#231#179'}x'#187#159#19'~Z'#209'i'#245#143#133'"'#201#176#31#229#252'GI'#248 + +'q'#239'i'#217#10#222#214'm'#140' '#152#237'O9'#255#248'_'#165#217#177#193 + +#160#14'S'#166#31#9'4y'#134#133#145#223'Md'#251#147#240#163'L'#213#167's'#245 + +''''#164#141#0#186#243#5#0'7H'#180#146#15#13#150#249'#'#234#9#181#238#252'%l' + +#29'Wt'#154#2#134#252'r0'#151'N'#229'j'#3#152#6' r'#8'R'#247' '#149#146'+'#24 + +#18#154#137#178','#193#225#239#24'l\'#243#5#252#231#230#147#165#190#140'Q'#7 + +'CA'#25#28'~'#223#187'h'#130#230#15#252#197#157#195'y:'#139'|'#226#156#205'O' + +#182'?'#173#234'L'#245#167#132#31'a'#245#199'-'#26#8#254'{_'#22'kYv'#158#181 + +#246'x'#230's'#238'XsWwW'#187#219'v'#187#227')'#241#0'v'#136#193#145#8#194'F' + +#8#5#148#4')'#145#176'P'#132#132#20#241#18'!9'#188#0'/H'#188'!'#224#1'x'#2#9 + +#17#144#128'XHH$`x'#128#7#144#172'$'#216#198#221#158#186'k'#174'[w:'#243#176 + +#7#254#239'_'#255'Z{'#237'}'#207#173#186#213']w'#170#190'K'#218'w'#15#247#12 + +#251#236#189#191#239#159#255#165#166#253'='#181#243#222'wT2'#155#209'k'#23'\' + +#25#8#159'A;'#158'n'#223#232#238#161#229#19#192#159#152#184'?:'#254#162#230 + +'_'#233'Yn/'#145#254#0#255#7'*'#27'}'#158#208')E'#4#136#173'V'#137#165'.' + +#139#22#128#174'A'#215'Q:|o'#208#251'b'#214'x'#153'+'#255'B"'#129' d'#144 + +#247#174#146')'#176'zUH@'#8#160#225#248#3#184'V@'#155#2'l'#14#248#158'T'#15 + +#150'I'#158#23'?'#201#243#206'x'#28#144#198#191#254#181'O'#169#217#197'D' + +#159'''3'#232'ay'#245#203'_S'#191#240#219#255#248'H/_'#250','#229#198#225'/' + +#137'>'#22#252#186#208''''#227'2_m'#247'c'#129#218#191#24'C'#19#152'p'#155 + +#175#249#184#207#182#191'Q'#253'=z'#247'k'#171'['#28'x)'#138'}JY'#180'_<' + +#255'h'#251'u'#239'yK'#254']'#207#243#242'.'#203#11#160#31'q'#21'~'#0#163#5 + +'dyp'#229'G{'#27#191#152#229'~'#13#0#246'E'#11#136#234#13#181#242#210'gT'#173 + +#211#213'&'#128#144#0#182#131'Z'#173'0'#5#196#31'P'#174#28'<'#191'Z'#192'w' + +#254#229'?P'#244#187#23'U'#128#199'=z/}D'#253#153'o'#254#11#213#189'~'#235 + +#253''#8'W'#248#228',ssW'#242'['#187#159'l'#250#217'\KV'#253#167'"'#253#231 + +'j'#255#222#247#213'd'#239'>{'#253'a&(N'#249'e'#199#223'{'#235#205#17'z'#251 + +'C'#250#163#3#12#247#251#163#5'Y'#128','#253#197#7#240'p>'#159#239':'#158#255 + +#15','#253'1'#158'7ll'#227'Pd'#7#146#22#128'9'#178'.!'#18' Q'#1#172'/'#239'O' + +'ko'#220#31#174'~'#206#19#135#160'1'#5#226#246#138'Z}'#233#211'l'#2'@'#250'G' + +'-q'#8'J'#243#16'?'#150'Ta3'#211#176';'#229#184#167'='#186#207#214'A'#244#244 + +'G'#150#204#213#191#250'K'#175'?'#243#172'D'#23#227'h'#163#181'y]'#253#220'_' + +#251#166'z'#229#231#223'g'#193#149#17#252'z'#30#175#178#211#15#246#187#145 + +#252'H'#248#129#228'g'#2#152#217#176#31'r'#255'G'#219'w'#200#246''#135'$' + +#255#140'I"Ou'#185'o=\'#244'_'#233'm'#191#157#231#252#137'\'#239'o'#26'~@' + +#250#211#254'm4'#251#132#244#199#12#192#181'Z'#13'>'#130#217'Q'#27'~'#30'e'#251#6'x'#138'/'#237#248#203 + +'otw'#223'i'#199'3'#132#249#172#227#143#176#129#164#159'-H|'#241#252#179#227 + +#143'0'#180'3'#164#177#183#183'7{'#214#134#31'O'#27#199'B'#0'J*'#5#209'6'#140 + +#206#187#213'h4`'#10'\VZ'#250#223#148#245#165'E'#26'\!'#18#248'R'#166#194#136 + +'I'#128#147'~"'#235#15#136#219#29#173#1#136'C'#16#25#130'a='#226#181'o'#138 + +#134'l'#142#128#152#3'b'#18#148#148#128'e'#191#242#164#177#246#148'+'#253'?' + +#255#225'o'#169#31#253#193#191'='#225#147'z1'#6#188#249#31#251#139']'#253 + +#204'_'#254#155#207'>'#163#239#147#158#13#145#250#182#194#207#218#252#162#250 + +'/t'#184#143#19'z&s'#209#0'D'#253#167#237'>'#236#254#253#251#252#154''#174#230#163#254'i'#159#202 + +#185#25'+/T}'#246#27'G]'#255#220'W'#223#215#251#151#206'>g5'#254#188'P'#251 + +#179'\l~'#29#235#207#165#188'W'#199#251#181#218#159#10#248#19'&'#130#153#26 + +'o'#223'S'#253#135'?`'#211' [,'#172#215#191#17#206#251'/'#147#221'/'#223#4 + +#213#31'&'#192#152#22#132#130#224#12#180#170'?-'#152#231#15#14#193#145#211 + +#236#243#185'I'#251#155#143'iX'#135' &'#20'%'#192'cZ'#241'Mt'#14#130'/'#0 + +#166#0#189#230#10'-k'#15'G'#189#183'v'''#205#151#141'w_;'#250'b'#213'\'#135 + +'?'#224'u'#21#213'$1'#168#17'["'#240'M[q'#19#30#180'='#5'i'#9#138#217#134'r' + +#201#21'8'#15'n'#129'{'#255#231#191#169#255#250';'#191'z'#218#167'q'#166'Gs' + +#253#138'z'#233#203'_S?'#243'+'#191#165#234#171#155#207#245#179'M#'#15'//'#8 + +#0#21'}'#153#16#0#219#253#146#230#11#149#30'E> '#0#150#254#0#255'Tk'#1#179 + +#193#158#218#187#253#135#244#191#194#238'W'#176#251#189'd'#241#234#202#246 + +#247'B'#178#255#149#168#254#180'L'#137#4'0'#203'/:'#253#222#147'f'#159'w$'#1 + +'h'#219'8'#254#158'W'#216#175':'#142#149#0#224#16#252#214#183#190#197'MC'#136 + +#201'Z'#244#195'`'#152']'#22'-'#0'$pM!J'#160#188#149'w'#247#214#190'0Kk=eH'#0 + +#210#157'H'#160's'#249'5'#186#233'/IRP'#205'j'#1#8#13#194#28#240'b'#157'#' + +#160#195#131#18'"4'#25#131#158''''#10#192#249#9#19#254#254#223#254'e'#245#240 + +'";'#176'4'#26'kW'#212#205#159#255#154'z'#235#24'@_'#26#206#196#157'6'#209'G' + +'&'#241#204#165#161'g.'#177'~V'#253#167#218#238'O'#5#252')'#183#249#30#178 + +#211'o1'#30'j'#233#159'&'#186'4'#152#237#254#189'w'#218#209#180'oTz>9'#230 + +'Ok4'#250#228'f'#31' '#0#244#249#203#178#12#190#128#253#227'p'#252#185#227 + +#184'aa'#29#130#244#163'j'#164#1'tMn'#0'H@'#136#0#29#133#215#147'<'#218#248 + +#233#222#250#23'3'#130#189'q'#10#194#31#0'{'#191's'#245#227#170#209#187',' + +#192#143#181'?'#192'5'#7'b]>\'#20#14'A'#11#208'D'#144#151#10#136#156#159#251 + +#164'_~'#18#254#129'C'#190#31's'#1#254#222#175'A'#141#30#221'9'#129#147'8' + +#187#163#177'vYK'#250'_'#251'['#31#12#244'O{'#194#141#202#159#231#142#237'o' + +#192#159#217#226#158'\'#178#252'8'#140'7[X'#192'C'#242#167'Sc'#255#143#9#252 + +''#164'f'#163'}Q'#253#19#235'7Xo'#142#238'm6'#251#144#240#244'Hz'#166#216'g' + +#12#144'#'#227'O'#21#210#255'.'#225#4#181#254#187#180' '#230'?'#251#250#215 + +#191#158'>O'#199#223#179'\'#158#231#241#249#236#16#188'v'#237'ZD?'#166'I?' + +#142'M'#1':~]'#242#2#224#16#132'V'#176#218#159'7n'#222#31#174'|'#138#253#1 + +#220#16'$'#212#243#6#196#177#234'^{K'#213'z'#235'L'#0'69'#168')'#249#1'5m'#10 + +#232'D'#161'P'#207'1`'#252#2#158'8'#6#13#1'x:'#195#235','#155#4#217'|'#170 + +#254#227'o|^M'#182#31#156#246#169#156#232#208#160#255#243#234#19#4'zl'#31#247 + +'0A'#23#207#216#251#210#196#147#255'!'#192'5Y~'#185#128#31#146'?'#19#181'!$' + +#144'Ng'#236#245#239#223#253#174#154#13'w4'#248#209#223#15#170''#134'x?'#236 + +#254#157#183#229#27'!'#253#145#245'7'#161#239#178'1I'#246'A'#143'?T'#254'm#' + +#227#143#204#229#217'q8'#254#220'q'#18'0`-'#128#214#193#189'{'#247'0'#181'x' + +#11#141'C'#148#6#189'!'#1#248#5'6i{e{'#210'}'#227#241#164#253#154'.'#24#242 + +#25#208' '#129#176#214'P'#221#171'oq'#255#128'@'#204#129#192#248#3#140'S'#208 + +'!'#1#27#29'p'#27#140'B#p'#253#1'v6'#226#167'\'#134#147'L)'#150's'#193#148 + +#224#223#250#245#159'S'#211#189#173#147#251#238#19#30'A\S'#221#151'^W'#215 + +#190#240#139#234#245#191#240#13#213'XN'#160'?'#202#253't<'#253'&'#191'7wm' + +#254#212'H'#254#2#252#25#131'_'''#251'X'#181#31#14#192#217'L'#245#31'|_M'#247 + +#183#216'' + +#239#186#170''#179#217#156#16'^'#22#199#225#248'+]'#138#227#248#208'e'#223 + +'cL'#1#218#174#199'q'#220'Y,'#22'k'#196'vp'#2#26#18#192#246#6#189#180#247'`' + +#216'{s'#214#188'a'#253#1'a'#164'g'#24#170#183'T'#239#198'[*nuu'#211#16'h'#2 + +#13#153'h'#148#246#217#31'P3'#230'@A'#2'z'#242'Q_'#151#17'{^'#209'r'#253'e'#245#234'/'#253'U'#181#249 + +#214#23#143#241#203#158#208#198'/'#175#188#206'H{'''#179'O'#247#242'3'#224 + +#207'X'#234'g'#21#201#207#241'~'#2'}'#6'{_'#136#0#165#189#147#157#247#24#252 + +#186#181#151#158#212#211#207#210#228#229#149#237#31#212#130#197#196#181#251 + +#149#14#249#193#238#223#18#213#31's'#252'q'#200#143#182'w'#8#15#195#231'Y' + +#236's'#132#203'vb'#195#166#9'_'#191'~'#29#154'@'#11#181#2#240#7#208#15#191 + +'*aA'#204'1'#8'=p5'#247#252#206#157#254#234#167#198'I}'#213#23#167#160#23#232 + +','#192#184#217'c'#18#8#26'uM'#0'l'#18'D'#146')'#136#16#161'4'#18'A'#152#208 + +#180#21#243#29#18'0'#221#133''#254#179#234#213'?'#251'+'#234#218#159#248#165#163#191#249#176'k'#246'<' + +#158'PG'#218'kG'#191#201#231#207'm#'#143#194#230'/'#210'{y'#153#27#169#191 + +#208#192#135#148#135#250'O'#132'0'#217#190#163'F[?"'#146#152'Ks'#15']'#223 + +#143'?7'#187'{o7'#194#217#208#177#251#231#244'l'#163#197#23#18'='#182'%'#215 + +#159#193'O8'#128#25#176#141#132#159#157#157#157#169'x'#253#13#248'_'#24#2#224 + +#239's'#19#132#8#248#173'$I'#216#31'@'#11'B'#130#208#4#216#31'@'#235#149'\' + +#249#157'w'#247#214'?='#205#162#14#146#132#152#4#184'7'#0#145'@gMu'#174#189 + +'%'#229#194#162#1#152#252#0'h'#1#146'-X8'#6#203#154'@a'#18#248#197#228'#N1' + +#209'Y'#237'='#248#255#254#205'?R?'#248'w'#255'DMw'#30#158#234'y'#4#245#166 + +'jn\S+'#175'}'#130'$'#252#159'R7'#190#244#231'T}'#253#202'i_'#158#202#200#203 + +#210'_Rz='#227#236#147'r^'#6#191#163#246'['#240#139#202#15#224#179'z'#207'*' + +#191#246#1#204'v'#31#168#193#195#183#233'usn'#238#193#239'Cyo'#154#229'W'#187 + +'{?'#236#196#147#190#168'l'#214#238#23#167#223'.'#236'~ZX'#245#135#211#143'0' + +#240#152#222#187'O'#166#241#4#9'?'#199#233#245#175#142#211'x'#202'}'#152#2 + +#180#6#9'X'#0#217'?'#151#29'S'#0#26#1#252#1#221'$'#243#187#239#246#215'?' + +#179#200#163#134'o'#204#1#216#247'$'#233#153#4#174'|'#156'H'#160'nA'#207'f' + +#128'h'#4'L'#2#145'&'#1#21#233#168#2#147'@h'#8'@r'#5'|'#129';'#214'2)'#225'Y' + +#159#166'|'#240#222#219#234#143#255#249#223'W'#15#254#247#31#208'C99'#190'/' + +#162'k'#17#183'{'#170'u'#245'e'#181#250#209#207#168'+'#159#251#170#186#250 + +#249#175#210#245#175#159#246'%x'#250'03L'#219#130#30'c'#231#23#253#251#140 + +#167#223'H~V'#225#231'I'#1'x'#6#255#156#155'{'#178'&@'#255#155#238#222'U'#163 + +'G'#210#206'{Q'#168#253' '#146#203#173'}L'#231#181#131'/q'#156'~H'#245'E'#188 + +''#15#133'='#180#141'F'#144'P'#251#225#244'{D'#207#245#222'I'#218#253#238'8' + +#141'G|'#169'?@f'#22'b'#167#160#210'Z'#0#182#215#233#1#236#204#147'`'#229#189 + +#254#250#167#19#21#198''#28#234'#p' + +#231'R'#217#151'I'#184#15#142'>'#14#251#137#31'`'#188#253#30'-'#239'jR'#224 + +'i'#188'S'#142#22#0#252#27#205#193#237#245#198#240#145#11'~z'#182#140#221#15 + +#240'o'#153'J?z'#230#239#201'4'#223#232#240#131#6' '#199#150#237#247','#151 + +#242#196#190#215#245#7#208#197'h'#18#248'{'#164#10'm'#18#192#175'Hx'#144#179 + +#4'iY'#3#9#204#210'x'#237#246#254#250'''3'#207#15'Yr#<'#24'j'#18#8#27'm'#213 + +'!'#18#136#154#29#2'~h'#181#0#228#8'x'#236#20',H'#128#181#129'J'#152#208#212 + +#17#24#18'`'#231' t'#148#220#153#144#164'`'#132#234#147#246#244'+y'#10#4'1' + +#219'{'#172#230#253#29'5'#31#236#210'zO-'#134#251'\9'#217'}'#249#13#213#185 + +#249#250#217#149#224'G'#189#142'K'#239'C'#17#222's[u'#219#16#159#11#254#170 + +#212#151#220#254'L'#154'z'#148#9'@K'#255#209#214#143#213'd'#239#30#189'n'#206 + +#145#1'~'#159#228#248#175#214'F'#15#174#180#251'w'#243#2#252#200#244#131#221 + +#15#240#195#238',!'#191'{R'#223#15#27'n{:'#157#14#136#0#160#194'%''e'#247#31 + +#245'r'#31#251'wW'#243#3#200#28'@3'#209'Md'#10'*'#237#16#196#26'$'#176'J m' + +#141#23#181#205#187#253#213#183#136#4#2'm'#207#11#9'p'#4#160#201#230'@D'#234 + +#170#213#4#156#181#23#11#17#24'M'#128'L'#2#21'j'#191#130'2s'#17#26's'#192'M' + +#30'2UEn'#163#145'3l'#26'|'#232'F^'#10#226#8#224'M'#21#159#210#158'}'#137#239 + +#187'i'#189#218#230#215#128#207#13#248#173#228'_0'#200#217#241'7'#211#161#190 + +#225#163#183#213#172#255'H'#146'|'#140#218#175'k'#251#187#209'd'#235'zw'#239 + +'=m]d'#153'x'#252#145#236#3#240'#'#151'['#233'y'#253#24#252#216'F'#178#207 + +'I'#198#251#15#27#167#253'('#151'R'#133'I'#11'h#'#25#136#180#128'K'#208#4'h' + +#31'Z'#0'H'#0#164#176'B@lM'#147'x'#237'N'#245#19#169#23#198#218#179'/>'#1 + +#174#12#172#17#9'|L'#197#157'uM'#10#198#15'`'#192'/m'#198'=!'#2'_z'#10'('#19 + +'%'#16#231#160'2'#230#128#239#21#4'`'#174#214#139'>]'#241'y'#25'.'#234']sGl|' + +'O'#202'wm'#3#143#170#179#207'8'#250#0'f'#212#243'/'#28#240#27#231#31#175#167 + ,'j'#240#240#7#164'ImK'#140'?'#209#196#145'j'#240#175#213'F'#247'/'#183#145 + +#226'k'#193#159'I'#154'/g'#250')]'#226#251'H'#230#245#131#228#199#164#30#143 + +'1'#171#207'|>'#31#31'w'#170#239'Q.'#227'i'#223'F'#207'8'#5#209'@'#4']'#132 + +#208'P'#212#9#15'"O'#224#138#201#20#4#9'$y'#220#189#189#191#250#214'BE'#245 + +#18#9#136's'#176's'#249#13#21'w/'#177'/'#192'3'#181#2#177#244#16#176'&A'#164 + +#253#2'b'#14#168#208'/'#146#134#140'i '#13'F'#172'F`'#175#152#163#10#156#159 + +':'#163#23'f'#148#146'xl'#171'.}'#140#193#159'i'#201'oc'#251#169'n'#226#1#240 + +'+'''#204#151'K'#190'>'#171#244'3'#241#250#211#177'\B'#201't'#162#6#247#191 + +#175#18#228#246'''s'#157#21#232#128''#163'1'#184#189#217#28'>'#210#138'F' + +#150';'#146#31'*={'#252#149#238#237#7#240#223#151'p'#223'cH'#254#197'b1'#186 + +'v'#237#26#156#131''''#234#244#171#142#179#240#236'Z'#18#232't:1'#177'b'#157 + +'.T'#27#149#131#232'$'#4#2'0$ '#173#198'A'#2#205'L'#133#237#219#253#181'7gY' + +#220#214'}'#0#196#174#143't)qk'#243#150'j'#172'^'#215#146#222#1#189#217'f-' + +#160#166#147#139'8Dh'#219#142#7#133's0'#240#10#141#192'I rs'#137#205'f~'#224 + +'''='#225#10'?'#211#173'>'#175']'#130#142#248'h='#245#250','#191#178#185#211 + +#151#223#5#191#246#238#235#248#190'J'#181#202#175#4#176#156#155#159':'#246 + +#254'\'#131'?'#183'j'#191'd'#242#17#25'$'#147#161#234#223#255#158'Ji]H~'#157 + +#225#167#210','#191#220#217#255#201'j<'#217#21#193'o'#193#175#138#190'~'#166 + +#190#255#1#164#191#132#254#30#163#190#159#198#168#209'h'#204#143';'#207#255 + +'9'#222#165#227'?'#15'S:'#140#162#161#241'x'#140#134#162#29#169#25#184'd4'#1 + +#165#251#7#160#177'H'#143#174'X'#147#16#218#188#211'_'#251#216'8'#173#173'x2' + +#239#160#206#254#211#18#191#190'rU'#181#214'oiM'#192#250#1'B'#157',$d'#224'I' + +'%'#161#138#138#190#2#166#152'Hq'#132#192#244#23#240#203#145#2#167#243'P.' + +#161#195#234#21#245#202''#158'q'#228'O'#220'='#179#195'{'#234#129#167#255 + +#238'|'#201#207#21#144#27#129#175#14#11#237'9'#133'<*-b'#251#197#162#129#207 + +#210''#190#144'p'#223'B'#180#129#5#255'o>'#216'a'#155'?'#157#142'u'''#31'Z' + +#148#128#223'#'#241''#181#187#247#163'n8'#27','#3#191#210#225'>'#128#31'-' + +#188#31#144'&'#203#14'?'#228#248'#'#220'G'#175#27#161#200'G'#157#146#211#239 + +#131#222#157'c='#23#248#3'~'#252#227#31#251'h%F'#154'@'#195#228#8'`V!'#164#12 + +#131#8'h'#141#164'!4'#26#237#210'Uk'#17#240#234#247#6'k'#175#15#23#245#13'c' + +#14'0'#17'DP'#241#145':'#220'Sm2'#9'PG'#224'K?'#193#2#252#142'6'#192#254#0'c' + +#14#232'm'#155'8Ti9f'#195#134#158#201'(tr'#207#171#253#7#204#173'=KW'#250',' + +#143#202#245#202#157#166#156'%'#208#27#162#200#164'eW'#150#29'H'#231'Ui'#1'z' + +#227#237'O%'#212#151#207#231#142#195'O|'#0'D'#2#147#221#219'j'#178#253#158 + +#222'w$?>'#223#167#15#184#222#219'{'#167#21#204#199'K'#192'ob'#253'h'#234#137 + +'4_+'#249#233#153'}L'#160#223#165#231#23'5'#0' '#137'3'#1'~'#231'2'#159#153 + +#193'$'#240#189#239'}/@x'#16'$@Z@W'#26#137#184#154#0'"'#3#235'('#28#162#27 + +#129#18#227#248#254#160'wko'#222#188#234'['#245']k'#2#200#26#244#227#26#153#4 + +#31'Q'#181#206#166#150#248#174#244#23#223#128#206#17'0'#249#2#129#205#30'TN' + +#6#161#237'@'#236#251#5#1'8m'#201#221#26#3#235#164#170#22#27#157#181'+~F'#134 + +'Wr'#228#185#155#249#1#240'k'''#159'H'#251#180#144#250#165't^'#168#251#137 + +#238#215#175#9'@<'#254#226#237'7'#26#0#19#0#166#233#154'N'#213#136#164#254'|' + +#180#171#227#251'IR'#2''#160#146#217'K'#221#221#31#214#131#197'T'#192'o'#28 + +'~F'#242's'#129#15'r'#252#209#220#3#146#31#26#0#212#254'('#138'v'#7#131#193 + +#136#180#218#19'M'#243'='#210'u?'#237#19'XvN&<'#184#181#181#21#211'Ek'#208#5 + +'4$'#128'lA'#180#24#135')'#192'$@'#251']'#248#4#232'X'#237#209#168#243#210 + +#246#180'}SO8bH@2'#0#137#8#234#189#171#170#185#241'*'#131#222's'#181#129'H' + +#147#129'''-'#199#149'q'#14'F'#21'm'#192'u'#16#154'z'#2'&'#3'eg)'#202#29'2p' + +#181#255#220'!'#133#15'f'#26#188'(C'#210'u\'#137#159#23#181#249#202'sT}'#199 + +#201'W'#168#249'"'#245#197#214#231'2'#222#180'p'#242'1'#232#165#148#215'z' + +#252#141#234'/'#170'>'#219#254#201'B-'#250#187'j'#184#245#14#29#27#219#200 + +#128#174#229#151#137';'#189#249#228#165#238#222#15#185#170#143#235#8'l'#168 + +#143'S|'#149'd'#249')'#237#224'C'#184#15'R'#255#1#212'~'#178#249'w'#233#249 + +#29'6'#155#205')i'#183#201'iz'#252#151#141#179#250#4#150'H'#160'Ac2'#153#160 + +#145#8#155#3'B'#2' '#3#209#4'T'#151#128#136#190#131#181#253'Yc'#243#225#168 + +#251'Z'#166#194'PKn'#169'!'#8'C1'#9#186#164#13#188#193#213#132#0'>'#28#129 + +#158'D'#4#220#16#161#155'9'#168#156'Z'#2#229#18#129#231#23#179#22#251#198'I' + +#232'j'#3'E'#30'a'#238#148#25'z'#213#146#195#3#153'mg'#245#182#188#223#187 + +#249#4''#134#233#191#167#156#198#28'|'#188#2'zP'#168#3'~'#211#173#135'U}'#9 + +#239')'#167'O?'#188#245#249#28#251#11'+'#249's)'#238#201'%'#207'?'''#240#143 + +'wn'#171')-'#153'y]*R_f'#238'iG'#147#237#171#173#253#219#129#151'&:'#151'(3e' + +#189#240#246'3'#248#149#206#242'CO?'#246#248#195#230'G'#168#15#224#167'eH' + +#166#236#20#177#254#179#6'~}'#205#207#238#176#133'C'#4#254#136'.b'#147'L'#130 + +'.H@:'#10']6'#225'A%$'#128#16'!H`'#158#133#237#187#131#222#235#179#172#214 + ,#230'y'#3#140'o'#192#132#10#163#186'j_zM'#197#221#205#2#248'f1'#4#16'W'#142#7 + +#186#211#144#178#243#19#6'em@'#26#143#148'#'#6#158#149#244#172#29','#137#30 + +#152#249#11#142'zG'#206#204#147#227#222#168#167#189' ?'#252#128'i'#197#229'y' + +#14#248'3'''#150#175#28#27#223'Q'#247'y'#31#182#190#27#222'K'#11#137#159#27 + +#208''':'#181'7/'#145'@'#194#245#19'#'#146#250#243#225#142'h'#11':'#188#167 + +#138#30'~'#217#165'F'#255#246'Zc'#244#152'S{%'#212#167'tz/O'#223'-s'#248'A' + +#237'7'#137'>'#15#207#19#248#143't'#239'N'#251#252#12#9#244#251#253#184#213 + +'j5'#232#226#162#197#248#154#132#4#225#16#188#12#173'@i'#18#232'1'#9'('#175 + +#158#7'~'#252'p'#208#189#185'?o]-'#146'|t'#184#15'&'#129'oL'#130#245'W'#8#236 + +#177#205#9#240'L'#5'a'#172'5'#6#171#9'p'#10'qPT'#21#210':'#15#220')'#202#140 + +'V'#224#21'D'#160#138#237'"JP'#172'K%'#200#206'f^9'#236'='#235#173'z'#158'w' + +#245#153#31#215#188#152'>'#219'='#149#188#188#145';/'#178#245#249'n'#18#143 + +#177#243'MG^'#145#250'*u$'#191'c'#235#27'/?'#219#237#12#244'E'#161#254#207#11 + +'R'#192#255#23#240#242'?'#254'!i'#1#19#177#247'u|'#223'|n'#228'/&'#215#218'{' + +'?i'#132's'#174#229#23'G'#4#236'}'#147#222';'#145'P'#31#171#253'J'#194'}'#178 + +'F'#169#239#222'y'#0''#233#254#156#209#193#231'W%'#1'd'#12'"Y'#136'.'#178'!' + +#1#152#5#151'0'#247#128#210'y'#2'm'#186#212'u'#146#184#241'p'#222'X{0^'#185 + +#149#145#236#215'@-'#155#4'H!'#6#9#196#157#13#201#7#144#136#128#1#191')$'#10 + +'+$ '#11#147#138'h'#6#156'N,'#145#130'\'#162#6'V'#27'x'#26#17'8'#221#137'rG;' + +#240#202'^'#196''''#220#177#147#184#149#249#225#135'+'#167'i'#140'{'#175#244 + +'6'#167'<'#23#0'WO'#0'~^'#150#248#202#22#239'8N>c'#239#187'v'#191#149#252#139 + +#18#240'Y'#19#152'N'#213'd'#251#167'j6'#220'b'#130'@'#179#15'+'#241'3=__''' + +#154'<'#190#210#234#223'!'#149'?'#205'm'#147'@]'#210#235'd'#248#245#165#178 + +#15#222#254'G'#146#215#255'H4'#129'}8'#252'666'#206'<'#248#237#253'9'#227#195 + +#146#128#18#159#128#146'2b"'#130#21'h'#2#146'%h'#178#5'9Y'#136'$r'#155#192 + +#211#160';'#23'''Y'#212#184';'#236#189'6Kk'#29'S'#0'd'#27#140#8#184#163#214 + +#26#19'APo'#21#17#1#167#138#208's'#251#10'<'#137#8#220#148'b'#153#194#220#134 + +#14#205#196'%'#165')'#204#202'k7'#132'h'#230'4'#176#135#14#132#20#143'n:<' + +#151'q'#152'*o'#156'v'#246#144#145#236#230''#249#146#216#189'~'#157#14#227 + +'I'#230#158'!'#2'k'#227'/Q'#247'S'#145#248#2'|'#181#208#149'|J'#236'w'#215 + +#222'7'#206'?E'#251#147#254'=5'#221#189#173#19''#210'%*?}'#209#229#198#224 + +#189#149#198'h'#199#203'MI'#143#14#243')'#1'?'#173#199#180#223#151#154'~4k' + +#132#196'GE'#31#182#183'I('#161#145'''{'#251#201'\=s'#14#191'e'#227'<'#16#128 + +'=OC'#2#251#251#251#17']'#228':]x'#174#29#136#162'h'#157#246'a'#6'\'#18'''' + +#225#134#212#14'th'#27'}'#4'b'#210#0#162'G'#195#206'K{U'#147' '#212#201'C' + +#138#171#11'#U'#235']S'#245#181#27#156'M'#200#14'@'#199#4#0#1'(''Dh'#136#192 + +#148#24'+'#153#181'X'#249#229#198'#'#182#21'Y%'#179'P'#231#15'-'''#3#207#209 + +#255#139#222#4#166#151#161'{UN'#136#4#170#143#176#19#182'+m'#229#5'Y'#149'Cx' + +'N'#165#158#27#198'3N='''#150'oA'#159#154'm'#0'>#b'#0#160'u'#17#143'Z'#20#13 + +';'#173#199'?IJ>'#0#132#0#147#209#158#154#236#252'D-&'#131'B'#213#135#169#128 + +#207'pU'#254#238#238'O'#234'^2'#245't'#229'@'#213#211'?'#147#22#222#168#234 + +#219'q'#193#15'O'#24#134#232#235#223'_,'#22#227#25#141#243#2'~'#140#243'B'#0 + +#246'\'#221'<'#1'8'#252#232#194#183#232'p'#143'.'#254#186'8'#7'A'#4#156',' + +#132'V'#227'$'#129';$u'#27#180'_#'#240'E'#131'i}'#237#193#164#247'j'#150#235 + +#249#7#180#147'0`'#21#222#244#16#132'Y'#208'X{'#133#139#138#188#208#137#6#200 + +#220#3#134#8'4q'#4#162#29#136'&`{'#13'8]'#137#131#138#163'P'#8#161'hF"'#19 + +#152#28'H76'#161#195#162','#185#240#15'T='#3'G'#200'1'#248#160'%'#203'y^yi' + +#25#240'z'#229'4'#218'TE|'#159'%'#189#153'l'#195#190#230#160#154#207#246'~' + +#154#149#218'r+'#150#250#153#6#173#0'_'#137'='#175#164#131#143'2'#4#144'h' + +#239':''u'#231']5'#239'?'#210#173#186'L'#26'p'#146#10#209'h'#149#31#149'|' + +#151'['#253#187'P'#249'9'#188#143#254'}'#160'!m'#239#219#24#191#1#191#210'e' + +#189#15'e'#198#222#199'R'#207'? '#1'4>K'#25'~G'#29#231#137#0#236'9'#155#180 + +'a'#218#142#26#141'F'#13#17#2#164#7#27#231#160'8'#5'/'#217#218#1#29'&'#132's' + +#176#6#147' Sa'#252'h'#220'~'#169'?onz@'#166#137#20#216'f!Z'#226#195',h'#192 + +', B'#176'R'#223#1#188'Bd '#22'B'#16'M@9'#25#132#214'I'#24'>A+8'#204'GP'#154 + +#242#188#186'v:'#26'['#13#193#161#130#165#190#130'CB'#143'O'#200#187#183#160 + +'.%'#224#23#26'H.'#234'})Q'#199'%'#0#215#147'/'#158'}'#163#226#219'p'#158'q' + +#240'Y'#208#167'b'#231';'#158'}l'#11#192#181#202#175#215':'#175#223'8'#2'%vO' + +#235#217#222'}5'#222#131#186'?'#211#199#229'3y'#157#167'"'#245#147#201#149 + +#230#254#237'f<'#27'z'#26#247'8'#15#146#250'%{'#223'&'#248#208#178'C'#210#254 + +'1'#9#153'G'#210#213'g'#155#128#191'K'#160#31#160#149#23#13#152#8#231#10#252 + +'K'#158#138's3,'#9#208#197#15'k4'#200#12'h"B'#16#4#193#170#227#23#128'F'#0#18 + +'X'#5'A B &A'#148#19#196''''#139#176#253'p'#178#242#202','#141'ZE'#235#240 + +#162'('#200#147'9'#10'k'#221'+'#170#182'rM'#5'h'#162#17#154'y'#8#3#199#28'pM' + ,#3#9#17#134'RK`'#10#140'l'#14'A Z'#129#201'$t'#218#146'U'#137#160'j*'#148#202 + +#146'+'#21#137#21'G'#162';'#242''''#146'A'#165#216'f'#217'c'#235'Jw'#222#168 + +#172'e;7'#137'<'#153#27#190'3'#137'<'#142#164'wc'#249#2'|'#29#203'/'#192#175 + +#137#192#9#241#217't^'#13'r'#237#3'H'#10''' -'#139#225#14#219#249#9#171#251 + +#186'I'#167#146'L>'#179#246#232#207'j}t'#189'1x'#228#177#180#207'3'#147#214 + +#171'$'#190'O'#203'\j'#249#135#226#233#135's'#15#210#30#249#252'['#178#191'O' + +#207#220#160#223#239'O'#187#221#238#156#8' =o'#224#175'>'#9#231'm'#148'J'#137 + +'I'#19#136'%u'#152#157#131't'#140#181#1#144#0#250#11#210'z'#141#253#2#202'k#' + +'}'#152#182'czDc rw'#218#186#180'=m_'#207'H'#164#235#226#31#237'$'#132'fP' + +#168#249#145#170#181'/'#169#6#17#129#31'7'#180#244'7j'#191'k'#14#24'@'#224 + +#164#17#187#166#129#201'!p'#29#133#198'<'#176#4#224'W'#18#139#180'G'#192#246 + +'.'#180'='#11#141'iP'#152#3'n'#194'Q'#217';'#239#29'XU"s'#202'Az'#217#181#144 + +#187#161'='#137#215#231'y'#197#214#151'B'#29#163#226'gy'#145#167'oSu'#139')' + +#183'\'#201'_H'#253#20'M5'#197'VO-'#9#184'a'#190#220#170#251#198'!H'#18'' + +#184#173#166'{wU:'#27#22'f'#129#11'~'#241')'#180#162#217'.I'#253';'#152#156 + +#211'C/`}n'#172#242'+'#221#187#207#228#244#143#140#167#159#182#183#197#219 + +#191'Ej'#254'6'#9#24'h'#2'}'#147#215#239#244#241'3'#192'?7'#224'w'#30#135's;' + +','#9#16#1#4#8#19#18#27#195'9'#216#154#205'f=h'#3#244''#244#26'D'#171'1h'#2 + +#240#11#160'r'#144#211#135#17'% '#192'D'#244#17'A'#146#249#241#163'I'#247#230 + +'`'#214'X'#247'l'#241'O'#1'^?0 '#142#184#166#0#206'B'#244#211'3'#166#0#167#13 + +'['#208#23#161'A'#27'!'#136#180#244#207#131#224'@wb'#235'#p*'#15#11'"P:'#164 + +'h'#211#139#165']'#153'*L'#4#151#24#150'^"'#175'r'#197#170#26#192'!'#14#190 + +#18#15#184#245#246#216#204#242#146#189'o5'#0'7W'#223#128#221'z'#244#141#202 + +'/'#246'~'#166#167#219'V'#226#228#179#128#183#29'{'#202#224#183#197'='#236 + +#253'_'#168#217'`K'#205#246#239#17#240#199#146#16#148'X'#147#1#251'J:'#246'D' + +'^2'#187#212#26#220'n'#215#166'}'#248#28'<'#143'U~V'#252#233#146#177#163'Oz' + +#247'Me'#178'Nk'#239'C'#237#151#153'{9'#190#15#149#159#20#206'1b'#252#245'z' + +#29#164'a'#234#249#237'U:O'#227#188#19#128#249#13'H'#24#194#154'#'#4'p'#14#18 + +#1'4E'#27'X5'#190#1'!'#1'6'#9'h'#191#7#191#0'm'#195'A'#8'm'#128#222#231#251 + +#163'$'#238'>'#28'uo.'#178#168#233#154#5#202'I+V'#226''''#136#219#27#170#222 + +#187#174#130'F'#235#160#212'7'#170#191'C'#4#134'L'#148'K'#2#2'z'#229'U'#157 + +#133#14')x'#166#10'Q9~'#130'J7cq$'#30#152#241#232#176#154#3'[m'#231#188#196 + +'m'#180'a6'#189'B+'#240#158#2'zW'#213#247'*'#222'|'#29#215#207#172'Df'#7'`R' + +#168#251#158#1'}'#226'H~'#163#13'd'#134#8'2'#142#223#207#6#143#24#248#217'bb' + +#237'~'#227#216#203'\u'#159#132#252'J}'#252'p'#179'9x'#224#209#142#199#165 + +#130#224#29#218'f%'#198':'#250'f'#210#187#207't'#238#133#167#223#130#31#19'v' + +#160#137#7#254#143#254'}'#163#209'h^'#241#244'+u'#14#193''#200#147'q.'#135 + +#141#16#160#156#248#214#173'['#225#214#214'V'#141#14#213#137#173#17'*'#236 + +#145#250#134'b'#162'u''u'#24#251#200'#hC'#27#160#237#26#251#6''#199#245'3'#201#231#183'R'#159#22#19#226'c'#149#31#160#199#2 + +#149'_'#8#1#29'|'#198#244#182')'#217#253' '#140#132#180#206#236'<'#132#249 + +#142#4#156#23'h'#176's'#240#219#223#254'6'#251#5#232#166'E'#4#234':'#28#132 + +'259'#155#4'XD'#27'0$'#208#165#183#146'>'#175#26#4#167#24'f'#1#129'='#160#199 + +'%'#220#157#183'6'#247'&'#173#203#137#10#226#3'D'#224#23#246'>4'#130#176#209 + +'!'#173'`'#147#8'a]'#249'a,m'#198#140#3#240'0'#167#224'!'#5'F'#146'3'#224#149 + +'|'#3#166#23'A1'#169#137'%'#2#153#224#196'LuV'#10#18#10'7'#148#156#132#14#3 + +'xF'#210'Wd'#153#145#246#7#28'{N'#252#222#149#252#182'B'#207#237#200'c'#192 + +'/'#132#160'\'#167#159#149#242#142#211#207#233#224#131#255'-'#166#251'j1'#220 + +#162'e'#155'I w'#205#128','#147#150'_'#236#220#195'~'#222#138'g'#187#27#141 + +#193#131'Z'#184#152#150#212'}'#199#214#151#182']'#166'c/l'#249'}i'#226#193 + +#158'~Z?Fl'#159#164#252'>='''#3'2/'#199#244','#205'{'#189#30#192'n'#237#253 + +#165#128'9'#237#19'8'#166#223'T2'#9'h N'#211'diO'#128#167#155'j'#137'@'#204#3 + +#236#19#9#168#14#1#174'A'#251'u:'#30#25#179#128'@'#21#236#205'Z'#27#187#227 + +#230#229#133#10#235#218'F'#247#203#211#141#17#1'('#223#183'ZA'#173#177#170'"' + +'"'#131#176#185#162#163#4#230#181#142'3'#208'H~'#255'0-'#192#152#8'&'#147#208 + +#248#7#248#23'V2'#12#221#28#130#220#137#12#8#27#152#196#220#131#209#130'Jz' + +#174#167#172'j/'#255'V'#226#245'+Iyc'#227#27'{'#223'4'#227#176'Z'#128#1#186 + +#172#165#192#166't'#220'M'#237'u'#215'('#203#157#13#31'3'#240'S'#132#242'2''' + ,']W'#166#220#206'e'#209#192'O'#243'vm'#182#189#217#24'>'#140'|H|'#28#23#191 + +'>'#171#251#220'%'#208#205#232#227#240#30#242#249'i'#189'/'#237#187#182#205 + +'"'#206'?'#28#199'k'#166'F'#229''''#205'2;'#207#246#254'a`y'#17'G'#201'$@' + +#168#176#213'j'#197#2'lT'#12'v'#197#25#184'J'#140#143#232#0#22#248#5'D'#27'P' + +'-!'#2#152#5'a'#206'd'#128#174#225#190#191'7k'#174#237#142'[W'#230'y'#216#176 + +#206':'#3'|'#207'H'#242#162#2#17#154'@'#212#222' '#173'`C'#5#141#142#227#252 + +#11#184#231#160#231'8'#2#139#168'@u'#10'3'#207#2#222'F'#5#2#209#4'\'#237#192 + +#151#144#161#149#252'U'#7'`%'#159#192#12#183#149'6'#239'+'#235#28#176#213'zF' + +#229'O'#171#234'~&fA'#230'T'#234#21#206'?~'#189#209#0'*a'#191#18#9','#230'j6' + +#218'f'#208''''#211'A'#161'!'#152'L@'#199'l0}'#0#16#210#235#198#147#199#27#4 + +'|x'#246'M'#190#241#19#212'}k'#235#211#210#151#238'='#12'~'#186#207#144#254 + +#216#222#15#130#128#19'{h'#153#145#244'_ '#196#247#162#168#252'K'#129#242#2 + +#15'k'#18' J'#128#178'b'#186#185'54'#25'!R@'#227'Q'#152#5'+ '#1#133'Y'#137'5' + +#9'@'#27#232#209#210#17#179#160#238'{~Lk'#16'A'#8'"'#240#9'}'#251#179#250#234 + +#206#164'ue'#150'!'#135#192#128#177#144#218#5#176#3'K'#10'a'#212'Tq'#7'Z'#193 + +#154#10'j'#141'2'#184#157#210'bo'#9'!'#184#9'C'#133#25#224#21'~'#2'''R`o'#173 + +'u'#11'H'#180#192'M$'#146'W'#185'~'#128#210#172#185#178'*'#194'}'#174#244#207 + +#156#233#180#225#240#203'd'#178#205#138#183#191'*'#245#179#188#18#1'H'#212'b' + +#178#175#230'P'#241#199#187#156#216#147';6'#189#251'~K '#244'}>1B'#183'6f' + +#224#7#200#15'6'#192#231#138#221'2'#240#149#6'?'#128#143'N'#189'#'#201#229 + +#223#23#240#195#185#135#25'y'#25#248#240#240'+M'#14#211'N'#167'3G'#3#143'7' + +#223'|'#243#133'R'#249#15#0#228#180'O'#224#132'~#'#155#4#208#6'h;Z]]'#141#160 + +#13#200#140'D0'#11'z'#162#17#172#233#244'aM'#4#180'&'#18'Pm'#186#235#220'l'#4 + +'&'#129'o'#136' '#131'F'#224'y'#195#164#209#219#153'4/O'#211'Z'#7#200#180#192 + +'tH'#160'4'#231#128#152#0#232'I'#16#212'z*jt'#201#168#232#210'~'#173#210'[`I' + +#231'!G'#213'/'#171#254'x'#173#18#159#128#241#234'{'#182#152#168#8#4'x'#149 + +#181'*7'#222'PE'#218#190#178#13'8'#157#146#221#204#13#241#21#234#190'w'#192 + +#23'P'#201#233'7'#145#0#2'v2'#27#170#20'v'#253#164'O'#219#131'"'#219#207'x' + +#239#197#137#231#153#254'~v;'#231'p^'#167'6'#217'^'#175#143#182'|'#143'sy' + +#213'2'#224';'#237#185#173#147'O'#233#9':'#160#214#239#25#240#3#248'$'#12#246 + +#200#222#135#3#16'z'#254#132'l'#253#217#139#230#232'{'#26'8>,'#227#128'6P' + +#171#213'bz^0G'#22#166'*G'#159#129#30#28#133#240#17#28#212#6'T'#211#152#5#4 + +#180#18#17'(.'#25#11#163#253'yc}0k'#172#205#210#168'Y'#0#180#172#198#27#245 + +'>'#247#202#196#0'B'#8#27'+*'#170'wT'#0'B'#128#19#209'!'#0#27#14#148#162#162 + +'jc'#210#146#9#224'4"'#177'w'#185#218#140'D'#194'~n'#233'n)'#12#232'j'#2#198 + +#9#232#168#251'n'#184'/'#207'+I?yA'#0'H'#206'I'#166'}'#150#244#201'tH'#255'J' + +#10''' '#155#20'i)4'#200'Q'#0'K&'#184#184'Y'#138#4#158#149#218'x'#167#25#209 + +#135'i'#204#231#154#160#24#248#0'<'#235#252'b'#231'/*'#234#254'H'#226#250#198 + +#214'G'#136'oW'#188#251'}'#186#215'C'#168#251#176#245'www'#23'd'#231'sl'#255 + +#19#159#248'D'#254#162#131#223'yB>4'#163#164#13#192'7'#176#178#178#18#17#25 + +#208'f'#204'}'#6'h'#1#216#225'(\1'#218#128#210#26#2#250#18'"'#164'h'#136#0'Y' + +#132'1a.'#160'g=dg!'#20'r'#210#11#166'i'#220#216#155'5'#215'G'#179#218'Z'#162 + +#130#200'S'#5#25#20#146#220#169#7#240#141#243#207#28#15#148#31'7Y;'#8#226#22 + +'}B'#131#9#130#29#141#202'5'#3#156#181#141#18#136#170#159#171#194'$'#200#171 + +#209#1'U'#16#130#155#244#227'6'#222'4'#7#149#201#4#212'$'#192' u'#18'}'#12 + +#232#177'dp'#188#211#146'/'#198'l'#199'c'#201#200'4/'#1#190#186'm'#181#137 + +#204#250#20'`'#195'7'#195'y'#191'S'#159#236't'#163#233#158#199'I'#5'b'#143 + +#232#188#131'Ll|l'#1#244#236#224's'#128#143#134#29'#'#153#153#135#195'{'#198 + +#222'7'#14'>'#216#249't'#175#199't'#159#167'('#224'[b'#235';W'#224#197#29#31 + +'6'#2#176#191#217'h'#3#155#155#155#254't:'#13'1S1'#252#3'0'#11#232#223'-'#178 + +#7#225#12'D6'#225#138'8'#7'W'#196'y'#168#157#132#158#215#164#199#177'A'#159 + +'V;@'#4#30#224#166'Q:'#152#215#187#253'Yc}'#148#196'+'#185#22#233'V'#133'7)' + +#191'E'#135#225#162#243#176'K'#8#185#152#0#164'x'#16#25#212#153#28#130#176 + +#206')'#201'>'#214'd>'#148#10#139'J'#191#244'`'#219#242'"G'#160#236#237#247 + +'Jf@^$'#7#25'3'#1#248'K'#209'H'#19'@'#159'p'#197']'#150#152#245#212#206#198 + +#163#242#195#0#15#252'f%'#147#1#239'1'#251#181'`1&'#21''#167'GK'#232#193'!' + +#160'L'#237'0'#147'B'#154'iu'#223#177#241#171#18#223#216#249#3#1'?'#146'w'#0 + +'~^'#144#194'K'#210#30#197';'#172#238'w'#187#221#217#214#214'V'#226'x'#248'_' + +'X['#255#176#241'a$'#128#210'o_f'#22#208#225#26#217#130#28'6$'#2#128'F'#208 + +'s'#23#209#6#208'k'#160'm'#136#128#128#140'(CL'#251#16#211'Rc'#204#157#238'|' + +#180'*O'#9#206#251#179#198#234'h^'#235'M'#211#168#157#230#162#25#24#199#158 + +'r'#10#131'J'#132'`'#156''#190'>ig'#187#152#199#16']'#144#27'*'#8'"q:'#134 + +'tX"'#17#158#164'"'#243#233#232#181'/Z'#134#150#190#137#216#218'R)'#151'9' + +#139's'#28#146#28#18#158'_'#207#225'7'#7#196#182#196#183#240#1#184#0'W'#165 + ,#130' 1#8T'#167#242#154#191#24#213#163#249#176'G*>Zn'#23#17#8#145#246'8'#3#2 + +'>x'#18#206'}''o'#223#134#244#164'K'#207#184#2'|'#187#208'=d'#224'#'#172#135 + +'L>"'#2#246#238'#'#149#151#8' '#251#176'I}w|'#152#9#192#140#3'f'#1'B'#244'p' + +#196#198'QH'#255'o'#9#216#187#244' '#245#184#150#128#136'@4'#2'v'#20'*'#204 + +'T'#164#188':4'#2')4'#10#173'V'#224'#'#29'E'#251#10#176#13#208#18#9#212#137 + +#12#186#147'E'#220#157'$q'#139#224#16#26'S'#161#232''''#232';'#205'D+'#246 + +#190#152#2#150','#148#155'*l~'#150#252'@.'#30':$$'#232#216#255#182'EW'#169'1' + +#191#201#250'S'#165'\'#0'['#221#167#138#148'`'#6'u'#166'T'#158'/'#7'<'#214 + +#181' '#25#215#131#249#176#25#207#251#237'h6'#242#149'8'#243'<61'#140'moA' + +#175't'#202'.'#24#133#213'|Y'#230#198#179'oT}'#19#211#151#5#158#254'>'#128'O' + +'D>'#140#162'h'#12#137'O'#199#167't'#23't<'#249'0'#170#251#203#198#5#1#20 + +#195's'#205#130';w'#238#4#198'?'#128'9'#7#232'!B'#205'@'#203#241#19#244'$' + +#140#200'k'#248#7#20'"'#6'9W'#26#214#161#209#18#216#17'm@BQ'#24#248#30#200' ' + +#160'c>'#180'^F'#165'/'#229'<'#244'wL$@'#132#208#153'.'#162#206'4'#141#219 + +#153#14#8#138#237'^T'#4#22'e'#194#170#168#10'T'#254'R'#240#219#191'U'#207'' + +#241#207'J'#246'_'#197#7'`Gn'#205#0#3'z'#183#145'g'#225'G(^g'#0#31#251#201 + +#164#22#206#135#173'h>h'#147#164#15#252'4)^c'#153#197#128'^Y'#21#255#160#180 + +'/'#169#250#144#248'p'#224')'#1#187#164#242#150#164#189#1'~'#171#213#154#141 + +'F#'#246#236#147#169#151'~X'#213#253'e'#227#130#0#202#227#128''#192#16#1'=H' + +#28':'#164's2'#17#173'['#244#0#162#216#168'+'#26#129#171#13#176#143#0#175 + +#229#228'#'#223#135'Ya'#200' 8@'#6#128#174#158'`'#132'a'#142'|<"'#132#246'x' + +#17#183#146'4'#168#207#179#176#190'H'#131'Z'#170#160#219'k'#251#221'8'#245 + +#140'K'#191'T'#13#184'$'#239#223#141#8#228#203'~t5'#20'h'#134'['#251#239#185 + +#210#221#253#191#6'n'#228#167#211#208#207'fQ'#144#204#234#225'bL'#18'~'#16'.' + +#3#188#233#18'"'#182'C'#174''#145#168#248'E'#214#30'-'#11'g'#218'-'#171#234 + +'+'#157#190#203#224#167'{'#224#18#192#144'#'#179'I'#194#210#254#2#248'O'#31 + +#23#4#176'|,%'#2'Z'#135#244'@'#177'F'#0'`'#211#186'I*f'#139#236'J'#214#10#132 + +#16#12#9'X"@'#19#18#218#6'y'#212'@'#6' '#2#218#14#133#12'|'#218#151#194#2#206 + +#177#169#16#130#178#128'N'#179' '#154'fQm'#158#16')'#164'!'#19'C'#146#250#181 + +'E'#22#214'r'#195#2'y'#17#247#207#221#219#235#29#248'y2'#242#165#155#252#170 + +'R'#11'0'#253'7'#240#178'E'#236#167#179#200'O'#166'Q'#152#206#226' '#153#214 + +'BZ'#252'd^'#10#31#28#4#188#212#222#235#20']Ro'#178#220#168#19#185'JM'''#30 + +'U'#150#246'('#207#157'J?>'#11'|'#168#251't'#157#135#0#191#0#30'j>&'#221#132 + +'I0E'#6#159#249#172'%'#192'_'#242'K?'#188#227#130#0#158'<'#150#18#1'|'#4#237 + +'6'#201#183#217#140';'#20#19#1#160#203#144#169'5h'#201#186'm'#246#141#198#0 + +#243'@i'#13#2#4#2'2`"'#144#133#181#2'!'#4#175'B'#8#162#229#235'F'#0'E*'#191 + +#201#243#247#2'"'#129'('#205#252' '#205#149#159#229'~'#0#19'"'#203#184#160')' + +#160#181#143#207'&'#158#241#233'8'#142#249'x'#15' '#233'{y'#202#139#162'Wy' + +#10#219#153'g'#142'y'#244#137'~'#158#6#4'N'#218'N#?K0C'#14''#181#237#249#167 + +#247#204'1}Z'#185#20#11'j'#213#222#145#240#12'B'#237#197#183'q{+'#237'Mi'#174 + +#210#192#159'HW'#158#145'*'#128#15#169#143#184'='#239#147#186#143#10#189'1' + +#173'!'#241#209#140'snl'#252'G'#143#30'e'#23#192''#250#184' '#128#163#13'K' + +#4#223#253#238'w=4%'#5#25#208#161#144#164'N'#212'l6'#1'd'#214#10#232#129'lxz' + +#174'B'#180'('#3#240#153#4'h'#223#144'C'#211#209#10'jB'#6#136#30'DJG'#16't' + +#20'A'#19#2#242#10#8#139#220#2'Dr'#130#217'y^'#164#249#225#143#239#219'm'#140 + +#220'sN'#250#224#207#240#14#252'#?'#176#225#202#240#138#242' '#249#0'z;/'#210 + +#133'9'#25#152#147'!3'#237'P'#212#21'x'#158#199#217#3'.'#224#233'X"'#221'vy' + +#150#29#167'@'#7#224#7#152'a'#223#143' '#229#165' '#135#215't|'#4#208'C'#210 + +#3#244#240#230'c!'#2'^'#192#171'O'#199#211#11#224'?'#219#184' '#128'g'#27'%"' + +'@'#212#224#210#165'K>I'#164#144#30'D&'#3#180''''#4#168#145'a'#8'2'#192#2'2P' + +#152#202#220'Y'#132#8#140'i'#192#230#1'k'#5#30';'#14']B`2'#160'c'#1'b'#8#162 + +#29'0'#17#152#22' '#24'y'#145#223#167'r'#183#11'`'#165#17#192#129'y'#9#151 + +#254'J'#227#225'We'#253'_)'#227#164#211'h'#215'L$'#130']'#25#231#157#150#242 + +#136#238#231'6Vo='#248#6#240'R'#142'k'#194'x'#0#255'd'#137#212#231'E'#18'vX' + +#189#23#21''#14#208'c'#166']'#196#241'WVV2x'#245#137#148#243#11#224'?'#219 + +#184' '#128#247'7l^-'#194#135#244#16'z'#198'<'#160#135#18#128'E'#143'B6'#17 + +#224'/'#160'}'#16'B'#131#164#22#8#129'5'#0#172'}'#157'Q'#216#144'F'#165'L'#4 + +'R'#177#200#239#177'D'#160#29#136#161#199'A}'#144#129'v '#210#182#246#31'(]' + +#151' '#219#170#152'}'#132#165's'#209'4'#200#156#244'!, '#160'Vy^v'#3'j'#183 + +#164'W'#184#253#10'U>7'#157't'#217#129''''#222'{'#165#165#188#5#190'S'#207 + +'^|'#165#165'=/p'#236#161#209#6#253'~'#168#243#19#172'%'#166'?!'#160'c'#31 + +#196'0C=>'#169#247' '#142#132#142'!y'#7#128#207#156'8'#190#156#253#5#232#159 + +'e\'#16#192#7#27#150#8#240#0#186'Z'#1'I'#168'`gg'#7'R;'#132#137#0#243#20'd'#0 + +'p'#139#218'_'#23#240'#'#215#192#128#159'5'#2'G30D`4'#3#215'g`'#9'Ai'#13#1'$' + ,#16'pI?'#231#28's'#242#156'''`'#247#12#17'('#19';8D'#19'p'#192#207#0'/'#8'AK' + +'~'#165'{'#230#27#213'>'#173#0#222#196#233#141#138'o'#156'y'#0#191#241#228'O' + +#5#220'v'#27#199#1'~'#243''#168#245'x}'#20'Es'#0#31#210#30#234'='#17'jz'#227 + +#198#141#20#160#135#180'w'#242#245#249'|O'#251'a8'#143#227#130#0#158#223'8' + +#160#21#12#6#3#175#211#233#4#180#248#244#0#179#153#0'I'#14'S'#129#30#234#152 + +#30'n'#164#31'C'#202#215#232'X'#141#142#25'S'#192#152#5#150#4#232#189#186'eY' + +#161#21#132'UBP'#154#20'x'#246'$!'#4#156#147'/'#224#247'DK'#176#219#149#243 + +#182#170#188'2'#210#221#181#225's''>/'#210']z'#234#25#208'/'#28#208'W'#213'|' + +'+'#245'E'#221#231#181#144#194#12'*=IwH'#249#5'@O@_'#200'g&'#0'=T|c'#219#11 + +#232#205'y'#186#235#139#241'>'#198#5#1#28#207'Xj"'#208#218#7#25'@3'#160#7#157 + +'M'#5','#4'nL'#142#233#206'"'#151#16'|'#157'?`4'#6#248#22'P'#189#24#11#17'D' + +#134#16'@*'#244#186'RD'#1'D@'#175'E'#196#194#19'2`"'#192#182#28#243#212#146 + +'x`'#201#142'/'#0#159#27#21'_'#21'j=7'#212#196'B'#223#195#192#167#207#157#211 + +#246#1#2#192'B'#191'k'#230#2#158#200#14#210#29#239'Y@'#194#131'H'#232'xj$' + +#189#1'=]'#175#188#162#226#187#235#139#241#1#199#5#1#28#239#176#215#215'8'#14 + +#141'f'#0'3aoo'#143#9'!@i'#218'`'#16#192'l'#160#151#134' '#3#172'A'#8' '#7':' + +#206'k'#128#158'^'#202'k9'#30#154#227'J'#252#4#202'1'#13#180'I'#192'f'#128'o' + +'H'#0#231#148'!.X'#144'@q'#178#5#208'sQ'#237'-'#240#177#166#247'X'#201#175 + +#196#161''''#4#176'0'#251#134#0'd!<'''#6#228#144#236#176#223#23'Fk'#0#224#137 + +#3#210#181#181#181#148'~?'#212#250#140'L'#168#28#160#191'p'#232#157#204#184 + +' '#128#147#27#165'D\'#233'Y'#168'@'#8#208#12'n'#222#188#233'-#'#4#12#2'M ' + +#160#14#5#212'au'#219#172#149'&'#14#214#0'0'#0'v'#1'k6'#155#217't:'#205#232#156#243 + +'e'#18'~'#9#224#171#219#23#227#152#199#5#1#156#141'Q'#186#15#198'\'#192#182 + +'1'#25#8'H'#30'H'#129'H'#192'#py'#134#24#8#148#30#200#129#128#232#25'r'#160 + +'}'#143'@j'#23':'#206#128#199'6>'#19#219#4'V'#187#141#181#207#253'L'#148'"'#0 + +#27#192#243'>}/o'#155#133#190'?'#7#208#137'Dr'#128#156#190'+'#235#247#251'9' + +#129#222#2#29#146#189#221'n'#231#6#236#248#156#11#192#159#205'qA'#0'gsT'#239 + +#139''''#192'Q.1`'#13'r'#184'u'#235#150'7'#28#14'-9'#224'8'#8#2'k'#179'O'#192 + +#230'5'#8#3#235#245#245'u'#187'm'#6#128#140'5Iy'#11'J'#2';o'#3#220'X?~'#252 + +'8'#199'6@'#142#253'e@'#199#250#16#176'/'#219#191#24#167'8.'#8#224'|'#141'e' + +#247#235#0'9`'#24#130'0'#3'D'#177#236#3#161'Y`]'#175#215#15#0#211#128#218#29 + +#6#224#24#0'9'#214#135#0#253#176'c'#23#227#12#141#11#2'x1'#198#179#220#199 + +#163#190#246#168#224#189#0#249'9'#30#23#4'p1.'#198#135'x'#252'p'#251'ut'#3 + +#215#244'"'#0#0#0#0'IEND'#174'B`'#130'('#0#0#0#128#0#0#0#0#1#0#0#1#0' '#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1 + +#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0 + +#0#1#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#0#0#0#1#0#0#0#2#128#128#128#2'UUU'#3 + +'@@@'#4'333'#5'III'#7'@@@'#8'999'#9'999'#9'MMM'#10'FFF'#11'FFF'#11'FFF'#11'M' + +'MM'#10'999'#9'@@@'#8'@@@'#8'UUU'#6'333'#5'UUU'#3#128#128#128#2#0#0#0#2#0#0#0 + +#1#0#0#0#1#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#0#0#0#1#128#128#128#2'UUU'#3'UUU' + +#6'@@@'#8'FFF'#11'III'#14'<<<'#17'III'#21'EEE'#26'DDD'#30'DDD"EEE%AAA''DDD)A' + +'AA+AAA+AAA+DDD)AAA''GGG$FFF!DDD'#30'==='#25'@@@'#20'@@@'#16';;;'#13'FFF'#11 + +'@@@'#8'333'#5'UUU'#3#128#128#128#2#0#0#0#1#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#1#0#0#0#2'UUU'#3'+++'#6'999'#9'NNN'#13'CCC'#19'BBB'#27'GGG$' + +'DDD-CCC5DDD'#211'SC6'#219'W@0' + +#227'[>+'#235']<('#238'^<'''#240'_<%'#243'`<#'#245'a;"'#247'a:!'#248'a;"'#246 + +'`<$'#245'_<%'#242'^='''#240'\=)'#237'Z=,'#233'V@1'#225'RD8'#217'NG?'#210'JH' + +'D'#204'IHC'#204'HHD'#204'GEC'#203'FEC'#202'EED'#198'EED'#195'DDC'#190'DDC' + +#183'DDD'#172'DDD'#157'DDD'#138'DDDtCCC\DDDDCCC.@@@'#28'DDD'#15'III'#7'UUU'#3 + +#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#1'UUU'#3'@@@'#8'KKK'#17'HHH CCC5CCCPDDDlCCC'#134'DDC'#156 + +'EED'#172'FEC'#185'GFD'#193'GFC'#198'HFC'#202'IGD'#203'PE;'#213'VA0'#227']<(' + +#239'a;#'#246'd9'#30#254'g:'#29#255'g:'#30#255'i<'#30#255'j='#31#255'j>'#30 + +#255'k>'#30#255'l?'#31#255'l@'#31#255'mA'#31#255'nA'#31#255'm@'#31#255'l@'#31 + +#255'l?'#31#255'k>'#30#255'j>'#30#255'j='#31#255'i<'#30#255'g:'#30#255'f:'#29 + +#255'd9'#31#252'`<#'#245'[=*'#236'UA3'#223'MF?'#210'IHC'#204'HFD'#204'FFC' + +#203'FFE'#200'DDC'#197'EED'#191'DCC'#182'DDD'#170'CCC'#152'CCC'#129'DDDfDDDK' + +'DDD1FFF'#29'@@@'#16'III'#7'UUU'#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#1'UUU'#3'III'#7'@@@'#16'@@@ FFF7DDDRCCCoCCC'#140'DDC' + +#163'EED'#180'EED'#191'FFC'#198'IGD'#201'ME?'#208'UA2'#224'\<('#238'b9 '#250 + +'f:'#29#255'h;'#30#255'j>'#30#255'm@'#31#255'oB '#255'qD '#255'sF '#255'uH!' + +#255'|L#'#255#128'O$'#255#133'Q%'#255#136'S&'#255#139'V'''#255#143'X('#255 + +#145'Y)'#255#142'W('#255#139'U'''#255#135'S&'#255#131'Q%'#255#128'O$'#255'yK' + +'"'#255'tG!'#255'rE '#255'pD '#255'nA '#255'l@'#31#255'j='#31#255'g;'#30#255 + +'e9'#29#255'a;!'#247'Z=+'#234'RB5'#221'JGC'#207'HFD'#204'FEC'#203'FFE'#200'E' + +'ED'#196'DDC'#189'DDD'#177'CCC'#159'DDD'#135'CCCjBBBMBBB2FFF'#29'III'#14'UUU' + +#6#128#128#128#2#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'333'#5';;;'#13'BBB' + +#27'AAA3BBBQDDDqDDD'#142'EED'#165'EDB'#183'FEC'#194'HFD'#200'IFB'#205'SA3' + +#223'^;&'#242'e8'#29#255'g;'#30#255'j>'#31#255'mA'#31#255'pD!'#255'tG!'#255 + +'~M#'#255#141'W('#255#151']*'#255#160'c-'#255#169'i0'#255#178'n1'#255#181'q2' + +#255#182's3'#255#183't3'#255#184't3'#255#184'v3'#255#185'v4'#255#186'w3'#255 + +#185'v3'#255#184'u3'#255#184't3'#255#183't3'#255#182'r3'#255#181'q2'#255#175 + +'l1'#255#166'h/'#255#158'a,'#255#149'\*'#255#138'U('#255'zK"'#255'sF '#255'p' + +'C '#255'l@'#31#255'i='#31#255'g;'#30#255'c8'#31#252'[<*'#237'RC8'#218'IGD' + +#205'HFD'#204'EED'#201'DDC'#198'EED'#191'DDD'#179'CCC'#161'DDD'#136'CCCkEEEJ' + +'DDD-@@@'#24'FFF'#11'@@@'#4#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'UUU'#3'999'#9'FFF'#22'CCC*DDDGDDD' + +'iCCC'#138'EED'#165'FEC'#184'FEC'#194'HHD'#200'QC9'#216'[<*'#237'c8'#31#253 + +'g;'#30#255'j>'#31#255'nA '#255'sF!'#255'|M#'#255#141'W('#255#158'a,'#255#173 + +'k1'#255#181'r3'#255#185'v4'#255#187'y4'#255#189'{4'#255#191'~5'#255#193#129 + +'5'#255#195#131'5'#255#196#132'6'#255#197#134'6'#255#198#134'6'#255#199#136 + +'6'#255#200#136'6'#255#200#137'6'#255#199#136'6'#255#198#135'6'#255#198#134 + +'6'#255#197#133'5'#255#196#132'6'#255#195#131'5'#255#193#128'5'#255#191'~4' + +#255#188'z4'#255#186'x4'#255#184'u3'#255#181'q2'#255#168'i/'#255#153'_+'#255 + +#137'T'''#255'yJ"'#255'rE '#255'm@'#31#255'i<'#31#255'f:'#30#255'b9!'#249'X>' + +'.'#232'MD>'#212'HFD'#204'EED'#202'EED'#198'EED'#192'CCC'#180'CCC'#160'DDD' + +#132'DDDbCCCACCC&CCC'#19'@@@'#8'UUU'#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'333'#5'III'#14'>>>!DDD'#255#232#177'>'#255#234#179'?'#255#236#181'>' + +#255#236#182'?'#255#237#183'?'#255#237#183'?'#255#238#183'@'#255#238#184'?' + +#255#238#185'?'#255#238#184'?'#255#238#183'@'#255#237#182'?'#255#237#183'?' + +#255#236#182'?'#255#236#181'>'#255#234#179'>'#255#232#176'>'#255#230#175'>' + +#255#229#172'='#255#227#169'='#255#224#167'='#255#220#161'<'#255#217#157'<' + +#255#213#153';'#255#209#148':'#255#204#142'9'#255#198#135'8'#255#193#129'7' + +#255#188'{6'#255#183't5'#255#171'k2'#255#142'W)'#255'tH"'#255'nA '#255'h<'#31 + +#255'd7'#30#255'[:('#240'KD?'#211'GFD'#204'DDC'#201'EDD'#195'CCC'#182'CCC' + +#159'CCC}EEEUBBB2@@@'#24'999'#9'UUU'#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'333'#5'III'#14'BBB#EEECCCCkEEE' + +#145'DDC'#174'FFE'#192'KE@'#206'Z;)'#238'c8'#30#255'i<'#31#255'oB!'#255'|M%' + +#255#153'_-'#255#178'o4'#255#186'x6'#255#192#128'7'#255#198#135'9'#255#204 + +#142':'#255#209#149';'#255#214#155'='#255#219#161'>'#255#223#167'>'#255#227 + +#170'>'#255#230#174'?'#255#232#177'@'#255#235#181'A'#255#237#183'A'#255#238 + +#185'A'#255#240#187'A'#255#241#188'A'#255#242#189'B'#255#243#190'A'#255#244 + +#191'B'#255#244#192'B'#255#244#191'B'#255#244#192'B'#255#244#192'B'#255#245 + +#193'A'#255#244#192'B'#255#244#192'B'#255#244#191'B'#255#244#192'B'#255#244 + +#191'B'#255#243#190'A'#255#242#189'B'#255#240#187'A'#255#239#186'A'#255#238 + +#184'@'#255#237#183'A'#255#235#179'@'#255#232#176'?'#255#229#173'?'#255#226 + +#169'?'#255#223#165'>'#255#218#160'='#255#213#153'<'#255#208#147';'#255#202 + +#140':'#255#196#133'9'#255#190'~7'#255#184'v6'#255#173'l3'#255#145'Y+'#255'u' + +'H$'#255'm@ '#255'g;'#31#255'b7'#31#253'U>/'#230'IEC'#206'FFE'#202'EED'#199 + +'CCC'#189'DDD'#170'DDD'#139'BBBdCCC=BBB'#31'@@@'#12'UUU'#3#0#0#0#1#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'UUU'#6'KKK'#17'DDD)EEENDDDxDC' + +'C'#157'DDC'#182'GGC'#197'T=1'#225'a7 '#252'g;'#31#255'l@ '#255'wI$'#255#154 + +'^.'#255#179'o6'#255#186'x7'#255#193#128'9'#255#200#137':'#255#207#146'<'#255 + +#212#153'>'#255#217#159'>'#255#222#166'?'#255#227#170'@'#255#231#175'A'#255 + +#234#180'B'#255#236#182'B'#255#238#185'B'#255#240#187'B'#255#242#190'D'#255 + +#243#191'C'#255#244#192'D'#255#245#193'C'#255#246#194'D'#255#247#194'D'#255 + +#247#196'E'#255#247#196'D'#255#247#196'D'#255#248#197'D'#255#248#197'D'#255 + +#248#197'D'#255#248#197'D'#255#248#197'D'#255#248#197'D'#255#248#196'D'#255 + +#247#196'D'#255#247#196'D'#255#247#195'E'#255#246#195'D'#255#245#193'D'#255 + +#245#193'C'#255#244#192'D'#255#243#191'C'#255#242#189'C'#255#240#186'C'#255 + +#238#184'C'#255#236#182'B'#255#233#179'B'#255#230#174'A'#255#226#169'@'#255 + +#221#164'?'#255#216#157'>'#255#211#151'='#255#205#143'<'#255#198#135':'#255 + +#191'8'#255#184'w7'#255#174'l4'#255#144'X+'#255'rE"'#255'j> '#255'e9'#30#255 + +'_8"'#247'O@8'#219'GFD'#204'DDC'#201'CCC'#194'CCC'#178'DDD'#151'DDDqDDDGGGG$' + +'III'#14'@@@'#4#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'III'#7'@@@'#20 + +'CCC.DDDVCCC'#130'EED'#165'DDC'#189'LB='#207']7$'#244'd7'#31#255'j> '#255'qE' + +'"'#255#140'W+'#255#174'l5'#255#186'x8'#255#193#129':'#255#200#138'<'#255#207 + +#146'>'#255#213#155'?'#255#220#163'@'#255#225#169'A'#255#229#174'B'#255#233 + +#179'D'#255#236#182'D'#255#239#185'D'#255#241#189'E'#255#242#190'E'#255#244 + +#192'E'#255#245#194'E'#255#246#195'F'#255#247#195'F'#255#247#196'G'#255#247 + +#197'F'#255#248#197'F'#255#248#197'F'#255#249#198'F'#255#249#198'G'#255#249 + +#198'G'#255#249#198'G'#255#249#198'G'#255#249#198'G'#255#249#198'G'#255#249 + +#198'G'#255#249#198'G'#255#249#198'G'#255#249#198'G'#255#249#198'G'#255#249 + +#198'F'#255#248#197'F'#255#248#197'F'#255#247#196'F'#255#247#196'F'#255#247 + +#195'F'#255#246#194'F'#255#244#193'F'#255#243#191'E'#255#242#190'E'#255#240 + +#188'E'#255#238#185'D'#255#235#181'D'#255#232#178'C'#255#228#172'C'#255#223 + +#167'B'#255#218#161'@'#255#212#153'?'#255#205#144'='#255#198#135';'#255#191 + +'9'#255#183'u7'#255#167'g3'#255#130'P('#255'oB"'#255'h< '#255'c7'#30#255'X:' + +'*'#237'HFB'#207'EEE'#202'DCC'#197'DDD'#184'CCC'#160'CCCzEEENFFF(@@@'#16'333' + +#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'III'#7'FFF'#22'BBB2CCC\DDD'#136'DDC'#171 + +'EED'#192'Q?5'#219'a6'#31#252'f:'#31#255'mA!'#255'N'''#255#164'f3'#255#182 + +'u8'#255#190':'#255#199#138'='#255#207#147'?'#255#213#155'A'#255#220#163'B' + +#255#225#170'D'#255#230#177'E'#255#234#181'E'#255#237#184'F'#255#240#188'G' + +#255#242#189'G'#255#243#192'G'#255#244#193'H'#255#245#194'H'#255#246#195'H' + ,#255#247#196'H'#255#247#197'H'#255#247#197'H'#255#248#198'H'#255#248#198'H' + +#255#248#197'H'#255#248#198'H'#255#248#198'I'#255#249#198'I'#255#249#198'I' + +#255#249#198'I'#255#249#198'I'#255#249#198'I'#255#249#198'I'#255#249#198'I' + +#255#249#198'I'#255#249#198'I'#255#249#198'I'#255#249#198'I'#255#248#198'I' + +#255#248#198'H'#255#248#198'H'#255#248#198'H'#255#248#198'H'#255#247#197'H' + +#255#247#196'I'#255#247#195'H'#255#246#195'H'#255#245#195'H'#255#244#193'H' + +#255#243#191'G'#255#241#189'G'#255#239#186'G'#255#236#183'F'#255#233#180'F' + +#255#229#175'D'#255#224#168'D'#255#218#161'B'#255#211#153'@'#255#205#144'?' + +#255#196#134'='#255#188'{:'#255#180'r8'#255#155'_/'#255'wJ$'#255'j? '#255'e8' + +#30#255']8#'#246'LB<'#213'FEE'#203'EED'#199'DDD'#188'DDD'#165'DDD'#128'DDDSF' + +'FF,GGG'#18'+++'#6#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'III'#7'CCC'#23'BBB6DDDaCCC'#141'DDC'#174 + +'GDB'#196'V:+'#233'c7'#30#255'h; '#255'pC#'#255#146'Z-'#255#179'p7'#255#187 + +'{;'#255#196#133'='#255#204#144'?'#255#212#154'B'#255#219#163'E'#255#225#170 + +'E'#255#230#176'G'#255#234#181'H'#255#238#185'I'#255#240#189'I'#255#242#190 + +'J'#255#243#192'J'#255#244#193'J'#255#245#195'J'#255#246#195'J'#255#246#196 + +'J'#255#247#196'K'#255#247#196'K'#255#247#197'K'#255#247#197'K'#255#247#197 + +'K'#255#247#197'J'#255#247#197'J'#255#247#198'J'#255#247#198'J'#255#247#198 + +'J'#255#247#198'J'#255#247#198'J'#255#247#198'J'#255#247#198'J'#255#247#198 + +'J'#255#247#198'J'#255#247#198'J'#255#247#198'J'#255#247#198'J'#255#247#198 + +'J'#255#247#198'J'#255#247#197'J'#255#247#197'J'#255#247#197'J'#255#247#197 + +'K'#255#247#197'K'#255#247#197'K'#255#247#196'K'#255#246#196'K'#255#246#196 + +'J'#255#246#195'J'#255#245#195'J'#255#244#194'J'#255#243#191'I'#255#241#189 + +'I'#255#239#188'I'#255#236#184'H'#255#233#180'H'#255#228#174'G'#255#223#168 + +'E'#255#217#160'C'#255#210#151'B'#255#202#141'?'#255#193#130'<'#255#185'x:' + +#255#174'm6'#255#134'S*'#255'mA"'#255'f:'#31#255'a6'#30#253'R>4'#224'FFE'#203 + +'EED'#200'CCC'#190'DDD'#169'CCC'#133'CCCXAAA/CCC'#19'+++'#6#0#0#0#1#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'III'#7'CCC'#23'BB' + +'B6CCCcCCC'#144'EED'#177'JC>'#202'[6"'#244'c8'#31#255'j?!'#255'xI&'#255#162 + +'d2'#255#183'u:'#255#192#129'='#255#200#140'@'#255#209#150'B'#255#217#160'E' + +#255#223#169'G'#255#229#176'H'#255#233#181'J'#255#236#185'J'#255#239#188'K' + +#255#241#190'K'#255#242#192'K'#255#243#193'L'#255#244#194'L'#255#245#195'L' + +#255#245#195'L'#255#245#195'L'#255#246#196'L'#255#246#196'L'#255#246#196'L' + +#255#246#196'L'#255#246#196'M'#255#246#196'M'#255#246#197'M'#255#246#197'M' + +#255#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M' + +#255#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M' + +#255#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M' + +#255#246#197'M'#255#246#196'M'#255#246#196'M'#255#246#196'M'#255#246#196'L' + +#255#246#196'L'#255#246#196'L'#255#246#196'L'#255#245#195'L'#255#245#196'L' + +#255#244#195'M'#255#244#194'L'#255#243#193'L'#255#242#192'L'#255#241#190'K' + +#255#238#188'K'#255#236#184'J'#255#232#179'I'#255#228#173'H'#255#222#166'F' + +#255#215#158'E'#255#207#148'B'#255#198#137'?'#255#190'~<'#255#180'r9'#255#150 + +']/'#255'qE$'#255'h< '#255'b6'#30#255'W9*'#235'GED'#204'DDC'#201'DDD'#192'CC' + +'C'#172'CCC'#137'DDDZAAA/GGG'#18'333'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#1'+++'#6'III'#21'CCC5DDDbCCC'#145'DDC'#178'LB;'#206'^6 ' + +#249'd8'#31#255'l@!'#255#131'Q*'#255#172'k7'#255#186'z;'#255#196#133'?'#255 + +#205#146'C'#255#213#156'E'#255#220#165'G'#255#227#173'I'#255#232#180'K'#255 + +#236#184'L'#255#238#187'L'#255#240#189'N'#255#241#191'N'#255#242#192'N'#255 + +#243#193'N'#255#244#194'N'#255#244#194'N'#255#244#194'O'#255#244#195'O'#255 + +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255 + +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255 + +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255 + +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255 + +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255 + +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255 + ,#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#194'O'#255 + +#244#195'N'#255#244#194'N'#255#243#193'N'#255#242#192'M'#255#241#190'N'#255 + +#240#189'M'#255#237#186'M'#255#235#182'L'#255#230#178'K'#255#225#171'I'#255 + +#219#163'G'#255#211#153'D'#255#202#143'B'#255#192#130'>'#255#183'u:'#255#164 + +'f4'#255'yK&'#255'i=!'#255'c7'#30#255'Z8%'#241'GEC'#205'DDC'#201'CCC'#193'DD' + +'D'#173'DDD'#136'BBBYDDD-KKK'#17'333'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#1'333'#5'CCC'#19'BBB2CCC_DDD'#143'DDC'#178'M@8'#211'_5'#31#251'e9'#31 + +#255'lA"'#255#144'Y/'#255#179'r9'#255#188'}='#255#198#138'B'#255#208#149'D' + +#255#217#161'H'#255#223#170'K'#255#229#177'L'#255#234#181'M'#255#236#186'N' + +#255#239#188'O'#255#240#190'P'#255#241#191'P'#255#242#192'P'#255#242#192'P' + +#255#242#193'P'#255#243#193'P'#255#243#194'P'#255#243#194'P'#255#243#194'P' + +#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P' + +#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P' + +#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P' + +#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P' + +#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P' + +#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P' + +#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P' + +#255#243#194'P'#255#243#193'P'#255#242#193'P'#255#242#192'O'#255#242#192'P' + +#255#241#192'P'#255#240#190'P'#255#238#188'O'#255#236#185'N'#255#232#180'M' + +#255#228#175'L'#255#222#167'I'#255#215#159'H'#255#205#147'D'#255#196#134'@' + +#255#186'y<'#255#173'm7'#255#130'O*'#255'j?!'#255'c8'#31#255'[7#'#245'HDA' + +#208'DDC'#201'CCC'#193'CCC'#172'CCC'#134'AAAVAAA+@@@'#16'@@@'#4#0#0#0#1#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#1'@@@'#4'<<<'#17'CCC.CCC[CCC'#140'EED'#176'O>5'#213'_5'#30#253 + +'e9'#31#255'nB#'#255#151'\1'#255#181's:'#255#191#129'@'#255#201#142'C'#255 + +#211#154'G'#255#219#164'K'#255#226#173'M'#255#231#179'O'#255#234#184'P'#255 + +#237#187'Q'#255#239#189'Q'#255#240#190'R'#255#240#191'Q'#255#241#192'R'#255 + +#241#192'R'#255#241#192'R'#255#242#192'R'#255#242#192'R'#255#242#193'R'#255 + +#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255 + +#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255 + +#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255 + +#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255 + +#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255 + +#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255 + +#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255 + +#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#192'R'#255#242#192'R'#255 + +#241#192'R'#255#241#192'R'#255#241#192'R'#255#240#191'Q'#255#240#190'R'#255 + +#238#189'Q'#255#236#186'P'#255#234#182'O'#255#230#177'N'#255#224#171'L'#255 + +#217#162'J'#255#208#150'F'#255#198#138'C'#255#188'}>'#255#177'o:'#255#136'S,' + +#255'k?"'#255'c8'#31#255'\6!'#248'JC?'#211'DCC'#201'CCC'#193'CCC'#171'BBB' + +#131'DDDRAAA''777'#14'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3';;;'#13'AAA''CCCTBBB'#135'DD' + +'C'#174'N=5'#213'`4'#29#254'e9'#31#255'oC$'#255#156'`3'#255#181'u<'#255#193 + +#131'A'#255#204#146'E'#255#213#157'I'#255#221#167'M'#255#227#175'O'#255#232 + +#180'Q'#255#235#184'R'#255#237#187'S'#255#238#189'S'#255#239#190'S'#255#240 + +#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240 + +#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240 + +#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240 + +#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240 + +#191'T'#255#240#191'T'#255#240#191'T'#255#234#187'R'#255#202#161'G'#255#232 + +#185'R'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240 + +#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240 + +#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240 + +#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240 + +#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240 + +#191'T'#255#240#191'T'#255#240#191'T'#255#239#189'S'#255#238#188'R'#255#236 + ,#186'R'#255#234#184'Q'#255#231#179'Q'#255#226#173'O'#255#219#165'L'#255#211 + +#154'H'#255#201#142'E'#255#190#128'@'#255#179'q:'#255#140'V.'#255'l@"'#255'c' + +'8'#31#255'\4'#31#250'JC>'#211'CCC'#201'DDD'#192'CCC'#168'CCC~DDDKFFF!MMM'#10 + +#128#128#128#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#128#128#128#2'333'#10'@@@ EEEJCCC~EDD'#169'L?8'#208'^4'#30#253'd8' + +' '#255'pD%'#255#159'b4'#255#182'v='#255#194#132'C'#255#205#147'H'#255#215 + +#160'L'#255#222#169'O'#255#228#176'Q'#255#232#181'S'#255#235#185'T'#255#236 + +#187'T'#255#237#188'U'#255#238#189'U'#255#238#190'U'#255#238#190'U'#255#238 + +#191'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239 + +#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239 + +#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239 + +#190'U'#255#239#190'U'#255#181#144'@'#255';/'#21#255#21#16#7#255#9#7#3#255#2 + +#2#1#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255#7#6#3#255#17#14#6#255#31#25 + +#11#255'2'''#18#255'SB'#29#255#157'}8'#255#233#186'S'#255#239#190'U'#255#239 + +#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239 + +#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239 + +#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239 + +#190'U'#255#238#190'U'#255#238#190'U'#255#238#190'U'#255#238#189'U'#255#237 + +#188'U'#255#236#186'T'#255#234#184'T'#255#231#180'S'#255#226#175'Q'#255#220 + +#166'N'#255#212#156'K'#255#202#143'F'#255#190#129'A'#255#179'r<'#255#145'Y0' + +#255'k?"'#255'c7'#31#255'[4 '#248'IC@'#209'DDD'#200'CCC'#190'CCC'#163'DDDtCC' + +'CAEEE'#26'III'#7#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#1'III'#7'==='#25'AAA?CCCsBBB'#162'K?;'#202'^4'#30#252'c8 '#255'oB' + +'%'#255#160'b5'#255#183'v>'#255#194#134'D'#255#205#148'J'#255#215#161'M'#255 + +#223#171'Q'#255#228#177'T'#255#232#182'U'#255#234#185'V'#255#236#187'V'#255 + +#236#187'V'#255#237#188'W'#255#237#189'W'#255#237#188'W'#255#237#188'W'#255 + +#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255 + +#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255 + +#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255 + +#159'~:'#255#16#13#6#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#1#0#0#255#16#13#6#255'9-'#21#255'y`,'#255#208#165'M' + +#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W' + +#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W' + +#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W' + +#255#237#188'W'#255#237#189'W'#255#237#188'W'#255#236#187'V'#255#235#186'V' + +#255#234#184'U'#255#231#180'U'#255#227#175'R'#255#221#169'Q'#255#213#157'L' + +#255#202#144'H'#255#191#129'C'#255#180's='#255#145'X0'#255'j>#'#255'b6'#31 + +#255'Z5#'#245'GDB'#206'DDD'#200'CCC'#186'DDD'#154'EEEhBBB6@@@'#20'333'#5#0#0 + +#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'@@@'#4'GGG'#18'AAA3DDDf' + +'CCC'#152'IA>'#195'\4 '#250'c7'#31#255'm@#'#255#156'_5'#255#182'v?'#255#194 + +#134'E'#255#206#148'K'#255#215#161'O'#255#223#171'S'#255#228#178'V'#255#232 + +#182'V'#255#233#185'X'#255#234#186'X'#255#235#187'X'#255#236#187'X'#255#236 + +#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236 + +#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236 + +#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236 + +#188'X'#255#236#188'X'#255#236#188'X'#255'9-'#21#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#6#5#2#255'$'#29#14#255'ZH"'#255 + +#169#135'@'#255#234#186'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255 + +#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255 + +#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#187'X'#255 + +#235#187'Y'#255#235#186'X'#255#234#186'X'#255#233#184'W'#255#231#180'W'#255 + +#227#176'T'#255#221#169'R'#255#213#158'N'#255#203#145'J'#255#192#130'D'#255 + +#179's='#255#139'U/'#255'i="'#255'a5'#30#255'X7%'#242'FDC'#204'CCC'#198'DDD' + +#180'CCC'#144'CCC[AAA+III'#14'UUU'#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#128#128#128#2'@@@'#12'AAA''CCCWCCC'#140'GB?'#185'Z4!'#247'a6'#30#255'j?"' + +#255#151']2'#255#181't>'#255#194#133'F'#255#206#149'M'#255#215#161'Q'#255#223 + +#170'T'#255#228#178'W'#255#231#181'Y'#255#232#183'Y'#255#233#185'Z'#255#234 + +#185'Y'#255#234#186'Y'#255#234#186'Y'#255#234#186'Z'#255#234#186'Z'#255#234 + +#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234 + +#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234 + +#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255'C5' + +#26#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255#20#16#8#255'K;'#29 + +#255#189#150'I'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z' + +#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z' + +#255#234#186'Z'#255#234#186'Y'#255#234#186'Y'#255#234#185'Y'#255#233#185'Z' + +#255#232#183'Y'#255#230#181'X'#255#226#176'W'#255#221#169'T'#255#213#159'O' + +#255#203#145'K'#255#190#129'D'#255#178'p='#255#134'Q-'#255'g;"'#255'`4'#29 + +#255'U7('#238'CCC'#202'DDD'#195'DDD'#173'BBB'#131'CCCL@@@ 999'#9#0#0#0#2#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#1'III'#7'BBB'#27'CCCEDDD|DDD'#170'V6%'#238'`5'#30 + +#255'h<"'#255#145'Y1'#255#179's?'#255#192#132'F'#255#205#148'M'#255#215#161 + +'R'#255#222#171'U'#255#227#176'X'#255#230#181'Z'#255#231#183'Z'#255#232#183 + +'['#255#232#184'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185 + +'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185 + +'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185 + +'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185 + +'['#255'd1'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#13#11#5#255'N>'#31#255#193#153'L'#255#233 + +#185'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233 + +#185'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#184'['#255#232 + +#184'['#255#232#183'Z'#255#231#182'Z'#255#229#180'Y'#255#226#175'X'#255#220 + +#168'U'#255#213#158'R'#255#201#144'K'#255#189'D'#255#175'n<'#255#128'N+'#255 + +'e9 '#255'_3'#29#255'Q;1'#227'CCC'#201'CCC'#191'CCC'#163'CCCrAAA;FFF'#22'333' + +#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#1'@@@'#4'<<<'#17'AAA3EEEhCCC'#156'R:/'#220'_3'#29 + +#255'e: '#255#134'Q-'#255#178'p>'#255#190#130'F'#255#203#145'M'#255#213#161 + +'S'#255#221#170'W'#255#226#176'Z'#255#229#180'Z'#255#230#182'\'#255#231#182 + +'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183 + +'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183 + +'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183 + +'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183 + +'\'#255#180#142'G'#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#15#12#6#255'VE"'#255#215#171'V'#255#231#183'\'#255#231#183'\'#255#231 + +#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231 + +#183'\'#255#231#183'\'#255#231#182'\'#255#230#181'['#255#228#178'['#255#225 + +#175'Y'#255#219#168'W'#255#211#156'Q'#255#200#142'K'#255#187'|D'#255#172'k<' + +#255'wF('#255'c7 '#255'^1'#30#254'K@:'#214'DDD'#199'CCC'#184'CCC'#148'AAA^GG' + +'G+NNN'#13'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'MMM'#10'@@@$DDDSDDD'#139'L?8'#197'^1'#29#254 + +'c7 '#255'wG)'#255#173'l<'#255#188'E'#255#201#144'N'#255#212#158'T'#255#220 + +#169'X'#255#225#175'['#255#228#179'\'#255#229#180'\'#255#230#181']'#255#230 + +#181']'#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']'#255#230 + +#182']'#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']'#255#230 + +#182']'#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']'#255#230 + ,#182']'#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']'#255#221 + +#175'Y'#255#10#8#4#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#1#1#1#255'4)'#21#255#184#146'J'#255#230#182']'#255 + +#230#182']'#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']'#255 + +#230#182']'#255#230#181']'#255#229#182']'#255#228#180']'#255#227#178'\'#255 + +#224#174'['#255#218#166'W'#255#209#155'R'#255#198#139'K'#255#184'zC'#255#162 + +'d8'#255'l@$'#255'a5'#30#255'Z3 '#249'FBA'#206'DDD'#196'CCC'#174'CCC'#129'BB' + +'BIFFF'#29'@@@'#8#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#1'333'#5'FFF'#22'BBB>CCCvFA?'#174'Z3'#31#248'`5'#30 + +#255'l@$'#255#163'd9'#255#184'{D'#255#199#142'N'#255#210#156'T'#255#218#167 + +'Y'#255#223#174'\'#255#226#177'^'#255#228#179'^'#255#228#179'^'#255#228#180 + +'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180 + +'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180 + +'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180 + +'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180 + +'_'#255'bM)'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#27#21#11#255#140 + +'o;'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180 + +'_'#255#228#180'_'#255#228#180'_'#255#228#179'^'#255#227#179'^'#255#226#176 + +']'#255#222#172'['#255#216#164'X'#255#207#152'R'#255#195#137'K'#255#181'tA' + +#255#149'Z3'#255'g<"'#255'_3'#29#255'V6'''#239'CCC'#201'CCC'#190'CCC'#159'CC' + +'CkCCC5GGG'#18'@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#2'@@@'#12'CCC*DDD^DDD'#150'U6('#230'^2'#28#255'f:!'#255 + +#149'Z3'#255#181'uB'#255#195#137'K'#255#208#154'T'#255#216#165'Y'#255#221#172 + +']'#255#225#176'^'#255#226#178'_'#255#227#178'_'#255#227#178'_'#255#227#179 + +'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179 + +'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179 + +'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179 + +'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179 + +'_'#255#13#10#6#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255'&'#30#16#255#208#164'W'#255#227#179'_'#255#227#179'_'#255#227#179'_' + +#255#227#179'_'#255#227#178'_'#255#227#178'_'#255#226#179'`'#255#226#177'_' + +#255#224#176'^'#255#220#170'\'#255#214#162'X'#255#205#149'R'#255#191#131'I' + +#255#177'p?'#255#131'O.'#255'c7 '#255']1'#29#255'N;3'#222'DDD'#199'DDD'#181 + +'CCC'#140'DDDSDDD"999'#9#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#1'+++'#6'@@@'#24'EEECCCC~K=7'#193']0'#28#255'b6'#31#255#129'M' + +','#255#177'o@'#255#191#131'J'#255#204#149'S'#255#214#163'Z'#255#220#171']' + +#255#223#174'_'#255#225#176'`'#255#225#177'`'#255#226#177'`'#255#226#177'`' + +#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`' + +#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`' + +#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`' + +#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`' + +#255#161'~D'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + ,#255#0#0#0#255#0#0#0#255#4#3#2#255#134'i9'#255#226#177'`'#255#226#177'`'#255 + +#226#177'`'#255#226#177'`'#255#226#177'`'#255#225#178'`'#255#225#177'`'#255 + +#224#176'_'#255#222#174'^'#255#219#169']'#255#212#159'X'#255#200#144'Q'#255 + +#187'~G'#255#170'j<'#255'qB%'#255'`5'#30#255'Z2'#31#250'FBA'#205'CCC'#193'DD' + +'D'#166'CCCsCCC9CCC'#19'@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#2'@@@'#12'AAA+BBBaDBB'#155'Y3!'#244'_3'#29#255'l?$'#255#167'f;' + +#255#186'}H'#255#200#144'R'#255#211#158'Y'#255#218#168']'#255#221#172'`'#255 + +#223#174'a'#255#223#176'a'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255 + +#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255 + +#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255 + +#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255 + +#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255 + +'hR.'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'qY2'#255#224#176'b'#255#224#176'b'#255 + +#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#223#176'a'#255 + +#223#174'`'#255#221#172'_'#255#217#166']'#255#208#155'W'#255#196#139'O'#255 + +#182'wE'#255#152'\5'#255'e9!'#255'^2'#29#255'S7*'#233'DDD'#200'CCC'#183'DDD' + +#143'EEEUDDD"UUU'#9#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'333'#5 + +'@@@'#24'DDDDCCC~P8-'#211']0'#29#255'c8!'#255#144'V2'#255#180'uD'#255#196#138 + +'P'#255#207#155'X'#255#215#165']'#255#220#171'`'#255#221#173'b'#255#222#174 + +'a'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175 + +'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175 + +'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175 + +'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175 + +'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255'VD&'#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#166#132'J'#255#222#175'b'#255#222#175 + +'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#174 + +'a'#255#221#173'a'#255#219#170'`'#255#213#163'\'#255#205#150'V'#255#192#132 + +'M'#255#176'oA'#255'}K,'#255'a5'#31#255'\0'#28#254'I?;'#212'CCC'#194'DDD'#166 + +'CCCrDDD8GGG'#18'@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'FFF'#11'D' + +'DD)BBB`G@<'#164'[1'#29#252'_3'#29#255'uD)'#255#174'l?'#255#189#130'L'#255 + +#204#150'V'#255#213#162'^'#255#217#168'`'#255#220#172'b'#255#221#173'b'#255 + +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255 + +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255 + +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255 + +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255 + +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255 + +'gQ.'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8#6#4#255#207#163']'#255#221 + +#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255#221 + +#173'c'#255#221#172'b'#255#219#171'b'#255#217#167'`'#255#211#159'['#255#200 + +#145'T'#255#185'{H'#255#164'd;'#255'h<#'#255'^1'#29#255'X3#'#244'DDD'#200'CC' + +'C'#183'DDD'#142'DDDSFFF!@@@'#8#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#4'II' + +'I'#21'EEE?DDD|S5'''#222'\1'#28#255'c8!'#255#158'_8'#255#183'yH'#255#198#142 + ,'S'#255#209#158'\'#255#215#166'`'#255#218#170'b'#255#219#171'c'#255#219#171 + +'d'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172 + +'d'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172 + +'d'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172 + +'d'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172 + +'d'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172 + +'d'#255#213#168'b'#255#3#3#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'M<#'#255 + +#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255 + +#219#172'd'#255#219#171'd'#255#219#170'c'#255#217#168'b'#255#214#164'`'#255 + +#207#153'Z'#255#194#136'P'#255#178'rD'#255#139'R1'#255'a4'#31#255'\0'#28#255 + +'L<5'#219'CCC'#193'DDD'#164'CCCoCCC5@@@'#16'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#1'@@@'#8'BBB#CCCWHA='#158'\0'#28#253'_3'#29#255'~I+'#255#175'nB'#255#191#133 + +'O'#255#205#151'Z'#255#213#163'a'#255#216#167'c'#255#217#169'c'#255#218#170 + +'d'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170 + +'d'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170 + +'d'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170 + +'d'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170 + +'d'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170 + +'d'#255#218#170'd'#255#218#170'd'#255'YF)'#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#15#12#7#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd' + +#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#169'c'#255#217#168'c' + +#255#215#166'b'#255#211#160'_'#255#201#147'W'#255#187'L'#255#169'h>'#255'l=' + +'$'#255'^1'#29#255'W3"'#244'DDD'#199'DDD'#180'DDD'#136'DDDKBBB'#27'UUU'#6#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0'UUU'#3'DDD'#15'EEE4BBBpS6)'#215'\1'#28#255'b7!'#255#158'_9' + +#255#184'{J'#255#199#144'W'#255#209#158'_'#255#214#165'c'#255#216#168'd'#255 + +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255 + +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255 + +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255 + +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255 + +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255 + +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255 + +'YD)'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#189#147'W'#255#217#168'd' + +#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd' + +#255#217#168'd'#255#216#168'd'#255#215#167'c'#255#213#164'a'#255#207#154']' + +#255#195#138'S'#255#179'tF'#255#139'R1'#255'`5'#30#255'\0'#28#255'K=7'#216'D' + +'DD'#191'DDD'#157'CCCcAAA+FFF'#11#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'+++'#6'EEE'#26'BBBIE?=' + +#144'Z0'#28#252'^2'#29#255'zF*'#255#174'mB'#255#192#135'R'#255#205#152'\'#255 + +#211#161'b'#255#214#165'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255 + +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255 + +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255 + +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255 + +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255 + +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255 + ,#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255'jR1'#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255'fN/'#255#215#166'd'#255#215#166'd'#255#215#166'd' + +#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd' + +#255#215#167'e'#255#214#164'c'#255#210#159'a'#255#202#148'Z'#255#187#128'N' + +#255#168'f='#255'i;#'#255'\1'#28#255'V3#'#242'CCC'#197'DDD'#173'BBB{FFF>@@@' + +#20'@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#1'MMM'#10'FFF(CCC_R6*'#206'\0'#28#255'`5'#31#255#154'\8' + +#255#182'yJ'#255#199#144'Y'#255#208#156'`'#255#212#163'd'#255#213#165'd'#255 + +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255 + +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255 + +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255 + +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255 + +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255 + +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255 + +#214#165'e'#255#214#165'e'#255#214#165'e'#255#135'h@'#255#2#1#1#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'b' + +'L/'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165 + +'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#213#165'e'#255#213#164 + +'d'#255#211#161'c'#255#206#154'^'#255#194#139'U'#255#177'sF'#255#135'P/'#255 + +'^3'#29#255'[/'#27#255'J>9'#213'DDD'#185'CCC'#144'DDDSHHH III'#7#0#0#0#1#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3 + +'<<<'#17'DDD8DBAyZ0'#29#248'\1'#28#255'uB'''#255#172'lA'#255#190#132'Q'#255 + +#203#151'^'#255#209#160'c'#255#211#162'e'#255#212#163'e'#255#212#163'e'#255 + +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255 + +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255 + +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255 + +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255 + +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255 + +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255 + +#212#163'e'#255#212#163'e'#255#212#163'e'#255#156'xK'#255#1#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'jQ2'#255#212 + +#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212 + +#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#162'e'#255#211 + +#162'd'#255#208#158'b'#255#200#147'['#255#186'~M'#255#165'd<'#255'd8!'#255'\' + +'0'#28#255'T5'''#237'CCC'#193'DDD'#162'CCCjCCC.@@@'#12#0#0#0#2#0#0#0#0#0#0#0 + +#0#0#0#0#0#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'#5'GGG'#25'BB' + +'BIN:1'#174'[/'#27#255'^2'#29#255#145'T3'#255#180'vI'#255#196#142'Y'#255#206 + +#155'a'#255#209#161'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255'O=&'#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + ,#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'sX7'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#210 + +#161'f'#255#209#159'd'#255#204#153'`'#255#192#135'U'#255#175'pE'#255'~H+'#255 + +']0'#29#255'Z0'#28#253'FBA'#201'DDD'#176'CCC~FFF>CCC'#19'@@@'#4#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'999'#9'EEE%CCC[V3' + +'$'#222'\0'#27#255'f7!'#255#167'd>'#255#187#128'Q'#255#200#148'^'#255#207#156 + +'d'#255#209#159'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160 + +'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160 + +'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160 + +'e'#255#209#160'e'#255#209#160'e'#255#151'tI'#255'2&'#25#255#27#21#13#255#15 + +#12#7#255#7#5#3#255#7#5#3#255' '#25#16#255'P='''#255#151'tI'#255#209#160'e' + +#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e' + +#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e' + +#255#209#160'e'#255#209#160'e'#255#6#5#3#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#146'pF'#255#209#160'e'#255#209#160'e'#255 + +#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255 + +#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#159'e'#255 + +#206#155'c'#255#198#143'['#255#182'zM'#255#151'Y6'#255'^3'#29#255'[/'#27#255 + +'N:1'#222'DDD'#185'DDD'#142'DDDOIII'#28'+++'#6#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2';;;'#13'DDD1F@=x[/'#28#253'\1'#28 + +#255'~G+'#255#174'oE'#255#193#137'X'#255#203#151'b'#255#207#156'e'#255#207 + +#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208 + +#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208 + +#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255'x[;' + +#255#15#12#8#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#4#3#2#255'bJ0'#255#208#158'f'#255#208#158'f' + +#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f' + +#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255'3'''#25#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2#1#255#208#158'f' + +#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f' + +#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f' + +#255#208#158'f'#255#207#158'e'#255#206#156'd'#255#201#149'_'#255#189#131'T' + +#255#169'h@'#255'j:#'#255'\0'#28#255'V3#'#242'DDD'#191'CCC'#156'BBB`AAA''333' + +#10#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#4'C' + +'CC'#19'EEE?Q7+'#179'[/'#27#255'^1'#29#255#152'X6'#255#181'yM'#255#197#144']' + +#255#204#153'c'#255#206#155'f'#255#206#156'e'#255#206#156'e'#255#206#156'e' + +#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e' + +#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e' + +#255#202#154'c'#255'6)'#27#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#14#10#7#255#178#135'W'#255#206#156'e'#255#206#156'e'#255#206#156'e' + +#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e' + +#255#206#156'e'#255'WB+'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#29#22#14#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e' + +#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e' + +#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#205#156'e' + ,#255#203#151'c'#255#194#139'Z'#255#176'qH'#255#131'K-'#255'\1'#28#255'[/'#27 + +#255'HA='#204'DDD'#169'DDDqEEE4III'#14#128#128#128#2#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'+++'#6'BBB'#27'EEENW2!'#228'[/'#27#255'i9!' + +#255#168'e?'#255#187#130'T'#255#200#147'`'#255#203#153'e'#255#205#154'e'#255 + +#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255 + +#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255 + +#205#154'e'#255#205#154'e'#255#199#150'a'#255#19#14#9#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#7#6#4#255#178#133'W' + +#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e' + +#255#205#154'e'#255#205#154'e'#255#205#154'e'#255'S>)'#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#128'a?'#255#205#154'e'#255#205#154'e' + +#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e' + +#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e' + +#255#205#154'e'#255#204#154'e'#255#203#152'd'#255#197#145'^'#255#182'zO'#255 + +#157'Z8'#255']1'#29#255'[/'#27#255'P9.'#226'CCC'#179'CCC'#129'CCCA@@@'#20'@@' + +'@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'999'#9'EEE%EA?' + +'b[/'#27#253'\0'#27#255'F*'#255#173'nG'#255#191#136'Z'#255#200#149'c'#255 + +#202#152'e'#255#202#152'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255 + +#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255 + +#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255#31#24#16#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#11#8#6#255#200#151'e'#255#202#153'e'#255#202#153'e'#255#202 + +#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255'O;''' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255''''#29#19#255#202#153'e'#255 + +#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255 + +#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255 + +#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#152'e'#255#202#151'd'#255 + +#199#147'b'#255#188#130'U'#255#168'e@'#255'k:"'#255'[/'#27#255'V3$'#241'CCC' + +#186'BBB'#142'EEENBBB'#27'+++'#6#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#2'@@@'#12'DDD-O:0'#146'[/'#27#255'\0'#28#255#145'R2'#255#179'wM' + +#255#194#141'^'#255#200#148'c'#255#201#150'e'#255#201#150'e'#255#201#150'e' + +#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e' + +#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e' + +#255';,'#30#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'S>*'#255#201#150'e' + +#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e' + +#255#201#150'e'#255'K8&'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#29#22#14#255 + +#184#138']'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255 + +#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255 + +#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255 + +#201#150'e'#255#200#149'd'#255#199#148'c'#255#191#136'['#255#173'mG'#255'}D(' + +#255'\0'#27#255'Z0'#28#253'DBB'#192'CCC'#152'DDDZBBB#@@@'#8#0#0#0#1#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#2'III'#14'CCC5T5'''#190'[/'#27#255 + +'_2'#29#255#162'^:'#255#184'}S'#255#195#142'`'#255#198#147'd'#255#199#148'd' + +#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd' + +#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd' + ,#255#199#148'd'#255#147'mJ'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#3#2#1#255#195#144'b'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255 + +#199#148'd'#255#199#148'd'#255#199#148'd'#255'H6$'#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#3#2#1#255#23#17#12 + +#255'qT8'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199 + +#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199 + +#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199 + +#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#198#146'c'#255#193 + +#140'^'#255#178'uN'#255#143'O1'#255'\0'#28#255'[/'#27#255'J=7'#208'CCC'#161 + +'DDDfAAA+FFF'#11#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3'<<<' + +#17'CCC=X1 '#227'[/'#27#255'm:"'#255#167'eA'#255#187#130'X'#255#195#143'a' + +#255#196#144'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c' + +#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c' + +#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#19#14#10#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#135'cD'#255#197#145'c'#255#197 + +#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255'I5$' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#19#14#10#255'4&'#26#255'cI2'#255 + +#161'vP'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197 + +#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197 + +#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197 + +#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197 + +#145'c'#255#197#145'b'#255#196#144'c'#255#194#140'`'#255#182'|S'#255#159'\:' + +#255']2'#28#255'[/'#27#255'Q8-'#226'DDD'#168'DDDqAAA3NNN'#13#128#128#128#2#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#4':::'#22'G@/[/'#27#254'[/'#27#255'}A&'#255#167'gD' + +#255#180'zW'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255 + +#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181 + +'|Y'#255#136']C'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#19#13#9 + +#255#151'gJ'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255 + +#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181 + +'|Y'#255#181'|Y'#255#171'vU'#255'1"'#24#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#1#0#0#255'}V>'#255#181'|Y'#255#181'|Y'#255#181'|Y' + +#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255 + +#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181 + +'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y' + +#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255 + +#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#178 + +'wT'#255#161'];'#255'k8 '#255'[/'#27#255'V3#'#238'DDD'#151'CCCWFFF!@@@'#8#0#0 + +#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'FFF'#11'K:3?[/'#27#255'[/'#27#255#131'F' + +'*'#255#169'iH'#255#179'xV'#255#180'zW'#255#180'{W'#255#180'{W'#255#180'{W' + +#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255 + +#180'{W'#255#180'{W'#255'<)'#29#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255'O' + +'6&'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W' + +#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255 + +#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#142'aE'#255#27 + +#19#13#255#2#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8#5#4#255#135']A'#255#180'{W'#255#180 + +'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W' + +#255#180'{W'#255'pL6'#255'+'#29#20#255'('#28#19#255'*'#28#20#255'+'#29#21#255 + +'-'#30#21#255'fF2'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{' + +'W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W' + +#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255 + +#180'{W'#255#180'zX'#255#178'vU'#255#163'_>'#255'r<"'#255'[/'#27#255'X2!'#243 + +'CCC'#152'BBBYDDD"@@@'#8#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'FFF'#11'N8.' + +'J[/'#27#255'[/'#27#255#135'H,'#255#170'kI'#255#178'wV'#255#179'yX'#255#179 + ,'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX' + +#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#16#11#8#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#19#13#10#255#150'fJ'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX' + +#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255 + +#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179 + +'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255'~V>'#255'=)'#30#255 + +#19#13#9#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'$'#24#17 + +#255#172'uT'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255 + +#179'yX'#255#179'yX'#255#158'kN'#255'=)'#30#255#6#4#3#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#6#4#3#255'?+'#31#255#164 + +'oP'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX' + +#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255 + +#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#177'uU'#255#164'b@'#255'v?%' + +#255'[/'#27#255'Y1'#31#246'CCC'#152'BBBYDDD"@@@'#8#0#0#0#1#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#1'FFF'#11'Q7+U[/'#27#255'\0'#28#255#139'J-'#255#171'lL'#255#177 + +'wW'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV' + +#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#172'sT'#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#1#1#1#255'O5&'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255 + +#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178 + +'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV' + +#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255 + +#178'wV'#255#178'wV'#255#178'wV'#255#176'wV'#255'vO9'#255'7%'#27#255#16#10#8 + +#255#1#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#11#8#6#255 + +'9&'#28#255#137'\C'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178 + +'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255'M3%'#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#1#0#0#255'4"'#25#255#178'wV'#255#178'wV'#255#178'wV'#255 + +#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178 + +'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#176'tT' + +#255#165'cC'#255'yA'''#255'[/'#27#255'Z0'#29#250'DDD'#150'CCCWFFF!III'#7#0#0 + +#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'MMM'#10'R4''^[/'#27#255'\0'#28#255#142 + +'M.'#255#171'nN'#255#177'uV'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX' + +#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255 + +#177'wX'#255'gF3'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#23#16#12#255#152'fK'#255#177'wX'#255#177'wX'#255#177'wX' + +#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255 + +#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177 + +'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX' + +#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255 + +#177'wX'#255#177'wX'#255#177'wX'#255#173'uV'#255#136'\D'#255#133'YB'#255#131 + +'XA'#255#128'V@'#255#153'gL'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX' + +#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255 + +'S8)'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255'"'#23#17#255#175'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX' + +#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255 + +#177'wX'#255#177'wX'#255#177'wX'#255#175'tU'#255#166'eE'#255'}B)'#255'\0'#28 + +#255'[/'#28#253'CCC'#148'CCCTBBB'#31'III'#7#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#1'999'#9'V4%h[/'#27#255'\0'#28#255#145'O0'#255#171'mN'#255#175'sU'#255 + +#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175 + +'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255'*'#29#21#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#1#1#255'X;,'#255#175'uW' + +#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255 + +#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175 + +'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW' + +#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255 + +#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175 + ,'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW' + +#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255 + +#175'uW'#255#175'uW'#255#175'uW'#255'^?/'#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'$'#24#18#255 + +#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175 + +'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW' + +#255#175'sT'#255#166'eE'#255#128'D*'#255'\0'#28#255'[/'#27#255'ECB'#149'CCCP' + +'@@@'#28'UUU'#6#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'@@@'#8'W3#q[/'#27#255 + +'\1'#29#255#150'Q1'#255#171'mN'#255#174'sU'#255#175'uV'#255#175'uV'#255#175 + +'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV' + +#255#175'uV'#255#175'uV'#255#15#10#8#255#0#0#0#255#0#0#0#255#0#0#0#255#4#3#2 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#29#19#14#255#156'iM'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV' + +#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255 + +#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175 + +'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV' + +#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255 + +#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175 + +'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV' + +#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255 + +#175'uV'#255#11#7#6#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'sM9'#255#175'uV'#255#175 + +'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV' + +#255#175'uV'#255#175'uV'#255#175'uV'#255#175'tV'#255#174'rS'#255#167'fG'#255 + +#131'G,'#255'\0'#28#255'[/'#27#255'GA?'#150'CCCLGGG'#25'333'#5#0#0#0#1#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#1'III'#7'W3#k[/'#27#255'\1'#29#255#149'P2'#255#169 + +'lM'#255#174'qT'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV' + +#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255 + +#9#6#4#255#0#0#0#255#0#0#0#255#0#0#0#255#136'ZC'#255'T8*'#255#1#1#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#7#5#3#255'bA0'#255#175'tV'#255#175'tV'#255 + +#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175 + +'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV' + +#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255 + +#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175 + +'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV' + +#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255 + +#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175 + +'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#165'nR'#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#10#7#5#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255 + +#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175 + +'tV'#255#174'sU'#255#173'qR'#255#166'eG'#255#131'F,'#255'\0'#28#255'[/'#27 + +#255'EA?'#145'DDDGFFF'#22'@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'333' + +#5'W3#\[/'#27#255'\1'#29#255#146'P3'#255#168'jM'#255#173'pT'#255#173'rU'#255 + +#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173 + +'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#4#3#2#255#0#0#0#255#0#0#0#255#21 + +#14#10#255#173'rU'#255#173'rU'#255#152'dK'#255'dB1'#255'A+ '#255'D-!'#255#141 + +']E'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU' + +#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255 + +#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173 + +'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU' + +#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255 + +#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173 + +'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU' + +#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255 + +#173'rU'#255#173'rU'#255#169'pS'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#139'\D'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU' + +#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'qT'#255 + +#172'oR'#255#165'cF'#255#128'E+'#255'\0'#28#255'[/'#27#255'CBA'#132'DDD@CCC' + ,#19'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#4'U2"L[/'#27#255'\1' + +#29#255#143'N3'#255#168'hK'#255#172'oT'#255#173'qU'#255#173'rV'#255#173'rV' + +#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255 + +#173'rV'#255#173'rV'#255#1#1#1#255#0#0#0#255#0#0#0#255'nI7'#255#173'rV'#255 + +#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173 + +'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV' + +#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255 + +#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173 + +'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV' + +#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255 + +#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173 + +'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV' + +#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255 + +#173'rV'#255#173'rV'#255#2#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'H' + +'0$'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV' + +#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'qU'#255#171'nQ'#255 + +#165'dF'#255'~D+'#255'\1'#29#255'Z0'#28#252'CCCzCCC9@@@'#16#128#128#128#2#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3'T2#=[/'#27#255'\1'#29#255#140'N1' + +#255#166'gI'#255#171'oR'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255 + +#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173 + +'qU'#255#1#1#1#255#27#18#13#255'a@0'#255#173'qU'#255#173'qU'#255#173'qU'#255 + +#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173 + +'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU' + +#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255 + +#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173 + +'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU' + +#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255 + +#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173 + +'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU' + +#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255 + +#173'qU'#255'$'#24#18#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#31#20#15#255 + +#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173 + +'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#172'pT'#255#169'lP'#255#164'aD' + +#255'{C*'#255'\1'#29#255'Y0'#30#247'CCCoBBB2;;;'#13#0#0#0#2#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#128#128#128#2'V6''-[/'#27#255'\1'#29#255#137'L0'#255 + +#165'fH'#255#170'mQ'#255#172'pT'#255#172'pU'#255#172'pU'#255#172'pU'#255#172 + +'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU' + +#255#166'lS'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255 + +#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172 + +'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU' + +#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255 + +#168'nS'#255#134'WB'#255'b@0'#255'tK9'#255#166'lS'#255#172'pU'#255#172'pU' + +#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255 + +#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172 + +'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU' + +#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255 + +#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172 + +'pU'#255#129'T@'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#22#14#11#255#172 + +'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU' + +#255#172'pU'#255#172'pU'#255#172'pU'#255#172'oT'#255#170'mP'#255#163'`C'#255 + +'xB*'#255'\1'#29#255'Y1'#31#241'BBBdCCC*MMM'#10#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#2'T7*'#29'[/'#27#255'\1'#29#255#134'J0'#255#165'dG' + +#255#169'lQ'#255#171'pU'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255 + +#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172 + +'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW' + +#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255 + +#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172 + +'qW'#255#172'qW'#255#172'qW'#255#135'YD'#255'$'#24#18#255#3#2#2#255#0#0#0#255 + ,#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8#5#4#255#30#20#16#255'xO='#255#172 + +'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW' + +#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255 + +#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172 + +'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW' + +#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255 + +#14#9#7#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#20#13#10#255#172'qW'#255#172'qW'#255 + +#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172 + +'qW'#255#172'qW'#255#171'oT'#255#169'jM'#255#162'_A'#255's>'''#255'\1'#29#255 + +'X2 '#234'CCCXDDD"@@@'#8#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#1'C><'#9'[/'#27#247'\1'#29#255'}F-'#255#164'bE'#255#169'lO'#255#171'pT' + +#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255 + +#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172 + +'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV' + +#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255 + +#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#154'eM'#255#22 + +#15#11#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#25#17#13#255#136'ZE'#255#172'qV' + +#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255 + +#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172 + +'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV' + +#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255 + +#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255'U7*'#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#17#11#9#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV' + +#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#171'oT'#255 + +#168'jM'#255#161'^@'#255'k;%'#255'\0'#28#255'V3#'#220'CCCLEEE'#26'333'#5#0#0 + +#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'+++'#6'[/'#28#214'\1'#29 + +#255't@)'#255#162'`B'#255#168'jO'#255#172'pV'#255#173'rX'#255#173'rX'#255#173 + +'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX' + +#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255 + +#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173 + +'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX' + +#255#173'rX'#255#144'_I'#255#6#4#3#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255'Z;-'#255#173'rX'#255#173'rX'#255#173'rX'#255#173 + +'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX' + +#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255 + +#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173 + +'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX' + +#255#171'pV'#255#3#2#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'!'#22#17#255#173'rX'#255#173'rX' + +#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255 + +#173'rX'#255#172'qX'#255#171'oU'#255#167'hM'#255#160'[>'#255'b5!'#255'\0'#28 + +#255'S5'''#196'EEE?CCC'#19'@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0'UUU'#3'Z0'#29#176'\1'#29#255'k:%'#255#162'^A'#255#169'jN'#255 + +#173'qV'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174 + +'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY' + +#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255 + +#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174 + +'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#151'dM'#255#4#2#2#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255 + +#136'YF'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174 + +'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY' + +#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255 + +#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174 + +'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255'5#'#27#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + ,#0#0#255'G.$'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255 + +#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#172'pV'#255#167 + +'gK'#255#153'X:'#255'^3'#31#255'\0'#28#255'Q7+'#166'BBB2777'#14#0#0#0#2#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'Z0'#29#137'\0'#28 + +#255'a5!'#255#160']>'#255#168'jN'#255#173'sY'#255#175'v\'#255#175'v\'#255#175 + +'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\' + +#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255 + +#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175 + +'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\' + +#255#29#20#15#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#8#5#4#255#169'rX'#255#175'v\'#255#175'v\' + +#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255 + +#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175 + +'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\' + +#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255 + +#175'v\'#255#156'jR'#255#1#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'yQ?'#255#175'v\'#255#175'v\'#255 + +#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175 + +'v\'#255#174'u['#255#172'qV'#255#166'gJ'#255#143'S6'#255'^2'#31#255'[/'#27 + +#255'O;2'#130'CCC&999'#9#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#1'Z0'#29'a\0'#28#255'^3'#31#255#153'W;'#255#168'jN'#255 + +#174'tZ'#255#176'x_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176 + +'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_' + +#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255 + +#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176 + +'y_'#255#176'y_'#255#176'y_'#255'oL='#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255']@2'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176 + +'y_'#255'Z=1'#255')'#28#22#255#26#18#14#255#14#10#8#255#10#7#5#255#23#16#12 + +#255'+'#30#23#255'E0&'#255#138'_J'#255#176'y_'#255#176'y_'#255#176'y_'#255 + +#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176 + +'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255'#'#24#19#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#172'w]'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255 + +#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#175'w^'#255#172'rW'#255#165 + +'fI'#255#134'K2'#255']1'#30#255'[/'#27#255'H?:ZBBB'#27'+++'#6#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'X/'#29'7[/'#27#255 + +'^2'#31#255#141'P5'#255#167'hK'#255#174'sY'#255#177'x_'#255#177'za'#255#177 + +'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za' + +#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255 + +#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177 + +'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#9#6#5 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'%'#25#20#255#177'za'#255#177'za' + +#255#177'za'#255#177'za'#255'bD6'#255#8#6#4#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'>+"'#255#175'za' + +#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255 + +#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#136 + +'^K'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#16#11#9#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za' + +#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#176'x^'#255 + +#172'qV'#255#164'cF'#255'{E,'#255']1'#30#255'Z0'#29#245'DDD'#255'`5!'#255'\0'#28#255'T5'''#155'DDD'#30'III'#7#0#0#0#1 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0'Z/'#28'w\0'#28#255'`5!'#255#157'\?'#255#172'pU'#255#179'}d'#255#181#129 + +'i'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129 + +'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129 + +'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129 + +'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129 + +'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255'.!'#27 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#1#1#255#166'va'#255#182#129'j' + +#255#182#129'j'#255'A.&'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#9#6#5#255#170'yd'#255#182#129'j'#255#182#129'j' + +#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j' + +#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#8#6#5#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#135'`O'#255#182#129'j'#255#182 + +#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182 + +#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#181#128'h'#255#177 + +'za'#255#169'kP'#255#139'Q7'#255'^3'#31#255'\0'#28#255'N9/\GGG'#18'UUU'#3#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0'X.'#26'4\0'#28#255'^3'#31#255#141'S8'#255#170'mQ'#255#179'|c'#255 + +#182#130'k'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255 + +#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255 + +#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255 + +#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255 + +#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255 + +#20#15#12#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'N8.'#255#184#132'm'#255 + +#184#132'm'#255#184#132'm'#255#22#16#13#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#21#15#13#255#182#130'm' + +#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm' + ,#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm' + +#255'N8.'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#23#17#13#255#184#132'm'#255 + +#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255 + +#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#183#131'l'#255 + +#182#129'j'#255#177'x_'#255#167'hK'#255'zG/'#255']1'#30#255'Z0'#28#241'@@@(M' + +'MM'#10#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0'='#31#18#3'[/'#27#238']1'#30#255'{G/'#255#167'hL' + +#255#177'za'#255#183#131'l'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255 + +#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255 + +#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255 + +#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255 + +#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255 + +#185#134'p'#255#26#19#16#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#12#9#7#255#185#134 + +'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#3#2#2#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255'U>4'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185 + +#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185 + +#134'p'#255#185#134'p'#255#25#18#15#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'xWI'#255#185 + +#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185 + +#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#184 + +#134'o'#255#182#129'j'#255#175'v\'#255#165'dG'#255'h;&'#255'\1'#29#255'X2 ' + +#193'==='#25'+++'#6#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#170'\1'#29#255'f9%'#255 + +#164'bG'#255#175'v]'#255#183#131'l'#255#186#135'r'#255#186#137's'#255#186#137 + +'s'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137 + +'s'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137 + +'s'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137 + +'s'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137 + +'s'#255#186#137's'#255'$'#27#23#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#129'_P'#255 + +#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#1#1#1#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255' '#23#19#255#186#137's'#255#186#137's'#255#186#137's'#255#186 + +#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186 + +#137's'#255#186#137's'#255#186#137's'#255#172'j'#255#7#5#4#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#12#9#7#255 + +#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255 + +#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255 + +#186#137's'#255#185#135'q'#255#181#129'i'#255#173'qW'#255#149'X='#255'`5!' + +#255'\0'#28#255'V4%333'#15#0#0#0#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Z/'#27'O\0'#28 + +#255'_4 '#255#144'U:'#255#172'qV'#255#182#130'k'#255#187#137't'#255#188#139 + +'u'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140 + +'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140 + +'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140 + +'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140 + +'v'#255#188#140'v'#255#188#140'v'#255'1$'#31#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255':+$'#255 + +#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#1 + +#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#4#3#3#255#188#140'v'#255#188#140'v'#255#188#140 + +'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140 + +'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140 + +'v'#255'}]N'#255'6("'#255#14#11#9#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255'S>5'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v' + ,#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v' + +#255#188#140'v'#255#188#139'u'#255#186#136'r'#255#180'~f'#255#169'kP'#255'|H' + +'1'#255'^2'#31#255'[/'#27#249'L=6+III'#7#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +'[/'#27#5'[/'#27#235']1'#30#255'wD/'#255#169'jO'#255#180'g'#255#187#137'u' + +#255#189#141'x'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y' + +#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y' + +#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y' + +#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y' + +#255#189#142'y'#255#189#142'y'#255#189#142'y'#255'J7/'#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#16#12#11 + +#255#187#140'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y' + +#255#189#142'y'#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#181#136'u'#255#189 + +#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189 + +#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189 + +#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#11#8 + +#7#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255#181#136's'#255#189#142'y'#255 + +#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255 + +#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#141'x'#255 + +#186#136'q'#255#177'za'#255#164'dG'#255'f:&'#255'\1'#29#255'Y1'#31#186'@@@' + +#16'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Z/'#27#147'\1'#29#255 + +'b8$'#255#160'bF'#255#177'y`'#255#186#137's'#255#190#143'z'#255#191#145'|' + +#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|' + +#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|' + +#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|' + +#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|' + +#255#191#145'|'#255#162'{i'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255#162'{i'#255#191#145'|'#255#191#145'|' + +#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#2#1#1#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#1#1#1#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191 + +#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191 + +#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191 + +#145'|'#255#191#145'|'#255#191#145'|'#255#5#4#3#255#0#0#0#255#0#0#0#255#0#0#0 + +#255'&'#29#25#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255 + +#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255 + +#191#145'|'#255#191#145'|'#255#189#142'y'#255#184#134'o'#255#174'sY'#255#143 + +'U;'#255'`5!'#255'\0'#28#255'U3$`@@@'#8#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0'Z.'#27'5\0'#28#255'_4 '#255#137'Q8'#255#173'rX'#255#184#134'o' + +#255#190#144'{'#255#192#147''#255#192#147''#255#192#147''#255#192#147'' + +#255#192#147''#255#192#147''#255#192#147''#255#192#147''#255#192#147'' + +#255#192#147''#255#192#147''#255#192#147''#255#192#147''#255#192#147'' + +#255#192#147''#255#192#147''#255#192#147''#255#192#147''#255#192#147'' + +#255#192#147''#255#192#147''#255#192#147''#255#192#147''#255#14#11#9#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255' '#24#21#255 + +#192#147''#255#192#147''#255#192#147''#255#192#147''#255#192#147''#255 + +#192#147''#255#192#147''#255#4#3#3#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8#6#5#255#192#147 + +''#255#192#147''#255#192#147''#255#192#147''#255#192#147''#255#192#147 + +''#255#192#147''#255#192#147''#255#192#147''#255#192#147''#255#192#147 + +''#255#192#147''#255#192#147''#255#192#147''#255#192#147''#255#192#147 + +''#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#137'iZ'#255#192#147''#255 + +#192#147''#255#192#147''#255#192#147''#255#192#147''#255#192#147''#255 + +#192#147''#255#192#147''#255#192#147''#255#192#147''#255#192#146'~'#255 + +#189#142'y'#255#182#129'j'#255#169'lP'#255'uD.'#255'^2'#31#255'[/'#28#237'NF' + ,'B'#21'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/' + +#27#211']1'#30#255'l>)'#255#167'iM'#255#181'g'#255#190#143'z'#255#193#148 + +#128#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194 + +#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255 + +#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130 + +#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149 + +#130#255#194#149#130#255#194#149#130#255#194#149#130#255'G60'#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'ZE<'#255#194#149#130 + +#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149 + +#130#255#194#149#130#255#7#6#5#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#23#17#15#255#194#149 + +#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194 + +#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255 + +#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130 + +#255#179#137'x'#255#0#0#0#255#0#0#0#255#0#0#0#255'-#'#30#255#194#149#130#255 + +#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130 + +#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149 + +#130#255#192#147''#255#188#140'v'#255#177'za'#255#156'_D'#255'a6#'#255'\1' + +#29#255'Y1'#31#153'@@@'#8#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0'Z/'#27']\0'#28#255'`5!'#255#143'V='#255#175'v]'#255#187#138 + +'u'#255#193#149#129#255#195#152#132#255#195#152#133#255#195#152#133#255#195 + +#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255 + +#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133 + +#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152 + +#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#170 + +#133't'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#172#133'u'#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133 + +#255#195#152#133#255#195#152#133#255#146'rd'#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255'_JA'#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255 + +#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133 + +#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152 + +#133#255#195#152#133#255#140'm`'#255#0#0#0#255#0#0#0#255#6#5#4#255#186#145'' + +#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152 + +#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195 + +#152#133#255#195#152#132#255#192#147''#255#185#134'p'#255#172'pU'#255'|I2' + +#255'^3'#31#255'\0'#28#250'R5()UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#3'[/'#27#221']1'#30#255'oA,'#255#169'lP' + +#255#183#131'l'#255#192#147''#255#196#154#135#255#197#155#136#255#197#155 + +#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197 + +#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255 + +#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136 + +#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155 + +#136#255#197#155#136#255#26#20#18#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#8#6#5#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136 + +#255#197#155#136#255#197#155#136#255#197#155#136#255#28#22#19#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#4#3#3#255#193#153#134#255#197#155#136#255#197#155#136#255#197#155 + +#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197 + +#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255 + +#197#155#136#255#197#155#136#255#197#155#136#255#182#143'~'#255'=0*'#255#7#5 + +#5#255#130'fY'#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155 + +#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197 + +#155#136#255#197#155#136#255#196#154#136#255#195#152#133#255#190#144'{'#255 + +#180'~f'#255#159'bG'#255'c8%'#255'\1'#29#255'Z0'#30#163'III'#7#0#0#0#1#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27 + +'g\0'#28#255'a6#'#255#147'Y@'#255#177'za'#255#190#143'z'#255#196#154#135#255 + +#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139 + +#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157 + +#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198 + +#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255 + +#198#157#139#255#198#157#139#255#198#157#139#255'<0+'#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255'*!'#29#255#198#157#139#255#198#157#139#255#198#157 + +#139#255#198#157#139#255#198#157#139#255#198#157#139#255#164#130's'#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255'?2,'#255#198#157#139#255#198#157#139#255#198#157#139 + +#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157 + +#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198 + +#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255 + +#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139 + +#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157 + +#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#156#138#255#195 + +#152#132#255#187#138't'#255#173'sY'#255'L5'#255'^3'#31#255'\0'#28#252'U3$,' + +#128#128#128#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0'[/'#27#7'[/'#27#229'^2'#31#255'qB.'#255#171'nS'#255 + +#185#134'p'#255#194#151#131#255#198#158#140#255#200#160#142#255#200#160#142 + +#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160 + +#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200 + +#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255 + +#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142 + +#255'9.)'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'hSJ'#255#200#160#142 + +#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160 + +#142#255'6+'''#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#6#5#5#255#184#148#131#255#200#160#142 + +#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160 + +#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200 + +#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255 + +#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142 + +#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160 + +#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#199 + +#159#141#255#198#157#139#255#192#147''#255#181'g'#255#161'dI'#255'd:&'#255 + +'\1'#29#255'Z0'#29#171'@@@'#4#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27'q\1'#29#255'a6#' + +#255#143'W?'#255#177'za'#255#191#144'|'#255#198#157#139#255#200#161#144#255 + +#201#162#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145 + +#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163 + +#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201 + +#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255 + +#201#163#145#255'=2,'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'!'#27#24#255#197 + +#161#143#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255 + +#201#163#145#255#197#161#143#255#3#2#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255#149'zl'#255#201 + +#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255 + +#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145 + +#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163 + +#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201 + +#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255 + +#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145 + +#255#201#162#145#255#200#161#143#255#197#155#136#255#187#138'u'#255#173'rX' + +#255'|I3'#255'_4 '#255'\0'#28#253'W1 2'#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27 + +#6'\0'#28#216'^2'#31#255'i=)'#255#165'jP'#255#184#133'n'#255#196#152#134#255 + +#201#162#145#255#202#164#148#255#202#165#148#255#202#165#148#255#202#165#148 + +#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165 + +#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202 + +#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255 + +#202#165#148#255#202#165#148#255'E82'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#2#2#2#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'.&"'#255#202 + +#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255 + +#202#165#148#255#202#165#148#255#146'wk'#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'eRI'#255#202 + +#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255 + +#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148 + +#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165 + +#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202 + +#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255 + +#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148 + +#255#202#165#148#255#202#164#147#255#200#160#143#255#193#148#128#255#180'~f' + +#255#151'^D'#255'a7$'#255'\1'#29#255'Z0'#28#156'UUU'#3#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0'[/'#27'D\0'#28#255'`5!'#255#128'N8'#255#175'v]'#255#190 + +#143'{'#255#200#159#142#255#203#165#150#255#204#167#151#255#204#167#151#255 + +#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151 + +#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167 + +#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204 + +#167#151#255#204#167#151#255#204#167#151#255'N?9'#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255'vaW'#255#204#167#151#255#160#131'w'#255'cRI'#255'WG@'#255 + +#168#137'|'#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151 + +#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#145'wk' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255'G:4'#255#204#167#151#255#204#167#151#255#204#167#151#255#204 + +#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255 + +#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151 + +#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167 + +#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204 + +#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255 + +#204#167#151#255#204#167#151#255#204#167#151#255#204#167#150#255#202#165#148 + +#255#198#155#138#255#186#137's'#255#171'nU'#255'oB.'#255'^2'#31#255'\0'#28 + +#235'V2"'#21#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27 + +#169'\1'#29#255'c9&'#255#155'aH'#255#182#128'j'#255#195#152#133#255#202#164 + +#148#255#205#169#154#255#206#169#155#255#206#169#155#255#206#169#155#255#206 + +#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255 + +#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155 + +#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169 + +#155#255'VGA'#255#0#0#0#255#0#0#0#255#0#0#0#255#5#4#4#255#206#169#155#255#206 + +#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255 + +#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155 + +#255#206#169#155#255#206#169#155#255#206#169#155#255#152'}r'#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#1#1#255'vaY'#255#206 + +#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255 + +#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155 + +#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169 + +#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206 + +#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255 + +#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155 + +#255#206#169#155#255#206#169#155#255#205#167#152#255#201#162#145#255#192#147 + +''#255#177'za'#255#138'T='#255'`6"'#255'\1'#29#255'[0'#29'e'#0#0#0#1#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#27'\0'#28#243'^3'#31 + +#255'pC/'#255#171'oU'#255#188#138'u'#255#199#158#141#255#205#169#154#255#207 + +#171#157#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255 + +#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158 + +#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172 + +#158#255#207#172#158#255#207#172#158#255#207#172#158#255'~i`'#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#22#18#16#255#207#172#158#255#207#172#158#255#207#172#158 + +#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172 + +#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207 + +#172#158#255#207#172#158#255#207#172#158#255'/''$'#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#9#7#7#255#164#136'~'#255#207#172#158#255#207#172#158 + +#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172 + +#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207 + +#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255 + +#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158 + +#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172 + +#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207 + +#172#158#255#207#171#157#255#204#167#151#255#196#153#136#255#183#131'l'#255 + +#160'fK'#255'f;('#255']1'#30#255'[/'#27#199'te^'#3#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27'q\0'#28#255'`6"'#255 + +#130'P9'#255#177'x`'#255#192#146''#255#203#164#149#255#208#173#159#255#209 + +#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255 + +#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161 + +#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175 + +#161#255#209#175#161#255#209#175#161#255#199#167#153#255#0#0#0#255#0#0#0#255 + +#0#0#0#255'.&#'#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175 + +#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209 + +#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255 + +#209#175#161#255#209#175#161#255#209#175#161#255'*$!'#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255'"'#28#26#255#197#165#153#255#209#175#161#255#209#175#161#255#209#175#161 + +#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175 + +#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209 + +#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255 + +#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161 + +#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175 + +#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209 + +#174#160#255#207#171#157#255#200#160#144#255#188#139'w'#255#171'pV'#255'rD0' + +#255'^3'#31#255'\0'#28#250'\2'#30'1'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#1'[/'#27#184']1'#30#255'c9&' + +#255#148'^E'#255#182#128'j'#255#197#154#136#255#206#170#155#255#210#176#163 + +#255#211#178#164#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178 + +#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211 + +#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255 + +#211#178#165#255#211#178#165#255#211#178#165#255#12#10#9#255#0#0#0#255#0#0#0 + +#255'MA<'#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255 + +#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165 + +#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178 + +#165#255#211#178#165#255#211#178#165#255#211#178#165#255#178#150#139#255'D95' + +#255#9#7#7#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'V' + +'IC'#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211 + +#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255 + +#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165 + +#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178 + +#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211 + +#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255 + +#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#164 + ,#255#209#176#162#255#204#167#151#255#193#148#129#255#177'x`'#255#129'P9'#255 + +'`6"'#255'\0'#28#255'[0'#28't'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#21'\0'#28#229'^2' + +#31#255'i?+'#255#163'jP'#255#186#136's'#255#200#160#144#255#209#174#160#255 + +#212#180#167#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169 + +#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181 + +#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213 + +#181#169#255#213#181#169#255#213#181#169#255'.''%'#255#0#0#0#255',%#'#255#200 + +#170#159#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255 + +#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169 + +#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181 + +#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213 + +#181#169#255#139'vo'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'.' + +'''$'#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213 + +#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255 + +#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169 + +#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181 + +#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213 + +#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255 + +#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#212#180#168 + +#255#211#178#165#255#207#171#157#255#197#155#137#255#182#128'j'#255#148']E' + +#255'c9&'#255']1'#30#255'[/'#27#179#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27 + +'?\0'#28#252'_4 '#255'tF1'#255#172'sY'#255#190#142'z'#255#203#165#150#255#211 + +#178#164#255#213#183#170#255#214#184#172#255#214#184#172#255#214#184#172#255 + +#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172 + +#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184 + +#172#255#214#184#172#255#214#184#172#255'ng'#255'{ib'#255#214#184#172#255 + +#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172 + +#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184 + +#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214 + +#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255 + +#214#184#172#255' '#28#26#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#14#12 + +#11#255#209#180#168#255#214#184#172#255#214#184#172#255#214#184#172#255#214 + +#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255 + +#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172 + +#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184 + +#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214 + +#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255 + +#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172 + +#255#213#182#169#255#209#176#161#255#200#161#143#255#186#135'q'#255#161'gO' + +#255'h=*'#255'^2'#31#255'\0'#28#226'W-'#26#19#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0'[/'#27'}\1'#29#255'`6"'#255'|M8'#255#175'x^'#255#192#147''#255 + +#205#170#154#255#213#181#169#255#215#185#173#255#216#187#175#255#216#187#175 + +#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187 + +#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216 + +#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255 + +#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175 + +#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187 + +#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216 + +#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255 + +#216#187#175#255#187#162#151#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2 + +#2#255#180#156#146#255#216#187#175#255#216#187#175#255#216#187#175#255#216 + +#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255 + +#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175 + +#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187 + +#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216 + ,#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255 + +#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175 + +#255#215#185#173#255#211#179#166#255#202#165#148#255#188#139'w'#255#167'mU' + +#255'nC/'#255'^3'#31#255'\0'#28#251'Z.'#27';'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0'[/'#27#2'[/'#27#170'\1'#29#255'a7$'#255#130'Q<'#255#178 + +'{c'#255#195#151#132#255#208#173#159#255#215#185#173#255#217#189#178#255#217 + +#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255 + +#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178 + +#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189 + +#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217 + +#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255 + +#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178 + +#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189 + +#178#255#217#189#178#255'.(&'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#128 + +'oi'#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217 + +#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255 + +#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178 + +#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189 + +#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217 + +#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255 + +#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#188#177 + +#255#213#183#170#255#205#168#153#255#191#144'|'#255#170'rZ'#255'sF2'#255'`5!' + +#255'\0'#28#255'Z/'#27'g'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0'[/'#27#6'[/'#27#188']1'#30#255'c9&'#255#136'V?'#255#180'~g' + +#255#197#154#136#255#209#176#162#255#216#187#176#255#219#192#181#255#219#192 + +#182#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219 + +#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255 + +#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183 + +#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193 + +#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219 + +#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255 + +#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#158#138#131 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255#131'sm'#255#219#193#183#255#219 + +#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255 + +#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183 + +#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193 + +#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219 + +#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255 + +#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183 + +#255#219#193#183#255#219#192#182#255#218#191#180#255#215#185#173#255#207#172 + +#156#255#193#147#128#255#174'v^'#255'wJ6'#255'`6"'#255'\1'#29#255'[/'#27'~'#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0'[/'#27#12'[/'#27#203']1'#30#255'c:'''#255#141'YC'#255#181#128'h'#255 + +#198#155#138#255#210#177#164#255#217#190#178#255#220#194#184#255#221#195#185 + +#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196 + +#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221 + +#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255 + +#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186 + +#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196 + +#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221 + +#196#186#255#221#196#186#255#221#196#186#255're_'#255#0#0#0#255#0#0#0#255#4#4 + +#4#255#160#142#134#255#221#196#186#255#221#196#186#255#221#196#186#255#221 + +#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255 + +#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186 + +#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196 + ,#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221 + +#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255 + +#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#195#185 + +#255#219#193#183#255#216#187#175#255#207#172#158#255#194#148#130#255#176'x_' + +#255'{M8'#255'a6#'#255'\1'#29#255'[/'#27#148#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27 + +#21'\0'#28#217']1'#30#255'c:'''#255#138'XB'#255#181'h'#255#197#156#137#255 + +#211#178#164#255#218#191#180#255#221#196#187#255#222#198#188#255#223#198#189 + +#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198 + +#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223 + +#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255 + +#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189 + +#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198 + +#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223 + +#198#189#255#221#196#187#255#6#6#5#255#10#9#8#255#188#167#159#255#223#198#189 + +#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198 + +#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223 + +#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255 + +#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189 + +#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198 + +#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223 + +#198#189#255#223#198#189#255#222#198#188#255#221#196#186#255#217#188#177#255 + +#208#173#159#255#193#149#129#255#174'w^'#255'zM8'#255'a7$'#255'\1'#29#255'[/' + +#27#170'[/'#27#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27' \0'#28#223']1'#30 + +#255'c:'''#255#132'T?'#255#180'~g'#255#197#155#136#255#211#178#164#255#219 + +#193#181#255#223#198#189#255#224#201#192#255#224#201#192#255#224#201#192#255 + +#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192 + +#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201 + +#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224 + +#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255 + +#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192 + +#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#134'xr' + +#255#205#184#176#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201 + +#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224 + +#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255 + +#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192 + +#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201 + +#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224 + +#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#223#200#191#255 + +#222#197#187#255#217#189#178#255#207#172#158#255#192#147''#255#171'u\'#255 + +'vI6'#255'a6#'#255'\1'#29#255'[/'#27#179'[/'#27#6#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0'[/'#27#25'\0'#28#209']1'#30#255'c9&'#255#128'Q='#255#177 + +'{c'#255#195#151#133#255#209#176#162#255#219#192#181#255#223#200#191#255#225 + +#203#194#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255 + +#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196 + +#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204 + +#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226 + +#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255 + +#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196 + +#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204 + +#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226 + +#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255 + +#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196 + ,#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204 + +#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226 + +#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#203#195#255 + +#225#202#193#255#222#198#188#255#217#188#177#255#206#169#155#255#191#144'|' + +#255#168'qY'#255'rG3'#255'`6"'#255'\1'#29#255'[/'#27#159'[/'#27#4#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#15'\0'#28#193']1' + +#30#255'b8%'#255'yM8'#255#170'u\'#255#192#146'~'#255#207#171#156#255#217#189 + +#178#255#223#200#191#255#226#205#197#255#227#206#198#255#228#207#199#255#228 + +#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255 + +#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199 + +#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207 + +#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228 + +#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255 + +#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199 + +#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207 + +#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228 + +#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255 + +#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199 + +#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207 + +#199#255#228#207#199#255#228#207#199#255#228#207#199#255#227#206#198#255#226 + +#204#196#255#222#198#188#255#215#185#173#255#202#165#148#255#187#137'u'#255 + +#159'jR'#255'nD0'#255'`6"'#255'\1'#29#255'[/'#27#137#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#8'[/' + +#27#175'\1'#29#255'`6"'#255'nD0'#255#158'iR'#255#187#137'u'#255#202#165#148 + +#255#215#186#174#255#223#199#190#255#227#205#198#255#229#208#201#255#229#209 + +#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229 + +#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255 + +#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202 + +#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210 + +#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229 + +#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255 + +#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202 + +#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210 + +#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229 + +#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255 + +#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202 + +#255#229#210#202#255#229#209#202#255#228#207#201#255#226#204#197#255#221#196 + +#187#255#212#180#168#255#198#157#140#255#183#130'l'#255#143'^G'#255'g>+'#255 + +'_4 '#255'\1'#29#254'[/'#27'q'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#3'[/'#27 + +#132'\1'#29#254'_4 '#255'g>+'#255#140'[F'#255#181#129'j'#255#198#155#138#255 + +#211#178#165#255#221#195#185#255#227#204#197#255#230#209#203#255#230#212#205 + +#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212 + +#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231 + +#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255 + +#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206 + +#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212 + +#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231 + +#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255 + +#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206 + +#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212 + +#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231 + ,#212#206#255#231#212#206#255#231#212#206#255#231#211#206#255#230#211#205#255 + +#229#209#201#255#225#203#194#255#219#191#181#255#208#173#159#255#193#149#129 + +#255#173'w`'#255'~Q='#255'c:'''#255'^2'#31#255'\0'#28#238'[/'#27'O'#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27'F\0'#28#234'^2'#31#255'c:' + +''''#255'zN:'#255#168's['#255#190#143'{'#255#205#167#152#255#217#187#177#255 + +#225#201#193#255#229#209#202#255#232#213#207#255#232#214#209#255#233#215#210 + +#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215 + +#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233 + +#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255 + +#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210 + +#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215 + +#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233 + +#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255 + +#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210 + +#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215 + +#210#255#233#215#210#255#233#215#210#255#232#215#209#255#232#214#208#255#231 + +#212#206#255#228#207#201#255#223#198#189#255#213#182#170#255#200#160#144#255 + +#186#136'r'#255#158'iR'#255'pE2'#255'a7$'#255']1'#30#255'\0'#28#201'[/'#27#31 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27 + +#26'\0'#28#193']1'#30#255'`6"'#255'iA.'#255#142']H'#255#179#128'h'#255#196 + +#153#135#255#210#176#163#255#220#194#184#255#227#205#198#255#231#212#206#255 + +#233#216#211#255#234#217#212#255#234#218#213#255#234#218#213#255#234#218#213 + +#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218 + +#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234 + +#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255 + +#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213 + +#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218 + +#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234 + +#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255 + +#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213 + +#255#234#218#213#255#234#217#212#255#234#216#211#255#233#215#210#255#230#211 + +#205#255#226#203#195#255#218#190#179#255#206#170#155#255#192#146''#255#172 + +'v`'#255#129'S?'#255'e<)'#255'_4 '#255'\1'#29#255'[/'#27#143'[/'#27#5#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +'[/'#27#3'[/'#27'\0'#28#248'^3'#31#255'c:'''#255'sI6'#255#158'kT'#255#186 + +#136's'#255#200#160#143#255#213#180#169#255#222#197#187#255#229#208#201#255 + +#232#214#209#255#234#218#213#255#235#219#215#255#236#220#215#255#236#220#216 + +#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220 + +#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236 + +#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255 + +#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216 + +#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220 + +#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236 + +#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255 + +#236#220#216#255#236#220#216#255#236#220#216#255#236#220#215#255#235#219#215 + +#255#234#217#212#255#232#213#207#255#227#205#198#255#219#193#183#255#209#176 + +#162#255#196#153#136#255#181#129'l'#255#145'`K'#255'lB0'#255'a7$'#255']1'#30 + +#255'\0'#28#231'[/'#27'O'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27'$\0' + +#28#185'\1'#29#255'`5!'#255'f=*'#255#128'S>'#255#166'r['#255#188#139'v'#255 + +#201#161#145#255#213#181#169#255#223#197#189#255#229#209#202#255#233#216#210 + +#255#235#219#215#255#236#221#217#255#237#222#219#255#238#223#220#255#238#223 + +#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238 + +#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255 + +#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220 + +#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223 + +#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238 + +#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255 + +#238#223#220#255#238#223#220#255#237#222#219#255#237#222#218#255#236#221#217 + +#255#235#218#214#255#232#214#208#255#228#206#199#255#220#193#184#255#210#176 + +#163#255#197#155#137#255#184#134'o'#255#155'iR'#255'uI7'#255'c:'''#255'^3'#31 + +#255'\1'#29#252'[/'#27#144'[/'#27#14#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27'U\0'#28#228']1'#30#255'`6"'#255'g>,'#255'R?' + +#255#164'qZ'#255#188#139'v'#255#200#159#144#255#211#179#166#255#220#194#184 + +#255#228#206#199#255#232#214#209#255#235#219#215#255#237#222#219#255#238#225 + +#221#255#239#225#222#255#239#225#222#255#239#226#223#255#239#226#223#255#239 + +#226#223#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226#223#255 + +#239#226#223#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226#223 + +#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226 + +#223#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226#223#255#239 + +#226#223#255#239#226#223#255#239#226#223#255#239#226#223#255#239#225#222#255 + +#238#225#221#255#238#224#220#255#237#222#218#255#235#218#214#255#231#212#206 + +#255#226#203#195#255#218#191#180#255#209#174#160#255#197#154#136#255#184#132 + +'o'#255#154'hR'#255'uK8'#255'e;('#255'_4 '#255'\1'#29#255'\0'#28#197'[/'#27 + +'/'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0'[/'#27#12'[/'#27#134'\0'#28#242'^2'#31#255'a5#'#255'g>+'#255 + +'|Q='#255#160'lV'#255#184#133'p'#255#196#152#134#255#207#170#156#255#216#187 + +#175#255#224#200#192#255#230#210#203#255#234#216#211#255#236#220#216#255#238 + +#224#220#255#239#226#223#255#240#227#225#255#240#228#225#255#240#228#225#255 + +#241#229#226#255#241#229#226#255#241#229#226#255#241#229#226#255#241#229#227 + +#255#241#229#227#255#241#229#227#255#241#229#227#255#241#229#227#255#241#229 + +#227#255#241#229#227#255#241#229#227#255#241#229#227#255#241#229#226#255#241 + +#229#226#255#241#229#226#255#241#229#226#255#240#228#225#255#240#228#225#255 + +#240#227#224#255#239#225#222#255#238#223#220#255#236#220#215#255#233#215#210 + +#255#228#207#201#255#222#196#187#255#213#183#170#255#204#166#150#255#192#147 + +''#255#179'i'#255#150'fO'#255'tI7'#255'e;('#255'`5!'#255']1'#30#255'\0'#28 + +#223'[/'#27'`[/'#27#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#17'[/'#27'\' + +'0'#28#238']1'#30#255'`6"'#255'e<)'#255'rI6'#255#142'_J'#255#170'wa'#255#188 + +#140'w'#255#199#158#141#255#208#173#159#255#216#186#175#255#222#196#187#255 + ,#227#206#198#255#232#213#208#255#235#219#214#255#237#222#218#255#238#224#220 + +#255#239#226#223#255#240#227#225#255#241#229#226#255#242#230#228#255#242#230 + +#228#255#242#231#229#255#242#231#229#255#242#231#229#255#242#231#229#255#242 + +#231#229#255#242#231#229#255#242#231#229#255#242#230#228#255#241#229#227#255 + +#241#229#226#255#240#227#225#255#239#225#222#255#238#224#220#255#236#221#217 + +#255#234#218#213#255#231#211#206#255#226#204#196#255#220#194#184#255#214#183 + +#171#255#206#169#155#255#196#153#135#255#185#135'r'#255#162'q['#255#134'XD' + +#255'lC1'#255'c:'''#255'_4 '#255']0'#30#255'\0'#28#217'[/'#27'`[/'#27#4#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#13'[/' + +#27'w\0'#28#233']1'#30#255'_4 '#255'b8%'#255'h?-'#255'zN;'#255#149'dP'#255 + +#170'xa'#255#187#137't'#255#194#150#131#255#202#164#148#255#210#176#163#255 + +#216#187#175#255#220#194#184#255#224#200#192#255#228#207#199#255#231#212#206 + +#255#234#217#211#255#236#220#215#255#236#222#217#255#237#222#219#255#238#223 + +#220#255#238#223#220#255#238#224#220#255#238#223#220#255#237#223#219#255#237 + +#223#218#255#236#221#217#255#235#219#215#255#233#216#210#255#230#211#204#255 + +#227#204#197#255#223#199#190#255#219#192#183#255#215#185#173#255#208#173#159 + +#255#200#160#144#255#192#146''#255#183#133'o'#255#164's\'#255#142']J'#255'r' + +'I7'#255'f=*'#255'a6#'#255'^3'#31#255'\1'#29#255'\0'#28#210'[/'#27'X[/'#27#2 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#5'[/'#27'P\0'#28#173'\1'#29#249']1'#30#255'`' + +'5!'#255'c9&'#255'g>,'#255'qH6'#255#133'YE'#255#153'iT'#255#172'yd'#255#186 + +#136'q'#255#191#144'}'#255#196#153#136#255#202#162#146#255#207#171#156#255 + +#211#178#165#255#214#183#171#255#216#186#175#255#217#188#177#255#218#190#179 + +#255#219#191#182#255#219#192#182#255#219#192#181#255#218#189#179#255#217#187 + +#177#255#215#185#173#255#213#182#169#255#210#176#163#255#205#169#154#255#200 + +#160#144#255#195#151#133#255#190#142'z'#255#183#132'o'#255#167'u_'#255#148'e' + +'P'#255'S@'#255'mE2'#255'f=*'#255'b7%'#255'_4 '#255']1'#30#255'\0'#28#235'[' + +'/'#27#147'[/'#27'5'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0'[/'#27#18'[/'#27'i\0'#28#199'\1'#29#254']1'#30#255'_4 '#255 + +'a6#'#255'd9('#255'g>,'#255'oF3'#255'}Q>'#255#138'[G'#255#149'fQ'#255#160'oZ' + +#255#170'xa'#255#176'}h'#255#180#128'l'#255#183#133'p'#255#186#136's'#255#188 + +#138'u'#255#188#139'v'#255#187#138'u'#255#186#135'r'#255#183#132'n'#255#178 + +#128'j'#255#174'|e'#255#168'v`'#255#158'mW'#255#146'bN'#255#133'YE'#255'yM;' + +#255'mC1'#255'g>+'#255'c9&'#255'`6"'#255'^3'#31#255']1'#30#255'\0'#28#248'\0' + +#28#173'[/'#27'O[/'#27#5#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#20'[/'#27 + +'V\0'#28#153'\0'#28#220'\1'#29#255']1'#30#255'^3'#31#255'`5!'#255'a7$'#255'c' + +'9&'#255'e;('#255'f=*'#255'g>,'#255'i@.'#255'jB0'#255'mE2'#255'qH5'#255'tJ7' + +#255'qG5'#255'lC1'#255'jA0'#255'h?-'#255'g>+'#255'e<)'#255'd:('#255'c9&'#255 + +'a6#'#255'`5!'#255'^2'#31#255']1'#30#255'\1'#29#252'\0'#28#201'[/'#27#134'[/' + +#27'C[/'#27#8#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#31'[/'#27'_[/'#27#138'\0'#28#176'\0'#28 + +#213'\0'#28#248'\1'#29#255'\1'#29#255'\1'#29#255']1'#30#255'^2'#31#255'^2'#31 + +#255'^3'#31#255'^3'#31#255'^3'#31#255'^2'#31#255']1'#30#255']1'#30#255'\1'#29 + +#255'\1'#29#255'\1'#29#255'\0'#28#241'\0'#28#203'\0'#28#165'[/'#27'[/'#27'N' + +'[/'#27#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0'[/'#27#2'[/'#27'![/'#27'E[/'#27'U[/'#27'a[/'#27'm[/' + +#27'y[/'#27#134'\0'#29#141'[/'#27#130'[/'#27'v[/'#27'j[/'#27'^[/'#27'Q[/'#27 + +'=[/'#27#23#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#128#0 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#224#0#0#3#255#255#255 + +#255#255#255#255#255#255#255#255#254#0#0#0#0'?'#255#255#255#255#255#255#255 + +#255#255#255#240#0#0#0#0#7#255#255#255#255#255#255#255#255#255#255#128#0#0#0 + +#0#0#255#255#255#255#255#255#255#255#255#254#0#0#0#0#0#0'?'#255#255#255#255 + +#255#255#255#255#248#0#0#0#0#0#0#15#255#255#255#255#255#255#255#255#224#0#0#0 + +#0#0#0#3#255#255#255#255#255#255#255#255#128#0#0#0#0#0#0#0#255#255#255#255 + +#255#255#255#254#0#0#0#0#0#0#0#0'?'#255#255#255#255#255#255#252#0#0#0#0#0#0#0 + +#0#31#255#255#255#255#255#255#240#0#0#0#0#0#0#0#0#7#255#255#255#255#255#255 + +#224#0#0#0#0#0#0#0#0#3#255#255#255#255#255#255#128#0#0#0#0#0#0#0#0#1#255#255 + +#255#255#255#255#0#0#0#0#0#0#0#0#0#0''#255#255#255#255#254#0#0#0#0#0#0#0#0#0 + +#0'?'#255#255#255#255#252#0#0#0#0#0#0#0#0#0#0#31#255#255#255#255#248#0#0#0#0 + +#0#0#0#0#0#0#15#255#255#255#255#240#0#0#0#0#0#0#0#0#0#0#7#255#255#255#255#224 + +#0#0#0#0#0#0#0#0#0#0#3#255#255#255#255#192#0#0#0#0#0#0#0#0#0#0#1#255#255#255 + +#255#128#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0''#255 + +#255#254#0#0#0#0#0#0#0#0#0#0#0#0''#255#255#254#0#0#0#0#0#0#0#0#0#0#0#0'?' + +#255#255#252#0#0#0#0#0#0#0#0#0#0#0#0#31#255#255#248#0#0#0#0#0#0#0#0#0#0#0#0 + +#15#255#255#240#0#0#0#0#0#0#0#0#0#0#0#0#7#255#255#240#0#0#0#0#0#0#0#0#0#0#0#0 + +#7#255#255#224#0#0#0#0#0#0#0#0#0#0#0#0#3#255#255#192#0#0#0#0#0#0#0#0#0#0#0#0 + +#3#255#255#192#0#0#0#0#0#0#0#0#0#0#0#0#1#255#255#128#0#0#0#0#0#0#0#0#0#0#0#0 + +#1#255#255#128#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0''#254#0#0#0#0#0#0#0#0#0#0#0#0#0#0'' + +#254#0#0#0#0#0#0#0#0#0#0#0#0#0#0'?'#254#0#0#0#0#0#0#0#0#0#0#0#0#0#0'?'#252#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0'?'#252#0#0#0#0#0#0#0#0#0#0#0#0#0#0#31#252#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#31#248#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#248#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#15#248#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#7#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#7#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#7#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#7#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#3#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#192#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#3#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#192#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3 + +#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#3#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#7#240#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#7#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#7#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#15#248#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#248#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#248 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#252#0#0#0#0#0#0#0#0#0#0#0#0#0#0#31#252#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#31#252#0#0#0#0#0#0#0#0#0#0#0#0#0#0'?'#254#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0'?'#254#0#0#0#0#0#0#0#0#0#0#0#0#0#0'?'#254#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0''#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0''#255#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#255#255#128#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#128#0#0#0#0#0#0#0#0#0#0#0 + +#0#1#255#255#128#0#0#0#0#0#0#0#0#0#0#0#0#1#255#255#192#0#0#0#0#0#0#0#0#0#0#0 + +#0#3#255#255#192#0#0#0#0#0#0#0#0#0#0#0#0#3#255#255#224#0#0#0#0#0#0#0#0#0#0#0 + +#0#7#255#255#224#0#0#0#0#0#0#0#0#0#0#0#0#15#255#255#240#0#0#0#0#0#0#0#0#0#0#0 + ,#0#15#255#255#248#0#0#0#0#0#0#0#0#0#0#0#0#31#255#255#248#0#0#0#0#0#0#0#0#0#0 + +#0#0'?'#255#255#252#0#0#0#0#0#0#0#0#0#0#0#0''#255#255#252#0#0#0#0#0#0#0#0#0 + +#0#0#0#255#255#255#254#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#0#0#0#0#0#0 + +#0#0#0#0#1#255#255#255#255#128#0#0#0#0#0#0#0#0#0#0#3#255#255#255#255#128#0#0 + +#0#0#0#0#0#0#0#0#7#255#255#255#255#192#0#0#0#0#0#0#0#0#0#0#15#255#255#255#255 + +#224#0#0#0#0#0#0#0#0#0#0#31#255#255#255#255#240#0#0#0#0#0#0#0#0#0#0#31#255 + +#255#255#255#248#0#0#0#0#0#0#0#0#0#0'?'#255#255#255#255#252#0#0#0#0#0#0#0#0#0 + +#0''#255#255#255#255#254#0#0#0#0#0#0#0#0#0#1#255#255#255#255#255#255#0#0#0#0 + +#0#0#0#0#0#3#255#255#255#255#255#255#128#0#0#0#0#0#0#0#0#7#255#255#255#255 + +#255#255#224#0#0#0#0#0#0#0#0#15#255#255#255#255#255#255#240#0#0#0#0#0#0#0#0 + +#31#255#255#255#255#255#255#248#0#0#0#0#0#0#0#0''#255#255#255#255#255#255 + +#254#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#255#128#0#0#0#0#0#0#3#255 + +#255#255#255#255#255#255#255#192#0#0#0#0#0#0#7#255#255#255#255#255#255#255 + +#255#240#0#0#0#0#0#0#31#255#255#255#255#255#255#255#255#252#0#0#0#0#0#0'' + +#255#255#255#255#255#255#255#255#255#0#0#0#0#0#3#255#255#255#255#255#255#255 + +#255#255#255#224#0#0#0#0#15#255#255#255#255#255#255#255#255#255#255#252#0#0#0 + +#0''#255#255#255#255#255#255#255#255#255#255#255#192#0#0#7#255#255#255#255 + +#255#255#255#255#255#255#255#255#254#0#1#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255'('#0#0#0'@'#0#0#0#128#0#0#0#1#0' '#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'@@@'#4'III'#7'III'#7'33' + +'3'#5#128#128#128#2#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'UUU'#6'DDD'#15 + +'FFF'#22'EEE'#26'DDD'#30'III#GGG/DDD'#30#255'j>'#31#253'g>#'#249'[>+'#235'PB8'#218'HEC'#203'FEC'#195'E' + +'ED'#184'DDD'#166'DDDqEEE4@@@'#20'@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'999'#9'BBB'#31 + +'CCCPEDD'#143'FFE'#182'NB:'#211'Z?-'#231'g>#'#249'l?'#31#255'zK$'#253#150']*' + +#255#165'h.'#255#172'm0'#255#180's2'#255#186'x4'#255#189'{4'#255#192'5'#255 + +#190'|4'#255#187'x4'#255#182'u3'#255#175'p1'#255#167'j/'#255#156'b+'#255#131 + +'R&'#254'oB '#255'i>!'#253'_>)'#238'S@6'#222'FEB'#203'DDC'#190'DDD'#164'CCCk' + +'CCC.PPP'#16'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#128#128#128#2'CCC'#19'BBBBDDD'#136'EED'#179'LA9'#209'`=&'#243'k?'#31 + +#255'N&'#254#154'`,'#255#176'q1'#255#191'~5'#255#200#138'7'#255#207#145'8' + +#255#210#149'9'#255#213#153'9'#255#217#157':'#255#219#160';'#255#221#162';' + +#255#220#162':'#255#217#158':'#255#215#155':'#255#211#151'9'#255#208#146'8' + +#255#203#141'8'#255#194#129'6'#255#183'v4'#255#163'f.'#255#137'U('#254'qC"' + +#254'f>>!+++'#6#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#4'BBB'#27'CCC[CCB'#165'LD='#203']<' + +'('#238'j> '#255#135'R('#254#176'p3'#255#193#128'7'#255#202#139'9'#255#211 + +#151';'#255#220#162'<'#255#227#170'>'#255#232#176'?'#255#234#180'?'#255#237 + +#182'?'#255#239#185'@'#255#241#187'@'#255#242#188'A'#255#241#187'@'#255#240 + +#185'A'#255#238#183'@'#255#235#180'@'#255#233#178'?'#255#229#173'>'#255#222 + +#165'='#255#215#156'<'#255#205#144':'#255#196#133'8'#255#185'x5'#255#152'^-' + +#255'oC"'#254'd<#'#247'QA7'#220'FFE'#200'CCC'#180'CCC}AAA/UUU'#9#0#0#0#1#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#1'III'#7'CCC&DDDpECC'#180'X<,'#232'i=!'#254#128'O('#254 + +#170'l3'#255#194#130':'#255#210#150'>'#255#220#163'?'#255#227#171'A'#255#234 + +#180'B'#255#240#187'D'#255#242#190'D'#255#244#193'E'#255#246#194'D'#255#247 + +#195'E'#255#248#197'E'#255#249#197'E'#255#249#198'E'#255#249#197'E'#255#248 + +#196'E'#255#247#195'E'#255#246#195'E'#255#245#194'D'#255#243#191'D'#255#240 + +#188'C'#255#236#183'C'#255#230#174'B'#255#223#165'@'#255#215#156'?'#255#200 + +#137';'#255#182'u6'#255#146'[,'#255'm@!'#254'`:%'#244'KA;'#211'CCC'#189'CCC' + +#144'BBB>PPP'#16#128#128#128#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'999'#9'@@@4CCC'#133'HD@'#192'_9$'#244 + +'rE%'#254#164'h3'#255#191';'#255#206#146'?'#255#219#163'C'#255#232#178'F' + +#255#238#185'G'#255#241#189'H'#255#244#193'H'#255#246#195'I'#255#247#196'I' + +#255#247#197'J'#255#247#197'I'#255#247#198'I'#255#248#198'I'#255#248#198'I' + +#255#248#197'I'#255#248#198'I'#255#248#198'I'#255#248#198'I'#255#247#197'I' + +#255#247#197'I'#255#247#196'I'#255#246#196'I'#255#245#194'H'#255#242#190'H' + +#255#239#187'H'#255#235#182'G'#255#224#168'D'#255#211#153'A'#255#196#134'=' + +#255#177'q7'#255#133'Q)'#254'e: '#253'N?7'#218'DDC'#195'CCC'#160'FFFP@@@'#20 + +#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +'III'#7'FFF3CCC'#145'LB;'#204'd:"'#250'|L('#254#180's9'#255#202#143'A'#255 + +#216#159'F'#255#228#174'I'#255#236#184'K'#255#241#191'L'#255#243#193'M'#255 + +#244#194'M'#255#244#195'M'#255#245#196'M'#255#245#195'M'#255#245#195'M'#255 + +#245#195'M'#255#245#195'M'#255#245#195'M'#255#245#195'M'#255#245#195'M'#255 + +#245#195'M'#255#245#195'M'#255#245#195'M'#255#245#195'M'#255#245#195'M'#255 + +#245#195'M'#255#245#196'M'#255#245#195'M'#255#244#194'M'#255#243#194'M'#255 + +#242#192'M'#255#238#186'L'#255#232#179'J'#255#220#165'F'#255#208#150'C'#255 + +#190'<'#255#147'[.'#255'h< '#255'S=1'#228'EED'#199'DDD'#168'BBBUGGG'#18#0#0 + +#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#4'FFF(EEE'#134 + +'P?5'#212'e:!'#254#137'U,'#254#186'z='#255#208#150'E'#255#224#171'L'#255#233 + +#181'O'#255#238#187'P'#255#240#191'P'#255#242#192'Q'#255#242#193'Q'#255#242 + +#193'Q'#255#242#193'P'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242 + +#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242 + +#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242 + +#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242 + +#193'Q'#255#241#192'Q'#255#239#189'P'#255#234#184'O'#255#228#175'M'#255#215 + +#159'I'#255#194#132'@'#255#160'd3'#255'k?"'#254'X:*'#236'FDC'#201'CCC'#164'A' + +'AAG;;;'#13#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3'BBB'#31'CCCvO=' + +'3'#211'f:'#31#255#150']2'#255#190#128'A'#255#211#155'I'#255#226#175'Q'#255 + +#234#185'S'#255#237#188'T'#255#238#190'T'#255#239#191'U'#255#239#191'U'#255 + +#239#191'U'#255#239#191'U'#255#239#191'U'#255#239#191'U'#255#239#191'U'#255 + +#239#191'U'#255#235#189'S'#255'|d,'#255'N>'#28#255'4*'#19#255'=1'#22#255'WE' + +#31#255'w_*'#255#173#139'='#255#239#191'U'#255#239#191'U'#255#239#191'U'#255 + +#239#191'U'#255#239#191'U'#255#239#191'U'#255#239#191'U'#255#239#191'U'#255 + +#239#191'U'#255#239#190'T'#255#238#189'U'#255#236#187'S'#255#230#179'R'#255 + +#217#162'L'#255#198#138'D'#255#170'l8'#255'pC$'#254'Z8'''#240'DBB'#197'CCC' + ,#153'FFF:@@@'#8#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'FFF'#22'BBBeJ?9'#195'b8 ' + +#254#150']2'#255#194#133'E'#255#213#158'N'#255#226#176'T'#255#233#185'W'#255 + +#236#187'W'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255 + +#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255 + +'cO%'#255#4#3#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#1#1#0#255#18#14#7#255'A4'#24#255#134'k2'#255#218#174'R'#255 + +#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255 + +#236#188'X'#255#236#187'W'#255#234#186'W'#255#229#180'U'#255#218#165'P'#255 + +#201#143'H'#255#173'o<'#255'k>#'#254'S;-'#231'CCC'#193'CCC'#141'DDD-fff'#5#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0'@@@'#12'DDDKFA='#179'`7 '#251#137'S-'#255#192#131'E'#255 + +#214#161'Q'#255#226#176'W'#255#231#183'Y'#255#233#185'['#255#233#186'['#255 + +#234#185'Z'#255#234#185'Z'#255#234#185'Z'#255#234#185'Z'#255#234#185'Z'#255 + +#234#185'Z'#255#234#185'Z'#255#234#185'Z'#255'L<'#29#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8#7#3#255'P?'#31#255#203#161'N' + +#255#234#185'Z'#255#234#185'Z'#255#234#185'Z'#255#234#185'Z'#255#233#186'[' + +#255#232#183'Z'#255#228#178'Y'#255#219#167'T'#255#201#143'K'#255#163'g8'#255 + +'f: '#255'O=4'#222'DDD'#188'CCCzBBB'#27#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3'GGG$D@@'#147'\6#' + +#245'{I*'#254#185'{C'#255#211#157'R'#255#225#175'Z'#255#229#181'\'#255#230 + +#183']'#255#230#183']'#255#230#183']'#255#230#183']'#255#230#183']'#255#230 + +#183']'#255#230#183']'#255#230#183']'#255#230#183']'#255#230#183']'#255#138 + +'m8'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#24#20#10#255'x_0'#255#226#181'['#255 + +#230#183']'#255#230#183']'#255#230#183']'#255#230#181'\'#255#227#177'['#255 + +#217#165'V'#255#196#136'J'#255#151']4'#255'b8 '#254'K@9'#214'CCC'#175'AAAJ..' + +'.'#11#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0'@@@'#16'CCC\V6'''#228'nA&'#254#178'tA'#255#205#151'R'#255#221#172 + +'\'#255#226#179'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180 + +'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180 + +'_'#255#228#180'_'#255#228#180'_'#255#17#13#7#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#2#1#1#255'H9'#30#255#224#178']'#255#228#180'_'#255 + +#228#180'_'#255#227#179'^'#255#224#175']'#255#213#160'W'#255#190#129'H'#255 + +#137'T/'#255'^4 '#252'FB?'#201'CCC'#140'DDD"'#0#0#0#3#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#4'FFF,J=7'#175'`4'#30#255#165 + +'g;'#255#200#144'Q'#255#217#166'\'#255#223#176'`'#255#225#177'`'#255#225#177 + +'a'#255#225#177'a'#255#225#177'a'#255#225#177'a'#255#225#177'a'#255#225#177 + +'a'#255#225#177'a'#255#225#177'a'#255#225#177'a'#255#225#177'a'#255#218#171 + +'^'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#11#9#5#255#196#154'U'#255#225#177'a'#255#225#177'`'#255#224#177'a' + +#255#220#171'^'#255#208#154'W'#255#184'{F'#255'nA%'#254'T8*'#233'DDD'#180'CC' + +'CX333'#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'C' + +'CC'#19'CCCjY5#'#239'~J,'#254#191#132'M'#255#213#162']'#255#220#171'a'#255 + +#221#173'c'#255#222#174'b'#255#222#174'b'#255#222#174'b'#255#222#174'b'#255 + +#222#174'b'#255#222#174'b'#255#222#174'b'#255#222#174'b'#255#222#174'b'#255 + +#222#174'b'#255#222#174'b'#255#154'yC'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#15#11#6#255#218#172'`' + +#255#222#174'b'#255#222#174'b'#255#221#173'b'#255#217#167'_'#255#202#146'T' + +#255#156'a9'#255'^4'#30#254'G@='#206'DDD'#151'>>>)@@@'#4#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3'AAA+L;4'#188'b6 '#254#170'l@'#255#206#152 + +'Z'#255#217#168'b'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171 + +'d'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171 + +'d'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171 + +'d'#255#26#20#12#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + ,#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255'oW3'#255#219#171'd'#255#219#171'd'#255#219 + +#171'd'#255#218#169'c'#255#212#161'_'#255#187'L'#255'uD)'#254'W6('#238'CCC' + +#182'CCC[III'#14#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#12'EBB' + +'S[3'#31#244#134'O/'#255#192#134'Q'#255#212#162'b'#255#215#167'd'#255#216#168 + +'d'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#216#168 + +'d'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#216#168 + +'d'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#198#154'\'#255#5#4#2#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255'!'#25#15#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255 + +#214#166'd'#255#202#147'Y'#255#161'e='#255'^2'#29#255'J?:'#208'CCC'#137'EEE' + +#26#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'CCC'#23'O9/'#171'`3'#31 + +#254#174'pD'#255#203#150']'#255#212#163'e'#255#213#164'e'#255#213#164'e'#255 + +#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255 + +#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255 + +#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255#173#133'R'#255#3 + +#2#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#22#17#11#255#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255 + +#213#164'f'#255#209#158'a'#255#187#128'O'#255'yD)'#254'W4$'#241'BBB'#169'DDD' + +'1@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'FFF(W4$'#229'{E)'#255#191 + +#134'T'#255#207#157'c'#255#210#160'f'#255#210#160'f'#255#210#160'f'#255#210 + +#160'f'#255#210#160'f'#255#210#160'f'#255#210#160'f'#255#210#160'f'#255#152 + +'tJ'#255'[E,'#255'K9$'#255'{]<'#255#196#149'_'#255#210#160'f'#255#210#160'f' + +#255#210#160'f'#255#210#160'f'#255#210#160'f'#255#159'yM'#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'"'#26#17#255#210#160 + +'f'#255#210#160'f'#255#210#160'f'#255#210#160'f'#255#210#160'f'#255#209#160 + +'e'#255#199#146']'#255#156'_;'#255'\1'#28#254'FBA'#188'FFFXNNN'#13#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0'FFF'#11'F@=T\/'#28#253#151'\9'#255#200#147'_'#255#207 + +#156'e'#255#207#156'e'#255#207#156'e'#255#207#156'e'#255#207#156'e'#255#207 + +#156'e'#255#207#156'e'#255#178#135'W'#255'$'#27#17#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255'N:&'#255#207#156'e'#255#207#156'e'#255#207#156 + +'e'#255#207#156'e'#255#207#156'e'#255#3#2#1#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255'uX9'#255#207#156'e'#255#207#156'e'#255#207#156 + +'e'#255#207#156'e'#255#207#156'e'#255#207#157'e'#255#204#153'b'#255#180'wK' + +#255'a4'#30#254'M;3'#216'DDD'#132'==='#25#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'CC' + +'C'#19'N9.'#159'^2'#30#254#176'rI'#255#202#150'c'#255#203#153'e'#255#203#153 + +'f'#255#203#153'f'#255#203#153'f'#255#203#153'f'#255#203#153'f'#255#163'zQ' + +#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#29#22#15#255#203#153'f'#255#203#153'f'#255#203#153'f'#255#203#153'f' + +#255#14#10#7#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#4#3#2#255 + +#203#153'f'#255#203#153'f'#255#203#153'f'#255#203#153'f'#255#203#153'f'#255 + +#203#153'f'#255#203#153'f'#255#203#152'e'#255#190#134'X'#255'yC)'#254'V5&' + +#239'DDD'#165'FFF('#128#128#128#2#0#0#0#0#0#0#0#0#0#0#0#0'GGG'#25'V4%'#212's' + +'@&'#254#186#128'U'#255#199#148'd'#255#200#148'd'#255#200#148'd'#255#200#148 + +'d'#255#200#148'd'#255#200#148'd'#255#198#146'd'#255#12#9#6#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#138'fE'#255#200#148'd'#255#200#148'd'#255#200#148'd'#255#15#11#7#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#1#0#0#255'&'#28#19#255#145'kH'#255#200#148'd'#255 + +#200#148'd'#255#200#148'd'#255#200#148'd'#255#200#148'd'#255#200#148'd'#255 + +#200#148'd'#255#200#148'd'#255#194#141'^'#255#146'W6'#255'[0'#28#254'EBB'#178 + +'CCC9UUU'#6#0#0#0#0#0#0#0#0#0#0#0#0'JAA'#31'\1'#29#249#140'P2'#255#190#135'\' + +#255#196#143'c'#255#196#143'c'#255#196#143'c'#255#196#143'c'#255#196#143'c' + ,#255#196#143'c'#255'>-'#31#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'&'#28#19#255#196#143 + +'c'#255#196#143'c'#255#196#143'c'#255#25#18#12#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2#1#255'*'#31#21#255'kM6' + +#255#187#137'_'#255#196#143'c'#255#196#143'c'#255#196#143'c'#255#196#143'c' + +#255#196#143'c'#255#196#143'c'#255#196#143'c'#255#196#143'c'#255#196#143'c' + +#255#196#143'c'#255#194#141'b'#255#170'kF'#255'\0'#28#254'L<5'#203'CCCH333' + +#10#0#0#0#0#0#0#0#0#0#0#0#1'K3+@[/'#27#255#160'`>'#255#190#136'_'#255#191#137 + +'`'#255#191#137'`'#255#191#137'`'#255#191#137'`'#255#191#137'`'#255#189#135 + +'`'#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#30#21#15#255#191#137'`'#255#191#137 + +'`'#255#191#137'`'#255'aF1'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#5#3#2#255#165'vS'#255#191#137'`'#255#191#137'`'#255#191 + +#137'`'#255#191#137'`'#255#191#137'`'#255#191#137'`'#255#191#137'`'#255#191 + +#137'`'#255#191#137'`'#255#191#137'`'#255#191#137'`'#255#191#137'`'#255#191 + +#137'`'#255#191#136'`'#255#178'vQ'#255'h7 '#253'Q8,'#220'DDDV;;;'#13#0#0#0#0 + +#0#0#0#0'UUU'#3'R4''^[/'#27#255#169'hF'#255#187#131']'#255#187#132'^'#255#187 + +#132'^'#255#187#132'^'#255#187#132'^'#255#187#132'^'#255'uS;'#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255'{W>'#255#187#132'^'#255#187#132'^'#255#187#132'^' + +#255#185#130'^'#255#19#14#10#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#1#1#1#255#158'oO'#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132 + +'^'#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132 + +'^'#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132 + +'^'#255#187#132'^'#255#181'{V'#255'r<"'#255'T6'''#228'BBBd@@@'#16#0#0#0#0#0#0 + +#0#0'UUU'#6'T5''}_2'#30#253#171'kI'#255#183'}Z'#255#183'~Z'#255#183'~Z'#255 + +#183'~Z'#255#183'~Z'#255#183'~Z'#255'. '#23#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255'S9)' + +#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#173'xV'#255 + +#31#21#15#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'bC0'#255#183'~Z'#255#183'~Z' + +#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255 + +#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183 + +'~Z'#255#183'~Z'#255#181'zV'#255'zA%'#255'X4$'#237'DDDqCCC'#19#0#0#0#0#0#0#0 + +#0'@@@'#8'U4%'#149'f5'#31#252#172'mK'#255#180'yX'#255#180'yX'#255#180'yX'#255 + +#180'yX'#255#180'yX'#255#180'yX'#255#6#4#3#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#19#13#9#255#153'gK'#255 + +#180'yX'#255#180'yX'#255#180'yX'#255#180'yX'#255#180'yX'#255#180'yX'#255#180 + +'yX'#255#180'yX'#255'{S<'#255'+'#29#21#255#7#4#3#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255'gF3'#255#180'yX'#255#180'yX' + +#255#180'yX'#255#139']D'#255'+'#29#21#255#8#6#4#255#8#6#4#255#16#11#8#255'W:' + +'*'#255#178'wV'#255#180'yX'#255#180'yX'#255#180'yX'#255#180'yX'#255#180'yX' + +#255#180'yX'#255#180'yX'#255#179'yV'#255#131'F+'#255'[3!'#245'CCCyIII'#21#0#0 + +#0#0#0#0#0#0'UUU'#6'X3"'#165'n:"'#253#172'pO'#255#177'wW'#255#177'wW'#255#177 + +'wW'#255#177'wW'#255#177'wW'#255#173'uU'#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'P6'''#255#177'wW'#255#177'w' + +'W'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW' + +#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#158'jM'#255 + +'W;+'#255''''#26#19#255'"'#23#17#255'%'#25#18#255'W:+'#255#167'qS'#255#177'w' + +'W'#255#177'wW'#255#177'wW'#255'@+'#31#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#3#2#1#255#149'dI'#255#177'wW'#255#177'wW'#255#177 + +'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'vV'#255#139'M0'#255'[1'#30 + +#250'DDDpCCC'#19#0#0#0#0#0#0#0#0'UUU'#3'Y1'#31#182'v>%'#255#172'oQ'#255#175 + +'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255'}S?'#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#26#17#13#255#150'cK'#255#175 + +'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW' + +#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255 + +#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175 + +'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255'dC2'#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#9#6#4#255#169'pU' + +#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#174'sU'#255 + ,#145'S6'#255']0'#28#254'DBBd@@@'#16#0#0#0#0#0#0#0#0#0#0#0#0'Z0'#30#175'v=%' + +#255#171'nP'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255 + +'L2&'#255#0#0#0#255'/'#31#23#255'}R>'#255' '#21#16#255'!'#22#17#255#139'[E' + +#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255 + +#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174 + +'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV' + +#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255 + +'?*'#31#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255'6#'#27#255#174'rV'#255#174'rV'#255#174'rV'#255#174 + +'rV'#255#174'rV'#255#173'qT'#255#145'S7'#255'\1'#29#254'AAAV;;;'#13#0#0#0#0#0 + +#0#0#0#0#0#0#0'Z1'#30#150'n;$'#252#169'jM'#255#172'qU'#255#172'qU'#255#172'q' + +'U'#255#172'qU'#255#172'qU'#255#149'bI'#255'@* '#255#170'qU'#255#172'qU'#255 + +#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172 + +'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU' + +#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255 + +#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172 + +'qU'#255#172'qU'#255#172'qU'#255'G/#'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#24#16#12#255#172'qU' + +#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#171'oS'#255#138'N3'#255 + +'\2'#31#249'DDDG999'#9#0#0#0#0#0#0#0#0#0#0#0#0'X1!|g7#'#250#167'gI'#255#172 + +'pT'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU' + +#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255 + +#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255'P5('#255')'#27#20#255#27#18 + +#13#255'5#'#26#255'pJ8'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255 + +#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172 + +'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#162'jO'#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#9#6#4#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU' + +#255#170'mR'#255#131'I.'#255'[4"'#241'FFF7UUU'#6#0#0#0#0#0#0#0#0#0#0#0#0'Y1!' + +'`b5 '#251#164'cG'#255#172'pU'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'r' + +'W'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW' + +#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255'}S?'#255#9#6#5#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#16#11#8#255#152'dM'#255#173'rW' + +#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255 + +#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173 + +'rW'#255'$'#24#18#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#4#3#2#255#173'rW'#255#173'rW'#255#173'rW'#255#173'r' + +'W'#255#173'rW'#255#170'mQ'#255'|C*'#255'W4$'#229'CCC&'#0#0#0#2#0#0#0#0#0#0#0 + +#0#0#0#0#0'X5!A^2'#31#254#162'bE'#255#173'rV'#255#175'tY'#255#175'tY'#255#175 + +'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY' + +#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255'{Q?'#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#14#9#7#255 + +#173'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175 + +'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY' + +#255#175'tY'#255#132'XC'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#21#14#11#255#175'tY'#255#175'tY'#255#175 + +'tY'#255#175'tY'#255#174'tY'#255#170'mP'#255't?('#254'U5&'#203'@@@'#24#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0'X0'#24' ^2'#31#255#156'\A'#255#175'v\'#255#177'y`' + +#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255 + +#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255#11#8 + +#6#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#136']J'#255#177'y`'#255#177'y`'#255'7%'#30#255#9#6#5#255 + +#13#9#7#255#16#11#9#255#26#18#14#255#139'_K'#255#177'y`'#255#177'y`'#255#177 + +'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255#18#12#9#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'<)!'#255#177'y`'#255#177 + +'y`'#255#177'y`'#255#177'y`'#255#176'x^'#255#169'kP'#255'j<&'#253'U4%'#168';' + +';;'#13#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'^2'#29#234#136'O4'#255#176'x' + +'^'#255#180'~f'#255#180'~f'#255#180'~f'#255#180'~f'#255#180'~f'#255#180'~f' + +#255#180'~f'#255#180'~f'#255#180'~f'#255#180'~f'#255#180'~f'#255#180'~f'#255 + +#146'gS'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#139'bO'#255#170'x`'#255#20#14#11#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255']A4'#255#180'~f'#255 + +#180'~f'#255#180'~f'#255#180'~f'#255#180'~f'#255'qO@'#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#165't^'#255#180'~f'#255 + ,#180'~f'#255#180'~f'#255#180'~f'#255#178'zb'#255#162'dH'#255'_3'#31#254'R6)c' + +'@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#29#153'r?)'#252#174'sZ' + +#255#182#129'j'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l' + +#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l' + +#255#183#131'l'#255#183#131'l'#255'ZA5'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#5#3#3#255#179'j' + +#255'uTE'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255'{XI'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183 + +#131'l'#255#183#131'l'#255#20#15#12#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255':)"'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131 + +'l'#255#183#131'l'#255#179'|c'#255#140'R9'#255'\2'#31#248'@@6'#28#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#29'E`5 '#252#166'iO'#255#183#131'l' + +#255#186#136'q'#255#186#136'q'#255#186#136'q'#255#186#136'q'#255#186#136'q' + +#255#186#136'q'#255#186#136'q'#255#186#136'q'#255#186#136'q'#255#186#136'q' + +#255#186#136'q'#255'\D8'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'oQC'#255#186#136'q'#255'X@6'#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#12#9#7#255#186#136'q'#255#186#136'q'#255#186#136'q'#255#186#136'q'#255 + +#186#136'q'#255#148'lZ'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#169'|g'#255#186#136'q'#255#186#136'q'#255#186#136'q'#255#186#136'q'#255#185 + +#134'q'#255#177'y`'#255'tB+'#254'W2!'#194'III'#14#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0'@@'#0#4'^3'#30#245#144'W='#255#184#134'o'#255#189#141'x' + +#255#189#141'x'#255#189#141'x'#255#189#141'x'#255#189#141'x'#255#189#141'x' + +#255#189#141'x'#255#189#141'x'#255#189#141'x'#255#189#141'x'#255#189#141'x' + +#255'tWJ'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255'('#30#26#255#189#141'x'#255#189#141'x'#255'?/('#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#187#139'v'#255#189#141'x'#255#189#141'x'#255#189#141'x'#255#189#141 + +'x'#255#189#141'x'#255#172#128'm'#255'_G<'#255#1#0#0#255#0#0#0#255'-"'#28#255 + +#189#141'x'#255#189#141'x'#255#189#141'x'#255#189#141'x'#255#189#141'x'#255 + +#186#137's'#255#171'oU'#255'a6"'#253'T5$jUUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0'\/'#27#170'vD,'#252#181#128'h'#255#190#144'{'#255 + +#192#146'~'#255#192#146'~'#255#192#146'~'#255#192#146'~'#255#192#146'~'#255 + +#192#146'~'#255#192#146'~'#255#192#146'~'#255#192#146'~'#255#192#146'~'#255 + +#186#142'z'#255#1#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#2#1#1#255#186#142'z'#255#192#146'~'#255#192#146'~'#255'=.('#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#192#146'~'#255#192#146'~'#255#192#146'~'#255#192#146'~'#255#192 + +#146'~'#255#192#146'~'#255#192#146'~'#255#192#146'~'#255#0#0#0#255#0#0#0#255 + +#167'n'#255#192#146'~'#255#192#146'~'#255#192#146'~'#255#192#146'~'#255#191 + +#145'}'#255#186#137's'#255#149'[A'#255'^1'#31#250'F:.'#22#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'\.'#28'H`5 '#252#164'jP'#255#190 + +#143'z'#255#194#151#131#255#194#151#131#255#194#151#131#255#194#151#131#255 + +#194#151#131#255#194#151#131#255#194#151#131#255#194#151#131#255#194#151#131 + +#255#194#151#131#255#194#151#131#255#27#21#18#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255' '#25#21#255#194#151#131#255#194#151#131 + +#255#194#151#131#255'7*%'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#12#9#8#255#194#151#131#255#194#151#131#255 + +#194#151#131#255#194#151#131#255#194#151#131#255#194#151#131#255#194#151#131 + +#255#190#149#129#255#0#0#0#255'0% '#255#194#151#131#255#194#151#131#255#194 + +#151#131#255#194#151#131#255#194#151#131#255#192#147''#255#180'~f'#255'q@+' + +#252'Z0'#29#180#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0']0'#28#199'{H2'#252#184#134'o'#255#196#153#134#255#197#156 + +#137#255#197#156#137#255#197#156#137#255#197#156#137#255#197#156#137#255#197 + +#156#137#255#197#156#137#255#197#156#137#255#197#156#137#255#197#156#137#255 + +'G81'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'WE=' + +#255#197#156#137#255#197#156#137#255#191#152#133#255#1#1#1#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#135'k^' + +#255#197#156#137#255#197#156#137#255#197#156#137#255#197#156#137#255#197#156 + +#137#255#197#156#137#255#197#156#137#255#197#156#137#255#16#12#11#255#174#138 + +'y'#255#197#156#137#255#197#156#137#255#197#156#137#255#197#156#137#255#197 + +#155#136#255#191#145'|'#255#151'_F'#255'^3'#31#253'T2!-'#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[0'#29'5_4 '#254 + +#161'hP'#255#195#152#132#255#200#161#143#255#200#161#144#255#200#161#144#255 + ,#200#161#144#255#200#161#144#255#200#161#144#255#200#161#144#255#200#161#144 + +#255#200#161#144#255#200#161#144#255'xaW'#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#1#1#1#255#171#138'{'#255#200#161#144#255#200#161#144#255 + +'f\'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255')!'#30#255#200#161#144#255#200#161#144#255#200#161#144#255#200 + +#161#144#255#200#161#144#255#200#161#144#255#200#161#144#255#200#161#144#255 + +#200#161#144#255#153'{n'#255#200#161#144#255#200#161#144#255#200#161#144#255 + +#200#161#144#255#200#161#144#255#198#156#138#255#181#128'h'#255'l>*'#252'Z1' + +#30#159#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0'^0'#27#173'uE/'#249#186#136'r'#255#201#162#145#255 + +#203#165#150#255#203#165#150#255#203#165#150#255#203#165#150#255#203#165#150 + +#255#203#165#150#255#203#165#150#255#203#165#150#255#203#165#150#255#163#132 + +'x'#255#0#0#0#255#0#0#0#255#26#21#19#255',$!'#255'-%!'#255#156'~s'#255#203 + +#165#150#255#203#165#150#255#203#165#150#255'@4/'#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#4#3#3#255#186#151#138#255#203 + +#165#150#255#203#165#150#255#203#165#150#255#203#165#150#255#203#165#150#255 + +#203#165#150#255#203#165#150#255#203#165#150#255#203#165#150#255#203#165#150 + +#255#203#165#150#255#203#165#150#255#203#165#150#255#203#165#150#255#203#164 + +#149#255#195#152#132#255#146'\D'#255'_3'#31#247'R3'#30#25#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +'Z-'#30'"^4 '#252#155'cK'#255#196#153#136#255#206#169#155#255#207#171#156#255 + +#207#171#156#255#207#171#156#255#207#171#156#255#207#171#156#255#207#171#156 + +#255#207#171#156#255#207#171#156#255#203#167#152#255#0#0#0#255#0#0#0#255#193 + +#159#145#255#207#171#156#255#207#171#156#255#207#171#156#255#207#171#156#255 + +#207#171#156#255#207#171#156#255'E94'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#15#12#11#255#182#150#137#255#207#171#156#255#207#171 + +#156#255#207#171#156#255#207#171#156#255#207#171#156#255#207#171#156#255#207 + +#171#156#255#207#171#156#255#207#171#156#255#207#171#156#255#207#171#156#255 + +#207#171#156#255#207#171#156#255#207#171#156#255#206#170#155#255#201#162#145 + +#255#178'}f'#255'h<('#250'[0'#28#129#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0']1' + +#29#130'f:&'#250#171'u^'#255#202#164#148#255#210#176#163#255#210#177#164#255 + +#210#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255#210#177#164 + +#255#210#177#164#255#210#177#164#255#2#1#1#255#27#22#21#255#210#177#164#255 + +#210#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255#210#177#164 + +#255#210#177#164#255#210#177#164#255'I=8'#255#6#5#4#255#0#0#0#255#0#0#0#255#0 + +#0#0#255'''!'#31#255#206#175#162#255#210#177#164#255#210#177#164#255#210#177 + +#164#255#210#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255#210 + +#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255 + +#210#177#164#255#210#177#164#255#210#176#163#255#206#170#155#255#188#139'w' + +#255'zI4'#252'^2'#29#222']/'#23#11#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#1'^1'#29#181'oA-'#249#182#132'n'#255#208#173#159#255#213#182#169#255#213#183 + +#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213 + +#183#170#255#213#183#170#255#12#10#9#255#159#136''#255#213#183#170#255#213 + +#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255 + +#213#183#170#255#213#183#170#255#213#183#170#255#139'xo'#255#0#0#0#255#0#0#0 + +#255'% '#30#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170 + +#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183 + +#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213 + +#183#170#255#213#183#170#255#213#183#170#255#211#178#165#255#196#152#134#255 + +#136'T?'#254'`1 '#243'U+'#28'$'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0'U+'#21#12']2'#30#218'zK5'#251#192#146''#255#212#180#168#255#216#187 + +#176#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217 + +#188#177#255#217#188#177#255'o`Z'#255#217#188#177#255#217#188#177#255#217#188 + +#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217 + +#188#177#255#217#188#177#255#217#188#177#255#27#24#22#255#0#0#0#255#9#8#7#255 + +#209#180#171#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177 + +#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188 + +#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217 + +#188#177#255#217#188#177#255#215#185#173#255#202#163#147#255#152'cM'#255'`5 ' + +#252'X.'#27'B'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0'].'#23'!_3 '#241#135'V@'#254#197#155#137#255#215#185#173#255#219#193 + +#183#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220 + +#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255 + +#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184 + +#255#220#194#184#255#220#194#184#255#4#4#4#255#13#11#11#255#197#173#164#255 + +#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184 + +#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194 + +#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220 + +#194#183#255#218#190#179#255#205#169#154#255#165'pY'#255'b8$'#252'[/'#27'h'#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0'Y1'#28'?_3!'#249#132'T?'#252#193#148#130#255#215#186#174#255#223#198 + +#189#255#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223 + +#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255 + +#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191 + +#255#223#200#191#255#199#179#171#255#215#192#183#255#223#200#191#255#223#200 + +#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223 + +#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255 + +#223#200#191#255#223#200#191#255#223#200#191#255#223#199#190#255#219#192#183 + +#255#203#165#150#255#158'kS'#255'c9%'#251']0'#30#147#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +'Z-'#25'3_3'#30#234'wI5'#250#185#138'v'#255#215#186#174#255#225#203#194#255 + +#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197 + +#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205 + +#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227 + +#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255 + +#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197 + +#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205 + +#197#255#226#204#196#255#220#194#183#255#200#159#143#255#144'_H'#254'a6"'#253 + +'\1'#30'y'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'\3'#31#25'^2'#29#207'nB.' + +#249#175'~i'#255#213#182#169#255#225#202#193#255#230#209#203#255#230#211#205 + +#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211 + +#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230 + +#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255 + +#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205 + +#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211 + +#205#255#230#210#204#255#227#205#198#255#219#191#181#255#193#149#131#255#131 + +'R='#251'_4 '#247'Z0'#26'O'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0'` '#8']0'#28#169'e:'''#250#148'aL'#255#196#153#136#255#220#193#183 + +#255#229#209#202#255#233#216#210#255#234#216#211#255#234#216#211#255#234#216 + +#211#255#234#216#211#255#234#216#211#255#234#216#211#255#234#216#211#255#234 + +#216#211#255#234#216#211#255#234#216#211#255#234#216#211#255#234#216#211#255 + +#234#216#211#255#234#216#211#255#234#216#211#255#234#216#211#255#234#216#211 + +#255#234#216#211#255#234#216#211#255#234#216#211#255#234#216#211#255#233#216 + +#211#255#231#212#206#255#224#200#192#255#207#171#156#255#168'va'#255'rE1'#249 + +'^3'#31#230'Y,'#28'.'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0'^1'#29'h`3'#31#237'nA/'#249#158'mW'#255#203#165#150 + +#255#224#201#192#255#232#213#208#255#235#219#215#255#237#222#218#255#237#222 + +#218#255#237#222#218#255#237#222#218#255#237#222#218#255#237#222#218#255#237 + +#222#218#255#237#222#218#255#237#222#218#255#237#222#218#255#237#222#218#255 + +#237#222#218#255#237#222#218#255#237#222#218#255#237#222#218#255#237#222#218 + +#255#237#222#218#255#236#220#216#255#233#216#211#255#228#206#200#255#213#182 + +#170#255#177#131'n'#255'}M:'#250'a6"'#253']1'#29#155'U1'#24#21#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0'].'#23#11']1'#29'~`5!'#246'tF5'#249#166'u`'#255#202#164#148#255#221 + ,#195#186#255#230#210#203#255#234#218#213#255#238#224#220#255#240#227#224#255 + +#240#227#225#255#240#227#225#255#240#227#225#255#240#227#225#255#240#227#225 + +#255#240#227#225#255#240#227#225#255#240#227#225#255#240#227#225#255#240#227 + +#225#255#239#225#222#255#236#220#215#255#232#213#207#255#225#203#194#255#210 + +#176#164#255#183#138'u'#255#133'UA'#252'c9&'#254'^2'#30#178'\.'#26''''#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'U1'#24#21']0'#30#147'`7"'#251 + +'jA-'#249#133'UA'#253#169'zf'#255#201#162#146#255#220#194#184#255#230#211#205 + +#255#233#215#210#255#234#217#212#255#236#220#215#255#237#222#218#255#238#223 + +#220#255#237#222#219#255#236#220#216#255#234#219#213#255#233#216#211#255#231 + +#213#206#255#225#203#194#255#209#174#160#255#181#136'u'#255#145'`L'#255'sG4' + +#249'c9&'#255'_2'#30#198'].'#28'7'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'U+'#28#18'\.'#27'^_1'#30#179'c7$' + +#248'h?,'#251'Q;'#251#148'dN'#255#163't_'#255#175#129'n'#255#186#143'~'#255 + +#198#157#141#255#204#167#151#255#201#161#145#255#191#149#132#255#179#135'u' + +#255#167'ye'#255#153'iT'#255#136'WC'#254'pE2'#249'c9&'#255'_3'#31#212'Z/'#27 + +'|].'#29','#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'U9'#28#9'\.'#26'N' + +'^0'#29#157'`4 '#203'c6#'#230'c7%'#249'd:('#255'f=*'#255'i?-'#252'g>+'#255'e' + +';('#255'd9&'#253'b7$'#237'a5!'#214'_1'#30#180'\/'#26'lX,'#26#29#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'`0 '#16'[1'#24'*].'#27'B]1'#29'4\3'#31#25'U' + +'U'#0#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255 + +#255#248#15#255#255#255#255#255#254#0#0''#255#255#255#255#240#0#0#7#255#255 + +#255#255#192#0#0#1#255#255#255#255#0#0#0#0#255#255#255#252#0#0#0#0'?'#255#255 + +#248#0#0#0#0#31#255#255#240#0#0#0#0#7#255#255#192#0#0#0#0#3#255#255#128#0#0#0 + +#0#1#255#255#128#0#0#0#0#0#255#255#0#0#0#0#0#0''#254#0#0#0#0#0#0''#252#0#0 + +#0#0#0#0'?'#252#0#0#0#0#0#0#31#248#0#0#0#0#0#0#31#248#0#0#0#0#0#0#15#240#0#0 + +#0#0#0#0#15#240#0#0#0#0#0#0#7#224#0#0#0#0#0#0#7#224#0#0#0#0#0#0#7#224#0#0#0#0 + +#0#0#3#192#0#0#0#0#0#0#3#192#0#0#0#0#0#0#3#192#0#0#0#0#0#0#1#192#0#0#0#0#0#0 + +#1#192#0#0#0#0#0#0#1#128#0#0#0#0#0#0#1#128#0#0#0#0#0#0#1#128#0#0#0#0#0#0#1 + +#128#0#0#0#0#0#0#1#128#0#0#0#0#0#0#1#128#0#0#0#0#0#0#1#192#0#0#0#0#0#0#1#192 + +#0#0#0#0#0#0#1#192#0#0#0#0#0#0#1#192#0#0#0#0#0#0#1#192#0#0#0#0#0#0#3#192#0#0 + +#0#0#0#0#3#224#0#0#0#0#0#0#3#224#0#0#0#0#0#0#7#224#0#0#0#0#0#0#7#224#0#0#0#0 + +#0#0#7#240#0#0#0#0#0#0#15#240#0#0#0#0#0#0#15#248#0#0#0#0#0#0#31#248#0#0#0#0#0 + +#0#31#252#0#0#0#0#0#0'?'#252#0#0#0#0#0#0''#254#0#0#0#0#0#0''#254#0#0#0#0#0 + +#0#255#255#0#0#0#0#0#1#255#255#128#0#0#0#0#3#255#255#192#0#0#0#0#7#255#255 + +#224#0#0#0#0#15#255#255#240#0#0#0#0#31#255#255#248#0#0#0#0'?'#255#255#254#0#0 + +#0#0''#255#255#255#0#0#0#1#255#255#255#255#192#0#0#7#255#255#255#255#240#0#0 + +#31#255#255#255#255#254#0#0#255#255#255#255#255#255#248#31#255#255#255#255 + +#255#255#255#255#255#255#255'('#0#0#0'0'#0#0#0'`'#0#0#0#1#0' '#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3'333'#5'UUU'#6'III'#7'@@@'#8'@@@' + +#8'III'#7'UUU'#6'333'#5'UUU'#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#1'@@@'#4'@@@'#8'@@@'#16'DDD1BBBMCCC_FCCrDBB'#129'FDD'#133'CCCvCCCcDDDRD' + +'DD('#240 + +'l@!'#252'qE!'#253'yJ$'#252#129'R&'#252#138'X)'#253#134'T('#253'}N%'#252'uG#' + +#252'oC"'#253'h=#'#248'Z>.'#230'OC;'#211'FEC'#198'DDC'#187'BBB|CCC&999'#9#0#0 + +#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#2'<<<'#17'CCCWEED'#170'OB9'#211'd=&'#244'qE"'#253 + +#137'V)'#253#164'h.'#255#186'y3'#255#194#130'5'#255#198#135'6'#255#203#140'7' + +#255#207#145'8'#255#205#143'7'#255#201#137'7'#255#196#132'6'#255#192'5'#255 + +#177'r1'#255#152'_+'#254'{L%'#252'k?"'#251'[>-'#233'IEA'#203'EDD'#184'DDDq<<' + +'<'#30'@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0'@@@'#4'BBB#EDD'#146'KB<'#205'a='''#242'yK&'#252#166'i/'#255#192 + +#128'6'#255#205#143'9'#255#217#159'<'#255#226#169'>'#255#230#173'>'#255#232 + +#176'>'#255#235#180'?'#255#237#182'@'#255#236#181'?'#255#234#178'>'#255#231 + +#175'>'#255#228#171'>'#255#223#165'<'#255#211#150':'#255#199#136'8'#255#182 + +'v5'#255#146'\,'#253'k@"'#252'W?1'#227'GFE'#199'CCC'#171'???=@@@'#8#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'III'#7'DDD8ECB'#170'[>,' + +#234'sF$'#252#160'e0'#255#196#133';'#255#216#158'@'#255#227#170'A'#255#234 + +#180'C'#255#241#189'D'#255#245#193'E'#255#246#195'F'#255#247#195'F'#255#247 + +#196'E'#255#248#197'F'#255#248#197'E'#255#247#195'F'#255#247#194'F'#255#246 + +#194'E'#255#244#192'E'#255#238#184'C'#255#230#176'C'#255#223#166'A'#255#207 + +#147'='#255#182'w7'#255#138'V+'#253'h>#'#250'NA9'#215'CCC'#186'@@@[;;;'#13#0 + +#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#8'EEENGC?'#189'b;%'#245#139 + +'W-'#253#190';'#255#212#153'B'#255#227#172'F'#255#239#186'I'#255#242#191'J' + +#255#244#193'K'#255#246#195'K'#255#247#196'K'#255#247#196'K'#255#247#196'L' + +#255#247#196'L'#255#247#196'L'#255#247#196'L'#255#247#196'L'#255#247#196'K' + +#255#247#196'K'#255#246#196'K'#255#245#195'J'#255#243#193'J'#255#242#190'J' + +#255#234#180'H'#255#221#165'E'#255#202#142'@'#255#173'o5'#255'oC$'#252'T?3' + +#225'CCC'#193'AAAy@@@'#16#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'+++'#6'DDD@K@<'#198'g<"' + +#250#154'a2'#254#200#141'B'#255#222#168'J'#255#234#183'N'#255#239#189'P'#255 + +#242#192'P'#255#242#193'P'#255#243#193'P'#255#243#193'P'#255#243#193'P'#255 + +#243#193'P'#255#243#193'P'#255#243#193'P'#255#243#193'P'#255#243#193'P'#255 + +#243#193'P'#255#243#193'P'#255#243#193'P'#255#243#193'P'#255#243#193'P'#255 + +#242#193'P'#255#242#193'P'#255#241#191'P'#255#238#187'N'#255#229#176'L'#255 + +#214#158'G'#255#183'y;'#255'yJ)'#252'[=,'#236'CCB'#195'EEEoFFF'#11#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0'UUU'#3'CCC.J?;'#190'g=#'#252#167'k7'#255#205#147'H'#255#226#173'P'#255#235 + +#186'T'#255#238#189'T'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239 + +#190'U'#255#239#190'U'#255#239#190'U'#255#191#152'D'#255'A4'#23#255'>1'#22 + +#255'D6'#24#255'H9'#26#255'RA'#29#255#146's4'#255#228#182'Q'#255#239#190'U' + +#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#238#190'U' + +#255#237#187'T'#255#232#182'S'#255#217#162'M'#255#191#129'B'#255#132'R-'#253 + +'[9('#240'DDD'#191'CCCW@@@'#8#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'>>>'#29'F@='#169'd9#'#250#165'i8'#255#208 + +#151'L'#255#226#174'U'#255#233#184'Y'#255#235#186'Y'#255#235#187'Y'#255#235 + +#187'Y'#255#235#187'Y'#255#235#187'Y'#255#235#187'Y'#255#235#187'Y'#255'<0' + +#23#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255 + ,#0#0#0#255#6#5#2#255'*!'#16#255'w^-'#255#227#181'W'#255#235#187'Y'#255#235 + +#187'Y'#255#235#186'Y'#255#234#186'Y'#255#231#181'X'#255#218#164'Q'#255#194 + +#133'E'#255'{J*'#252'U=/'#230'CCC'#186'EEE?@@@'#4#0#0#0#0#0#0#0#0#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'#10'DAAw_9%'#244#150'^4'#254#204#148 + +'N'#255#225#175'Y'#255#230#181'\'#255#231#183'\'#255#231#183'\'#255#231#183 + +'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255'hR*'#255 + +#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#1#1#0#255'*!'#17#255#164#130'B' + +#255#231#183'\'#255#231#183'\'#255#231#182']'#255#228#179'['#255#217#165'V' + +#255#185'|C'#255'nA'''#252'N>5'#219'CCC'#163'@@@'#20#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#2'@@@,W8*'#227#132'P/'#253#196 + +#139'M'#255#220#170'['#255#226#179'_'#255#227#179'_'#255#227#179'_'#255#227 + +#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227 + +#179'_'#255#4#3#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#1#1#0#255#7#6#3#255#178#141'J'#255#227#179'_'#255#227#179'_'#255#225 + +#176'^'#255#211#158'U'#255#174'q?'#255'c9"'#252'GA>'#203'BBB]III'#7#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'FFF'#11'H>:'#150'e:#'#252#186'~H'#255 + +#214#164'\'#255#222#174'a'#255#223#175'b'#255#223#175'b'#255#223#175'b'#255 + +#223#175'b'#255#223#175'b'#255#223#175'b'#255#223#175'b'#255#223#175'b'#255 + +#188#148'S'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255#154'yC'#255#223#175'b'#255#223 + +#175'a'#255#220#171'`'#255#204#150'U'#255#145'Y5'#254'Y8('#238'CCC'#175'FFF' + +#29#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3'AAA3Z7'''#236#148'\6'#255 + +#207#154'Z'#255#218#170'b'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255 + +#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255 + +#219#171'd'#255#211#165'`'#255#6#5#3#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2#1#255#219#171 + +'d'#255#219#171'd'#255#219#171'd'#255#215#166'`'#255#189#129'M'#255'h=$'#252 + +'H>;'#207'EEEhIII'#7#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'III'#7'K<5'#137'h;$'#252 + +#188#130'O'#255#213#164'b'#255#215#167'd'#255#215#167'd'#255#215#167'd'#255 + +#215#167'd'#255#215#167'd'#255#215#167'd'#255#215#167'd'#255#215#167'd'#255 + +#215#167'd'#255#215#167'd'#255#215#167'd'#255#168#130'N'#255#1#1#1#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#200#155']'#255#215#167'd'#255#215#167'd'#255#215#166'd'#255 + +#205#153']'#255#153'`:'#255'[6$'#243'CCC'#164';;;'#13#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0'777'#14'Z5%'#229#150'[8'#255#203#150'^'#255#211#162'e'#255#211#162 + +'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162 + +'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162 + +'e'#255#211#162'e'#255#142'mD'#255#1#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#145'pF'#255#211#162'e' + +#255#211#162'e'#255#211#162'e'#255#210#159'd'#255#189#131'R'#255'f9#'#252'I@' + +';'#202'===.'#128#128#128#2#0#0#0#0#0#0#0#0#128#128#128#2'D??4]3'#30#252#181 + +'yM'#255#206#155'd'#255#207#157'f'#255#207#157'f'#255#207#157'f'#255#207#157 + +'f'#255#205#155'f'#255'S?('#255#1#1#1#255#1#0#0#255#3#2#1#255#15#11#7#255#169 + +#128'S'#255#207#157'f'#255#207#157'f'#255#207#157'f'#255#16#12#8#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0 + +#255#186#141'\'#255#207#157'f'#255#207#157'f'#255#207#157'f'#255#207#157'e' + +#255#201#148'`'#255#135'O0'#254'R9-'#226'BBBeIII'#7#0#0#0#0#0#0#0#0'UUU'#6'O' + +'8/'#141'o>'''#251#193#139'['#255#203#151'e'#255#203#152'e'#255#203#152'e' + +#255#203#152'e'#255#203#152'e'#255#23#17#11#255#1#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#1#1#1#255#153'rL'#255#203#152'e'#255#203#152'e'#255',!' + +#22#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0 + +#255' '#24#16#255#203#152'e'#255#203#152'e'#255#203#152'e'#255#203#152'e'#255 + +#203#152'e'#255#202#150'd'#255#165'jC'#255'\3!'#247'DDD'#151'MMM'#10#0#0#0#0 + +#0#0#0#0'@@@'#8'Z6%'#206#142'T5'#255#195#142'a'#255#198#145'c'#255#198#145'c' + +#255#198#145'c'#255#198#145'c'#255'W@,'#255#1#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255'%'#27#19#255#198#145'c'#255#198#145'c' + ,#255'U>+'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255#1#1#1#255#27#20#13 + +#255'vW;'#255#198#145'c'#255#198#145'c'#255#198#145'c'#255#198#145'c'#255#198 + +#145'c'#255#198#145'c'#255#198#145'c'#255#184'}S'#255'`4 '#252'FA>'#183'@@@' + +#12#0#0#0#0#0#0#0#0'999'#9']2'#30#243#166'gD'#255#192#138'`'#255#192#139'a' + +#255#192#139'a'#255#192#139'a'#255#190#137'a'#255#1#1#1#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8#6#4#255#192#139'a' + +#255#192#139'a'#255#129']B'#255#1#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'Q;)'#255#192 + +#139'a'#255#192#139'a'#255#192#139'a'#255#192#139'a'#255#192#139'a'#255#192 + +#139'a'#255#192#139'a'#255#192#139'a'#255#192#139'a'#255#192#139'a'#255#188 + +#132'['#255'u@'''#252'M;3'#212'999'#18#0#0#0#0#0#0#0#0'FFF'#11'^1'#29#250#174 + +'oK'#255#186#131'\'#255#186#131'\'#255#186#131'\'#255#186#131'\'#255'vS:'#255 + +#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0 + +#255'S:)'#255#186#131'\'#255#186#131'\'#255#184#129'\'#255'('#28#20#255#1#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255'Q9('#255#186#131'\'#255#186#131'\'#255#186#131'\'#255#186#131'\'#255 + +#186#131'\'#255#186#131'\'#255#186#131'\'#255#186#131'\'#255#186#131'\'#255 + +#186#131'\'#255#186#131'\'#255#186#130'['#255#131'I-'#255'Q9-'#221'FFF!'#0#0 + +#0#1#0#0#0#0'M33'#20'_2'#30#251#173'pN'#255#180'{X'#255#180'{X'#255#180'{X' + +#255#180'{X'#255'-'#30#22#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#2#1#1#255'dE1'#255#180'{X'#255#180'{X'#255#180'{X'#255#180'{X' + +#255#180'{X'#255'O6&'#255#2#1#1#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255'G0#'#255#180'{X'#255#180'{X'#255#178'{X'#255'hH3'#255'U:)' + +#255'mK5'#255#180'{X'#255#180'{X'#255#180'{X'#255#180'{X'#255#180'{X'#255#180 + +'{X'#255#180'{X'#255#139'P3'#255'U7)'#231'BBB2UUU'#3#0#0#0#0'T1&,c5 '#249#174 + +'rQ'#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#8#5#4#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255#27#18#13#255#164'nQ'#255#178'wW'#255 + +#178'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#178 + +'wW'#255#142'_F'#255'H0#'#255#20#13#10#255#25#16#12#255'9'''#28#255'lI5'#255 + +#178'wW'#255#178'wW'#255'kG4'#255#1#1#1#255#1#1#0#255#1#0#0#255#1#0#0#255#3#2 + +#1#255'zQ<'#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255 + +#149'W9'#255'Z5%'#238'DDD-'#128#128#128#2#0#0#0#0'Y3 Bj8#'#248#173'qS'#255 + +#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#1#0#0#255#1#1#1#255#0#0#0 + +#255#0#0#0#255#5#3#3#255'cB2'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW' + +#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255 + +#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175 + +'tW'#255#173'rU'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#2#1#1#255#152'eL'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255 + +#155'[>'#255'\4"'#244'@@@'#28#0#0#0#1#0#0#0#0'X0!3g7"'#246#172'oR'#255#174'r' + +'V'#255#174'rV'#255#174'rV'#255#166'lR'#255#7#5#3#255#131'VA'#255#155'fM'#255 + +'oI7'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV' + +#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255 + +#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174 + +'rV'#255#153'dL'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255'<'''#29#255#174'rV'#255#174'rV'#255#174'rV'#255#173'qU'#255 + +#151'Y='#255']6%'#239'333'#15#0#0#0#0#0#0#0#0'O1'''#25'b3'#31#247#168'jN'#255 + +#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172 + +'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#136'XD' + +#255'U7*'#255'^=/'#255'kE5'#255#170'oU'#255#172'oU'#255#172'oU'#255#172'oU' + +#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255 + +#172'oU'#255#172'oU'#255#5#3#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255'!'#21#16#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oT' + +#255#143'R7'#255'Y6('#225'@@@'#12#0#0#0#0#0#0#0#0'333'#5'_2'#31#248#167'hL' + +#255#172'qW'#255#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255 + +#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255':&'#30#255#1#0#0 + +#255#1#1#0#255#1#1#1#255#1#1#0#255#4#2#2#255#133'WD'#255#172'qX'#255#172'qX' + +#255#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255 + +#172'qX'#255#172'qX'#255'E.$'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#30#20#15#255#172'qX'#255#172'qX'#255#172'qX'#255#172'pV'#255 + +#134'K2'#255'V8)'#199'999'#9#0#0#0#0#0#0#0#0#0#0#0#1'_3'#30#239#164'fJ'#255 + +#175'w]'#255#175'w^'#255#175'w^'#255#175'w^'#255#175'w^'#255#175'w^'#255#175 + +'w^'#255#175'w^'#255#175'w^'#255#175'w^'#255'hF7'#255#1#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#7#5#4#255#175'w^'#255#175'w^'#255'{TB' + ,#255'X;/'#255']?2'#255'VD'#255#175'w^'#255#175'w^'#255#175'w^'#255#175'w^' + +#255#165'qY'#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255 + +'fF7'#255#175'w^'#255#175'w^'#255#175'w^'#255#175'v\'#255'{D-'#253'S5('#154 + +'333'#5#0#0#0#0#0#0#0#0#0#0#0#0'a3'#30#200#149'Z?'#255#179'|c'#255#179'}e' + +#255#179'}e'#255#179'}e'#255#179'}e'#255#179'}e'#255#179'}e'#255#179'}e'#255 + +#179'}e'#255#179'}e'#255#19#13#11#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#2#1#1#255#179'}e'#255'E0'''#255#1#0#0#255#1#1#0#255#1#1 + +#0#255#0#0#0#255'R:/'#255#179'}e'#255#179'}e'#255#179'}e'#255#179'}e'#255'.!' + +#26#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255#177'}e'#255#179'}e' + +#255#179'}e'#255#179'}e'#255#175'v\'#255'g8$'#251'W7*O'#0#0#0#1#0#0#0#0#0#0#0 + +#0#0#0#0#0'[0'#29'lyD-'#249#181#128'i'#255#183#131'l'#255#183#131'l'#255#183 + +#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183 + +#131'l'#255#183#131'l'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255'"'#25#20#255#183#131'l'#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255'B/'''#255#183#131'l'#255#183#131'l'#255 + +#183#131'l'#255#169'yd'#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255'#'#25#21 + +#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#167'lQ'#255 + +'^3'#31#248'@@@'#12#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Y1'#30#26'b5 '#244#178'z' + +'c'#255#187#138't'#255#187#138'u'#255#187#138'u'#255#187#138'u'#255#187#138 + +'u'#255#187#138'u'#255#187#138'u'#255#187#138'u'#255#187#138'u'#255#2#2#1#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#170'~j'#255#177 + +#130'o'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#4#3#3 + +#255#187#138'u'#255#187#138'u'#255#187#138'u'#255#187#138'u'#255'jNB'#255#11 + +#8#7#255#0#0#0#255#0#0#0#255#152'p`'#255#187#138'u'#255#187#138'u'#255#187 + +#138'u'#255#186#136'r'#255#144'W?'#255']6#'#193'333'#5#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0'`4'#31#217#160'gN'#255#190#143'{'#255#191#145'}'#255#191 + +#145'}'#255#191#145'}'#255#191#145'}'#255#191#145'}'#255#191#145'}'#255#191 + +#145'}'#255#191#145'}'#255#19#14#12#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255'7*$'#255#191#145'}'#255#164'|k'#255#1#1#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2#1#255#191#145'}'#255#191#145'}'#255 + +#191#145'}'#255#191#145'}'#255#191#145'}'#255#191#145'}'#255#0#0#0#255#30#23 + +#20#255#191#145'}'#255#191#145'}'#255#191#145'}'#255#191#145'}'#255#187#138 + +'t'#255'p>('#249'Y2#U'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27 + +'huB+'#244#190#142'z'#255#195#152#132#255#195#152#132#255#195#152#132#255#195 + +#152#132#255#195#152#132#255#195#152#132#255#195#152#132#255#195#152#132#255 + +'A3,'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255#183#142'|'#255 + +#195#152#132#255#138'k]'#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#9#7#6#255#195#152#132#255#195#152#132#255#195#152#132#255#195 + +#152#132#255#195#152#132#255#195#152#132#255#1#1#1#255#160'}m'#255#195#152 + +#132#255#195#152#132#255#195#152#132#255#194#150#131#255#167'pW'#255'`4 '#240 + +'M33'#10#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@'#0#4'`3'#30#229 + +#164'nU'#255#197#156#137#255#199#159#141#255#199#159#141#255#199#159#141#255 + +#199#159#141#255#199#159#141#255#199#159#141#255#199#159#141#255'x`U'#255#1#1 + +#1#255#0#0#0#255#0#0#0#255#0#0#0#255#18#14#13#255#199#159#141#255#199#159#141 + +#255' '#26#23#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255 + +#139'oc'#255#199#159#141#255#199#159#141#255#199#159#141#255#199#159#141#255 + +#199#159#141#255#199#159#141#255'^KC'#255#199#159#141#255#199#159#141#255#199 + +#159#141#255#199#159#141#255#192#147''#255'rB-'#249'\1 k'#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'\.'#28'Sn>('#243#194#149#131 + +#255#202#165#148#255#203#165#149#255#203#165#149#255#203#165#149#255#203#165 + +#149#255#203#165#149#255#203#165#149#255#169#138'|'#255#0#0#0#255#1#1#1#255 + +#16#13#11#255#23#19#17#255#171#139'~'#255#203#165#149#255#203#165#149#255#3#3 + +#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'*"'#31#255#203#165 + +#149#255#203#165#149#255#203#165#149#255#203#165#149#255#203#165#149#255#203 + +#165#149#255#203#165#149#255#203#165#149#255#203#165#149#255#203#165#149#255 + +#203#165#149#255#201#162#145#255#163'mU'#255'_3'#31#227'U'#0#0#3#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'a3'#30#213#153 + +'eM'#254#204#167#151#255#207#172#158#255#207#172#158#255#207#172#158#255#207 + +#172#158#255#207#172#158#255#207#172#158#255#205#170#156#255#0#0#0#255'<1.' + +#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172 + +#158#255#20#16#15#255#1#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'?40'#255#207 + +#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255 + +#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158 + +#255#207#172#158#255#207#171#156#255#192#147''#255'k<'''#244'Z.'#29'L'#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'^' + +'/'#27'&b5!'#240#174'{f'#255#209#176#162#255#212#180#167#255#212#180#167#255 + +#212#180#167#255#212#180#167#255#212#180#167#255#212#180#167#255#6#5#5#255 + +#179#151#140#255#212#180#167#255#212#180#167#255#212#180#167#255#212#180#167 + +#255#212#180#167#255#212#180#167#255'gXR'#255#0#0#0#255#0#0#0#255'gXR'#255 + +#212#180#167#255#212#180#167#255#212#180#167#255#212#180#167#255#212#180#167 + +#255#212#180#167#255#212#180#167#255#212#180#167#255#212#180#167#255#212#180 + +#167#255#212#180#167#255#211#179#166#255#202#162#146#255'M7'#248'`2'#31#169 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0'[/'#26'Fg:#'#242#190#145''#255#214#184#172#255#216#187 + +#176#255#216#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255'k]X' + +#255#216#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255#216#187 + +#176#255#216#187#176#255#216#187#176#255'E<8'#255#0#0#0#255'>63'#255#216#187 + +#176#255#216#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255#216 + +#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255 + +#216#187#176#255#216#187#175#255#210#176#163#255#147'_H'#252'`4'#31#210'U++' + +#6#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'\0'#29'trB-'#242#198#157#140#255#218#191#180 + +#255#221#195#185#255#221#195#185#255#221#195#185#255#221#195#185#255#221#195 + +#185#255#221#195#185#255#221#195#185#255#221#195#185#255#221#195#185#255#221 + +#195#185#255#221#195#185#255#221#195#185#255',''%'#255'920'#255#221#195#185 + +#255#221#195#185#255#221#195#185#255#221#195#185#255#221#195#185#255#221#195 + +#185#255#221#195#185#255#221#195#185#255#221#195#185#255#221#195#185#255#221 + +#195#185#255#220#194#184#255#213#183#170#255#162'oW'#255'b5 '#232'].'#23#22#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'_1'#30#138'l>)'#242#187#143'|'#255 + +#221#196#186#255#225#202#193#255#225#203#194#255#225#203#194#255#225#203#194 + +#255#225#203#194#255#225#203#194#255#225#203#194#255#225#203#194#255#225#203 + +#194#255#225#203#194#255#225#203#194#255#225#203#194#255#225#203#194#255#225 + +#203#194#255#225#203#194#255#225#203#194#255#225#203#194#255#225#203#194#255 + +#225#203#194#255#225#203#194#255#225#203#194#255#225#203#194#255#225#203#194 + +#255#224#201#192#255#212#180#168#255#149'aK'#252'a5!'#230']2'#25')'#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#28'\d9$'#241#172'|h' + +#255#222#197#187#255#228#206#200#255#230#209#203#255#230#209#203#255#230#209 + +#203#255#230#209#203#255#230#209#203#255#230#209#203#255#230#209#203#255#230 + +#209#203#255#230#209#203#255#230#209#203#255#230#209#203#255#230#209#203#255 + +#230#209#203#255#230#209#203#255#230#209#203#255#230#209#203#255#230#209#203 + +#255#230#209#203#255#230#209#203#255#229#209#202#255#226#204#197#255#208#173 + +#159#255#131'R;'#245'a3'#31#207'Y3'#26#20#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'].'#28'7a5!'#236#137'WB'#248#201#163 + +#148#255#229#210#202#255#233#215#210#255#234#217#212#255#234#217#212#255#234 + +#217#212#255#234#217#212#255#234#217#212#255#234#217#212#255#234#217#212#255 + +#234#217#212#255#234#217#212#255#234#217#212#255#234#217#212#255#234#217#212 + +#255#234#217#212#255#234#217#212#255#234#217#212#255#234#216#211#255#231#212 + +#206#255#221#195#185#255#174#128'm'#255'm>*'#242'`1'#29#163'f33'#5#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0'b'''#20#13'`2'#29#140'd8$'#241#151'hR'#251#211#179#167#255#233#215#210 + +#255#236#220#215#255#237#222#219#255#238#225#221#255#238#225#221#255#238#225 + +#221#255#238#225#221#255#238#225#221#255#238#225#221#255#238#225#221#255#238 + +#225#221#255#238#225#221#255#238#223#220#255#236#221#217#255#234#219#213#255 + +#227#205#198#255#188#146#128#255'wH2'#242'b5 '#219'].'#27'B'#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'X1'#29#26'a3'#30#168'f:$'#242#134'T?'#246 + +#179#136'v'#255#214#183#172#255#235#218#214#255#238#225#221#255#239#226#223 + +#255#240#227#224#255#240#227#225#255#240#227#225#255#239#226#223#255#239#225 + +#222#255#238#224#220#255#226#204#196#255#199#161#145#255#158'o['#254'rD-'#239 + +'b4"'#232'^2'#30'\'#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0'`+ '#24']/'#30'fd6#'#197'c8#'#243'vE0'#240#140'ZF'#247 + ,#156'mY'#255#171'm'#255#184#143''#255#178#136'v'#255#164'wd'#255#148'dP' + +#252#130'Q;'#243'l<('#239'b6"'#234'b5!'#151'Z-'#29'>UU'#0#3#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0'].'#23#11'Z/'#29'G^4 fa4!'#130'd6!'#166'd7#'#194'd7"'#182 + +'c6"'#150'_3'#31's\0'#29'YY/'#30'+'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#224#3#255#255#255#255#255#254 + +#0#0''#255#255#255#255#248#0#0#31#255#255#255#255#224#0#0#7#255#255#255#255 + +#192#0#0#3#255#255#255#255#128#0#0#1#255#255#255#255#0#0#0#0''#255#255#254#0 + +#0#0#0''#255#255#252#0#0#0#0'?'#255#255#248#0#0#0#0#31#255#255#240#0#0#0#0 + +#15#255#255#240#0#0#0#0#15#255#255#224#0#0#0#0#7#255#255#224#0#0#0#0#3#255 + +#255#192#0#0#0#0#3#255#255#192#0#0#0#0#3#255#255#192#0#0#0#0#1#255#255#128#0 + +#0#0#0#1#255#255#128#0#0#0#0#1#255#255#128#0#0#0#0#1#255#255#128#0#0#0#0#1 + +#255#255#128#0#0#0#0#0#255#255#128#0#0#0#0#0#255#255#128#0#0#0#0#0#255#255 + +#128#0#0#0#0#0#255#255#128#0#0#0#0#1#255#255#128#0#0#0#0#1#255#255#128#0#0#0 + +#0#1#255#255#128#0#0#0#0#1#255#255#192#0#0#0#0#1#255#255#192#0#0#0#0#3#255 + +#255#192#0#0#0#0#3#255#255#224#0#0#0#0#7#255#255#224#0#0#0#0#7#255#255#224#0 + +#0#0#0#15#255#255#240#0#0#0#0#15#255#255#248#0#0#0#0#31#255#255#248#0#0#0#0 + +'?'#255#255#252#0#0#0#0'?'#255#255#254#0#0#0#0''#255#255#255#0#0#0#0#255#255 + +#255#255#128#0#0#1#255#255#255#255#192#0#0#3#255#255#255#255#224#0#0#15#255 + +#255#255#255#248#0#0#31#255#255#255#255#254#0#0''#255#255#255#255#255#192#7 + +#255#255#255#255#255#255#255#255#255#255#255#255'('#0#0#0' '#0#0#0'@'#0#0#0#1 + +#0' '#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#2'CCC'#19'FFF'#22'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0'@@@'#12'EAAGDDB'#133'DDC'#181'HC?'#205'LA;'#213'JB='#212'FC@'#204'E' + +'ED'#185'DDC'#145'DDDSFFF'#22#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0'III'#14'EEBoLA;'#208'eE-'#235'xK('#246#131'R)'#250#139 + +'W*'#251#149'_,'#252#145'\+'#252#136'V*'#250#128'Q('#249'rI)'#244'\D2'#227'F' + +'B?'#207'CCC'#134'DDD'#30#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'EEENMA9' + +#206'oF)'#245#147']-'#252#187'}4'#255#211#150'9'#255#224#167';'#255#230#174 + +'='#255#234#179'>'#255#233#178'>'#255#228#171'='#255#221#163'<'#255#205#143 + +'8'#255#175'r2'#255#131'R*'#250'eC,'#238'FB?'#205'CCCoUUU'#3#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@' + +#4'GEA|dB+'#239#142'[.'#252#198#137'<'#255#227#172'C'#255#236#183'E'#255#242 + +#190'F'#255#246#195'G'#255#248#198'G'#255#249#199'H'#255#249#198'H'#255#247 + +#196'G'#255#245#193'G'#255#240#188'F'#255#234#180'D'#255#220#163'A'#255#183 + +'y8'#255'}O*'#250'WA4'#225'CCC'#152'<<<'#17#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'G@='#148'lD*'#245#175'u8'#254 + +#221#166'I'#255#234#182'M'#255#242#193'P'#255#243#194'O'#255#244#195'O'#255 + +#244#195'P'#255#244#195'P'#255#244#195'P'#255#244#195'P'#255#244#195'P'#255 + +#244#195'P'#255#243#194'O'#255#243#194'O'#255#240#190'O'#255#230#179'L'#255 + +#212#155'F'#255#148'^1'#252'`A.'#234'CCC'#171'@@@'#12#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'FA>vmB)'#247#189#130'A'#255#224#172 + +'P'#255#236#187'U'#255#238#189'W'#255#238#190'V'#255#238#190'V'#255#238#190 + +'V'#255'fQ%'#255#17#14#6#255#17#13#6#255#16#13#6#255',#'#16#255#155'|8'#255 + +#238#190'V'#255#238#190'V'#255#238#189'V'#255#238#189'W'#255#233#184'U'#255 + +#217#163'M'#255#164'l8'#254'_>+'#238'DDD'#147#128#128#128#2#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'FDD=e?*'#243#183'}B'#255#223#171'W'#255#232 + +#183'['#255#232#183'\'#255#232#183'\'#255#232#183'\'#255#232#183'\'#255'>1' + +#25#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255#5#4#2#255 + +#22#17#9#255'pX,'#255#218#171'V'#255#232#183'\'#255#230#182'['#255#217#164'T' + +#255#152'a7'#252'V=1'#228'DDDb'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128 + ,#128#128#2'Z<-'#215#163'k='#254#217#166'['#255#226#178'`'#255#226#179'a'#255 + +#226#179'a'#255#226#179'a'#255#226#179'a'#255#226#179'a'#255#5#4#2#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#3#3#1#255',#'#19#255#226#179'a'#255#225#177'_'#255#208#154'T'#255 + +#129'O1'#251'H?;'#205'@@@'#20#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'J@<[vF,'#249 + +#206#153'Y'#255#220#172'b'#255#220#172'c'#255#220#172'c'#255#220#172'c'#255 + +#220#172'c'#255#220#172'c'#255#205#160']'#255#4#3#2#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#1#0#0#255'.$'#21#255#220#172'c'#255#218#170'a'#255#190#132'N'#255'c=)' + +#242'CCCz'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'\9('#218#177'vG'#255#213#164'c' + +#255#214#166'e'#255#214#166'e'#255#214#166'e'#255#214#166'e'#255#214#166'e' + +#255#214#166'e'#255#214#166'e'#255'v\8'#255#2#2#1#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#11#9#5#255#214#166'e'#255#214#166'e'#255#209#159'a'#255#139'Y6'#252'K>7'#206 + +'333'#5#0#0#0#0#0#0#0#0'?;9'#19'mA+'#247#201#148'^'#255#209#159'e'#255#209 + +#159'e'#255#209#159'e'#255#146'oF'#255#18#14#9#255#21#16#10#255'O<&'#255#209 + +#159'e'#255#209#159'e'#255'$'#27#17#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#11#8#5#255 + +#209#159'e'#255#209#159'e'#255#208#158'e'#255#185#128'Q'#255'^9)'#240'BBB6'#0 + +#0#0#0#0#0#0#0'P8-q'#144'Z:'#252#201#150'd'#255#202#151'd'#255#202#151'd'#255 + +'uW:'#255#2#1#1#255#0#0#0#255#0#0#0#255#1#0#0#255'-!'#22#255#202#151'd'#255 + +'ZC-'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#1#1#0#255#5#4#3#255'gM3'#255#202#151'd'#255#202#151'd'#255#202 + +#151'd'#255#197#145'`'#255'l@*'#248'CCBo'#0#0#0#0#0#0#0#0'^7$'#194#171'pK' + +#255#194#140'a'#255#194#140'a'#255#194#140'a'#255#6#4#3#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#7#5#4#255#194#140'a'#255#139'eE'#255#1#1#1#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#13#9#6#255'wV<'#255 + +#192#138'a'#255#194#140'a'#255#194#140'a'#255#194#140'a'#255#194#140'a'#255 + +#193#140'a'#255#137'T7'#252'K=6'#158#0#0#0#0#0#0#0#0'a6#'#220#177'uQ'#255#185 + +#129'['#255#185#129'['#255'Y>'#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2 + +#1#1#255'8'''#27#255#185#129'['#255#185#129'['#255'+'#30#21#255#2#1#1#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#13#9#6#255#179'}Y'#255#185#129'['#255 + +#185#129'['#255#185#129'['#255#185#129'['#255#185#129'['#255#185#129'['#255 + +#185#129'['#255#152'^>'#255'P:1'#190#0#0#0#0#0#0#0#0'c7#'#227#175'sS'#255#178 + +'xW'#255#178'xW'#255','#30#21#255#0#0#0#255#0#0#0#255#0#0#0#255#5#4#3#255'uO' + +':'#255#178'xW'#255#178'xW'#255#178'xW'#255#178'xW'#255'xP:'#255'('#26#19#255 + +#10#7#5#255#10#7#5#255#28#19#13#255#168'rS'#255#163'nO'#255#25#17#12#255#6#4 + +#3#255#17#11#8#255'bB/'#255#178'xW'#255#178'xW'#255#178'xW'#255#158'aB'#255 + +'V9,'#210#0#0#0#0#0#0#0#0'f7"'#227#173'sT'#255#175'tW'#255#175'tW'#255#15#10 + +#7#255#13#8#6#255#5#4#3#255'+'#29#21#255#169'pU'#255#175'tW'#255#175'tW'#255 + +#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175 + +'tW'#255#175'tW'#255#175'tW'#255#17#11#8#255#0#0#0#255#0#0#0#255#0#0#0#255#2 + +#2#1#255#136'ZD'#255#175'tW'#255#175'tW'#255#161'dG'#255'[8('#211#0#0#0#0#0#0 + +#0#0'e6"'#218#171'nR'#255#173'qV'#255#173'qV'#255#136'YC'#255#173'qV'#255#173 + +'qV'#255#173'qV'#255#173'qV'#255#173'qV'#255'sK9'#255'uM:'#255#159'gN'#255 + +#173'qV'#255#173'qV'#255#173'qV'#255#173'qV'#255#173'qV'#255#173'qV'#255#173 + +'qV'#255'5"'#27#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'H/$'#255#173'qV' + +#255#173'qV'#255#153'^D'#255'Y8*'#188#0#0#0#0#0#0#0#0'c5 '#203#170'kQ'#255 + +#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#164 + +'mU'#255#11#7#6#255#1#1#1#255#1#1#1#255#5#3#2#255'TA'#255#174'sY'#255#174's' + +'Y'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#128'UA'#255#2#1#1#255 + +#0#0#0#255#0#0#0#255#0#0#0#255'J1&'#255#174'sY'#255#174'sY'#255#147'X?'#255 + +'S8,'#140#0#0#0#0#0#0#0#0'd4'#30#153#162'gM'#255#178'{c'#255#178'{c'#255#178 + +'{c'#255#178'{c'#255#178'{c'#255#178'{c'#255'A-$'#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#20#14#11#255'xSB'#255#6#4#3#255#5#4#3#255#18#12#10#255#170 + +'u_'#255#178'{c'#255#178'{c'#255#9#6#5#255#0#0#0#255#0#0#0#255#3#2#2#255#166 + +'s]'#255#178'{c'#255#178'{c'#255#131'P8'#252'S3$>'#0#0#0#0#0#0#0#0'[/'#27'3' + +#137'T='#247#184#134'o'#255#184#134'o'#255#184#134'o'#255#184#134'o'#255#184 + +#134'o'#255#184#134'o'#255#14#10#9#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1 + +#255'\C7'#255#14#10#8#255#0#0#0#255#0#0#0#255#0#0#0#255#14#10#8#255#184#134 + +'o'#255#184#134'o'#255'xWI'#255#2#1#1#255#0#0#0#255#18#14#11#255#184#134'o' + +#255#184#134'o'#255#183#131'l'#255'h:&'#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +'n<%'#218#189#140'x'#255#190#143'z'#255#190#143'z'#255#190#143'z'#255#190#143 + +'z'#255#190#143'z'#255',!'#28#255#0#0#0#255#0#0#0#255#0#0#0#255#9#7#6#255#190 + ,#143'z'#255#9#7#6#255#0#0#0#255#0#0#0#255#0#0#0#255#5#4#3#255#190#143'z'#255 + +#190#143'z'#255#190#143'z'#255#159'xe'#255#0#0#0#255#140'jZ'#255#190#143'z' + +#255#190#143'z'#255#175'yc'#255'b6"'#193#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'd4' + +#30#151#167's\'#254#196#154#135#255#196#154#135#255#196#154#135#255#196#154 + +#135#255#196#154#135#255'qYN'#255#0#0#0#255#0#0#0#255#1#1#1#255'v]R'#255#194 + +#152#133#255#5#4#4#255#0#0#0#255#0#0#0#255#0#0#0#255#10#8#7#255#196#154#135 + +#255#196#154#135#255#196#154#135#255#196#154#135#255'"'#27#24#255#196#154#135 + +#255#196#154#135#255#196#154#135#255#131'R<'#248'^1'#28'1'#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0'[/'#27#14'o>('#224#198#157#140#255#202#163#146#255#202#163#146 + +#255#202#163#146#255#202#163#146#255#170#138'{'#255#0#0#0#255#8#6#6#255#26#21 + +#19#255#202#163#146#255#143'th'#255#1#1#1#255#0#0#0#255#0#0#0#255#2#2#2#255 + +#143'sg'#255#202#163#146#255#202#163#146#255#202#163#146#255#202#163#146#255 + +#191#155#138#255#202#163#146#255#202#163#146#255#183#135'r'#255'd5 '#193#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'd3'#30'{'#156'jS'#248#209#174 + +#160#255#209#174#160#255#209#174#160#255#209#174#160#255#209#174#160#255#2#2 + +#2#255#205#172#158#255#209#174#160#255#209#174#160#255#169#140#129#255#11#9#9 + +#255#1#1#0#255#4#3#3#255#132'oe'#255#209#174#160#255#209#174#160#255#209#174 + +#160#255#209#174#160#255#209#174#160#255#209#174#160#255#209#174#160#255#205 + +#167#152#255'yG3'#235'[/'#27'"'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0'd4'#30#181#179#134'r'#254#215#185#173#255#215#185#173#255#215#185 + +#173#255#215#185#173#255'm^X'#255#215#185#173#255#215#185#173#255#215#185#173 + +#255#215#185#173#255#133'sk'#255#0#0#0#255#156#134'}'#255#215#185#173#255#215 + +#185#173#255#215#185#173#255#215#185#173#255#215#185#173#255#215#185#173#255 + +#215#185#173#255#214#183#172#255#143'^I'#243'b3'#29'`'#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#8'f6 '#205#189#148#131#254 + +#222#197#187#255#222#197#187#255#222#197#187#255#222#197#187#255#222#197#187 + +#255#222#197#187#255#222#197#187#255#222#197#187#255'qk'#255#134'wq'#255#222 + +#197#187#255#222#197#187#255#222#197#187#255#222#197#187#255#222#197#187#255 + +#222#197#187#255#222#197#187#255#220#193#183#255#159'o['#247'd3'#30#147#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[' + +'/'#27#15'c3'#30#193#176#132'q'#248#228#206#199#255#228#208#201#255#228#208 + +#201#255#228#208#201#255#228#208#201#255#228#208#201#255#228#208#201#255#228 + +#208#201#255#228#208#201#255#228#208#201#255#228#208#201#255#228#208#201#255 + +#228#208#201#255#228#208#201#255#228#208#201#255#221#196#186#255#141']I'#237 + +'c3'#29#129#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#2'c3'#29#150#135'XD'#231#208#176#164 + +#255#235#219#215#255#235#219#215#255#235#219#215#255#235#219#215#255#235#219 + +#215#255#235#219#215#255#235#219#215#255#235#219#215#255#235#219#215#255#235 + +#219#215#255#235#219#215#255#232#214#209#255#189#149#133#253'qA+'#220'a2'#29 + +'O'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27'"e4'#30#185#144'cO'#235 + +#195#158#144#254#230#209#203#255#242#231#229#255#242#231#229#255#242#231#229 + +#255#242#231#229#255#242#231#229#255#241#230#226#255#220#193#184#255#180#141 + +'|'#251'zK6'#226'd3'#30#142'[/'#27#10#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#28'b3'#29'{g5'#30#198'xH2'#218#137']J' + +#229#156'r`'#236#151'mZ'#234#132'VB'#227'q?)'#213'f4'#30#182'_1'#28'W[/'#27 + +#11#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#5'[/'#27#30'[/'#27#22'[/' + +#27#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#252'?'#255#255#192#3#255#255#0#0 + +#255#254#0#0'?'#248#0#0#31#240#0#0#15#240#0#0#7#224#0#0#7#192#0#0#3#192#0#0#3 + +#192#0#0#1#128#0#0#1#128#0#0#1#128#0#0#1#128#0#0#1#128#0#0#1#128#0#0#1#128#0 + +#0#1#128#0#0#1#128#0#0#1#128#0#0#3#192#0#0#3#192#0#0#3#192#0#0#7#224#0#0#7 + +#240#0#0#15#240#0#0#31#248#0#0'?'#252#0#0''#255#0#0#255#255#192#3#255#255 + +#252'?'#255'('#0#0#0#16#0#0#0' '#0#0#0#1#0' '#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0';;;'#13'ICB7M=4zL' + +'>6xFBA;@@@'#16#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0'III'#7'W;,'#171'nC('#245#145'`+'#250#181'2'#253#175'z1'#253#139'\*'#250 + +'h?&'#244'P=3'#159'@@@'#12#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'K921d;''' + +#235#191#137'7'#254#249#198'E'#255#251#199'F'#255#251#200'F'#255#251#200'F' + +#255#251#199'F'#255#246#194'E'#255#173'y3'#253'\9)'#229'E>;2'#0#0#0#0#0#0#0#0 + +#0#0#0#0'>2,'#7'nC'''#238#223#171'N'#255#239#191'U'#255#240#192'U'#255#164 + ,#131':'#255'@3'#23#255'J;'#26#255'~e-'#255#196#157'E'#255#239#191'U'#255#212 + +#159'J'#255'a<('#231'MMM'#10#0#0#0#0#0#0#0#0'[7('#183#195#145'N'#254#228#180 + +'_'#255#228#180'_'#255#228#180'_'#255'40'#255#210#176#163#255#148'|s'#255'RD?' + +#255#210#176#163#255#140'fW'#243'[/'#27#2#0#0#0#0'tI6'#209#216#188#178#255 + +#221#195#185#255#213#188#178#255'$'#31#30#255#131'sn'#255'sf`'#255#0#0#0#255 + +'eYU'#255#221#195#185#255#221#195#185#255#204#180#170#255#207#178#166#255'k>' + +'+'#182#0#0#0#0#0#0#0#0'[/'#27#31#156'xi'#240#232#213#207#255#232#213#207#255 + +#180#165#161#255#232#213#207#255#182#167#162#255'ICA'#255#226#207#201#255#232 + +#213#207#255#232#213#207#255#231#213#206#255#134'_O'#233'[/'#27#12#0#0#0#0#0 + +#0#0#0#0#0#0#0'd3'#30'e'#171#139'~'#240#239#226#224#255#242#231#229#255#242 + +#231#229#255#240#229#227#255#242#231#229#255#242#231#229#255#242#231#229#255 + +#235#221#216#255#153'uh'#236'a2'#29'?'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0'\0'#27'*'#131'\I'#215#212#191#183#252#239#229#226#255#253#250#252#255#253 + +#249#250#255#236#223#220#255#204#180#172#250'yM;'#196'[/'#27#23#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#3'[/'#27'>c3'#29#131'uI4' + +#190'oA-'#183'b2'#29'v[/'#27'4'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#248 + +#31#172'A'#224#7#172'A'#192#3#172'A'#128#1#172'A'#128#1#172'A'#0#0#172'A'#0#0 + +#172'A'#0#0#172'A'#0#0#172'A'#0#0#172'A'#0#0#172'A'#128#1#172'A'#128#1#172'A' + +#192#3#172'A'#224#7#172'A'#240#31#172'A' +]); +