Repository: majorsilence/My-FyiReporting Branch: master Commit: ec0780062a97 Files: 1244 Total size: 11.8 MB Directory structure: gitextract_uirn_3hj/ ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ ├── dependabot.yml │ └── workflows/ │ ├── codeql.yml │ ├── jekyll-gh-pages.yml │ ├── linux.yml │ ├── mac.yml │ └── windows.yml ├── .gitignore ├── DataProviders/ │ ├── BaseDataParameter.cs │ ├── DataParameterCollection.cs │ ├── DataProviders.sln │ ├── DictionaryDataReader.cs │ ├── FileDirCommand.cs │ ├── FileDirConnection.cs │ ├── FileDirDataParameter.cs │ ├── FileDirDataReader.cs │ ├── FilteredDictionaryDataReader.cs │ ├── GedcomCommand.cs │ ├── GedcomConnection.cs │ ├── GedcomDataParameter.cs │ ├── GedcomDataReader.cs │ ├── HttpClientExtension.cs │ ├── JsonCommand.cs │ ├── JsonConnection.cs │ ├── JsonDataReader.cs │ ├── JsonTableExtractor.cs │ ├── LexCharReader.cs │ ├── LexToken.cs │ ├── LexTokenList.cs │ ├── LexTokenTypes.cs │ ├── Lexer.cs │ ├── LogCommand.cs │ ├── LogConnection.cs │ ├── LogDataParameter.cs │ ├── LogDataReader.cs │ ├── Majorsilence.Reporting.DataProviders.csproj │ ├── MultipleStreamReader.cs │ ├── TxtCommand.cs │ ├── TxtConnection.cs │ ├── TxtDataParameter.cs │ ├── TxtDataReader.cs │ ├── WebServiceCommand.cs │ ├── WebServiceConnection.cs │ ├── WebServiceDataParameter.cs │ ├── WebServiceDataReader.cs │ ├── WebServiceWsdl.cs │ ├── XmlCommand.cs │ ├── XmlConnection.cs │ ├── XmlDataParameter.cs │ ├── XmlDataReader.cs │ ├── iTunesCommand.cs │ ├── iTunesConnection.cs │ ├── iTunesDataParameter.cs │ └── iTunesDataReader.cs ├── Directory.Build.props ├── Directory.Packages.props ├── EncryptionProvider/ │ ├── EncryptionProvider.csproj │ ├── Prompt.cs │ ├── Properties/ │ │ ├── Resources.Designer.cs │ │ └── Resources.resx │ └── String/ │ └── StringEncryption.cs ├── Examples/ │ ├── .editorconfig │ ├── Designer.xsd │ ├── Examples/ │ │ ├── ChartExampleArea.rdl │ │ ├── ChartExampleAreaPercentStacked.rdl │ │ ├── ChartExampleAreaStacked.rdl │ │ ├── ChartExampleBar.rdl │ │ ├── ChartExampleBarPercentStacked.rdl │ │ ├── ChartExampleBarStacked.rdl │ │ ├── ChartExampleColumn.rdl │ │ ├── ChartExampleColumnPercentStacked.rdl │ │ ├── ChartExampleColumnStacked.rdl │ │ ├── ChartExampleDoughnut.rdl │ │ ├── ChartExampleLine.rdl │ │ ├── ChartExamplePie.rdl │ │ ├── ChartMap.rdl │ │ ├── ChartMapWorld.rdl │ │ ├── ChartTypes.rdl │ │ ├── Contacts.xml │ │ ├── DrilldownTest.rdl │ │ ├── DrilldownTwoLevel.rdl │ │ ├── EmployeeOrg.rdl │ │ ├── FileDirectoryTest.rdl │ │ ├── FinancialFunctions.rdl │ │ ├── ListReport.rdl │ │ ├── MatrixExample.rdl │ │ ├── MatrixStaticTest.rdl │ │ ├── MatrixTest.rdl │ │ ├── RssShort.rdl │ │ ├── SalesData.xml │ │ ├── Suppliers.rdl │ │ ├── SuppliersStyled.rdl │ │ ├── TableThreeColumns.rdl │ │ ├── TabularCountriesFromWizard.rdl │ │ ├── TextProviderTest.rdl │ │ ├── ThreeColumns.rdl │ │ ├── WebLogHitCount.rdl │ │ ├── WorldFacts.rdl │ │ ├── WorldFacts.xml │ │ ├── WorldFactsQueryArgs.rdl │ │ └── iTunes.rdl │ ├── Examples.416/ │ │ ├── HIDERIGA_ON_COMMAND.rdl │ │ ├── HIDERIGA_ON_COMMAND.xml │ │ ├── STAMPA_TABELLONE_RADIO_CON_DATI.RDL │ │ ├── TESTRIG.rdl │ │ ├── TESTXGRUPPO.rdl │ │ ├── TESTXGRUPPO_Break3.rdl │ │ └── datI_RADIO.xml │ ├── Examples.418/ │ │ └── Test for Alignment.rdl │ ├── Examples.sln │ ├── JsonExamples/ │ │ └── JsonReport.rdl │ ├── RdlEngineConfig.xml │ ├── Readme.txt │ ├── Sample-Report-Viewer/ │ │ ├── Sample-Report-Viewer/ │ │ │ ├── App.config │ │ │ ├── Form1.cs │ │ │ ├── Form1.resx │ │ │ ├── GlobalSuppressions.cs │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ ├── Resources.Designer.cs │ │ │ │ ├── Resources.resx │ │ │ │ ├── Settings.Designer.cs │ │ │ │ └── Settings.settings │ │ │ ├── SampleApp2-TestReport.rdl │ │ │ └── SampleReportViewer.csproj │ │ └── SampleApp2-SetData.sln │ ├── SampleApp/ │ │ ├── SampleReportApp/ │ │ │ ├── Form1.Designer.vb │ │ │ ├── Form1.resx │ │ │ ├── Form1.vb │ │ │ ├── GlobalSuppressions.vb │ │ │ ├── My Project/ │ │ │ │ ├── Application.Designer.vb │ │ │ │ ├── Application.myapp │ │ │ │ ├── AssemblyInfo.vb │ │ │ │ ├── Resources.Designer.vb │ │ │ │ ├── Resources.resx │ │ │ │ ├── Settings.Designer.vb │ │ │ │ └── Settings.settings │ │ │ ├── SampleReportApp.vbproj │ │ │ └── app.config │ │ └── SampleReportApp.sln │ ├── SampleApp2-SetData/ │ │ ├── SampleApp2-SetData/ │ │ │ ├── App.config │ │ │ ├── Form1.Designer.cs │ │ │ ├── Form1.cs │ │ │ ├── Form1.resx │ │ │ ├── GlobalSuppressions.cs │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ ├── Resources.Designer.cs │ │ │ │ ├── Resources.resx │ │ │ │ ├── Settings.Designer.cs │ │ │ │ └── Settings.settings │ │ │ ├── SampleApp2-SetData.csproj │ │ │ └── SampleApp2-TestReport.rdl │ │ └── SampleApp2-SetData.sln │ ├── SampleAppHyperLinkCustomAction/ │ │ ├── HyperLinkExample/ │ │ │ ├── App.config │ │ │ ├── Form1.Designer.cs │ │ │ ├── Form1.cs │ │ │ ├── Form1.resx │ │ │ ├── GlobalSuppressions.cs │ │ │ ├── HyperLinkExample.csproj │ │ │ ├── Program.cs │ │ │ └── Properties/ │ │ │ ├── Resources.Designer.cs │ │ │ ├── Resources.resx │ │ │ ├── Settings.Designer.cs │ │ │ └── Settings.settings │ │ └── SampleReportApp.sln │ ├── SampleDesignerControl/ │ │ ├── SampleDesignerControl/ │ │ │ ├── App.config │ │ │ ├── GlobalSuppressions.cs │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ ├── Resources.Designer.cs │ │ │ │ ├── Resources.resx │ │ │ │ ├── Settings.Designer.cs │ │ │ │ └── Settings.settings │ │ │ ├── SampleApp2-TestReport.rdl │ │ │ └── SampleDesignerControl.csproj │ │ ├── SampleDesignerControl.sln │ │ └── SampleDesignerControlWPF/ │ │ ├── App.config │ │ ├── App.xaml │ │ ├── App.xaml.cs │ │ ├── GlobalSuppressions.cs │ │ ├── MainWindow.xaml │ │ ├── MainWindow.xaml.cs │ │ ├── Properties/ │ │ │ ├── Resources.Designer.cs │ │ │ ├── Resources.resx │ │ │ ├── Settings.Designer.cs │ │ │ └── Settings.settings │ │ └── SampleDesignerControlWPF.csproj │ ├── SqliteExamples/ │ │ ├── SimpleTest1.rdl │ │ ├── SimpleTest2.rdl │ │ ├── SimpleTest3WithParameters.rdl │ │ ├── SimpleTestConnectionString.rdl │ │ ├── barcode.rdl │ │ ├── chart.rdl │ │ └── functions.rdl │ ├── config.xml │ ├── designerstate.xml │ ├── mostly-empty.rdl │ ├── readerstate.xml │ ├── usa_map.xml │ └── world_map.xml ├── LICENSE.txt ├── LICENSE_short.txt ├── LanguageWrappers/ │ ├── php/ │ │ ├── Examples/ │ │ │ ├── test1.php │ │ │ ├── test2-connection-string-parameter.php │ │ │ └── test3-streaming.php │ │ ├── report.php │ │ └── viewer.php │ ├── python/ │ │ ├── Examples/ │ │ │ ├── test1.py │ │ │ ├── test2-parameters.py │ │ │ └── test3-streaming.py │ │ └── report.py │ └── ruby/ │ ├── Examples/ │ │ ├── test1.rb │ │ ├── test2-parameters.rb │ │ └── test3-streaming.rb │ └── report.rb ├── LibRdlWpfViewer/ │ ├── LibRdlWpfViewer.csproj │ ├── LibRdlWpfViewer.sln │ ├── Properties/ │ │ ├── Resources.Designer.cs │ │ ├── Resources.resx │ │ ├── Settings.Designer.cs │ │ └── Settings.settings │ ├── RdlWpfViewer.xaml │ └── RdlWpfViewer.xaml.cs ├── Majorsilence.Drawing.Common/ │ ├── Bitmap.cs │ ├── Brush.cs │ ├── Brushes.cs │ ├── CharacterRange.cs │ ├── Color.cs │ ├── ColorTranslator.cs │ ├── Drawing2D/ │ │ ├── CompositingQuality.cs │ │ ├── DashStyle.cs │ │ ├── GraphicsPath.cs │ │ ├── GraphicsState.cs │ │ ├── HatchBrush.cs │ │ ├── HatchStyle.cs │ │ ├── InterpolationMode.cs │ │ ├── LineCap.cs │ │ ├── LineJoin.cs │ │ ├── LinearGradientBrush.cs │ │ ├── LinearGradientMode.cs │ │ ├── Matrix.cs │ │ ├── PixelOffsetMode.cs │ │ └── SmoothingMode.cs │ ├── Font.cs │ ├── FontFamily.cs │ ├── FontStyle.cs │ ├── Graphics.cs │ ├── GraphicsUnit.cs │ ├── Image.cs │ ├── Imaging/ │ │ ├── Encoder.cs │ │ ├── EncoderParameter.cs │ │ ├── EncoderParameters.cs │ │ ├── ImageCodecInfo.cs │ │ ├── ImageFormat.cs │ │ └── ImageFormatExtensions.cs │ ├── Majorsilence.Drawing.Common.csproj │ ├── Pen.cs │ ├── Pens.cs │ ├── Point.cs │ ├── PointF.cs │ ├── Rectangle.cs │ ├── RectangleF.cs │ ├── Region.cs │ ├── Size.cs │ ├── SizeF.cs │ ├── SkiaImageExtensions.cs │ ├── SolidBrush.cs │ ├── StringAlignment.cs │ ├── StringFormat.cs │ ├── StringFormatFlags.cs │ ├── StringTrimming.cs │ └── Text.cs ├── Majorsilence.Reporting.Benchmarks/ │ ├── DrawingCompatJob.cs │ ├── JsonDataProviderBenchmark.cs │ ├── Majorsilence.Reporting.Benchmarks.csproj │ └── Program.cs ├── Majorsilence.Reporting.UI/ │ ├── .gitignore │ ├── App.axaml │ ├── App.axaml.cs │ ├── MainWindow.axaml │ ├── MainWindow.axaml.cs │ ├── Majorsilence.Reporting.UI.csproj │ └── Program.cs ├── Majorsilence.Reporting.UI.RdlAvalonia/ │ ├── Majorsilence.Reporting.UI.RdlAvalonia.csproj │ └── Viewer/ │ ├── AvaloniaReportViewer.axaml │ ├── AvaloniaReportViewer.axaml.cs │ ├── ReportCanvas.cs │ ├── SkiaPageDrawing.cs │ └── ZoomMode.cs ├── Majorsilence.Reporting.WebExample/ │ ├── Controllers/ │ │ └── HomeController.cs │ ├── Majorsilence.Reporting.WebExample.csproj │ ├── Models/ │ │ └── ErrorViewModel.cs │ ├── Program.cs │ ├── Properties/ │ │ └── launchSettings.json │ ├── Views/ │ │ └── Home/ │ │ └── Index.cshtml │ ├── appsettings.Development.json │ └── appsettings.json ├── Majorsilence.WinformUtils/ │ ├── FormExtensions.cs │ ├── Majorsilence.WinformUtils.csproj │ ├── Strings.Designer.cs │ ├── Strings.resx │ └── WaitForm.cs ├── MajorsilenceReporting-Linux-GtkViewer.sln ├── MajorsilenceReporting.sln ├── OracleSp/ │ ├── AssemblyInfo.cs │ ├── DataParameter.cs │ ├── DataParameterCollection.cs │ ├── OracleSP.csproj │ ├── OracleSp.sln │ ├── OracleSpCommand.cs │ └── OracleSpConnection.cs ├── RdlAsp.Mvc/ │ ├── Majorsilence.Reporting.RdlAsp.Mvc.csproj │ ├── RdlListReports.cs │ ├── RdlReport.cs │ ├── RdlSession.cs │ ├── ReportHelper.cs │ └── Settings.cs ├── RdlCmd/ │ ├── GlobalSuppressions.cs │ ├── RdlCmd.cs │ ├── RdlCmd.csproj │ └── runtimeconfig.template.json ├── RdlCreator/ │ ├── Body.cs │ ├── BorderColor.cs │ ├── BorderStyle.cs │ ├── BorderStyleType.cs │ ├── BorderWidth.cs │ ├── Card.cs │ ├── ConnectionProperties.cs │ ├── Create.cs │ ├── CustomProperties.cs │ ├── CustomProperty.cs │ ├── CustomReportItems.cs │ ├── DataProviders.cs │ ├── DataSet.cs │ ├── DataSets.cs │ ├── DataSource.cs │ ├── DataSources.cs │ ├── Details.cs │ ├── Document.cs │ ├── Field.cs │ ├── Fields.cs │ ├── Header.cs │ ├── Majorsilence.Reporting.RdlCreator.csproj │ ├── Page.cs │ ├── PageFooter.cs │ ├── PageHeader.cs │ ├── Query.cs │ ├── Report.cs │ ├── ReportItemImage.cs │ ├── ReportItemSize.cs │ ├── ReportItemsBody.cs │ ├── ReportItemsFooter.cs │ ├── ReportItemsHeader.cs │ ├── SizeUnit.cs │ ├── Style.cs │ ├── Table.cs │ ├── TableCell.cs │ ├── TableCellReportItems.cs │ ├── TableCells.cs │ ├── TableColumn.cs │ ├── TableColumns.cs │ ├── TableRow.cs │ ├── TableRows.cs │ ├── Text.cs │ └── Value.cs ├── RdlCreator.Tests/ │ ├── Document_Test.cs │ ├── NestedJsonData.json │ ├── RdlCreator.Tests.csproj │ ├── Reports_ChainedTest.cs │ ├── Reports_DataProviderTest.cs │ ├── Reports_JsonDataProviderTest.cs │ ├── Reports_ManualDefinitionTest.cs │ └── TestData.json ├── RdlCri/ │ ├── AztecCode.cs │ ├── BarCode128.cs │ ├── BarCode39.cs │ ├── BarCodeBookland.cs │ ├── BarCodeEAN13.cs │ ├── BarCodeEAN8.cs │ ├── BarCodeITF14.cs │ ├── DataMatrix.cs │ ├── GlobalSuppressions.cs │ ├── Majorsilence.Reporting.RdlCri.csproj │ ├── Pdf417Barcode.cs │ ├── PixelConversions.cs │ ├── QrCode.cs │ ├── RdlCri.sln │ ├── XmlHelpers.cs │ └── ZxingBarcodes.cs ├── RdlDesign/ │ ├── AssemblyInfo.cs │ ├── BackgroundCtl.cs │ ├── BackgroundCtl.resx │ ├── BackgroundCtl.ru-RU.resx │ ├── BodyCtl.cs │ ├── BodyCtl.resx │ ├── BodyCtl.ru-RU.resx │ ├── ChartAxisCtl.cs │ ├── ChartAxisCtl.resx │ ├── ChartAxisCtl.ru-RU.resx │ ├── ChartCtl - Copy.cs │ ├── ChartCtl.cs │ ├── ChartCtl.resx │ ├── ChartCtl.ru-RU.resx │ ├── ChartLegendCtl.cs │ ├── ChartLegendCtl.resx │ ├── ChartLegendCtl.ru-RU.resx │ ├── CodeCtl.cs │ ├── CodeCtl.resx │ ├── CodeCtl.ru-RU.resx │ ├── ColorPicker.cs │ ├── ColorPickerPopup.Designer.cs │ ├── ColorPickerPopup.cs │ ├── ColorPickerPopup.resx │ ├── Conversions.cs │ ├── CustomReportItemCtl.cs │ ├── CustomReportItemCtl.resx │ ├── DataSetRowsCtl.Designer.cs │ ├── DataSetRowsCtl.cs │ ├── DataSetRowsCtl.resx │ ├── DataSetRowsCtl.ru-RU.resx │ ├── DataSetsCtl.Designer.cs │ ├── DataSetsCtl.cs │ ├── DataSetsCtl.resx │ ├── DataSetsCtl.ru-RU.resx │ ├── DesignCtl.Designer.cs │ ├── DesignCtl.cs │ ├── DesignCtl.resx │ ├── DesignCtl.ru-RU.resx │ ├── DesignEditLines.cs │ ├── DesignEditLines.resx │ ├── DesignRuler.cs │ ├── DesignRuler.resx │ ├── DesignXmlDraw.cs │ ├── DesignXmlDraw.resx │ ├── DesignerUtility.cs │ ├── DialogAbout.Designer.cs │ ├── DialogAbout.cs │ ├── DialogAbout.resx │ ├── DialogAbout.ru-RU.resx │ ├── DialogDataSourceRef.Designer.cs │ ├── DialogDataSourceRef.cs │ ├── DialogDataSourceRef.resx │ ├── DialogDataSourceRef.ru-RU.resx │ ├── DialogDataSources.Designer.cs │ ├── DialogDataSources.cs │ ├── DialogDataSources.resx │ ├── DialogDataSources.ru-RU.resx │ ├── DialogDatabase.Designer.cs │ ├── DialogDatabase.cs │ ├── DialogDatabase.resx │ ├── DialogDatabase.ru-RU.resx │ ├── DialogEmbeddedImages.Designer.cs │ ├── DialogEmbeddedImages.cs │ ├── DialogEmbeddedImages.resx │ ├── DialogEmbeddedImages.ru-RU.resx │ ├── DialogExprEditor.Designer.cs │ ├── DialogExprEditor.cs │ ├── DialogExprEditor.resx │ ├── DialogExprEditor.ru-RU.resx │ ├── DialogFilterOperator.Designer.cs │ ├── DialogFilterOperator.cs │ ├── DialogFilterOperator.resx │ ├── DialogFilterOperator.ru-RU.resx │ ├── DialogListOfStrings.Designer.cs │ ├── DialogListOfStrings.cs │ ├── DialogListOfStrings.resx │ ├── DialogListOfStrings.ru-RU.resx │ ├── DialogNewChart.Designer.cs │ ├── DialogNewChart.cs │ ├── DialogNewChart.resx │ ├── DialogNewChart.ru-RU.resx │ ├── DialogNewMatrix.Designer.cs │ ├── DialogNewMatrix.cs │ ├── DialogNewMatrix.resx │ ├── DialogNewMatrix.ru-RU.resx │ ├── DialogNewTable.Designer.cs │ ├── DialogNewTable.cs │ ├── DialogNewTable.resx │ ├── DialogNewTable.ru-RU.resx │ ├── DialogToolOptions.Designer.cs │ ├── DialogToolOptions.cs │ ├── DialogToolOptions.resx │ ├── DialogToolOptions.ru-RU.resx │ ├── DialogValidValues.Designer.cs │ ├── DialogValidValues.cs │ ├── DialogValidValues.resx │ ├── DialogValidValues.ru-RU.resx │ ├── DialogValidateRdl.Designer.cs │ ├── DialogValidateRdl.cs │ ├── DialogValidateRdl.resx │ ├── DialogValidateRdl.ru-RU.resx │ ├── DrillParametersDialog.Designer.cs │ ├── DrillParametersDialog.cs │ ├── DrillParametersDialog.resx │ ├── DrillParametersDialog.ru-RU.resx │ ├── FiltersCtl.cs │ ├── FiltersCtl.resx │ ├── FiltersCtl.ru-RU.resx │ ├── FindTab.Designer.cs │ ├── FindTab.cs │ ├── FindTab.resx │ ├── FindTab.ru-RU.resx │ ├── FontCtl.cs │ ├── FontCtl.resx │ ├── FontCtl.ru-RU.resx │ ├── GridCtl.cs │ ├── GridCtl.resx │ ├── GridCtl.ru-RU.resx │ ├── GroupingCtl.cs │ ├── GroupingCtl.resx │ ├── GroupingCtl.ru-RU.resx │ ├── ImageCtl.cs │ ├── ImageCtl.resx │ ├── ImageCtl.ru-RU.resx │ ├── InteractivityCtl.cs │ ├── InteractivityCtl.resx │ ├── InteractivityCtl.ru-RU.resx │ ├── ListCtl.cs │ ├── ListCtl.resx │ ├── ListCtl.ru-RU.resx │ ├── MDIChild.Designer.cs │ ├── MDIChild.cs │ ├── MDIChild.resx │ ├── MDIChild.ru-RU.resx │ ├── Majorsilence.Reporting.ReportDesigner.csproj │ ├── MatrixCtl.cs │ ├── MatrixCtl.resx │ ├── MatrixCtl.ru-RU.resx │ ├── MatrixView.cs │ ├── ModulesClassesCtl.cs │ ├── ModulesClassesCtl.resx │ ├── ModulesClassesCtl.ru-RU.resx │ ├── PositionCtl.cs │ ├── PositionCtl.resx │ ├── PositionCtl.ru-RU.resx │ ├── Properties/ │ │ ├── Resources.Designer.cs │ │ └── Resources.resx │ ├── PropertyCtl.cs │ ├── PropertyCtl.fr.resx │ ├── PropertyCtl.resx │ ├── PropertyCtl.ru-RU.resx │ ├── PropertyDialog.Designer.cs │ ├── PropertyDialog.cs │ ├── PropertyDialog.fr.resx │ ├── PropertyDialog.resx │ ├── PropertyDialog.ru-RU.resx │ ├── QueryParametersCtl.Designer.cs │ ├── QueryParametersCtl.cs │ ├── QueryParametersCtl.resx │ ├── QueryParametersCtl.ru-RU.resx │ ├── RdlDesign.sln │ ├── RdlDesigner.Designer.cs │ ├── RdlDesigner.cs │ ├── RdlDesigner.fr.resx │ ├── RdlDesigner.resx │ ├── RdlDesigner.ru-RU.resx │ ├── RdlDesignerSavedFileEvent.cs │ ├── RdlEditPreview.cs │ ├── RdlEditPreview.fr.resx │ ├── RdlEditPreview.resx │ ├── RdlEditPreview.ru-RU.resx │ ├── RdlProperties/ │ │ ├── Categories.Designer.cs │ │ ├── Categories.resx │ │ ├── Categories.ru-RU.resx │ │ ├── Descriptions.Designer.cs │ │ ├── Descriptions.resx │ │ ├── Descriptions.ru-RU.resx │ │ ├── DisplayNames.Designer.cs │ │ ├── DisplayNames.resx │ │ ├── DisplayNames.ru-RU.resx │ │ ├── LocalizedCategoryAttribute.cs │ │ ├── LocalizedDescriptionAttribute.cs │ │ ├── LocalizedDisplayNameAttribute.cs │ │ ├── PropertyAction.cs │ │ ├── PropertyAppearance.cs │ │ ├── PropertyBackground.cs │ │ ├── PropertyBorder.cs │ │ ├── PropertyChart.cs │ │ ├── PropertyDataRegion.cs │ │ ├── PropertyExpr.cs │ │ ├── PropertyFilters.cs │ │ ├── PropertyGrouping.cs │ │ ├── PropertyImage.cs │ │ ├── PropertyList.cs │ │ ├── PropertyLocation.cs │ │ ├── PropertyMargin.cs │ │ ├── PropertyMatrix.cs │ │ ├── PropertyPadding.cs │ │ ├── PropertyPrintFirstLast.cs │ │ ├── PropertyRectangle.cs │ │ ├── PropertyReport.cs │ │ ├── PropertyReportItem.cs │ │ ├── PropertySize.cs │ │ ├── PropertySorting.cs │ │ ├── PropertySubreport.cs │ │ ├── PropertyTable.cs │ │ ├── PropertyTableTab.cs │ │ ├── PropertyTextbox.cs │ │ └── PropertyVisibility.cs │ ├── RdlUserControl.Designer.cs │ ├── RdlUserControl.cs │ ├── RdlUserControl.resx │ ├── RdlUserControl.ru-RU.resx │ ├── ReportCtl.Designer.cs │ ├── ReportCtl.cs │ ├── ReportCtl.fr.resx │ ├── ReportCtl.resx │ ├── ReportCtl.ru-RU.resx │ ├── ReportNames.cs │ ├── ReportParameterCtl.Designer.cs │ ├── ReportParameterCtl.cs │ ├── ReportParameterCtl.fr.resx │ ├── ReportParameterCtl.resx │ ├── ReportParameterCtl.ru-RU.resx │ ├── ReportXmlCtl.cs │ ├── ReportXmlCtl.resx │ ├── ReportXmlCtl.ru-RU.resx │ ├── Resources/ │ │ ├── Strings.Designer.cs │ │ ├── Strings.fr.resx │ │ ├── Strings.resx │ │ └── Strings.ru-RU.resx │ ├── SQLCtl.Designer.cs │ ├── SQLCtl.cs │ ├── SQLCtl.resx │ ├── SQLCtl.ru-RU.resx │ ├── SimpleButton.cs │ ├── SimpleButton.resx │ ├── SimpleToggle.cs │ ├── SimpleToggle.resx │ ├── SingleCtlDialog.Designer.cs │ ├── SingleCtlDialog.cs │ ├── SingleCtlDialog.resx │ ├── SingleCtlDialog.ru-RU.resx │ ├── SortingCtl.cs │ ├── SortingCtl.resx │ ├── SortingCtl.ru-RU.resx │ ├── StaticSeriesCtl - Copy.cs │ ├── StaticSeriesCtl.Designer.cs │ ├── StaticSeriesCtl.cs │ ├── StaticSeriesCtl.resx │ ├── StaticSeriesCtl.ru-RU.resx │ ├── StyleBorderCtl.cs │ ├── StyleBorderCtl.resx │ ├── StyleBorderCtl.ru-RU.resx │ ├── StyleCtl.cs │ ├── StyleCtl.resx │ ├── StyleCtl.ru-RU.resx │ ├── StyleTextCtl.cs │ ├── StyleTextCtl.resx │ ├── StyleTextCtl.ru-RU.resx │ ├── SubreportCtl.cs │ ├── SubreportCtl.resx │ ├── SubreportCtl.ru-RU.resx │ ├── Syntax/ │ │ ├── RdlScriptLexer.cs │ │ ├── ScintillaExprStyle.cs │ │ ├── ScintillaSqlStyle.cs │ │ └── ScintillaXMLStyle.cs │ ├── TableColumnCtl.cs │ ├── TableColumnCtl.resx │ ├── TableColumnCtl.ru-RU.resx │ ├── TableCtl.cs │ ├── TableCtl.resx │ ├── TableCtl.ru-RU.resx │ ├── TableRowCtl.cs │ ├── TableRowCtl.resx │ ├── TableRowCtl.ru-RU.resx │ ├── ToolStripUserZoomControl.cs │ ├── Undo.cs │ ├── UserZoomControl.Designer.cs │ ├── UserZoomControl.cs │ ├── VisibilityCtl.cs │ ├── VisibilityCtl.resx │ ├── VisibilityCtl.ru-RU.resx │ ├── app.manifest │ └── desktop.ini ├── RdlDesktop/ │ ├── BackgroundThread.cs │ ├── ConnectionThread.cs │ ├── ConsoleThread.cs │ ├── FileCache.cs │ ├── FileReadCache.cs │ ├── RdlDesktop.cs │ ├── RdlDesktop.csproj │ ├── RdlDesktop.sln │ ├── ReportRender.cs │ ├── Resources/ │ │ ├── Strings.Designer.cs │ │ ├── Strings.resx │ │ └── Strings.ru-RU.resx │ └── config.xml ├── RdlEngine/ │ ├── Definition/ │ │ ├── Action.cs │ │ ├── Axis.cs │ │ ├── AxisTickMarks.cs │ │ ├── Body.cs │ │ ├── CategoryAxis.cs │ │ ├── CategoryGrouping.cs │ │ ├── CategoryGroupings.cs │ │ ├── Chart.cs │ │ ├── ChartBar.cs │ │ ├── ChartBase.cs │ │ ├── ChartBubble.cs │ │ ├── ChartColumn.cs │ │ ├── ChartData.cs │ │ ├── ChartElementOutput.cs │ │ ├── ChartExpression.cs │ │ ├── ChartGridLines.cs │ │ ├── ChartLayout.cs │ │ ├── ChartLine.cs │ │ ├── ChartMap.cs │ │ ├── ChartMapData.cs │ │ ├── ChartPalette.cs │ │ ├── ChartPie.cs │ │ ├── ChartSeries.cs │ │ ├── ChartSubType.cs │ │ ├── ChartType.cs │ │ ├── Classes.cs │ │ ├── Code.cs │ │ ├── CodeModule.cs │ │ ├── CodeModules.cs │ │ ├── ColumnGrouping.cs │ │ ├── ColumnGroupings.cs │ │ ├── ConnectionProperties.cs │ │ ├── Corner.cs │ │ ├── Custom.cs │ │ ├── CustomReportItem.cs │ │ ├── DataElementOutput.cs │ │ ├── DataElementStyle.cs │ │ ├── DataElementStyleEnum.cs │ │ ├── DataInstanceElementOutput.cs │ │ ├── DataLabel.cs │ │ ├── DataLabelPosition.cs │ │ ├── DataPoint.cs │ │ ├── DataPoints.cs │ │ ├── DataRegion.cs │ │ ├── DataSetDefn.cs │ │ ├── DataSetReference.cs │ │ ├── DataSetsDefn.cs │ │ ├── DataSourceDefn.cs │ │ ├── DataSourceReference.cs │ │ ├── DataSourcesDefn.cs │ │ ├── DataType.cs │ │ ├── DataValue.cs │ │ ├── DataValues.cs │ │ ├── DefaultValue.cs │ │ ├── Details.cs │ │ ├── Drillthrough.cs │ │ ├── DrillthroughParameter.cs │ │ ├── DrillthroughParameters.cs │ │ ├── DynamicCategories.cs │ │ ├── DynamicColumns.cs │ │ ├── DynamicExpression.cs │ │ ├── DynamicRows.cs │ │ ├── DynamicSeries.cs │ │ ├── EMFConverter/ │ │ │ └── EMFRecords/ │ │ │ ├── EMF.cs │ │ │ ├── EMFDrawingRecords/ │ │ │ │ ├── Comment.cs │ │ │ │ ├── DrawBase.cs │ │ │ │ ├── DrawCurve.cs │ │ │ │ ├── DrawEllipse.cs │ │ │ │ ├── DrawLines.cs │ │ │ │ ├── DrawPie.cs │ │ │ │ ├── DrawRects.cs │ │ │ │ ├── DrawString.cs │ │ │ │ ├── FillEllipse.cs │ │ │ │ ├── FillPie.cs │ │ │ │ ├── FillPolygon.cs │ │ │ │ └── FillRects.cs │ │ │ ├── EMFObjects/ │ │ │ │ ├── EMFBrush.cs │ │ │ │ ├── EMFFont.cs │ │ │ │ ├── EMFPen.cs │ │ │ │ └── EMFStringFormat.cs │ │ │ ├── EMFRecordObject.cs │ │ │ └── EMFTransform/ │ │ │ └── EMFSetPageTransform.cs │ │ ├── EmbeddedImage.cs │ │ ├── EmbeddedImages.cs │ │ ├── Expression.cs │ │ ├── ExpressionType.cs │ │ ├── Field.cs │ │ ├── Fields.cs │ │ ├── Filter.cs │ │ ├── FilterOperator.cs │ │ ├── FilterValue.cs │ │ ├── FilterValues.cs │ │ ├── Filters.cs │ │ ├── Footer.cs │ │ ├── GroupEntry.cs │ │ ├── GroupExpression.cs │ │ ├── GroupExpressions.cs │ │ ├── Grouping.cs │ │ ├── Header.cs │ │ ├── Image.cs │ │ ├── ImageSizing.cs │ │ ├── ImageSource.cs │ │ ├── Legend.cs │ │ ├── LegendLayout.cs │ │ ├── LegendPosition.cs │ │ ├── Line.cs │ │ ├── List.cs │ │ ├── Marker.cs │ │ ├── MarkerType.cs │ │ ├── Matrix.cs │ │ ├── MatrixCell.cs │ │ ├── MatrixCellDataElementOutput.cs │ │ ├── MatrixCellEntry.cs │ │ ├── MatrixCells.cs │ │ ├── MatrixColumn.cs │ │ ├── MatrixColumns.cs │ │ ├── MatrixEntry.cs │ │ ├── MatrixLayoutDirection.cs │ │ ├── MatrixRow.cs │ │ ├── MatrixRows.cs │ │ ├── Name.cs │ │ ├── NameLookup.cs │ │ ├── PageFooter.cs │ │ ├── PageHeader.cs │ │ ├── ParameterValue.cs │ │ ├── ParameterValues.cs │ │ ├── PlotArea.cs │ │ ├── PlotType.cs │ │ ├── Query.cs │ │ ├── QueryColumn.cs │ │ ├── QueryCommandType.cs │ │ ├── QueryParameter.cs │ │ ├── QueryParameters.cs │ │ ├── RDLParser.cs │ │ ├── RSize.cs │ │ ├── Rectangle.cs │ │ ├── ReportClass.cs │ │ ├── ReportDefn.cs │ │ ├── ReportItem.cs │ │ ├── ReportItems.cs │ │ ├── ReportLink.cs │ │ ├── ReportLog.cs │ │ ├── ReportParameter.cs │ │ ├── ReportParameters.cs │ │ ├── Row.cs │ │ ├── RowGrouping.cs │ │ ├── RowGroupings.cs │ │ ├── Rows.cs │ │ ├── SeriesGrouping.cs │ │ ├── SeriesGroupings.cs │ │ ├── SortBy.cs │ │ ├── SortDirection.cs │ │ ├── Sorting.cs │ │ ├── StaticCategories.cs │ │ ├── StaticColumn.cs │ │ ├── StaticColumns.cs │ │ ├── StaticMember.cs │ │ ├── StaticRow.cs │ │ ├── StaticRows.cs │ │ ├── StaticSeries.cs │ │ ├── Style.cs │ │ ├── StyleBackgroundImage.cs │ │ ├── StyleBackgroundImageSource.cs │ │ ├── StyleBorderColor.cs │ │ ├── StyleBorderStyle.cs │ │ ├── StyleBorderWidth.cs │ │ ├── Subreport.cs │ │ ├── SubreportParameter.cs │ │ ├── SubreportParameters.cs │ │ ├── Subtotal.cs │ │ ├── SubtotalPosition.cs │ │ ├── Table.cs │ │ ├── TableCell.cs │ │ ├── TableCells.cs │ │ ├── TableColumn.cs │ │ ├── TableColumns.cs │ │ ├── TableGroup.cs │ │ ├── TableGroups.cs │ │ ├── TableRow.cs │ │ ├── TableRows.cs │ │ ├── Textbox.cs │ │ ├── ThreeDProperties.cs │ │ ├── ThreeDPropertiesDrawingStyle.cs │ │ ├── ThreeDPropertiesProjectionMode.cs │ │ ├── ThreeDPropertiesShading.cs │ │ ├── Title.cs │ │ ├── TitlePosition.cs │ │ ├── ToggleImage.cs │ │ ├── TrueFalseAuto.cs │ │ ├── ValidValues.cs │ │ ├── ValueAxis.cs │ │ ├── Values.cs │ │ └── Visibility.cs │ ├── ExprParser/ │ │ ├── CharReader.cs │ │ ├── LaxBinder.cs │ │ ├── Lexer.cs │ │ ├── Parser.cs │ │ ├── ParserException.cs │ │ ├── Token.cs │ │ ├── TokenList.cs │ │ └── TokenTypes.cs │ ├── Functions/ │ │ ├── Constant.cs │ │ ├── ConstantBoolean.cs │ │ ├── ConstantDateTime.cs │ │ ├── ConstantDecimal.cs │ │ ├── ConstantDouble.cs │ │ ├── ConstantError.cs │ │ ├── ConstantInteger.cs │ │ ├── ConstantString.cs │ │ ├── Financial.cs │ │ ├── FunctionAggr.cs │ │ ├── FunctionAggrArray.cs │ │ ├── FunctionAggrAvg.cs │ │ ├── FunctionAggrCount.cs │ │ ├── FunctionAggrCountDistinct.cs │ │ ├── FunctionAggrCountRows.cs │ │ ├── FunctionAggrFirst.cs │ │ ├── FunctionAggrLast.cs │ │ ├── FunctionAggrLevel.cs │ │ ├── FunctionAggrMax.cs │ │ ├── FunctionAggrMin.cs │ │ ├── FunctionAggrNext.cs │ │ ├── FunctionAggrPrevious.cs │ │ ├── FunctionAggrRvAvg.cs │ │ ├── FunctionAggrRvCount.cs │ │ ├── FunctionAggrRvMax.cs │ │ ├── FunctionAggrRvMin.cs │ │ ├── FunctionAggrRvStdev.cs │ │ ├── FunctionAggrRvStdevp.cs │ │ ├── FunctionAggrRvSum.cs │ │ ├── FunctionAggrRvVar.cs │ │ ├── FunctionAggrRvVarp.cs │ │ ├── FunctionAggrStdev.cs │ │ ├── FunctionAggrStdevp.cs │ │ ├── FunctionAggrSum.cs │ │ ├── FunctionAggrVar.cs │ │ ├── FunctionAggrVarp.cs │ │ ├── FunctionAnd.cs │ │ ├── FunctionBinary.cs │ │ ├── FunctionChoose.cs │ │ ├── FunctionCode.cs │ │ ├── FunctionCustomInstance.cs │ │ ├── FunctionCustomStatic.cs │ │ ├── FunctionDiv.cs │ │ ├── FunctionDivDecimal.cs │ │ ├── FunctionExecutionTime.cs │ │ ├── FunctionExp.cs │ │ ├── FunctionField.cs │ │ ├── FunctionFieldCollection.cs │ │ ├── FunctionFieldIsMissing.cs │ │ ├── FunctionFormat.cs │ │ ├── FunctionGlobalCollection.cs │ │ ├── FunctionIif.cs │ │ ├── FunctionMinus.cs │ │ ├── FunctionMinusDecimal.cs │ │ ├── FunctionMinusInt32.cs │ │ ├── FunctionModulus.cs │ │ ├── FunctionMult.cs │ │ ├── FunctionMultDecimal.cs │ │ ├── FunctionNot.cs │ │ ├── FunctionOr.cs │ │ ├── FunctionPageNumber.cs │ │ ├── FunctionParameterCollection.cs │ │ ├── FunctionPlus.cs │ │ ├── FunctionPlusDecimal.cs │ │ ├── FunctionPlusInt32.cs │ │ ├── FunctionPlusString.cs │ │ ├── FunctionRelopEQ.cs │ │ ├── FunctionRelopGT.cs │ │ ├── FunctionRelopGTE.cs │ │ ├── FunctionRelopLT.cs │ │ ├── FunctionRelopLTE.cs │ │ ├── FunctionRelopNE.cs │ │ ├── FunctionReportFolder.cs │ │ ├── FunctionReportItemCollection.cs │ │ ├── FunctionReportName.cs │ │ ├── FunctionReportParameter.cs │ │ ├── FunctionReportParameterLabel.cs │ │ ├── FunctionSwitch.cs │ │ ├── FunctionSystem.cs │ │ ├── FunctionTextbox.cs │ │ ├── FunctionTotalPages.cs │ │ ├── FunctionUnaryMinus.cs │ │ ├── FunctionUnaryMinusDecimal.cs │ │ ├── FunctionUnaryMinusInteger.cs │ │ ├── FunctionUserCollection.cs │ │ ├── FunctionUserID.cs │ │ ├── FunctionUserLanguage.cs │ │ ├── ICacheData.cs │ │ ├── IExpr.cs │ │ ├── Identifier.cs │ │ ├── IdentifierKey.cs │ │ └── VBFunctions.cs │ ├── GlobalSuppressions.cs │ ├── GraphicsExtended.cs │ ├── Majorsilence.Reporting.RdlEngine.csproj │ ├── PageDrawing.cs │ ├── RDLBaseEBN.cs │ ├── RdlEngine.sln │ ├── RdlEngineConfig.xml │ ├── RdlException.cs │ ├── RdlPrint.cs │ ├── Render/ │ │ ├── CompilationExtensions.cs │ │ ├── DelimitedTextWriter.cs │ │ ├── ExcelConverter/ │ │ │ ├── ExcelCell.cs │ │ │ ├── ExcelCellStyle.cs │ │ │ ├── ExcelCellsBuilder.cs │ │ │ ├── ExcelColumn.cs │ │ │ ├── ExcelImage.cs │ │ │ ├── ExcelLine.cs │ │ │ ├── ExcelRow.cs │ │ │ └── ExcelTable.cs │ │ ├── HtmlConverter/ │ │ │ ├── RenderHtmlTable.cs │ │ │ └── TablePositioner.cs │ │ ├── IPresent.cs │ │ ├── IStreamGen.cs │ │ ├── MemoryStreamGen.cs │ │ ├── MhtConverter/ │ │ │ ├── MhtBuilder.cs │ │ │ ├── MhtWebClientLocal.cs │ │ │ └── MhtWebFile.cs │ │ ├── OneFileStreamGen.cs │ │ ├── PdfPageSize.cs │ │ ├── ProcessReport.cs │ │ ├── RenderBase.cs │ │ ├── RenderCsv.cs │ │ ├── RenderExcel2007.cs │ │ ├── RenderExcel2007DataOnly.cs │ │ ├── RenderHtml.cs │ │ ├── RenderPdf_iTextSharp.cs │ │ ├── RenderRtf.cs │ │ ├── RenderTif.cs │ │ ├── RenderXml.cs │ │ └── StreamGen.cs │ ├── Resources/ │ │ ├── Strings.Designer.cs │ │ ├── Strings.resx │ │ ├── Strings.ru-RU.Designer.cs │ │ └── Strings.ru-RU.resx │ ├── Runtime/ │ │ ├── DataSet.cs │ │ ├── DataSets.cs │ │ ├── DataSource.cs │ │ ├── DataSources.cs │ │ ├── ICustomReportItem.cs │ │ ├── ImageQualityManager.cs │ │ ├── Page.cs │ │ ├── PageItems/ │ │ │ ├── PageCurve.cs │ │ │ ├── PageEllipse.cs │ │ │ ├── PageImage.cs │ │ │ ├── PageItem.cs │ │ │ ├── PageLine.cs │ │ │ ├── PagePie.cs │ │ │ ├── PagePolygon.cs │ │ │ ├── PageRectangle.cs │ │ │ └── PageText.cs │ │ ├── PageTextHtml.cs │ │ ├── PageTextHtmlCmdLexer.cs │ │ ├── PageTextHtmlLexer.cs │ │ ├── Pages.cs │ │ ├── ParameterLexer.cs │ │ ├── RdlEngineConfig.cs │ │ ├── Report.cs │ │ ├── StyleInfo.cs │ │ ├── XmlUtil.cs │ │ └── ZipWrap.cs │ ├── Utility/ │ │ ├── HttpClientExtension.cs │ │ ├── Measurement.cs │ │ └── Paths.cs │ ├── usa_map.xml │ └── world_map.xml ├── RdlGtk3/ │ ├── CairoPdfWriter.cs │ ├── Extensions/ │ │ └── CairoExtensions.cs │ ├── GlobalSuppressions.cs │ ├── MainWindow.cs │ ├── Majorsilence.Reporting.RdlGtk3.csproj │ ├── ParameterPrompt.cs │ ├── RenderCairo.cs │ ├── ReportArea.cs │ ├── ReportExporter.cs │ ├── ReportViewer.cs │ └── app.desktop ├── RdlGtk3Viewer/ │ ├── Program.cs │ ├── RdlGtk3Viewer.csproj │ └── runtimeconfig.template.json ├── RdlMapFile/ │ ├── DPSimp.cs │ ├── DesignXmlDraw.cs │ ├── DesignXmlDraw.resx │ ├── DialogAbout.Designer.cs │ ├── DialogAbout.cs │ ├── DialogAbout.resx │ ├── DialogAbout.ru-RU.resx │ ├── DialogFindByKey.Designer.cs │ ├── DialogFindByKey.cs │ ├── DialogFindByKey.resx │ ├── DialogFindByKey.ru-RU.resx │ ├── MapFile.Designer.cs │ ├── MapFile.cs │ ├── MapFile.resx │ ├── MapFile.ru-RU.resx │ ├── Properties/ │ │ ├── Resources.Designer.cs │ │ ├── Resources.resx │ │ ├── Settings.Designer.cs │ │ └── Settings.settings │ ├── RdlMapFile.cs │ ├── RdlMapFile.csproj │ ├── RdlMapFile.sln │ ├── RdlProperties/ │ │ ├── Categories.Designer.cs │ │ ├── Categories.resx │ │ ├── Categories.ru-RU.resx │ │ ├── Descriptions.Designer.cs │ │ ├── Descriptions.resx │ │ ├── Descriptions.ru-RU.resx │ │ ├── DisplayNames.Designer.cs │ │ ├── DisplayNames.resx │ │ ├── DisplayNames.ru-RU.resx │ │ ├── LocalizedCategoryAttribute.cs │ │ ├── LocalizedDescriptionAttribute.cs │ │ ├── LocalizedDisplayNameAttribute.cs │ │ ├── PropertyBase.cs │ │ ├── PropertyLine.cs │ │ ├── PropertyPolygon.cs │ │ └── PropertyText.cs │ ├── Resources/ │ │ ├── Strings.Designer.cs │ │ ├── Strings.resx │ │ └── Strings.ru-RU.resx │ ├── ShapeFile.cs │ └── Undo.cs ├── RdlReader/ │ ├── DialogAbout.Designer.cs │ ├── DialogAbout.cs │ ├── DialogAbout.resx │ ├── DialogAbout.ru-RU.resx │ ├── MDIChild.Designer.cs │ ├── MDIChild.cs │ ├── MDIChild.resx │ ├── Properties/ │ │ ├── Resources.Designer.cs │ │ └── Resources.resx │ ├── RdlReader.Designer.cs │ ├── RdlReader.cs │ ├── RdlReader.csproj │ ├── RdlReader.fr.resx │ ├── RdlReader.resx │ ├── RdlReader.ru-RU.resx │ ├── Resources/ │ │ ├── Strings.Designer.cs │ │ ├── Strings.resx │ │ └── Strings.ru-RU.resx │ ├── ZoomTo.Designer.cs │ ├── ZoomTo.cs │ ├── ZoomTo.resx │ ├── ZoomTo.ru-RU.resx │ └── app.manifest ├── RdlTests/ │ ├── DataTests/ │ │ ├── AssemblyInfo.cs │ │ ├── DataTests.cs │ │ ├── DataTests.csproj │ │ └── DataTests.resx │ ├── RdlTests.sln │ └── TestLibrary/ │ ├── Properties/ │ │ └── AssemblyInfo.cs │ ├── TestClass.cs │ └── TestLibrary.csproj ├── RdlViewer/ │ ├── DataSourcePassword.Designer.cs │ ├── DataSourcePassword.cs │ ├── DataSourcePassword.resx │ ├── DataSourcePassword.ru-RU.resx │ ├── DialogMessages.Designer.cs │ ├── DialogMessages.cs │ ├── DialogMessages.resx │ ├── DialogMessages.ru-RU.resx │ ├── PageDrawing.cs │ ├── PageDrawing.resx │ ├── RdlViewer.Designer.cs │ ├── RdlViewer.cs │ ├── RdlViewer.csproj │ ├── RdlViewer.fr.resx │ ├── RdlViewer.resx │ ├── RdlViewer.ru-RU.resx │ ├── RdlViewer.sln │ ├── RdlViewerFind.cs │ ├── RdlViewerFind.resx │ ├── RdlViewerFind.ru-RU.resx │ ├── Resources/ │ │ ├── Strings.Designer.cs │ │ ├── Strings.resx │ │ └── Strings.ru-RU.resx │ └── ViewerToolstrip.cs ├── RdlViewer.Tests/ │ ├── ParameterSettingMethodsTest.cs │ ├── RdlEngineConfig.xml │ └── RdlViewer.Tests.csproj ├── Readme.md ├── References/ │ ├── Linux.txt │ ├── dot net 4/ │ │ └── xwt-license.txt │ └── postgresql-license.txt ├── Release-Builds/ │ └── setup-majorsilence-reporting.warsetup ├── ReportDesigner/ │ ├── Program.cs │ └── ReportDesigner.csproj ├── ReportTests/ │ ├── DatabaseInfo.cs │ ├── ExampleTest.cs │ ├── ExcelValetTests.cs │ ├── FunctionTest.cs │ ├── MajorsilenceDarawingColorTranslatorTests.cs │ ├── RenderPdf_Base64ImageParameter.cs │ ├── RenderPdf_WithBarcodeParameter.cs │ ├── RenderPdf_iTextSharpTests.cs │ ├── ReportDefnDisposeTest.cs │ ├── ReportTests.csproj │ ├── Reports/ │ │ ├── BaseTestReport.rdl │ │ ├── ChartTypes.rdl │ │ ├── FunctionTest.rdl │ │ ├── LineObjects.rdl │ │ ├── ListReport.rdl │ │ ├── MatrixExample.rdl │ │ ├── WorldFacts.rdl │ │ ├── WorldFacts.xml │ │ └── testdata.rdl │ ├── Utils/ │ │ ├── GeneralUtils.cs │ │ ├── OpenXmlUtils.cs │ │ ├── RandomDateTime.cs │ │ └── RdlUtils.cs │ └── iTextSharpTests.cs ├── ReportTests.Windows/ │ ├── DesignerUtilityTests.cs │ ├── ReportTests.Windows.csproj │ └── StringEncryptionTests.cs ├── Specification.md ├── Tests/ │ ├── TestParameterNameExtraction.cs │ └── Tests.csproj ├── build-mac-wine-package.sh ├── build-release-rdlcmd-linux.ps1 ├── build-release.ps1 └── jekyll_site/ ├── .gitattributes ├── .gitignore ├── CNAME ├── _config.yml ├── _includes/ │ ├── blogpost/ │ │ ├── author.html │ │ ├── date.html │ │ ├── meta.html │ │ └── tags.html │ ├── blogpost.html │ ├── disqus.html │ ├── footer.html │ ├── opengraph.html │ ├── page_header.html │ ├── search.html │ └── toc.html ├── _layouts/ │ ├── base.html │ ├── main.html │ └── post.html ├── _posts/ │ └── 2025-12-28-quick-start.md ├── assets/ │ ├── css/ │ │ ├── bundle.css │ │ └── main.css │ └── js/ │ ├── bundle.js │ └── main.js ├── index.html ├── posts/ │ ├── index.html │ └── listings.html ├── robots.txt ├── schemas/ │ └── reporting/ │ └── 2025/ │ └── 12/ │ └── reportdefinition/ │ ├── ReportDefinition.xsd │ └── index.html └── stylesheets/ ├── menu.css ├── normalize.css └── vertical-responsive-menu.css ================================================ FILE CONTENTS ================================================ ================================================ FILE: .editorconfig ================================================ # Remove the line below if you want to inherit .editorconfig settings from higher directories root = true # C# files [*.cs] #### Core EditorConfig Options #### # Indentation and spacing indent_size = 4 indent_style = space tab_width = 4 # New line preferences end_of_line = crlf insert_final_newline = false #### .NET Code Actions #### # Type members dotnet_hide_advanced_members = false dotnet_member_insertion_location = with_other_members_of_the_same_kind dotnet_property_generation_behavior = prefer_throwing_properties # Symbol search dotnet_search_reference_assemblies = true #### .NET Coding Conventions #### # Organize usings dotnet_separate_import_directive_groups = false dotnet_sort_system_directives_first = false file_header_template = unset # this. and Me. preferences dotnet_style_qualification_for_event = false dotnet_style_qualification_for_field = false dotnet_style_qualification_for_method = false dotnet_style_qualification_for_property = false # Language keywords vs BCL types preferences dotnet_style_predefined_type_for_locals_parameters_members = true dotnet_style_predefined_type_for_member_access = true # Parentheses preferences dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity dotnet_style_parentheses_in_other_binary_operators = always_for_clarity dotnet_style_parentheses_in_other_operators = never_if_unnecessary dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity # Modifier preferences dotnet_style_require_accessibility_modifiers = for_non_interface_members # Expression-level preferences dotnet_prefer_system_hash_code = true dotnet_style_coalesce_expression = true dotnet_style_collection_initializer = true dotnet_style_explicit_tuple_names = true dotnet_style_namespace_match_folder = true dotnet_style_null_propagation = true dotnet_style_object_initializer = true dotnet_style_operator_placement_when_wrapping = beginning_of_line dotnet_style_prefer_auto_properties = true dotnet_style_prefer_collection_expression = when_types_loosely_match dotnet_style_prefer_compound_assignment = true dotnet_style_prefer_conditional_expression_over_assignment = true dotnet_style_prefer_conditional_expression_over_return = true dotnet_style_prefer_foreach_explicit_cast_in_source = when_strongly_typed dotnet_style_prefer_inferred_anonymous_type_member_names = true dotnet_style_prefer_inferred_tuple_names = true dotnet_style_prefer_is_null_check_over_reference_equality_method = true dotnet_style_prefer_simplified_boolean_expressions = true dotnet_style_prefer_simplified_interpolation = true # Field preferences dotnet_style_readonly_field = true # Parameter preferences dotnet_code_quality_unused_parameters = all # Suppression preferences dotnet_remove_unnecessary_suppression_exclusions = none # New line preferences dotnet_style_allow_multiple_blank_lines_experimental = true dotnet_style_allow_statement_immediately_after_block_experimental = true #### C# Coding Conventions #### # var preferences csharp_style_var_elsewhere = false csharp_style_var_for_built_in_types = false csharp_style_var_when_type_is_apparent = false # Expression-bodied members csharp_style_expression_bodied_accessors = true csharp_style_expression_bodied_constructors = false csharp_style_expression_bodied_indexers = true csharp_style_expression_bodied_lambdas = true csharp_style_expression_bodied_local_functions = false csharp_style_expression_bodied_methods = false csharp_style_expression_bodied_operators = false csharp_style_expression_bodied_properties = true # Pattern matching preferences csharp_style_pattern_matching_over_as_with_null_check = true csharp_style_pattern_matching_over_is_with_cast_check = true csharp_style_prefer_extended_property_pattern = true csharp_style_prefer_not_pattern = true csharp_style_prefer_pattern_matching = true csharp_style_prefer_switch_expression = true # Null-checking preferences csharp_style_conditional_delegate_call = true # Modifier preferences csharp_prefer_static_anonymous_function = true csharp_prefer_static_local_function = true csharp_preferred_modifier_order = public,private,protected,internal,file,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,required,volatile,async csharp_style_prefer_readonly_struct = true csharp_style_prefer_readonly_struct_member = true # Code-block preferences csharp_prefer_braces = true csharp_prefer_simple_using_statement = true csharp_prefer_system_threading_lock = true csharp_style_namespace_declarations = block_scoped csharp_style_prefer_method_group_conversion = true csharp_style_prefer_primary_constructors = true csharp_style_prefer_top_level_statements = true # Expression-level preferences csharp_prefer_simple_default_expression = true csharp_style_deconstructed_variable_declaration = true csharp_style_implicit_object_creation_when_type_is_apparent = true csharp_style_inlined_variable_declaration = true csharp_style_prefer_index_operator = true csharp_style_prefer_local_over_anonymous_function = true csharp_style_prefer_null_check_over_type_check = true csharp_style_prefer_range_operator = true csharp_style_prefer_tuple_swap = true csharp_style_prefer_utf8_string_literals = true csharp_style_throw_expression = true csharp_style_unused_value_assignment_preference = discard_variable csharp_style_unused_value_expression_statement_preference = discard_variable # 'using' directive preferences csharp_using_directive_placement = outside_namespace # New line preferences csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true csharp_style_allow_embedded_statements_on_same_line_experimental = true #### C# Formatting Rules #### # New line preferences csharp_new_line_before_catch = true csharp_new_line_before_else = true csharp_new_line_before_finally = true csharp_new_line_before_members_in_anonymous_types = true csharp_new_line_before_members_in_object_initializers = true csharp_new_line_before_open_brace = all csharp_new_line_between_query_expression_clauses = true # Indentation preferences csharp_indent_block_contents = true csharp_indent_braces = false csharp_indent_case_contents = true csharp_indent_case_contents_when_block = true csharp_indent_labels = one_less_than_current csharp_indent_switch_labels = true # Space preferences csharp_space_after_cast = false csharp_space_after_colon_in_inheritance_clause = true csharp_space_after_comma = true csharp_space_after_dot = false csharp_space_after_keywords_in_control_flow_statements = true csharp_space_after_semicolon_in_for_statement = true csharp_space_around_binary_operators = before_and_after csharp_space_around_declaration_statements = false csharp_space_before_colon_in_inheritance_clause = true csharp_space_before_comma = false csharp_space_before_dot = false csharp_space_before_open_square_brackets = false csharp_space_before_semicolon_in_for_statement = false csharp_space_between_empty_square_brackets = false csharp_space_between_method_call_empty_parameter_list_parentheses = false csharp_space_between_method_call_name_and_opening_parenthesis = false csharp_space_between_method_call_parameter_list_parentheses = false csharp_space_between_method_declaration_empty_parameter_list_parentheses = false csharp_space_between_method_declaration_name_and_open_parenthesis = false csharp_space_between_method_declaration_parameter_list_parentheses = false csharp_space_between_parentheses = false csharp_space_between_square_brackets = false # Wrapping preferences csharp_preserve_single_line_blocks = true csharp_preserve_single_line_statements = true #### Naming styles #### # Naming rules dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion dotnet_naming_rule.types_should_be_pascal_case.symbols = types dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case # Symbol specifications dotnet_naming_symbols.interface.applicable_kinds = interface dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected dotnet_naming_symbols.interface.required_modifiers = dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected dotnet_naming_symbols.types.required_modifiers = dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected dotnet_naming_symbols.non_field_members.required_modifiers = # Naming styles dotnet_naming_style.pascal_case.required_prefix = dotnet_naming_style.pascal_case.required_suffix = dotnet_naming_style.pascal_case.word_separator = dotnet_naming_style.pascal_case.capitalization = pascal_case dotnet_naming_style.begins_with_i.required_prefix = I dotnet_naming_style.begins_with_i.required_suffix = dotnet_naming_style.begins_with_i.word_separator = dotnet_naming_style.begins_with_i.capitalization = pascal_case # CA2000: Dispose objects before losing scope #dotnet_diagnostic.CA2000.severity = warning # CA2007: Do not directly await a Task without calling ConfigureAwait #dotnet_diagnostic.CA2007.severity = warning # CA4014: async code not awaited. See https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-messages/cs4014 dotnet_diagnostic.CA4014.severity = error ================================================ FILE: .gitattributes ================================================ # Auto detect text files and perform LF normalization * text=auto # Custom for Visual Studio *.cs diff=csharp *.sln merge=union *.csproj merge=union *.vbproj merge=union *.fsproj merge=union *.dbproj merge=union # Standard to msysgit *.doc diff=astextplain *.DOC diff=astextplain *.docx diff=astextplain *.DOCX diff=astextplain *.dot diff=astextplain *.DOT diff=astextplain *.pdf diff=astextplain *.PDF diff=astextplain *.rtf diff=astextplain *.RTF diff=astextplain ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.md ================================================ --- name: Bug report about: Create a report to help us improve title: '' labels: '' assignees: '' --- **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error **Expected behavior** A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. **Desktop (please complete the following information):** - OS: [e.g. iOS] - Browser [e.g. chrome, safari] - Version [e.g. 22] **Smartphone (please complete the following information):** - Device: [e.g. iPhone6] - OS: [e.g. iOS8.1] - Browser [e.g. stock browser, safari] - Version [e.g. 22] **Additional context** Add any other context about the problem here. ================================================ FILE: .github/ISSUE_TEMPLATE/feature_request.md ================================================ --- name: Feature request about: Suggest an idea for this project title: '' labels: '' assignees: '' --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. ================================================ FILE: .github/dependabot.yml ================================================ # To get started with Dependabot version updates, you'll need to specify which # package ecosystems to update and where the package manifests are located. # Please see the documentation for all configuration options: # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates version: 2 updates: - package-ecosystem: "" # See documentation for possible values directory: "/" # Location of package manifests schedule: interval: "weekly" ================================================ FILE: .github/workflows/codeql.yml ================================================ # For most projects, this workflow file will not need changing; you simply need # to commit it to your repository. # # You may wish to alter this file to override the set of languages analyzed, # or to provide custom queries or build logic. # # ******** NOTE ******** # We have attempted to detect the languages in your repository. Please check # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages. # name: "CodeQL Advanced" on: push: branches: [ "master" ] pull_request: branches: [ "master" ] schedule: - cron: '23 17 * * 5' jobs: analyze: name: Analyze (${{ matrix.language }}) # Runner size impacts CodeQL analysis time. To learn more, please see: # - https://gh.io/recommended-hardware-resources-for-running-codeql # - https://gh.io/supported-runners-and-hardware-resources # - https://gh.io/using-larger-runners (GitHub.com only) # Consider using larger runners or machines with greater resources for possible analysis time improvements. runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} permissions: # required for all workflows security-events: write # required to fetch internal or private CodeQL packs packages: read # only required for workflows in private repositories actions: read contents: read strategy: fail-fast: false matrix: include: - language: actions build-mode: none - language: csharp build-mode: none - language: javascript-typescript build-mode: none - language: python build-mode: none - language: ruby build-mode: none # CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'rust', 'swift' # Use `c-cpp` to analyze code written in C, C++ or both # Use 'java-kotlin' to analyze code written in Java, Kotlin or both # Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both # To learn more about changing the languages that are analyzed or customizing the build mode for your analysis, # see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning. # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages steps: - name: Checkout repository uses: actions/checkout@v4 # Add any setup steps before running the `github/codeql-action/init` action. # This includes steps like installing compilers or runtimes (`actions/setup-node` # or others). This is typically only required for manual builds. # - name: Setup runtime (example) # uses: actions/setup-example@v1 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v4 with: languages: ${{ matrix.language }} build-mode: ${{ matrix.build-mode }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs # queries: security-extended,security-and-quality # If the analyze step fails for one of the languages you are analyzing with # "We were unable to automatically build your code", modify the matrix above # to set the build mode to "manual" for that language. Then modify this step # to build your code. # ℹ️ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - name: Run manual build steps if: matrix.build-mode == 'manual' shell: bash run: | echo 'If you are using a "manual" build mode for one or more of the' \ 'languages you are analyzing, replace this with the commands to build' \ 'your code, for example:' echo ' make bootstrap' echo ' make release' exit 1 - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v4 with: category: "/language:${{matrix.language}}" ================================================ FILE: .github/workflows/jekyll-gh-pages.yml ================================================ # Sample workflow for building and deploying a Jekyll site to GitHub Pages name: Deploy Jekyll with GitHub Pages dependencies preinstalled on: # Runs on pushes targeting the default branch push: branches: ["master"] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages permissions: contents: read pages: write id-token: write # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. concurrency: group: "pages" cancel-in-progress: false jobs: # Build job build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Pages uses: actions/configure-pages@v5 - name: Build with Jekyll uses: actions/jekyll-build-pages@v1 with: source: ./jekyll_site destination: ./_site - name: Upload artifact uses: actions/upload-pages-artifact@v3 # Deployment job deploy: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest needs: build steps: - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 ================================================ FILE: .github/workflows/linux.yml ================================================ name: linux permissions: contents: read on: push: branches: [master] pull_request: branches: [master] jobs: linux-build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - name: Setup .NET uses: actions/setup-dotnet@v5 with: dotnet-version: 10.0.x - name: Restore dependencies run: dotnet restore MajorsilenceReporting-Linux-GtkViewer.sln - name: Build GtkViewer run: dotnet build -c Release-DrawingCompat MajorsilenceReporting-Linux-GtkViewer.sln - name: Build MajorsilenceReporting DrawingCompat run: dotnet build -c Release-DrawingCompat MajorsilenceReporting.sln - name: Test run: dotnet test -c Release-DrawingCompat MajorsilenceReporting.sln --verbosity normal --collect:"XPlat Code Coverage" --logger:"trx" - name: Test Report uses: dorny/test-reporter@v2 if: success() || failure() # run this step even if previous step failed with: name: unit tests path: "**/TestResults/*.trx" reporter: dotnet-trx ================================================ FILE: .github/workflows/mac.yml ================================================ name: mac permissions: contents: read on: push: branches: [master] pull_request: branches: [master] jobs: mac-build: runs-on: macos-latest steps: - uses: actions/checkout@v6 - name: Setup .NET uses: actions/setup-dotnet@v5 with: dotnet-version: 10.0.x - name: Restore dependencies run: dotnet restore MajorsilenceReporting-Linux-GtkViewer.sln - name: Build GtkViewer run: dotnet build -c Release-DrawingCompat MajorsilenceReporting-Linux-GtkViewer.sln - name: Build MajorsilenceReporting DrawingCompat run: dotnet build -c Release-DrawingCompat MajorsilenceReporting.sln - name: Test run: dotnet test -c Release-DrawingCompat MajorsilenceReporting.sln --verbosity normal --collect:"XPlat Code Coverage" --logger:"trx" - name: Test Report uses: dorny/test-reporter@v2 if: success() || failure() # run this step even if previous step failed with: name: unit tests path: "**/TestResults/*.trx" reporter: dotnet-trx ================================================ FILE: .github/workflows/windows.yml ================================================ name: windows on: push: branches: [master] pull_request: branches: [master] jobs: windows-build: permissions: contents: read runs-on: windows-latest steps: - uses: actions/checkout@v6 - name: Setup .NET uses: actions/setup-dotnet@v5 with: dotnet-version: 10.0.x - name: Build Release run: ./build-release.ps1 - name: Test run: dotnet test -c Release MajorsilenceReporting.sln --verbosity normal --collect:"XPlat Code Coverage" --logger:"trx" - name: Test Report uses: dorny/test-reporter@v2 if: success() || failure() # run this step even if previous step failed with: name: unit tests path: "**/TestResults/*.trx" reporter: dotnet-trx - name: SBOM uses: CycloneDX/gh-dotnet-generate-sbom@v1 with: path: ./MajorsilenceReporting.sln - name: Archive artifacts uses: actions/upload-artifact@v6 with: name: build-output path: | Release-Builds/build-output/*.zip Release-Builds/build-output/*.nupkg Release-Builds/build-output/*.snupkg sbom.xml retention-days: 1 ================================================ FILE: .gitignore ================================================ python_project_root/ # Created by https://www.gitignore.io ### VisualStudio ### ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. # User-specific files *.suo *.user *.userosscache *.sln.docstates # Build results [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ x64/ x86/ build/ bld/ [Bb]in/ [Oo]bj/ # Roslyn cache directories *.ide/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* #NUNIT *.VisualState.xml TestResult.xml # Build Results of an ATL Project [Dd]ebugPS/ [Rr]eleasePS/ dlldata.c *_i.c *_p.c *_i.h *.ilk *.meta *.obj *.pch *.pdb *.pgc *.pgd *.rsp *.sbr *.tlb *.tli *.tlh *.tmp *.tmp_proj *.log *.vspscc *.vssscc .builds *.pidb *.svclog *.scc # Chutzpah Test files _Chutzpah* # Visual C++ cache files ipch/ *.aps *.ncb *.opensdf *.sdf *.cachefile # Visual Studio profiler *.psess *.vsp *.vspx # TFS 2012 Local Workspace $tf/ # Guidance Automation Toolkit *.gpState # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper *.DotSettings.user .idea/ # JustCode is a .NET coding addin-in .JustCode # TeamCity is a build add-in _TeamCity* # DotCover is a Code Coverage Tool *.dotCover # NCrunch _NCrunch_* .*crunch*.local.xml # MightyMoose *.mm.* AutoTest.Net/ # Web workbench (sass) .sass-cache/ # Installshield output folder [Ee]xpress/ # DocProject is a documentation generator add-in DocProject/buildhelp/ DocProject/Help/*.HxT DocProject/Help/*.HxC DocProject/Help/*.hhc DocProject/Help/*.hhk DocProject/Help/*.hhp DocProject/Help/Html2 DocProject/Help/html # Click-Once directory publish/ # Publish Web Output *.[Pp]ublish.xml *.azurePubxml # TODO: Comment the next line if you want to checkin your web deploy settings # but database connection strings (with potential passwords) will be unencrypted *.pubxml *.publishproj # NuGet Packages *.nupkg # The packages folder can be ignored because of Package Restore **/packages/* # except build/, which is used as an MSBuild target. !**/packages/build/ # If using the old MSBuild-Integrated Package Restore, uncomment this: #!**/packages/repositories.config # Windows Azure Build Output csx/ *.build.csdef # Windows Store app package directory AppPackages/ # Others sql/ *.Cache ClientBin/ [Ss]tyle[Cc]op.* ~$* *~ *.dbmdl *.dbproj.schemaview *.pfx *.publishsettings node_modules/ # RIA/Silverlight projects Generated_Code/ # Backup & report files from converting an old project file # to a newer Visual Studio version. Backup files are not needed, # because we have git ;-) _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm # SQL Server files *.mdf *.ldf # Business Intelligence projects *.rdl.data *.bim.layout *.bim_*.settings # Microsoft Fakes FakesAssemblies/ ### XamarinStudio ### bin/ obj/ *.userprefs /Release-Builds/my-fyi-build-dot-net-4-viewer-x86 /Release-Builds/majorsilence-reporting-build-dot-net-4-viewer-x86 /Release-Builds/majorsilence-reporting-build-dot-net-4-AnyCPU /Release-Builds/majorsilence-reporting-build-dot-net-4-x86 /Release-Builds/majorsilence-reporting-build-dot-net-4-viewer-x86.zip /Release-Builds/majorsilence-reporting-build-dot-net-4-AnyCPU.zip /Release-Builds/majorsilence-reporting-build-dot-net-4-x86.zip /Release-Builds/setup-Majorsilence-Reporting-dot-net4-x86.msi /Release-Builds/setup-Majorsilence-Reporting-dot-net4-x86.wixobj /Release-Builds/setup-Majorsilence-Reporting-dot-net4-x86.wixpdb /Release-Builds/setup-Majorsilence-Reporting-dot-net4-x86.wxs /Release-Builds/majorsilence-reporting-build-dot-net-4-php-x86 /Release-Builds/majorsilence-reporting-build-dot-net-4-php-x86.zip /Release-Builds/majorsilence-reporting-build-dot-net-4-python-x86 /Release-Builds/majorsilence-reporting-build-dot-net-4-ruby-x86 /Release-Builds/majorsilence-reporting-build-dot-net-4-python-x86.zip /Release-Builds/*.msi /Release-Builds/majorsilence-reporting-build-dot-net-4-AnyCPU /Release-Builds/*.zip /Release-Builds/nuget/My-FyiReporting/lib /Release-Builds/majorsilence-reporting-build-dot-net-3.5-AnyCPU /Release-Builds/majorsilence-reporting-build-dot-net-3.5-AnyCPU.zip *~ /Release-Builds/majorsilence-reporting-build-dot-net-2-x64 /Release-Builds/majorsilence-reporting-build-dot-net-2-x86 /Release-Builds/build-output /Release-Builds/nuget/MajorsilenceReporting/lib /Release-Builds/nuget/MajorsilenceReporting-Core/lib /Release-Builds/nuget/MajorsilenceReporting-Core/content /Release-Builds/nuget/MajorsilenceReporting-Viewer/lib /Release-Builds/nuget/MajorsilenceReporting-Asp/lib /Release-Builds/nuget/MajorsilenceReporting-XwtViewer/lib /Release-Builds/nuget/MajorsilenceReporting-WpfViewer/lib /Examples/SampleApp/SampleReportApp/RdlEngineConfig.Linux.xml /Examples/SampleApp/SampleReportApp/RdlEngineConfig.xml /Examples/SampleApp2-SetData/SampleApp2-SetData/RdlEngineConfig.Linux.xml .vs/ /Examples/SampleAspDotNet/SampleAspDotNet/libSkiaSharp.dll /Examples/SampleAspDotNet/SampleAspDotNet/libSkiaSharp.dylib .DS_Store *.pyc /LanguageWrappers/python/Examples/output /LanguageWrappers/ruby/Examples/output /LanguageWrappers/php/Examples/output ================================================ FILE: DataProviders/BaseDataParameter.cs ================================================ using System; using System.Xml; using System.Data; namespace Majorsilence.Reporting.Data { /// /// BaseDataParameter is the base class for handling parameters /// public class BaseDataParameter : IDbDataParameter { string _Name; // parameter name string _Value; // parameter value public BaseDataParameter() { } #region IDbDataParameter Members public byte Precision { get { return 0; } set { throw new NotImplementedException("Precision setting is not implemented"); } } public byte Scale { get { return 0; } set { throw new NotImplementedException("Scale setting is not implemented"); } } public int Size { get { return 0; } set { throw new NotImplementedException("Size setting is not implemented"); } } #endregion #region IDataParameter Members public System.Data.ParameterDirection Direction { get { return System.Data.ParameterDirection.Input; // only support input parameter } set { if (value != ParameterDirection.Input) throw new Exception("Parameter Direction must be Input"); } } public System.Data.DbType DbType { get { return DbType.String; } set { if (value != DbType.String) throw new Exception("DbType must always be String"); } } public object Value { get {return _Value;} set {_Value = value != null? value.ToString(): null;} } public bool IsNullable { get { return false; } } public System.Data.DataRowVersion SourceVersion { get { return DataRowVersion.Current; } set { throw new NotImplementedException("Setting DataRowVersion is not implemented."); } } public string ParameterName { get {return _Name;} set {_Name = value;} } public string SourceColumn { get { return null; } set { throw new NotImplementedException("Setting SourceColumn is not implemented."); } } #endregion } } ================================================ FILE: DataProviders/DataParameterCollection.cs ================================================ using System; using System.Collections; using System.Data; namespace Majorsilence.Reporting.Data { /// /// XmlDataParameter /// public class DataParameterCollection : IDataParameterCollection { ArrayList _List; // parameter collection public DataParameterCollection() { _List = new ArrayList(); } #region IDataParameterCollection Members public object this[string parameterName] { get { int index = IndexOf(parameterName); if (index < 0) return null; return _List[index]; } set { IDbDataParameter dp = value as IDbDataParameter; if (dp == null) throw new ArgumentException("Object must be an IDbDataParameter"); _List[this.IndexOf(parameterName)] = dp; } } public void RemoveAt(string parameterName) { _List.RemoveAt(this.IndexOf(parameterName)); } public bool Contains(string parameterName) { return IndexOf(parameterName) < 0? false: true; } public int IndexOf(string parameterName) { int i=0; foreach (IDbDataParameter dp in _List) { if (dp.ParameterName == parameterName) return i; i++; } return -1; } #endregion #region IList Members public bool IsReadOnly { get { return _List.IsReadOnly; } } object System.Collections.IList.this[int index] { get { return _List[index]; } set { _List[index] = value; } } void System.Collections.IList.RemoveAt(int index) { _List.RemoveAt(index); } public void Insert(int index, object value) { _List.Insert(index, value); } public void Remove(object value) { _List.Remove(value); } bool System.Collections.IList.Contains(object value) { return _List.Contains(value); } public void Clear() { _List.Clear(); } int System.Collections.IList.IndexOf(object value) { return _List.IndexOf(value); } public int Add(object value) { return _List.Add(value); } public bool IsFixedSize { get { return _List.IsFixedSize; } } #endregion #region ICollection Members public bool IsSynchronized { get { return _List.IsSynchronized; } } public int Count { get { return _List.Count; } } public void CopyTo(Array array, int index) { _List.CopyTo(array, index); } public object SyncRoot { get { return _List.SyncRoot; } } #endregion #region IEnumerable Members public System.Collections.IEnumerator GetEnumerator() { return _List.GetEnumerator(); } #endregion } } ================================================ FILE: DataProviders/DataProviders.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Express 2012 for Web Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataProviders", "DataProviders.csproj", "{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.Build.0 = Debug|Any CPU {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x64.ActiveCfg = Debug|x64 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x64.Build.0 = Debug|x64 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x86.ActiveCfg = Debug|x86 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x86.Build.0 = Debug|x86 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.ActiveCfg = Release|Any CPU {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.Build.0 = Release|Any CPU {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x64.ActiveCfg = Release|x64 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x64.Build.0 = Release|x64 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x86.ActiveCfg = Release|x86 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: DataProviders/DictionaryDataReader.cs ================================================ using System; using System.Collections.Generic; using System.Data; using System.Linq; namespace Majorsilence.Reporting.Data { public class DictionaryDataReader : IDataReader { private readonly List> _data; private readonly string[] _fieldNames; private readonly Dictionary _fieldIndexMap; private int _currentRow = -1; public DictionaryDataReader(List> data) { _data = data ?? new List>(); if (_data.Count > 0) { _fieldNames = _data[0].Keys.ToArray(); // Create case-insensitive field mapping _fieldIndexMap = new Dictionary(StringComparer.OrdinalIgnoreCase); for (int i = 0; i < _fieldNames.Length; i++) { _fieldIndexMap[_fieldNames[i]] = i; } } else { _fieldNames = Array.Empty(); _fieldIndexMap = new Dictionary(StringComparer.OrdinalIgnoreCase); } } public int GetOrdinal(string name) { if (_fieldIndexMap.TryGetValue(name, out int index)) return index; throw new ArgumentException($"Field '{name}' not found. Available fields: {string.Join(", ", _fieldNames)}"); } public bool Read() => ++_currentRow < _data.Count; public int FieldCount => _fieldNames.Length; public string GetName(int i) => _fieldNames[i]; public object GetValue(int i) { if (_currentRow < 0 || _currentRow >= _data.Count || i < 0 || i >= _fieldNames.Length) return DBNull.Value; return _data[_currentRow].TryGetValue(_fieldNames[i], out var val) ? val ?? DBNull.Value : DBNull.Value; } public int GetValues(object[] values) { int count = Math.Min(values.Length, FieldCount); for (int i = 0; i < count; i++) { values[i] = GetValue(i); } return count; } public bool IsDBNull(int i) => GetValue(i) == DBNull.Value; public object this[int i] => GetValue(i); public object this[string name] => GetValue(GetOrdinal(name)); public Type GetFieldType(int i) => GetValue(i)?.GetType() ?? typeof(object); // Minimal additional methods public void Close() { } public void Dispose() { } public bool NextResult() => false; public int Depth => 0; public bool IsClosed => false; public int RecordsAffected => -1; // Not implemented for brevity public DataTable GetSchemaTable() { DataTable schemaTable = new DataTable(); // Add standard schema columns schemaTable.Columns.Add("ColumnName", typeof(string)); schemaTable.Columns.Add("ColumnOrdinal", typeof(int)); schemaTable.Columns.Add("DataType", typeof(Type)); schemaTable.Columns.Add("IsKey", typeof(bool)); schemaTable.Columns.Add("IsUnique", typeof(bool)); schemaTable.Columns.Add("IsAutoIncrement", typeof(bool)); schemaTable.Columns.Add("AllowDBNull", typeof(bool)); // Populate schema information for each column for (int i = 0; i < FieldCount; i++) { DataRow row = schemaTable.NewRow(); row["ColumnName"] = GetName(i); row["ColumnOrdinal"] = i; row["DataType"] = GetFieldType(i); row["IsKey"] = false; row["IsUnique"] = false; row["IsAutoIncrement"] = false; row["AllowDBNull"] = true; schemaTable.Rows.Add(row); } return schemaTable; } public bool GetBoolean(int i) => (bool)GetValue(i); public byte GetByte(int i) => (byte)GetValue(i); public long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length) { object value = GetValue(i); if (value is byte[] bytes) { int bytesToCopy = (int)Math.Min(length, bytes.Length - fieldOffset); if (bytesToCopy > 0 && buffer != null) { Array.Copy(bytes, fieldOffset, buffer, bufferoffset, bytesToCopy); } return bytesToCopy; } return 0; } public char GetChar(int i) => (char)GetValue(i); public long GetChars(int i, long fieldOffset, char[] buffer, int bufferOffset, int length) { object value = GetValue(i); if (value is string str) { // If value is a string, we can extract characters from it int charsToCopy = (int)Math.Min(length, str.Length - fieldOffset); if (charsToCopy > 0 && buffer != null) { str.CopyTo((int)fieldOffset, buffer, bufferOffset, charsToCopy); } return charsToCopy; } else if (value is char[] chars) { // If value is already a char array, copy directly int charsToCopy = (int)Math.Min(length, chars.Length - fieldOffset); if (charsToCopy > 0 && buffer != null) { Array.Copy(chars, fieldOffset, buffer, bufferOffset, charsToCopy); } return charsToCopy; } return 0; } public IDataReader GetData(int i) { object value = GetValue(i); // Handle collections that can be converted to a data reader if (value is IEnumerable> dictList) { return new DictionaryDataReader(dictList.ToList()); } else if (value is DataTable dataTable) { // Convert DataTable to list of dictionaries var rows = new List>(); foreach (DataRow row in dataTable.Rows) { var dict = new Dictionary(); foreach (DataColumn col in dataTable.Columns) { dict[col.ColumnName] = row[col]; } rows.Add(dict); } return new DictionaryDataReader(rows); } // For other types that can't be easily converted to a data reader throw new InvalidCastException($"Cannot convert value at index {i} to IDataReader"); } public string GetDataTypeName(int i) => GetFieldType(i).Name; public DateTime GetDateTime(int i) => (DateTime)GetValue(i); public decimal GetDecimal(int i) => (decimal)GetValue(i); public double GetDouble(int i) => (double)GetValue(i); public float GetFloat(int i) => (float)GetValue(i); public Guid GetGuid(int i) => (Guid)GetValue(i); public short GetInt16(int i) => (short)GetValue(i); public int GetInt32(int i) => (int)GetValue(i); public long GetInt64(int i) => (long)GetValue(i); public string GetString(int i) => GetValue(i)?.ToString(); } } ================================================ FILE: DataProviders/FileDirCommand.cs ================================================ using System; using System.Xml; using System.Data; using System.Collections; namespace Majorsilence.Reporting.Data { /// /// FileDirCommand allows specifying the command for the web log. /// public class FileDirCommand : IDbCommand { FileDirConnection _fdc; // connection we're running under string _cmd; // command to execute // parsed constituents of the command string _Directory; // Directory string _FilePattern; // SearchPattern when doing the file lookup string _DirectoryPattern; // SearchPattern when doing the directory lookup string _TrimEmpty="yes"; // Directory with no files will be omitted from result set DataParameterCollection _Parameters = new DataParameterCollection(); public FileDirCommand(FileDirConnection conn) { _fdc = conn; } internal string Directory { get { // Check to see if "Directory" or "@Directory" is a parameter IDbDataParameter dp= _Parameters["Directory"] as IDbDataParameter; if (dp == null) dp= _Parameters["@Directory"] as IDbDataParameter; // Then check to see if the Directory value is a parameter? if (dp == null) dp = _Parameters[_Directory] as IDbDataParameter; if (dp != null) return dp.Value != null? dp.Value.ToString(): _Directory; // don't pass null; pass existing value return _Directory == null? _fdc.Directory: _Directory; } set {_Directory = value;} } internal string FilePattern { get { // Check to see if "FilePattern" or "@FilePattern" is a parameter IDbDataParameter dp= _Parameters["FilePattern"] as IDbDataParameter; if (dp == null) dp= _Parameters["@FilePattern"] as IDbDataParameter; // Then check to see if the FilePattern value is a parameter? if (dp == null) dp = _Parameters[_FilePattern] as IDbDataParameter; if (dp != null) return dp.Value as string; return _FilePattern; } set {_FilePattern = value;} } internal string DirectoryPattern { get { // Check to see if "DirectoryPattern" or "@DirectoryPattern" is a parameter IDbDataParameter dp= _Parameters["DirectoryPattern"] as IDbDataParameter; if (dp == null) dp= _Parameters["@DirectoryPattern"] as IDbDataParameter; // Then check to see if the DirectoryPattern value is a parameter? if (dp == null) dp = _Parameters[_DirectoryPattern] as IDbDataParameter; if (dp != null) return dp.Value as string; return _DirectoryPattern; } set {_DirectoryPattern = value;} } internal bool TrimEmpty { get { // Check to see if "TrimEmpty" or "@TrimEmpty" is a parameter IDbDataParameter dp= _Parameters["TrimEmpty"] as IDbDataParameter; if (dp == null) dp= _Parameters["@TrimEmpty"] as IDbDataParameter; // Then check to see if the TrimEmpty value is a parameter? if (dp == null) dp = _Parameters[_TrimEmpty] as IDbDataParameter; if (dp != null) { string tf = dp.Value as string; if (tf == null) return false; tf = tf.ToLower(); return (tf == "true" || tf == "yes"); } return _TrimEmpty=="yes"? true: false; // the value must be a constant } set {_TrimEmpty = value? "yes": "no";} } #region IDbCommand Members public void Cancel() { throw new NotImplementedException("Cancel not implemented"); } public void Prepare() { return; // Prepare is a noop } public System.Data.CommandType CommandType { get { throw new NotImplementedException("CommandType not implemented"); } set { throw new NotImplementedException("CommandType not implemented"); } } public IDataReader ExecuteReader(System.Data.CommandBehavior behavior) { if (!(behavior == CommandBehavior.SingleResult || behavior == CommandBehavior.SchemaOnly)) throw new ArgumentException("ExecuteReader supports SingleResult and SchemaOnly only."); return new FileDirDataReader(behavior, _fdc, this); } IDataReader System.Data.IDbCommand.ExecuteReader() { return ExecuteReader(System.Data.CommandBehavior.SingleResult); } public object ExecuteScalar() { throw new NotImplementedException("ExecuteScalar not implemented"); } public int ExecuteNonQuery() { throw new NotImplementedException("ExecuteNonQuery not implemented"); } public int CommandTimeout { get { return 0; } set { throw new NotImplementedException("CommandTimeout not implemented"); } } public IDbDataParameter CreateParameter() { return new FileDirDataParameter(); } public IDbConnection Connection { get { return this._fdc; } set { throw new NotImplementedException("Setting Connection not implemented"); } } public System.Data.UpdateRowSource UpdatedRowSource { get { throw new NotImplementedException("UpdatedRowSource not implemented"); } set { throw new NotImplementedException("UpdatedRowSource not implemented"); } } public string CommandText { get { return this._cmd; } set { // Parse the command string for keyword value pairs separated by ';' _FilePattern = null; _DirectoryPattern = null; _Directory = null; string[] args = value.Split(';'); foreach(string arg in args) { string[] param = arg.Trim().Split('='); if (param == null || param.Length != 2) continue; string key = param[0].Trim().ToLower(); string val = param[1]; switch (key) { case "directory": _Directory = val; break; case "filepattern": _FilePattern = val; break; case "directorypattern": _DirectoryPattern = val; break; default: throw new ArgumentException(string.Format("{0} is an unknown parameter key", param[0])); } } // User must specify both the url and the RowsXPath if (_Directory == null && this._fdc.Directory == null) { if (_Directory == null) throw new ArgumentException("CommandText requires a 'Directory=' parameter."); } _cmd = value; } } public IDataParameterCollection Parameters { get { return _Parameters; } } public IDbTransaction Transaction { get { throw new NotImplementedException("Transaction not implemented"); } set { throw new NotImplementedException("Transaction not implemented"); } } #endregion #region IDisposable Members public void Dispose() { // nothing to dispose of } #endregion } } ================================================ FILE: DataProviders/FileDirConnection.cs ================================================ using System; using System.Xml; using System.Data; namespace Majorsilence.Reporting.Data { /// /// LogConnection handles connections to web log. /// public class FileDirConnection : IDbConnection { string _Connection; // the connection string; of format dir= string _Directory; bool bOpen=false; public FileDirConnection(string conn) { ConnectionString = conn; } internal string Directory { get {return _Directory;} set {_Directory = value;} } internal bool IsOpen { get {return bOpen;} } #region IDbConnection Members public void ChangeDatabase(string databaseName) { throw new NotImplementedException("ChangeDatabase method not supported."); } public IDbTransaction BeginTransaction(System.Data.IsolationLevel il) { throw new NotImplementedException("BeginTransaction method not supported."); } IDbTransaction System.Data.IDbConnection.BeginTransaction() { throw new NotImplementedException("BeginTransaction method not supported."); } public System.Data.ConnectionState State { get { throw new NotImplementedException("State not implemented"); } } public string ConnectionString { get { return _Connection; } set { string c = value; // Now parse the connection string; Array args = c.Split (','); foreach(string arg in args) { if (arg.Trim().ToLower().StartsWith("directory=")) // Only have one type of argument right now _Directory = arg.Trim().Split('=').GetValue(1) as string; } _Connection = value; } } public IDbCommand CreateCommand() { return new FileDirCommand(this); } public void Open() { bOpen = true; } public void Close() { bOpen = false; } public string Database { get { return null; // don't really have a database } } public int ConnectionTimeout { get { return 0; } } #endregion #region IDisposable Members public void Dispose() { this.Close(); } #endregion } } ================================================ FILE: DataProviders/FileDirDataParameter.cs ================================================ using System; using System.Xml; using System.Data; namespace Majorsilence.Reporting.Data { /// /// FileDirDataParameter /// public class FileDirDataParameter : BaseDataParameter { public FileDirDataParameter():base() { } } } ================================================ FILE: DataProviders/FileDirDataReader.cs ================================================ using System; using System.Data; using System.Collections; using System.Collections.Specialized; using System.IO; using System.Net; namespace Majorsilence.Reporting.Data { /// /// FileDirDataReader handles reading log files /// public class FileDirDataReader : IDataReader { FileDirConnection _fdconn; FileDirCommand _fdcmd; System.Data.CommandBehavior _behavior; IEnumerator _ie; // enumerator thru rows string _FilePattern; // FilePattern from _fdcmd string _DirectoryPattern; // DirectoryPattern from _fdcmd bool _TrimEmpty; // Directories with no files will be omitted from result set // file data object[] _Data; // data values of the columns ArrayList _RowData; // row data // column information; this is fixed for all instances static string[] _Names; // names of the columns static Type[] _Types; // types of the columns // the location of the columns static readonly int COLUMN_NAME=0; static readonly int COLUMN_SIZE=1; static readonly int COLUMN_CREATIONTIME=2; static readonly int COLUMN_LASTACCESSTIME=3; static readonly int COLUMN_LASTWRITETIME=4; static readonly int COLUMN_ID=5; static readonly int COLUMN_PARENTID=6; static readonly int COLUMN_ISDIRECTORY=7; static readonly int COLUMN_EXTENSION=8; static readonly int COLUMN_FULLNAME=9; static readonly int COLUMN_COUNT=10; static FileDirDataReader() { // Add the names (fixed for type of DataReader depending on the columns parameter) Type dttype = DateTime.MinValue.GetType(); // work variable for getting the type Type stype = "".GetType(); Type itype = int.MinValue.GetType(); Type ltype = long.MinValue.GetType(); Type btype = new bool().GetType(); _Names = new string[COLUMN_COUNT]; _Names[COLUMN_NAME]="Name"; _Names[COLUMN_SIZE]="Size"; _Names[COLUMN_CREATIONTIME]="CreationTime"; _Names[COLUMN_LASTACCESSTIME]="LastAccessTime"; _Names[COLUMN_LASTWRITETIME]="LastWriteTime"; _Names[COLUMN_ID]="ID"; _Names[COLUMN_PARENTID]="ParentID"; _Names[COLUMN_ISDIRECTORY]="IsDirectory"; _Names[COLUMN_EXTENSION]="Extension"; _Names[COLUMN_FULLNAME]="FullName"; _Types = new Type[COLUMN_COUNT]; _Types[COLUMN_NAME]=stype; _Types[COLUMN_SIZE]=ltype; _Types[COLUMN_CREATIONTIME]=dttype; _Types[COLUMN_LASTACCESSTIME]=dttype; _Types[COLUMN_LASTWRITETIME]=dttype; _Types[COLUMN_ID]=itype; _Types[COLUMN_PARENTID]=itype; _Types[COLUMN_ISDIRECTORY]=btype; _Types[COLUMN_EXTENSION]=stype; _Types[COLUMN_FULLNAME]=stype; } public FileDirDataReader(System.Data.CommandBehavior behavior, FileDirConnection conn, FileDirCommand cmd) { _fdconn = conn; _fdcmd = cmd; _behavior = behavior; _FilePattern = _fdcmd.FilePattern; _DirectoryPattern = _fdcmd.DirectoryPattern; _TrimEmpty = _fdcmd.TrimEmpty; _Data = new object[_Names.Length]; // allocate enough room for data if (behavior == CommandBehavior.SchemaOnly) return; string dir = _fdcmd.Directory; if (dir == null) throw new Exception("Directory parameter must be specified."); // Populate the data array _RowData = new ArrayList(); PopulateData(new DirectoryInfo(dir), -1); _ie = _RowData.GetEnumerator(); } long PopulateData(DirectoryInfo di, int parent) { long size=0; // Create a new row for this directory object[] prow = new object[_Names.Length]; _RowData.Add(prow); int rowcount = _RowData.Count - 1; prow[COLUMN_NAME] = di.Name; prow[COLUMN_ISDIRECTORY] = true; prow[COLUMN_ID] = rowcount; prow[COLUMN_PARENTID] = parent >= 0? (object) parent: (object) null; prow[COLUMN_CREATIONTIME] = di.CreationTime; prow[COLUMN_LASTACCESSTIME] = di.LastAccessTime; prow[COLUMN_LASTWRITETIME] = di.LastWriteTime; prow[COLUMN_EXTENSION] = di.Extension; prow[COLUMN_FULLNAME] = di.FullName; parent = rowcount; // set the new parent FileInfo[] afi = _FilePattern == null? di.GetFiles(): di.GetFiles(_FilePattern); foreach (FileInfo fi in afi) { // Create a new row for this file object[] row = new object[_Names.Length]; _RowData.Add(row); row[COLUMN_NAME] = fi.Name; row[COLUMN_ISDIRECTORY] = false; row[COLUMN_ID] = _RowData.Count - 1; row[COLUMN_PARENTID] = (object) parent; row[COLUMN_CREATIONTIME] = fi.CreationTime; row[COLUMN_LASTACCESSTIME] = fi.LastAccessTime; row[COLUMN_LASTWRITETIME] = fi.LastWriteTime; row[COLUMN_EXTENSION] = fi.Extension; row[COLUMN_FULLNAME] = fi.FullName; row[COLUMN_SIZE] = fi.Length; size += fi.Length; } DirectoryInfo[] adi = _DirectoryPattern == null? di.GetDirectories(): di.GetDirectories(_DirectoryPattern); foreach (DirectoryInfo sdi in adi) { size += PopulateData(sdi, parent); } prow[COLUMN_SIZE] = size; // If a directory has no files below it we (optionally) can omit the directory as well if (_TrimEmpty && parent >= 0 && _RowData.Count - 1 == rowcount) { _RowData.RemoveAt(rowcount); } return size; } #region IDataReader Members public int RecordsAffected { get { return 0; } } public bool IsClosed { get { return _ie == null; } } public bool NextResult() { return false; } public void Close() { _ie = null; _RowData = null; _Data = null; } public bool Read() { if (_ie == null || !_ie.MoveNext()) return false; _Data = _ie.Current as object[]; return true; } public int Depth { get { return 0; } } public DataTable GetSchemaTable() { return null; } #endregion #region IDisposable Members public void Dispose() { this.Close(); } #endregion #region IDataRecord Members public int GetInt32(int i) { return Convert.ToInt32(_Data[i]); } public object this[string name] { get { int ci = this.GetOrdinal(name); return _Data[ci]; } } object System.Data.IDataRecord.this[int i] { get { return _Data[i]; } } public object GetValue(int i) { return _Data[i]; } public bool IsDBNull(int i) { return _Data[i] == null; } public long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length) { throw new NotImplementedException("GetBytes not implemented."); } public byte GetByte(int i) { return Convert.ToByte(_Data[i]); } public Type GetFieldType(int i) { return _Types[i]; } public decimal GetDecimal(int i) { return Convert.ToDecimal(_Data[i]); } public int GetValues(object[] values) { int i; for (i=0; i < values.Length; i++) { values[i] = i >= _Data.Length? System.DBNull.Value: _Data[i]; } return Math.Min(values.Length, _Data.Length); } public string GetName(int i) { return _Names[i] as string; } public int FieldCount { get { return _Data.Length; } } public long GetInt64(int i) { return Convert.ToInt64(_Data[i]); } public double GetDouble(int i) { return Convert.ToDouble(_Data[i]); } public bool GetBoolean(int i) { return Convert.ToBoolean(_Data[i]); } public Guid GetGuid(int i) { throw new NotImplementedException("GetGuid not implemented."); } public DateTime GetDateTime(int i) { return Convert.ToDateTime(_Data[i]); } public int GetOrdinal(string name) { int ci=0; // do case sensitive lookup foreach (string cname in _Names) { if (cname == name) return ci; ci++; } // do case insensitive lookup ci=0; name = name.ToLower(); foreach (string cname in _Names) { if (cname.ToLower() == name) return ci; ci++; } throw new ArgumentException(string.Format("Column '{0}' not known.", name)); } public string GetDataTypeName(int i) { Type t = _Types[i] as Type; return t.ToString(); } public float GetFloat(int i) { return Convert.ToSingle(_Data[i]); } public IDataReader GetData(int i) { throw new NotImplementedException("GetData not implemented."); } public long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length) { throw new NotImplementedException("GetChars not implemented."); } public string GetString(int i) { return Convert.ToString(_Data[i]); } public char GetChar(int i) { return Convert.ToChar(_Data[i]); } public short GetInt16(int i) { return Convert.ToInt16(_Data[i]); } #endregion } } ================================================ FILE: DataProviders/FilteredDictionaryDataReader.cs ================================================ using System; using System.Data; namespace Majorsilence.Reporting.Data { public class FilteredDictionaryDataReader : IDataReader { private readonly DictionaryDataReader _innerReader; private readonly string[] _columnNames; private readonly int[] _columnMap; public FilteredDictionaryDataReader(DictionaryDataReader reader, string[] columnNames) { _innerReader = reader; _columnNames = columnNames; // Create a mapping from our filtered indices to the inner reader's indices _columnMap = new int[_columnNames.Length]; for (int i = 0; i < _columnNames.Length; i++) { _columnMap[i] = reader.GetOrdinal(_columnNames[i]); } } // Override field count and name-related methods public int FieldCount => _columnNames.Length; public string GetName(int i) => _columnNames[i]; public int GetOrdinal(string name) => Array.IndexOf(_columnNames, name); // Map our filtered indices to the inner reader public object GetValue(int i) => _innerReader.GetValue(_columnMap[i]); public Type GetFieldType(int i) => _innerReader.GetFieldType(_columnMap[i]); // Override indexers public object this[int i] => GetValue(i); public object this[string name] => GetValue(GetOrdinal(name)); // Delegate all other methods to the inner reader public bool Read() => _innerReader.Read(); public void Close() => _innerReader.Close(); public void Dispose() => _innerReader.Dispose(); public bool NextResult() => _innerReader.NextResult(); public int Depth => _innerReader.Depth; public bool IsClosed => _innerReader.IsClosed; public int RecordsAffected => _innerReader.RecordsAffected; public int GetValues(object[] values) { int count = Math.Min(values.Length, FieldCount); for (int i = 0; i < count; i++) { values[i] = GetValue(i); } return count; } // Implement the rest of the interface methods by mapping indices public bool IsDBNull(int i) => _innerReader.IsDBNull(_columnMap[i]); public bool GetBoolean(int i) => _innerReader.GetBoolean(_columnMap[i]); public byte GetByte(int i) => _innerReader.GetByte(_columnMap[i]); public long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length) => _innerReader.GetBytes(_columnMap[i], fieldOffset, buffer, bufferoffset, length); public char GetChar(int i) => _innerReader.GetChar(_columnMap[i]); public long GetChars(int i, long fieldOffset, char[] buffer, int bufferoffset, int length) => _innerReader.GetChars(_columnMap[i], fieldOffset, buffer, bufferoffset, length); public IDataReader GetData(int i) => _innerReader.GetData(_columnMap[i]); public string GetDataTypeName(int i) => _innerReader.GetDataTypeName(_columnMap[i]); public DateTime GetDateTime(int i) => _innerReader.GetDateTime(_columnMap[i]); public decimal GetDecimal(int i) => _innerReader.GetDecimal(_columnMap[i]); public double GetDouble(int i) => _innerReader.GetDouble(_columnMap[i]); public float GetFloat(int i) => _innerReader.GetFloat(_columnMap[i]); public Guid GetGuid(int i) => _innerReader.GetGuid(_columnMap[i]); public short GetInt16(int i) => _innerReader.GetInt16(_columnMap[i]); public int GetInt32(int i) => _innerReader.GetInt32(_columnMap[i]); public long GetInt64(int i) => _innerReader.GetInt64(_columnMap[i]); public string GetString(int i) => _innerReader.GetString(_columnMap[i]); public DataTable GetSchemaTable() { DataTable originalSchema = _innerReader.GetSchemaTable(); DataTable filteredSchema = originalSchema.Clone(); // Only include rows for our filtered columns foreach (string columnName in _columnNames) { foreach (DataRow row in originalSchema.Rows) { if ((string)row["ColumnName"] == columnName) { filteredSchema.ImportRow(row); break; } } } return filteredSchema; } } } ================================================ FILE: DataProviders/GedcomCommand.cs ================================================ using System; using System.Xml; using System.Data; using System.Collections; namespace Majorsilence.Reporting.Data { /// /// LogCommand allows specifying the command for the web log. /// public class GedcomCommand : IDbCommand { GedcomConnection _lc; // connection we're running under string _cmd; // command to execute // parsed constituents of the command string _Url; // url of the file DataParameterCollection _Parameters = new DataParameterCollection(); public GedcomCommand(GedcomConnection conn) { _lc = conn; } internal string Url { get { // Check to see if "Url" or "@Url" is a parameter IDbDataParameter dp= _Parameters["Url"] as IDbDataParameter; if (dp == null) dp= _Parameters["@Url"] as IDbDataParameter; // Then check to see if the Url value is a parameter? if (dp == null) dp = _Parameters[_Url] as IDbDataParameter; if (dp != null) return dp.Value != null? dp.Value.ToString(): _Url; // don't pass null; pass existing value return _Url; // the value must be a constant } set {_Url = value;} } #region IDbCommand Members public void Cancel() { throw new NotImplementedException("Cancel not implemented"); } public void Prepare() { return; // Prepare is a noop } public System.Data.CommandType CommandType { get { throw new NotImplementedException("CommandType not implemented"); } set { throw new NotImplementedException("CommandType not implemented"); } } public IDataReader ExecuteReader(System.Data.CommandBehavior behavior) { if (!(behavior == CommandBehavior.SingleResult || behavior == CommandBehavior.SchemaOnly)) throw new ArgumentException("ExecuteReader supports SingleResult and SchemaOnly only."); return new GedcomDataReader(behavior, _lc, this); } IDataReader System.Data.IDbCommand.ExecuteReader() { return ExecuteReader(System.Data.CommandBehavior.SingleResult); } public object ExecuteScalar() { throw new NotImplementedException("ExecuteScalar not implemented"); } public int ExecuteNonQuery() { throw new NotImplementedException("ExecuteNonQuery not implemented"); } public int CommandTimeout { get { return 0; } set { throw new NotImplementedException("CommandTimeout not implemented"); } } public IDbDataParameter CreateParameter() { return new GedcomDataParameter(); } public IDbConnection Connection { get { return this._lc; } set { throw new NotImplementedException("Setting Connection not implemented"); } } public System.Data.UpdateRowSource UpdatedRowSource { get { throw new NotImplementedException("UpdatedRowSource not implemented"); } set { throw new NotImplementedException("UpdatedRowSource not implemented"); } } public string CommandText { get { return this._cmd; } set { // Parse the command string for keyword value pairs separated by ';' string[] args = value.Split(';'); string url=null; foreach(string arg in args) { string[] param = arg.Trim().Split('='); if (param == null || param.Length != 2) continue; string key = param[0].Trim().ToLower(); string val = param[1]; switch (key) { case "url": case "file": url = val; break; default: throw new ArgumentException(string.Format("{0} is an unknown parameter key", param[0])); } } // User must specify both the url and the RowsXPath if (url == null) throw new ArgumentException("CommandText requires a 'Url=' parameter."); _cmd = value; _Url = url; } } public IDataParameterCollection Parameters { get { return _Parameters; } } public IDbTransaction Transaction { get { throw new NotImplementedException("Transaction not implemented"); } set { throw new NotImplementedException("Transaction not implemented"); } } #endregion #region IDisposable Members public void Dispose() { // nothing to dispose of } #endregion } } ================================================ FILE: DataProviders/GedcomConnection.cs ================================================ using System; using System.Xml; using System.Data; namespace Majorsilence.Reporting.Data { /// /// LogConnection handles connections to web log. /// public class GedcomConnection : IDbConnection { string _Connection; // the connection string; of format file= bool bOpen=false; public GedcomConnection(string conn) { ConnectionString = conn; } internal bool IsOpen { get {return bOpen;} } #region IDbConnection Members public void ChangeDatabase(string databaseName) { throw new NotImplementedException("ChangeDatabase method not supported."); } public IDbTransaction BeginTransaction(System.Data.IsolationLevel il) { throw new NotImplementedException("BeginTransaction method not supported."); } IDbTransaction System.Data.IDbConnection.BeginTransaction() { throw new NotImplementedException("BeginTransaction method not supported."); } public System.Data.ConnectionState State { get { throw new NotImplementedException("State not implemented"); } } public string ConnectionString { get { return _Connection; } set { //string c = value; //// Now parse the connection string; //Array args = c.Split (','); //string directory=null; //foreach(string arg in args) //{ // if (arg.Trim().ToLower().StartsWith("directory=")) // Only have one type of argument right now // directory = arg.Trim().Split('=').GetValue(1) as string; //} _Connection = value; } } public IDbCommand CreateCommand() { return new GedcomCommand(this); } public void Open() { bOpen = true; } public void Close() { bOpen = false; } public string Database { get { return null; // don't really have a database } } public int ConnectionTimeout { get { return 0; } } #endregion #region IDisposable Members public void Dispose() { this.Close(); } #endregion } } ================================================ FILE: DataProviders/GedcomDataParameter.cs ================================================ using System; using System.Xml; using System.Data; namespace Majorsilence.Reporting.Data { /// /// XmlDataParameter /// public class GedcomDataParameter : BaseDataParameter { public GedcomDataParameter():base() { } } } ================================================ FILE: DataProviders/GedcomDataReader.cs ================================================ using System; using System.Data; using System.Collections; using System.Collections.Specialized; using System.IO; using System.Net; namespace Majorsilence.Reporting.Data { /// /// LogDataReader handles reading log files /// public class GedcomDataReader : IDataReader { GedcomConnection _lconn; GedcomCommand _lcmd; System.Data.CommandBehavior _behavior; MultipleStreamReader _sr; // StreamReader for _Url object[] _Data; // data values of the columns // column information: is fixed for all instances // names of all the columns static string[] _Names= new string[] {"host","client_identifier","user","datetime", "request_cmd","request_url","request_type", "request_parameters","status_code", "bytes", "referrer", "user_agent", "cookie"}; // types of all the columns static Type _dttype = DateTime.MinValue.GetType(); // work variable for getting the type static Type _tstring = "".GetType(); static Type _dtype = Double.MinValue.GetType(); static Type[] _Types = new Type[] {_tstring,_tstring,_tstring,_dttype, _tstring,_tstring,_tstring,_tstring,_tstring, _dtype,_tstring,_tstring,_tstring}; const int DATETIME_FIELD=3; // the date time field const int REQUEST_FIELD=4; // the request field const int BYTES_FIELD=9; // the bytes field public GedcomDataReader(System.Data.CommandBehavior behavior, GedcomConnection conn, GedcomCommand cmd) { _lconn = conn; _lcmd = cmd; _behavior = behavior; string fname = _lcmd.Url; if (behavior != CommandBehavior.SchemaOnly) _sr = new MultipleStreamReader(_lcmd.Url); // get the main stream _Data = new object[_Names.Length]; // allocate enough room for data } #region IDataReader Members public int RecordsAffected { get { return 0; } } public bool IsClosed { get { return _sr == null; } } public bool NextResult() { return false; } public void Close() { if (_sr != null) { _sr.Close(); _sr = null; } _Data = null; } public bool Read() { if (this._sr == null) return false; // read a line of the log string line = _sr.ReadLine(); if (line == null) return false; // obtain the data from each column and put the data array Lexer l = new Lexer(new StringReader(line)); LexTokenList ll = l.Lex(); int ci=0; // start at first column if (ll.Count > 11) ci = 0; foreach (LexToken lt in ll) { if (ci >= _Data.Length || lt.Type == LexTokenTypes.EOF) break; if (ci == DATETIME_FIELD) { _Data[ci] =GetDateTime(lt.Value); } else if (ci == REQUEST_FIELD) { // break the request into multiple fields; command, url, http type string[] reqs = lt.Value.Split(' '); string req_cmd=null; string req_url=null; string req_type=null; string req_parameters=null; if (reqs == null) {} else if (reqs.Length >= 3) { req_cmd = reqs[0]; req_url = reqs[1]; req_type = reqs[2]; } else if (reqs.Length == 2) { req_cmd = reqs[0]; req_url = reqs[1]; } else if (reqs.Length == 1) req_url = reqs[0]; if (req_url != null) { string [] up = req_url.Split('?'); if (up.Length > 1) { req_url = up[0]; req_parameters = up[1]; } } _Data[ci++] = req_type; _Data[ci++] = req_url; _Data[ci++] = req_type == "HTTP/1.1"? "HTTP/1.1": req_type; _Data[ci++] = req_parameters; continue; } else if (ci == BYTES_FIELD) { double v=0; if (lt.Value.Length == 0 || lt.Value == "-") {} else { try { v = Convert.ToDouble(lt.Value); } catch { } } _Data[ci] = v; } else _Data[ci] = lt.Value; ci++; // go to next column } while (ci < _Data.Length) _Data[ci++] = null; return true; } object GetDateTime(string v) { object result; if (v.Length != 26) return null; try { string dd = v.Substring(0,2); // the day of the month string MMM = v.Substring(3,3); // the month int month=1; switch (MMM.ToLower()) { case "jan": month=1; break; case "feb": month=2; break; case "mar": month=3; break; case "apr": month=4; break; case "may": month=5; break; case "jun": month=6; break; case "jul": month=7; break; case "aug": month=8; break; case "sep": month=9; break; case "oct": month=10; break; case "nov": month=11; break; case "dec": month=12; break; default: break; } string yyyy = v.Substring(7,4); // the year string hh = v.Substring(12,2); // the hour string mm = v.Substring(15,2); // the minute string ss = v.Substring(18,2); // the seconds bool bPlus = v[21] == '+'; int thh = Convert.ToInt32(v.Substring(22,2)); // the time zone (hh) int tmm = Convert.ToInt32(v.Substring(24,2)); // the time zone (mm) int tzdiff = thh * 60 + tmm; // time zone difference in minutes if (!bPlus) tzdiff = - tzdiff; DateTime dt = new DateTime(Convert.ToInt32(yyyy), month, Convert.ToInt32(dd), Convert.ToInt32(hh), Convert.ToInt32(mm), Convert.ToInt32(ss), 0); result = dt.AddMinutes(tzdiff); } catch { result = null; } return result; } public int Depth { get { return 0; } } public DataTable GetSchemaTable() { return null; } #endregion #region IDisposable Members public void Dispose() { this.Close(); } #endregion #region IDataRecord Members public int GetInt32(int i) { return Convert.ToInt32(_Data[i]); } public object this[string name] { get { int ci = this.GetOrdinal(name); return _Data[ci]; } } object System.Data.IDataRecord.this[int i] { get { return _Data[i]; } } public object GetValue(int i) { return _Data[i]; } public bool IsDBNull(int i) { return _Data[i] == null; } public long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length) { throw new NotImplementedException("GetBytes not implemented."); } public byte GetByte(int i) { return Convert.ToByte(_Data[i]); } public Type GetFieldType(int i) { return _Types[i]; } public decimal GetDecimal(int i) { return Convert.ToDecimal(_Data[i]); } public int GetValues(object[] values) { int i; for (i=0; i < values.Length; i++) { values[i] = i >= _Data.Length? System.DBNull.Value: _Data[i]; } return Math.Min(values.Length, _Data.Length); } public string GetName(int i) { return _Names[i] as string; } public int FieldCount { get { return _Data.Length; } } public long GetInt64(int i) { return Convert.ToInt64(_Data[i]); } public double GetDouble(int i) { return Convert.ToDouble(_Data[i]); } public bool GetBoolean(int i) { return Convert.ToBoolean(_Data[i]); } public Guid GetGuid(int i) { throw new NotImplementedException("GetGuid not implemented."); } public DateTime GetDateTime(int i) { return Convert.ToDateTime(_Data[i]); } public int GetOrdinal(string name) { int ci=0; // do case sensitive lookup foreach (string cname in _Names) { if (cname == name) return ci; ci++; } // do case insensitive lookup ci=0; name = name.ToLower(); foreach (string cname in _Names) { if (cname.ToLower() == name) return ci; ci++; } throw new ArgumentException(string.Format("Column '{0}' not known.", name)); } public string GetDataTypeName(int i) { Type t = _Types[i] as Type; return t.ToString(); } public float GetFloat(int i) { return Convert.ToSingle(_Data[i]); } public IDataReader GetData(int i) { throw new NotImplementedException("GetData not implemented."); } public long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length) { throw new NotImplementedException("GetChars not implemented."); } public string GetString(int i) { return Convert.ToString(_Data[i]); } public char GetChar(int i) { return Convert.ToChar(_Data[i]); } public short GetInt16(int i) { return Convert.ToInt16(_Data[i]); } #endregion } } ================================================ FILE: DataProviders/HttpClientExtension.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; namespace Majorsilence.Reporting.Data { internal static class HttpClientExtension { public static void AddMajorsilenceReportingUserAgent(this HttpClient client) { if (client.DefaultRequestHeaders.UserAgent.Count == 0) { client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3 MajorsilenceReporting/1.0"); } } } } ================================================ FILE: DataProviders/JsonCommand.cs ================================================ using System; using System.Xml; using System.Data; using System.Collections; namespace Majorsilence.Reporting.Data { /// /// TxtCommand allows specifying the command for a text file. /// public class JsonCommand : IDbCommand { JsonConnection _tc; // connection we're running under string _cmd; // command to execute // parsed constituents of the command string[] _Columns; // hold the column list DataParameterCollection _Parameters = new DataParameterCollection(); public JsonCommand(JsonConnection conn) { _tc = conn; } internal string[] Columns { get {return _Columns;} } private string _tableName = null; // Add this field with default value public string TableName { get { return _tableName; } } internal string Url { get { // Check to see if "Url" or "@Url" is a parameter IDbDataParameter dp= _Parameters["Url"] as IDbDataParameter; if (dp == null) dp= _Parameters["@Url"] as IDbDataParameter; // Then check to see if the Url value is a parameter? if (dp == null) dp = _Parameters[_tc.Url] as IDbDataParameter; if (dp != null) return dp.Value != null? dp.Value.ToString(): _tc.Url; // don't pass null; pass existing value return _tc.Url; // the value must be a constant } } #region IDbCommand Members public void Cancel() { throw new NotImplementedException("Cancel not implemented"); } public void Prepare() { return; // Prepare is a noop } public System.Data.CommandType CommandType { get { throw new NotImplementedException("CommandType not implemented"); } set { } } public IDataReader ExecuteReader(System.Data.CommandBehavior behavior) { if (!(behavior == CommandBehavior.SingleResult || behavior == CommandBehavior.SchemaOnly)) throw new ArgumentException("ExecuteReader supports SingleResult and SchemaOnly only."); return new JsonDataReader(behavior, _tc, this); } IDataReader System.Data.IDbCommand.ExecuteReader() { return ExecuteReader(System.Data.CommandBehavior.SingleResult); } public object ExecuteScalar() { throw new NotImplementedException("ExecuteScalar not implemented"); } public int ExecuteNonQuery() { throw new NotImplementedException("ExecuteNonQuery not implemented"); } public int CommandTimeout { get { return 0; } set { throw new NotImplementedException("CommandTimeout not implemented"); } } public IDbDataParameter CreateParameter() { return new TxtDataParameter(); } public IDbConnection Connection { get { return this._tc; } set { throw new NotImplementedException("Setting Connection not implemented"); } } public System.Data.UpdateRowSource UpdatedRowSource { get { throw new NotImplementedException("UpdatedRowSource not implemented"); } set { throw new NotImplementedException("UpdatedRowSource not implemented"); } } public string CommandText { get { return this._cmd; } set { // Parse the command string for keyword value pairs separated by ';' string[] args = value.Split(';'); string[] columns = null; foreach(string arg in args) { string[] param = arg.Trim().Split('='); if (param == null || param.Length != 2) continue; string key = param[0].Trim().ToLower(); string val = param[1]; switch (key) { case "columns": // column list is separated by ',' columns = val.Trim().Split(','); break; case "table": _tableName = val; break; default: throw new ArgumentException(string.Format("{0} is an unknown parameter key", param[0])); } } _cmd = value; _Columns = columns; } } public IDataParameterCollection Parameters { get { return _Parameters; } } public IDbTransaction Transaction { get { throw new NotImplementedException("Transaction not implemented"); } set { throw new NotImplementedException("Transaction not implemented"); } } #endregion #region IDisposable Members public void Dispose() { // nothing to dispose of } #endregion } } ================================================ FILE: DataProviders/JsonConnection.cs ================================================ using System; using System.Xml; using System.Data; using System.Net.Http; namespace Majorsilence.Reporting.Data { /// /// LogConnection handles connections to web log. /// public class JsonConnection : IDbConnection { string _Connection; // the connection string; of format file= bool bOpen = false; public HttpClient Client { get; private set; } private bool shouldDisposeClient = false; /// /// /// /// /// /// /// /// var conn1 = new JsonConnection("file=TestData.json"); /// var conn2 = new JsonConnection("url=https://raw.githubusercontent.com/majorsilence/My-FyiReporting/refs/heads/master/RdlCreator.Tests/TestData.json"); /// var conn3 = new JsonConnection("url=https://example.com/path/to/json/TestData.json;auth=Basic: "); /// var conn4 = new JsonConnection("url=https://example.com/path/to/json/TestData.json;auth=Bearer: "); /// /// public JsonConnection(string conn) : this(conn, new HttpClient()) { shouldDisposeClient = true; } public JsonConnection(string conn, HttpClient httpClient) { ConnectionString = conn; Client = httpClient ?? throw new ArgumentNullException(nameof(httpClient), "HttpClient cannot be null"); } private string _tableName = null; // Add this field with default value // Add property to access the table name public string TableName { get { return _tableName; } } internal bool IsOpen { get { return bOpen; } } public string Url { get; private set; } public string Auth { get; private set; } #region IDbConnection Members public void ChangeDatabase(string databaseName) { throw new NotImplementedException("ChangeDatabase method not supported."); } public IDbTransaction BeginTransaction(System.Data.IsolationLevel il) { throw new NotImplementedException("BeginTransaction method not supported."); } IDbTransaction System.Data.IDbConnection.BeginTransaction() { throw new NotImplementedException("BeginTransaction method not supported."); } public System.Data.ConnectionState State { get { throw new NotImplementedException("State not implemented"); } } public string ConnectionString { get { return _Connection; } set { _Connection = value; SetUrlFromConnection(); } } public IDbCommand CreateCommand() { return new JsonCommand(this); } public void Open() { bOpen = true; } public void Close() { bOpen = false; } public string Database { get { return null; // don't really have a database } } public int ConnectionTimeout { get { return 0; } } #endregion private void SetUrlFromConnection() { string[] args = ConnectionString.Split(';'); string url = null; foreach (string arg in args) { string[] param = arg.Trim().Split('='); if (param == null || param.Length != 2) continue; string key = param[0].Trim().ToLower(); string val = param[1]; switch (key) { case "url": case "file": url = val; break; case "memory:": // Memory is not supported in JsonConnection throw new NotSupportedException("Memory parameter is not supported in JsonConnection."); case "auth": case "authorization": Auth=val.Trim(); break; case "table": _tableName = val; break; default: throw new ArgumentException(string.Format("{0} is an unknown parameter key", param[0])); } } // User must specify both the url and the RowsXPath if (url == null) throw new ArgumentException("CommandText requires a 'Url=' parameter."); Url = url.Trim(); } #region IDisposable Members public void Dispose() { if (shouldDisposeClient) { Client?.Dispose(); Client = null; } this.Close(); } #endregion } } ================================================ FILE: DataProviders/JsonDataReader.cs ================================================ using System; using System.Xml; using System.Data; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Http; using System.Threading.Tasks; namespace Majorsilence.Reporting.Data { public class JsonDataReader : IDataReader { private readonly Dictionary _readers; private readonly IDataReader _rootReader; JsonConnection _tconn; JsonCommand _tcmd; System.Data.CommandBehavior _behavior; private readonly string[] _requestedColumns; public JsonDataReader(System.Data.CommandBehavior behavior, JsonConnection conn, JsonCommand cmd) { _behavior = behavior; _tcmd = cmd ?? throw new ArgumentNullException(nameof(cmd), "Command cannot be null."); _tconn = conn ?? throw new ArgumentNullException(nameof(conn), "Connection cannot be null."); _requestedColumns = cmd.Columns; string json = Task.Run(async () => await ReadAllJsonAsync()).GetAwaiter().GetResult(); var extractor = new JsonTableExtractor(); var allReaders = extractor.Extract(json); _readers = allReaders; // Use the table name from the command string tableName = cmd.TableName ?? conn.TableName ?? "root"; if (!_readers.TryGetValue(tableName, out _rootReader)) { throw new InvalidOperationException( $"Table '{tableName}' not found in JSON data. Available tables: {string.Join(", ", _readers.Keys)}"); } // Apply column filtering if needed if (_requestedColumns != null && _requestedColumns.Length > 0) { _rootReader = new FilteredDictionaryDataReader( (DictionaryDataReader)_rootReader, _requestedColumns); } } /// /// The main reader for the top-level JSON array. /// public IDataReader Root => _rootReader; /// /// Gets a child or nested reader (e.g., "root_Dependents"). /// public IDataReader? GetTable(string name) => _readers.TryGetValue(name, out var reader) ? reader : null; /// /// List of available table names. /// public IEnumerable TableNames => _readers.Keys; // IDataReader - Delegate all to _rootReader public bool Read() => _rootReader.Read(); public int FieldCount => _rootReader.FieldCount; public string GetName(int i) => _rootReader.GetName(i); public int GetOrdinal(string name) => _rootReader.GetOrdinal(name); public object GetValue(int i) => _rootReader.GetValue(i); public int GetValues(object[] values) { return _rootReader.GetValues(values); } public object this[int i] => _rootReader[i]; public object this[string name] => _rootReader[name]; public bool IsDBNull(int i) => _rootReader.IsDBNull(i); public Type GetFieldType(int i) => _rootReader.GetFieldType(i); public void Close() => _rootReader.Close(); public void Dispose() => _rootReader.Dispose(); public bool NextResult() => false; public int Depth => 0; public bool IsClosed => false; public int RecordsAffected => -1; public DataTable GetSchemaTable() => _rootReader.GetSchemaTable(); public bool GetBoolean(int i) => (bool)GetValue(i); public byte GetByte(int i) => (byte)GetValue(i); public long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length) => _rootReader.GetBytes(i, fieldOffset, buffer, bufferoffset, length); public char GetChar(int i) => (char)GetValue(i); public long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length) => _rootReader.GetChars(i, fieldoffset, buffer, bufferoffset, length); public IDataReader GetData(int i) => _rootReader.GetData(i); public string GetDataTypeName(int i) => GetFieldType(i).Name; public DateTime GetDateTime(int i) => (DateTime)GetValue(i); public decimal GetDecimal(int i) => (decimal)GetValue(i); public double GetDouble(int i) => (double)GetValue(i); public float GetFloat(int i) => (float)GetValue(i); public Guid GetGuid(int i) => (Guid)GetValue(i); public short GetInt16(int i) => (short)GetValue(i); public int GetInt32(int i) => (int)GetValue(i); public long GetInt64(int i) => (long)GetValue(i); public string GetString(int i) => GetValue(i)?.ToString(); async Task GetStream() { string fname = _tcmd.Url; Stream strm = null; if (fname.StartsWith("http:") || fname.StartsWith("https:")) { _tconn.Client.AddMajorsilenceReportingUserAgent(); // set auth if found in connection string // via a request object var request = new HttpRequestMessage(HttpMethod.Get, fname); if (!string.IsNullOrWhiteSpace(_tconn.Auth)) { var authParts = _tconn.Auth.Split(':'); string authScheme = authParts[0]; string authParameters = authParts[1]; request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(authScheme, authParameters); } HttpResponseMessage response = await _tconn.Client.SendAsync(request); response.EnsureSuccessStatusCode(); strm = await response.Content.ReadAsStreamAsync(); } else if (fname.StartsWith("file:")) { strm = new FileStream(fname.Substring(5), System.IO.FileMode.Open, FileAccess.Read); } else { strm = new FileStream(fname, System.IO.FileMode.Open, FileAccess.Read); } return new StreamReader(strm); } private async Task ReadAllJsonAsync() { using var sr = await GetStream(); return await sr.ReadToEndAsync(); } } } ================================================ FILE: DataProviders/JsonTableExtractor.cs ================================================ using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text.Json; namespace Majorsilence.Reporting.Data { public class JsonTableExtractor { private readonly Dictionary>> _tables = new(); public Dictionary Extract(string json) { using var doc = JsonDocument.Parse(json); var rootElement = doc.RootElement; _tables["root"] = new(); if (rootElement.ValueKind == JsonValueKind.Array) { // Handle array root (existing logic) foreach (var item in rootElement.EnumerateArray()) { var row = new Dictionary(); var guid = Guid.NewGuid().ToString(); row["__guid"] = guid; _tables["root"].Add(row); Flatten(item, row, "root", guid); } } else if (rootElement.ValueKind == JsonValueKind.Object) { // Handle object root (new logic) var row = new Dictionary(); var guid = Guid.NewGuid().ToString(); row["__guid"] = guid; _tables["root"].Add(row); Flatten(rootElement, row, "root", guid); } else { throw new InvalidOperationException("Root element must be an array or object."); } return _tables.ToDictionary(kv => kv.Key, kv => (IDataReader)new DictionaryDataReader(kv.Value)); } private void Flatten(JsonElement element, Dictionary currentRow, string currentTable, string parentGuid) { foreach (var prop in element.EnumerateObject()) { var name = prop.Name; var val = prop.Value; switch (val.ValueKind) { case JsonValueKind.Array: // Handle arrays as before - creates child tables var tableName = $"{currentTable}_{name}"; if (!_tables.ContainsKey(tableName)) _tables[tableName] = new(); foreach (var item in val.EnumerateArray()) { var childRow = new Dictionary { ["__parent_guid"] = parentGuid }; if (item.ValueKind == JsonValueKind.Object) Flatten(item, childRow, tableName, parentGuid); else childRow[name] = GetPrimitiveValue(item); _tables[tableName].Add(childRow); } break; case JsonValueKind.Object: // Two approaches for objects: // 1. Create a nested dictionary and store the entire object var nestedDict = new Dictionary(); foreach (var nested in val.EnumerateObject()) { if (nested.Value.ValueKind == JsonValueKind.Object || nested.Value.ValueKind == JsonValueKind.Array) { // For deeply nested objects, recursively process them var childGuid = Guid.NewGuid().ToString(); var nestedTable = $"{currentTable}_{name}_{nested.Name}"; if (nested.Value.ValueKind == JsonValueKind.Object) { // Handle nested object if (!_tables.ContainsKey(nestedTable)) _tables[nestedTable] = new(); var childRow = new Dictionary { ["__parent_guid"] = parentGuid }; Flatten(nested.Value, childRow, nestedTable, childGuid); _tables[nestedTable].Add(childRow); } nestedDict[nested.Name] = GetPrimitiveValue(nested.Value); } else { nestedDict[nested.Name] = GetPrimitiveValue(nested.Value); } } currentRow[name] = nestedDict; // 2. Also flatten the object properties with prefixed names (for backward compatibility) foreach (var nested in val.EnumerateObject()) { if (nested.Value.ValueKind != JsonValueKind.Object && nested.Value.ValueKind != JsonValueKind.Array) { currentRow[$"{name}_{nested.Name}"] = GetPrimitiveValue(nested.Value); } } break; default: currentRow[name] = GetPrimitiveValue(val); break; } } } private object? GetPrimitiveValue(JsonElement element) { return element.ValueKind switch { JsonValueKind.String => element.GetString(), JsonValueKind.Number when element.TryGetInt64(out var l) => l, JsonValueKind.Number => element.GetDouble(), JsonValueKind.True => true, JsonValueKind.False => false, JsonValueKind.Null => null, _ => element.ToString() // Fallback to raw JSON for unhandled types }; } } } ================================================ FILE: DataProviders/LexCharReader.cs ================================================ using System; using System.IO; namespace Majorsilence.Reporting.Data { /// /// char reader simply reads entire file into a string and processes. /// internal class LexCharReader { string file = null; int ptr = 0; int col = 1; // column within line int savecol = 1; // saved column before a line feed int line = 1; // line within file /// /// Initializes a new instance of the CharReader class. /// /// TextReader with DPL definition. internal LexCharReader(TextReader textReader) { file = textReader.ReadToEnd(); textReader.Close(); } /// /// Returns the next char from the stream. /// /// The next char. internal char GetNext() { if (EndOfInput()) { return '\0'; } char ch = file[ptr++]; col++; // increment column counter if(ch == '\n') { line++; // got new line savecol = col; col = 1; // restart column counter } return ch; } /// /// Returns the next char from the stream without removing it. /// /// The top char. internal char Peek() { if (EndOfInput()) // ok to peek at end of file return '\0'; return file[ptr]; } /// /// Undoes the extracting of the last char. /// internal void UnGet() { --ptr; if (ptr < 0) throw new Exception("error : FileReader.UnGet : ungetted first char"); char ch = file[ptr]; if (ch == '\n') // did we unget a new line? { line--; // back up a line col = savecol; // go back to previous column too } } /// /// Returns True if end of input was reached; otherwise False. /// /// True if end of input was reached; otherwise False. internal bool EndOfInput() { return ptr >= file.Length; } /// /// Gets the current column. /// internal int Column { get { return col; } } /// /// Gets the current line. /// internal int Line { get { return line; } } } } ================================================ FILE: DataProviders/LexToken.cs ================================================ using System; namespace Majorsilence.Reporting.Data { /// /// Token class that used by Lexer. /// internal class LexToken { internal string Value; internal LexTokenTypes Type; /// /// Initializes a new instance of the Token class. /// internal LexToken(string value, LexTokenTypes type) { Value = value; Type = type; } /// /// Returns a string representation of the Token. /// public override string ToString() { return "<" + Type + "> " + Value; } } } ================================================ FILE: DataProviders/LexTokenList.cs ================================================ using System; using System.Collections; namespace Majorsilence.Reporting.Data { /// /// Represents a list of the tokens. /// internal class LexTokenList : IEnumerable { private ArrayList tokens = null; internal LexTokenList() { tokens = new ArrayList(); } internal void Add(LexToken token) { tokens.Add(token); } internal void Push(LexToken token) { tokens.Insert(0, token); } internal LexToken Peek() { return (LexToken)tokens[0]; } internal LexToken Extract() { LexToken token = (LexToken)tokens[0]; tokens.RemoveAt(0); return token; } internal int Count { get { return tokens.Count; } } public IEnumerator GetEnumerator() { return tokens.GetEnumerator(); } } } ================================================ FILE: DataProviders/LexTokenTypes.cs ================================================ using System; namespace Majorsilence.Reporting.Data { /// /// Types of tokens /// internal enum LexTokenTypes { DATETIME, STRING, EOF } } ================================================ FILE: DataProviders/Lexer.cs ================================================ using System; using System.IO; using System.Collections; using System.Text; namespace Majorsilence.Reporting.Data { /// /// A simple Lexer that is used by Parser. /// internal class Lexer { private LexTokenList tokens; private LexCharReader reader; internal char SeparatorChar=' '; internal bool SeparateDatetime=true; internal bool SeparateQuoted=true; /// /// Initializes a new instance of the Lexer class with the specified /// TextReader to lex. /// /// A TextReader to lex. internal Lexer(TextReader source) { // token queue tokens = new LexTokenList(); // read the file contents reader = new LexCharReader(source); } /// /// Breaks the input stream onto the tokens list and returns it. /// /// The tokens list. internal LexTokenList Lex() { LexToken token = GetNextToken(); while(true) { if(token != null) tokens.Add(token); else { tokens.Add(new LexToken(null, LexTokenTypes.EOF)); return tokens; } token = GetNextToken(); } } private LexToken GetNextToken() { while(!reader.EndOfInput()) { char ch = reader.GetNext(); // skipping whitespaces at front of token if(Char.IsWhiteSpace(ch)) { continue; } switch(ch) { case '"': case '\'': if (SeparateQuoted) return ReadQuoted(ch); break; case '[': if (SeparateDatetime) return ReadDateTime(']'); break; default: break; } // end of switch return ReadToChar(ch, SeparatorChar); } return null; } // Quoted string like " asdf " or ' asdf ' private LexToken ReadQuoted(char ch) { char qChar = ch; StringBuilder quoted = new StringBuilder(); while(!reader.EndOfInput()) { ch = reader.GetNext(); if (ch == '\\' && reader.Peek() == qChar) // look for escaped '"'/"'" ch = reader.GetNext(); // got one skip escape char else if (ch == qChar) return new LexToken(quoted.ToString(), LexTokenTypes.STRING); quoted.Append(ch); } throw new Exception("Unterminated string!"); } // Read string to specified character private LexToken ReadToChar(char firstc, char ch) { char qChar = ch; StringBuilder quoted = new StringBuilder(); quoted.Append(firstc); while(!reader.EndOfInput()) { ch = reader.GetNext(); if (ch == qChar) return new LexToken(quoted.ToString(), LexTokenTypes.STRING); quoted.Append(ch); } return new LexToken(quoted.ToString(), LexTokenTypes.STRING); } // Read a datetime field == denoted by [...] private LexToken ReadDateTime(char ch) { char qChar = ch; StringBuilder quoted = new StringBuilder(); while(!reader.EndOfInput()) { ch = reader.GetNext(); if (ch == qChar) break; quoted.Append(ch); } return new LexToken(quoted.ToString(), LexTokenTypes.DATETIME); } } } ================================================ FILE: DataProviders/LogCommand.cs ================================================ using System; using System.Xml; using System.Data; using System.Collections; namespace Majorsilence.Reporting.Data { /// /// LogCommand allows specifying the command for the web log. /// public class LogCommand : IDbCommand { LogConnection _lc; // connection we're running under string _cmd; // command to execute // parsed constituents of the command string _Url; // url of the file string _Domain; string _IndexFile; // name of the index file; e.g. what's the default page when none (e.g. index.html) DataParameterCollection _Parameters = new DataParameterCollection(); public LogCommand(LogConnection conn) { _lc = conn; } internal string Url { get { // Check to see if "Url" or "@Url" is a parameter IDbDataParameter dp= _Parameters["Url"] as IDbDataParameter; if (dp == null) dp= _Parameters["@Url"] as IDbDataParameter; // Then check to see if the Url value is a parameter? if (dp == null) dp = _Parameters[_Url] as IDbDataParameter; if (dp != null) return dp.Value != null? dp.Value.ToString(): _Url; // don't pass null; pass existing value return _Url; // the value must be a constant } set {_Url = value;} } internal string Domain { get { // Check to see if "Domain" or "@Domain" is a parameter IDbDataParameter dp= _Parameters["Domain"] as IDbDataParameter; if (dp == null) dp= _Parameters["@Domain"] as IDbDataParameter; // Then check to see if the Domain value is a parameter? if (dp == null) dp = _Parameters[_Domain] as IDbDataParameter; return (dp == null || dp.Value == null)? _Domain: dp.Value.ToString(); } set {_Domain = value;} } internal string IndexFile { get { // Check to see if "IndexFile" or "@IndexFile" is a parameter IDbDataParameter dp= _Parameters["IndexFile"] as IDbDataParameter; if (dp == null) dp= _Parameters["@IndexFile"] as IDbDataParameter; // Then check to see if the IndexFile value is a parameter? if (dp == null) dp = _Parameters[_IndexFile] as IDbDataParameter; return (dp == null || dp.Value == null)? _IndexFile: dp.Value.ToString(); } set {_IndexFile = value;} } #region IDbCommand Members public void Cancel() { throw new NotImplementedException("Cancel not implemented"); } public void Prepare() { return; // Prepare is a noop } public System.Data.CommandType CommandType { get { throw new NotImplementedException("CommandType not implemented"); } set { throw new NotImplementedException("CommandType not implemented"); } } public IDataReader ExecuteReader(System.Data.CommandBehavior behavior) { if (!(behavior == CommandBehavior.SingleResult || behavior == CommandBehavior.SchemaOnly)) throw new ArgumentException("ExecuteReader supports SingleResult and SchemaOnly only."); return new LogDataReader(behavior, _lc, this); } IDataReader System.Data.IDbCommand.ExecuteReader() { return ExecuteReader(System.Data.CommandBehavior.SingleResult); } public object ExecuteScalar() { throw new NotImplementedException("ExecuteScalar not implemented"); } public int ExecuteNonQuery() { throw new NotImplementedException("ExecuteNonQuery not implemented"); } public int CommandTimeout { get { return 0; } set { throw new NotImplementedException("CommandTimeout not implemented"); } } public IDbDataParameter CreateParameter() { return new LogDataParameter(); } public IDbConnection Connection { get { return this._lc; } set { throw new NotImplementedException("Setting Connection not implemented"); } } public System.Data.UpdateRowSource UpdatedRowSource { get { throw new NotImplementedException("UpdatedRowSource not implemented"); } set { throw new NotImplementedException("UpdatedRowSource not implemented"); } } public string CommandText { get { return this._cmd; } set { // Parse the command string for keyword value pairs separated by ';' string[] args = value.Split(';'); string url=null; string domain=null; string indexfile=null; foreach(string arg in args) { string[] param = arg.Trim().Split('='); if (param == null || param.Length != 2) continue; string key = param[0].Trim().ToLower(); string val = param[1]; switch (key) { case "url": case "file": url = val; break; case "domain": domain = val; break; case "indexfile": indexfile = val; break; default: throw new ArgumentException(string.Format("{0} is an unknown parameter key", param[0])); } } // User must specify both the url and the RowsXPath if (url == null) throw new ArgumentException("CommandText requires a 'Url=' parameter."); _cmd = value; _Url = url; _Domain = domain; _IndexFile = indexfile; } } public IDataParameterCollection Parameters { get { return _Parameters; } } public IDbTransaction Transaction { get { throw new NotImplementedException("Transaction not implemented"); } set { throw new NotImplementedException("Transaction not implemented"); } } #endregion #region IDisposable Members public void Dispose() { // nothing to dispose of } #endregion } } ================================================ FILE: DataProviders/LogConnection.cs ================================================ using System; using System.Xml; using System.Data; namespace Majorsilence.Reporting.Data { /// /// LogConnection handles connections to web log. /// public class LogConnection : IDbConnection { string _Connection; // the connection string; of format file= bool bOpen=false; public LogConnection(string conn) { ConnectionString = conn; } internal bool IsOpen { get {return bOpen;} } #region IDbConnection Members public void ChangeDatabase(string databaseName) { throw new NotImplementedException("ChangeDatabase method not supported."); } public IDbTransaction BeginTransaction(System.Data.IsolationLevel il) { throw new NotImplementedException("BeginTransaction method not supported."); } IDbTransaction System.Data.IDbConnection.BeginTransaction() { throw new NotImplementedException("BeginTransaction method not supported."); } public System.Data.ConnectionState State { get { throw new NotImplementedException("State not implemented"); } } public string ConnectionString { get { return _Connection; } set { string c = value; // Now parse the connection string; Array args = c.Split (','); string directory=null; foreach(string arg in args) { if (arg.Trim().ToLower().StartsWith("directory=")) // Only have one type of argument right now directory = arg.Trim().Split('=').GetValue(1) as string; } _Connection = value; } } public IDbCommand CreateCommand() { return new LogCommand(this); } public void Open() { bOpen = true; } public void Close() { bOpen = false; } public string Database { get { return null; // don't really have a database } } public int ConnectionTimeout { get { return 0; } } #endregion #region IDisposable Members public void Dispose() { this.Close(); } #endregion } } ================================================ FILE: DataProviders/LogDataParameter.cs ================================================ using System; using System.Xml; using System.Data; namespace Majorsilence.Reporting.Data { /// /// XmlDataParameter /// public class LogDataParameter : BaseDataParameter { public LogDataParameter():base() { } } } ================================================ FILE: DataProviders/LogDataReader.cs ================================================ using System; using System.Data; using System.Collections; using System.Collections.Specialized; using System.IO; using System.Net; namespace Majorsilence.Reporting.Data { /// /// LogDataReader handles reading log files /// public class LogDataReader : IDataReader { LogConnection _lconn; LogCommand _lcmd; System.Data.CommandBehavior _behavior; Hashtable _CompressStrings; // we keep hashtable of strings so that we can reuse to save memory // most web sites won't have huge duplicates. MultipleStreamReader _sr; // StreamReader for _Url string _Domain; // domain name from LogCommand string _IndexFile; // index file name object[] _Data; // data values of the columns // column information: is fixed for all instances // names of all the columns static string[] _Names= new string[] {"host","client_identifier","user","datetime", "request_cmd","request_url","request_type", "request_parameters","status_code", "bytes", "referrer", "user_agent", "cookie"}; // types of all the columns static Type _dttype = DateTime.MinValue.GetType(); // work variable for getting the type static Type _tstring = "".GetType(); static Type _dtype = Double.MinValue.GetType(); static Type[] _Types = new Type[] {_tstring,_tstring,_tstring,_dttype, _tstring,_tstring,_tstring,_tstring,_tstring, _dtype,_tstring,_tstring,_tstring}; const int DATETIME_FIELD=3; // the date time field const int REQUEST_FIELD=4; // the request field const int BYTES_FIELD=9; // the bytes field public LogDataReader(System.Data.CommandBehavior behavior, LogConnection conn, LogCommand cmd) { _lconn = conn; _lcmd = cmd; _behavior = behavior; _CompressStrings = new Hashtable(10000); // compress strings to save memory string fname = _lcmd.Url; _Domain = _lcmd.Domain; if (_Domain == null) _Domain = ""; _IndexFile = _lcmd.IndexFile; if (_IndexFile == null) _IndexFile = ""; if (behavior != CommandBehavior.SchemaOnly) _sr = new MultipleStreamReader(_lcmd.Url); // get the main stream _Data = new object[_Names.Length]; // allocate enough room for data } #region IDataReader Members public int RecordsAffected { get { return 0; } } public bool IsClosed { get { return _sr == null; } } public bool NextResult() { return false; } public void Close() { _CompressStrings = null; if (_sr != null) { _sr.Close(); _sr = null; } _Data = null; } public bool Read() { if (this._sr == null) return false; // read a line of the log string line = _sr.ReadLine(); if (line == null) return false; // obtain the data from each column and put the data array Lexer l = new Lexer(new StringReader(line)); LexTokenList ll = l.Lex(); int ci=0; // start at first column if (ll.Count > 11) ci = 0; foreach (LexToken lt in ll) { if (ci >= _Data.Length || lt.Type == LexTokenTypes.EOF) break; if (ci == DATETIME_FIELD) { _Data[ci] =GetDateTime(lt.Value); } else if (ci == REQUEST_FIELD) { // break the request into multiple fields; command, url, http type string[] reqs = lt.Value.Split(' '); string req_cmd=null; string req_url=null; string req_type=null; string req_parameters=null; if (reqs == null) {} else if (reqs.Length >= 3) { req_cmd = reqs[0]; req_url = reqs[1]; req_type = reqs[2]; } else if (reqs.Length == 2) { req_cmd = reqs[0]; req_url = reqs[1]; } else if (reqs.Length == 1) req_url = reqs[0]; if (req_url != null) { string [] up = req_url.Split('?'); if (up.Length > 1) { req_url = up[0]; req_parameters = up[1]; } } _Data[ci++] = req_type; if (req_url != null && req_url.Length > 0) { if (req_url[0] == '/') req_url = _Domain + req_url; if (req_url[req_url.Length-1] == '/') req_url += _IndexFile; } _Data[ci++] = CompressString(req_url); _Data[ci++] = req_type == "HTTP/1.1"? "HTTP/1.1": CompressString(req_type); _Data[ci++] = req_parameters; continue; } else if (ci == BYTES_FIELD) { double v=0; if (lt.Value.Length == 0 || lt.Value == "-") {} else { try { v = Convert.ToDouble(lt.Value); } catch { } } _Data[ci] = v; } else _Data[ci] = CompressString(lt.Value); ci++; // go to next column } while (ci < _Data.Length) _Data[ci++] = null; return true; } string CompressString(string v) { if (v == null) return null; string sv = _CompressStrings[v] as string; if (sv != null) return sv; _CompressStrings.Add(v, v); return v; } object GetDateTime(string v) { object result; if (v.Length != 26) return null; try { string dd = v.Substring(0,2); // the day of the month string MMM = v.Substring(3,3); // the month int month=1; switch (MMM.ToLower()) { case "jan": month=1; break; case "feb": month=2; break; case "mar": month=3; break; case "apr": month=4; break; case "may": month=5; break; case "jun": month=6; break; case "jul": month=7; break; case "aug": month=8; break; case "sep": month=9; break; case "oct": month=10; break; case "nov": month=11; break; case "dec": month=12; break; default: break; } string yyyy = v.Substring(7,4); // the year string hh = v.Substring(12,2); // the hour string mm = v.Substring(15,2); // the minute string ss = v.Substring(18,2); // the seconds bool bPlus = v[21] == '+'; int thh = Convert.ToInt32(v.Substring(22,2)); // the time zone (hh) int tmm = Convert.ToInt32(v.Substring(24,2)); // the time zone (mm) int tzdiff = thh * 60 + tmm; // time zone difference in minutes if (!bPlus) tzdiff = - tzdiff; DateTime dt = new DateTime(Convert.ToInt32(yyyy), month, Convert.ToInt32(dd), Convert.ToInt32(hh), Convert.ToInt32(mm), Convert.ToInt32(ss), 0); result = dt.AddMinutes(tzdiff); } catch { result = null; } return result; } public int Depth { get { return 0; } } public DataTable GetSchemaTable() { return null; } #endregion #region IDisposable Members public void Dispose() { this.Close(); } #endregion #region IDataRecord Members public int GetInt32(int i) { return Convert.ToInt32(_Data[i]); } public object this[string name] { get { int ci = this.GetOrdinal(name); return _Data[ci]; } } object System.Data.IDataRecord.this[int i] { get { return _Data[i]; } } public object GetValue(int i) { return _Data[i]; } public bool IsDBNull(int i) { return _Data[i] == null; } public long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length) { throw new NotImplementedException("GetBytes not implemented."); } public byte GetByte(int i) { return Convert.ToByte(_Data[i]); } public Type GetFieldType(int i) { return _Types[i]; } public decimal GetDecimal(int i) { return Convert.ToDecimal(_Data[i]); } public int GetValues(object[] values) { int i; for (i=0; i < values.Length; i++) { values[i] = i >= _Data.Length? System.DBNull.Value: _Data[i]; } return Math.Min(values.Length, _Data.Length); } public string GetName(int i) { return _Names[i] as string; } public int FieldCount { get { return _Data.Length; } } public long GetInt64(int i) { return Convert.ToInt64(_Data[i]); } public double GetDouble(int i) { return Convert.ToDouble(_Data[i]); } public bool GetBoolean(int i) { return Convert.ToBoolean(_Data[i]); } public Guid GetGuid(int i) { throw new NotImplementedException("GetGuid not implemented."); } public DateTime GetDateTime(int i) { return Convert.ToDateTime(_Data[i]); } public int GetOrdinal(string name) { int ci=0; // do case sensitive lookup foreach (string cname in _Names) { if (cname == name) return ci; ci++; } // do case insensitive lookup ci=0; name = name.ToLower(); foreach (string cname in _Names) { if (cname.ToLower() == name) return ci; ci++; } throw new ArgumentException(string.Format("Column '{0}' not known.", name)); } public string GetDataTypeName(int i) { Type t = _Types[i] as Type; return t.ToString(); } public float GetFloat(int i) { return Convert.ToSingle(_Data[i]); } public IDataReader GetData(int i) { throw new NotImplementedException("GetData not implemented."); } public long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length) { throw new NotImplementedException("GetChars not implemented."); } public string GetString(int i) { return Convert.ToString(_Data[i]); } public char GetChar(int i) { return Convert.ToChar(_Data[i]); } public short GetInt16(int i) { return Convert.ToInt16(_Data[i]); } #endregion } } ================================================ FILE: DataProviders/Majorsilence.Reporting.DataProviders.csproj ================================================  Local false Library OnBuildSuccess True RDL Data Providers false Majorsilence.Reporting.DataProviders Debug;Release;Debug-DrawingCompat;Release-DrawingCompat net48;net8.0;net10.0 net8.0;net10.0 4014 Majorsilence.Reporting.DataProviders.SkiaSharp System System.Data System.XML ================================================ FILE: DataProviders/MultipleStreamReader.cs ================================================ using System; using System.IO; using System.Collections; using System.Net; using System.Text; using System.Net.Http; using System.Threading.Tasks; namespace Majorsilence.Reporting.Data { /// /// MultipleStreamReader provides a logical single stream over multiple streams. Only support ReadLine. /// public class MultipleStreamReader : TextReader { Queue _files; StreamReader _sr = null; static readonly HttpClient _httpClient = new HttpClient(); /// /// Constructor taking a path list string. Files are separated with blanks. /// If a file contains a blank then it should be enclosed with quotes ("). /// /// public MultipleStreamReader(string pathlist) { GetFileList(pathlist); // split the string into multiple files // HACK: async Task.Run(async()=> await GetStream()).GetAwaiter().GetResult(); // get the first file } void GetFileList(string pathlist) { _files = new Queue(); StringBuilder sb = null; int STARTFILE = 0; int INFILE = 1; int state = STARTFILE; bool bQuote = false; foreach (char c in pathlist) { if (state == STARTFILE) { sb = new StringBuilder(); bQuote = (c == '"'); if (!bQuote) sb.Append(c); state = INFILE; } else if (state == INFILE) { if ((bQuote && c == '"') || // quoted file and on last quote (!bQuote && c == ' ')) // not quoted file and blank { AddFileToQueue(sb.ToString(), bQuote); state = STARTFILE; } else sb.Append(c); } } if (sb != null && sb.Length > 0) AddFileToQueue(sb.ToString(), bQuote); return; } void AddFileToQueue(string f, bool asis) { if (!asis) f = f.Trim(); // get rid of extraneous blanks if (f.Length <= 0) return; if (Path.GetFileNameWithoutExtension(f) == "*") { int i = f.LastIndexOf('*'); string path = f.Substring(0, i); string[] fl = Directory.GetFiles(path, "*" + Path.GetExtension(f)); foreach (string file in fl) _files.Enqueue(file); } else _files.Enqueue(f); } async Task GetStream() { if (_sr != null) // close out the previous file before getting another { _sr.Close(); _sr = null; } if (_files == null || _files.Count == 0) return null; string fname = _files.Dequeue() as string; Stream strm = null; if (fname.StartsWith("http:") || fname.StartsWith("file:") || fname.StartsWith("https:")) { _httpClient.AddMajorsilenceReportingUserAgent(); HttpResponseMessage response = await _httpClient.GetAsync(fname); response.EnsureSuccessStatusCode(); strm = await response.Content.ReadAsStreamAsync(); } else strm = new FileStream(fname, System.IO.FileMode.Open, FileAccess.Read); _sr = new StreamReader(strm); return _sr; } public override void Close() { if (_sr != null) { _sr.Close(); _sr = null; } _files.Clear(); } public override string ReadLine() { if (_sr == null) return null; // HACK: async string rs = Task.Run(async () => await _sr.ReadLineAsync()).GetAwaiter().GetResult(); if (rs == null) { // HACK: async Task.Run(async () => { await GetStream(); rs = await ReadLineAsync(); }).GetAwaiter().GetResult(); } return rs; } } } ================================================ FILE: DataProviders/TxtCommand.cs ================================================ using System; using System.Xml; using System.Data; using System.Collections; namespace Majorsilence.Reporting.Data { /// /// TxtCommand allows specifying the command for a text file. /// public class TxtCommand : IDbCommand { TxtConnection _tc; // connection we're running under string _cmd; // command to execute // parsed constituents of the command string _Url; // url of the file string _Header; // does file contain a header row char _Separator; // separator character string[] _Columns; // hold the column list DataParameterCollection _Parameters = new DataParameterCollection(); public TxtCommand(TxtConnection conn) { _tc = conn; } internal string[] Columns { get {return _Columns;} } internal string Url { get { // Check to see if "Url" or "@Url" is a parameter IDbDataParameter dp= _Parameters["Url"] as IDbDataParameter; if (dp == null) dp= _Parameters["@Url"] as IDbDataParameter; // Then check to see if the Url value is a parameter? if (dp == null) dp = _Parameters[_Url] as IDbDataParameter; if (dp != null) return dp.Value != null? dp.Value.ToString(): _Url; // don't pass null; pass existing value return _Url; // the value must be a constant } set {_Url = value;} } internal char Separator { get { // Check to see if "Separator" or "@Separator" is a parameter IDbDataParameter dp= _Parameters["Separator"] as IDbDataParameter; if (dp == null) dp= _Parameters["@Separator"] as IDbDataParameter; // Then check to see if the Separator value is a parameter? if (dp == null) dp = _Parameters[_Separator.ToString()] as IDbDataParameter; if (dp != null && dp.Value != null) { string v = dp.Value.ToString(); if (v.Length >= 1) return v[0]; } if (_Separator != '\0') // Initialized? return _Separator; // yes, return it // otherwise we default depending on the Url extension (if any) string url = this.Url.ToLower(); if (url.IndexOf(".txt") >= 0) return '\t'; if (url.IndexOf(".csv") >= 0) return ','; return _Separator; // done the best we can; but have no value } set {_Separator = value;} } internal bool Header { get { // Check to see if "Header" or "@Header" is a parameter IDbDataParameter dp= _Parameters["Header"] as IDbDataParameter; if (dp == null) dp= _Parameters["@Header"] as IDbDataParameter; // Then check to see if the Url value is a parameter? if (dp == null) dp = _Parameters[_Header] as IDbDataParameter; if (dp != null) { string tf = dp.Value as string; if (tf == null) return false; tf = tf.ToLower(); return (tf == "true" || tf == "yes"); } return _Header=="yes"? true: false; // the value must be a constant } set {_Header = value? "yes": "no";} } #region IDbCommand Members public void Cancel() { throw new NotImplementedException("Cancel not implemented"); } public void Prepare() { return; // Prepare is a noop } public System.Data.CommandType CommandType { get { throw new NotImplementedException("CommandType not implemented"); } set { throw new NotImplementedException("CommandType not implemented"); } } public IDataReader ExecuteReader(System.Data.CommandBehavior behavior) { if (!(behavior == CommandBehavior.SingleResult || behavior == CommandBehavior.SchemaOnly)) throw new ArgumentException("ExecuteReader supports SingleResult and SchemaOnly only."); return new TxtDataReader(behavior, _tc, this); } IDataReader System.Data.IDbCommand.ExecuteReader() { return ExecuteReader(System.Data.CommandBehavior.SingleResult); } public object ExecuteScalar() { throw new NotImplementedException("ExecuteScalar not implemented"); } public int ExecuteNonQuery() { throw new NotImplementedException("ExecuteNonQuery not implemented"); } public int CommandTimeout { get { return 0; } set { throw new NotImplementedException("CommandTimeout not implemented"); } } public IDbDataParameter CreateParameter() { return new TxtDataParameter(); } public IDbConnection Connection { get { return this._tc; } set { throw new NotImplementedException("Setting Connection not implemented"); } } public System.Data.UpdateRowSource UpdatedRowSource { get { throw new NotImplementedException("UpdatedRowSource not implemented"); } set { throw new NotImplementedException("UpdatedRowSource not implemented"); } } public string CommandText { get { return this._cmd; } set { // Parse the command string for keyword value pairs separated by ';' string[] args = value.Split(';'); string url=null; string[] columns = null; string header=null; char separator='\0'; foreach(string arg in args) { string[] param = arg.Trim().Split('='); if (param == null || param.Length != 2) continue; string key = param[0].Trim().ToLower(); string val = param[1]; switch (key) { case "url": case "file": url = val; break; case "columns": // column list is separated by ',' columns = val.Trim().Split(','); break; case "header": header = val.Trim().ToLower(); if (header == "yes" || header == "no") {} else if (header == "true") header = "yes"; else if (header == "false") header = "no"; else throw new ArgumentException(string.Format("Invalid Header {0}; should be 'yes' 'no'.", val)); break; case "separator": if (val.Length != 1) throw new ArgumentException(string.Format("Invalid Separator character '{0}'; should be only a single character.", val)); separator = val[0]; break; default: throw new ArgumentException(string.Format("{0} is an unknown parameter key", param[0])); } } // User must specify both the url and the RowsXPath if (url == null) throw new ArgumentException("CommandText requires a 'Url=' parameter."); _cmd = value; _Url = url; _Columns = columns; _Separator = separator; _Header = header; } } public IDataParameterCollection Parameters { get { return _Parameters; } } public IDbTransaction Transaction { get { throw new NotImplementedException("Transaction not implemented"); } set { throw new NotImplementedException("Transaction not implemented"); } } #endregion #region IDisposable Members public void Dispose() { // nothing to dispose of } #endregion } } ================================================ FILE: DataProviders/TxtConnection.cs ================================================ using System; using System.Xml; using System.Data; namespace Majorsilence.Reporting.Data { /// /// LogConnection handles connections to web log. /// public class TxtConnection : IDbConnection { string _Connection; // the connection string; of format file= bool bOpen=false; public TxtConnection(string conn) { ConnectionString = conn; } internal bool IsOpen { get {return bOpen;} } #region IDbConnection Members public void ChangeDatabase(string databaseName) { throw new NotImplementedException("ChangeDatabase method not supported."); } public IDbTransaction BeginTransaction(System.Data.IsolationLevel il) { throw new NotImplementedException("BeginTransaction method not supported."); } IDbTransaction System.Data.IDbConnection.BeginTransaction() { throw new NotImplementedException("BeginTransaction method not supported."); } public System.Data.ConnectionState State { get { throw new NotImplementedException("State not implemented"); } } public string ConnectionString { get { return _Connection; } set { string c = value; // Now parse the connection string; Array args = c.Split (','); string directory=null; foreach(string arg in args) { if (arg.Trim().ToLower().StartsWith("directory=")) // Only have one type of argument right now directory = arg.Trim().Split('=').GetValue(1) as string; } _Connection = value; } } public IDbCommand CreateCommand() { return new TxtCommand(this); } public void Open() { bOpen = true; } public void Close() { bOpen = false; } public string Database { get { return null; // don't really have a database } } public int ConnectionTimeout { get { return 0; } } #endregion #region IDisposable Members public void Dispose() { this.Close(); } #endregion } } ================================================ FILE: DataProviders/TxtDataParameter.cs ================================================ using System; using System.Xml; using System.Data; namespace Majorsilence.Reporting.Data { /// /// TxtDataParameter /// public class TxtDataParameter : BaseDataParameter { public TxtDataParameter():base() { } } } ================================================ FILE: DataProviders/TxtDataReader.cs ================================================ using System; using System.Data; using System.Collections; using System.Collections.Specialized; using System.IO; using System.Net; using System.Net.Http; using System.Threading.Tasks; namespace Majorsilence.Reporting.Data { /// /// TxtDataReader handles reading txt files /// public class TxtDataReader : IDataReader { TxtConnection _tconn; TxtCommand _tcmd; System.Data.CommandBehavior _behavior; StreamReader _sr; // StreamReader for _Url // column information object[] _Data; // data values of the columns bool bFirstRow; // indicates that _Data has been filled with data of the 1st row string[] _Names; // names of the columns Type[] _Types; // types of the columns public TxtDataReader(System.Data.CommandBehavior behavior, TxtConnection conn, TxtCommand cmd) { bFirstRow = false; _tconn = conn; _tcmd = cmd; _behavior = behavior; string fname = _tcmd.Url; bool header = _tcmd.Header; char separator = _tcmd.Separator; // HACK: async Task.Run(async () => _sr = await GetStream()).GetAwaiter().GetResult(); // get the main stream Type tstring = "".GetType(); LexTokenList ll = GetLine(); int colcount = ll == null ? 0 : ll.Count - 1; // don't count the end of line _Names = _tcmd.Columns; if (colcount == 0) { _sr.Close(); _sr = null; if (_Names == null) return; _Types = new Type[_Names.Length]; for (int ci = 0; ci < _Types.Length; ci++) _Types[ci] = tstring; return; } if (_Names != null && _Names.Length != colcount) throw new Exception(string.Format("{0} column names specified but {1} columns found.", _Names.Length, colcount)); if (header) { if (_Names == null) { // uses the first row as the names of the columns _Names = new string[colcount]; int ci = 0; foreach (LexToken lt in ll) { if (lt.Type == LexTokenTypes.EOF) break; _Names[ci++] = lt.Value; } } ll = GetLine(); } else if (_Names == null) { // just name the columns 'column1', 'column2', ... _Names = new string[colcount]; for (int ci = 0; ci < _Names.Length; ci++) _Names[ci] = "column" + (ci + 1).ToString(); } _Data = new object[_Names.Length]; // allocate enough room for data _Types = new Type[_Names.Length]; if (ll != null) // we have a datarow { bFirstRow = true; // loop thru determining the types of all data int ci = 0; foreach (LexToken lt in ll) { if (ci >= _Types.Length || lt.Type == LexTokenTypes.EOF) break; _Types[ci++] = GetTypeOfString(lt.Value); } FillData(ll); } else { // no first row! assume all the column types are string for (int ci = 0; ci < _Types.Length; ci++) _Types[ci] = tstring; } if (behavior == CommandBehavior.SchemaOnly) { _sr.Close(); _sr = null; } } void FillData(LexTokenList ll) { Type stype = "".GetType(); int ci = 0; foreach (LexToken lt in ll) { if (ci >= _Data.Length || lt.Type == LexTokenTypes.EOF) break; // Optimize for no conversion if (_Types[ci] == stype || lt.Value == null) { _Data[ci++] = lt.Value; continue; } // We need to do conversion try { // in case of conversion error _Data[ci] = Convert.ChangeType(lt.Value, _Types[ci]); } catch { _Data[ci] = null; } ci++; } while (ci < _Data.Length) _Data[ci++] = null; } LexTokenList GetLine() { if (_sr == null) return null; // read a line of the log string line = _sr.ReadLine(); if (line == null) return null; // obtain the data from each column and put the data array Lexer l = new Lexer(new StringReader(line)); l.SeparateDatetime = false; l.SeparatorChar = _tcmd.Separator; LexTokenList ll = l.Lex(); return ll; } Type GetTypeOfString(string v) { return "".GetType(); // just assume string for now } async Task GetStream() { string fname = _tcmd.Url; Stream strm = null; if (fname.StartsWith("http:") || fname.StartsWith("https:")) { using (HttpClient client = new HttpClient()) { client.AddMajorsilenceReportingUserAgent(); HttpResponseMessage response = await client.GetAsync(fname); response.EnsureSuccessStatusCode(); strm = await response.Content.ReadAsStreamAsync(); } } else if (fname.StartsWith("file:")) { strm = new FileStream(fname.Substring(5), System.IO.FileMode.Open, FileAccess.Read); } else { strm = new FileStream(fname, System.IO.FileMode.Open, FileAccess.Read); } _sr = new StreamReader(strm); return _sr; } #region IDataReader Members public int RecordsAffected { get { return 0; } } public bool IsClosed { get { return _sr == null; } } public bool NextResult() { return false; } public void Close() { if (_sr != null) { _sr.Close(); _sr = null; } _Data = null; _Names = null; _Types = null; } public bool Read() { if (this._sr == null || _Data == null) return false; // Do we already have a row primed? if (bFirstRow) { // yes; but no more bFirstRow = false; return true; } // read a line of the log LexTokenList ll = this.GetLine(); if (ll == null) return false; // take line and fill the data this.FillData(ll); return true; } object GetDateTime(string v) { object result; if (v.Length != 26) return null; try { string dd = v.Substring(0, 2); // the day of the month string MMM = v.Substring(3, 3); // the month int month = 1; switch (MMM.ToLower()) { case "jan": month = 1; break; case "feb": month = 2; break; case "mar": month = 3; break; case "apr": month = 4; break; case "may": month = 5; break; case "jun": month = 6; break; case "jul": month = 7; break; case "aug": month = 8; break; case "sep": month = 9; break; case "oct": month = 10; break; case "nov": month = 11; break; case "dec": month = 12; break; default: break; } string yyyy = v.Substring(7, 4); // the year string hh = v.Substring(12, 2); // the hour string mm = v.Substring(15, 2); // the minute string ss = v.Substring(18, 2); // the seconds bool bPlus = v[21] == '+'; int hhmm = Convert.ToInt32(v.Substring(22, 4)); // the time zone if (!bPlus) hhmm = -hhmm; DateTime dt = new DateTime(Convert.ToInt32(yyyy), month, Convert.ToInt32(dd), Convert.ToInt32(hh), Convert.ToInt32(mm), Convert.ToInt32(ss), 0); result = dt.AddHours(hhmm / 100.0); } catch { result = null; } return result; } public int Depth { get { // TODO: Add XmlDataReader.Depth getter implementation return 0; } } public DataTable GetSchemaTable() { // TODO: Add XmlDataReader.GetSchemaTable implementation return null; } #endregion #region IDisposable Members public void Dispose() { this.Close(); } #endregion #region IDataRecord Members public int GetInt32(int i) { return Convert.ToInt32(_Data[i]); } public object this[string name] { get { int ci = this.GetOrdinal(name); return _Data[ci]; } } object System.Data.IDataRecord.this[int i] { get { return _Data[i]; } } public object GetValue(int i) { return _Data[i]; } public bool IsDBNull(int i) { return _Data[i] == null; } public long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length) { throw new NotImplementedException("GetBytes not implemented."); } public byte GetByte(int i) { return Convert.ToByte(_Data[i]); } public Type GetFieldType(int i) { return this._Types[i] as Type; } public decimal GetDecimal(int i) { return Convert.ToDecimal(_Data[i]); } public int GetValues(object[] values) { int i; for (i = 0; i < values.Length; i++) { values[i] = i >= _Data.Length ? System.DBNull.Value : _Data[i]; } return Math.Min(values.Length, _Data.Length); } public string GetName(int i) { return _Names[i] as string; } public int FieldCount { get { return _Data.Length; } } public long GetInt64(int i) { return Convert.ToInt64(_Data[i]); } public double GetDouble(int i) { return Convert.ToDouble(_Data[i]); } public bool GetBoolean(int i) { return Convert.ToBoolean(_Data[i]); } public Guid GetGuid(int i) { throw new NotImplementedException("GetGuid not implemented."); } public DateTime GetDateTime(int i) { return Convert.ToDateTime(_Data[i]); } public int GetOrdinal(string name) { int ci = 0; // do case sensitive lookup foreach (string cname in _Names) { if (cname == name) return ci; ci++; } // do case insensitive lookup ci = 0; foreach (string cname in _Names) { if (String.Compare(cname, name, true) == 0) return ci; ci++; } throw new ArgumentException(string.Format("Column '{0}' not known.", name)); } public string GetDataTypeName(int i) { Type t = _Types[i] as Type; return t.ToString(); } public float GetFloat(int i) { return Convert.ToSingle(_Data[i]); } public IDataReader GetData(int i) { throw new NotImplementedException("GetData not implemented."); } public long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length) { throw new NotImplementedException("GetChars not implemented."); } public string GetString(int i) { return Convert.ToString(_Data[i]); } public char GetChar(int i) { return Convert.ToChar(_Data[i]); } public short GetInt16(int i) { return Convert.ToInt16(_Data[i]); } #endregion } } ================================================ FILE: DataProviders/WebServiceCommand.cs ================================================ using System; using System.Xml; using System.Data; using System.Collections; namespace Majorsilence.Reporting.Data { /// /// WebServiceCommand /// public class WebServiceCommand : IDbCommand { WebServiceConnection _wsc; // connection we're running under string _cmd; // command to execute int _Timeout; // timeout limit on invoking webservice (only applies to invoking service) // parsed constituents of the command string _Url; // url of the wsdl file string _Service; // service name string _Operation; // operation name string _RepeatField; // Specifies the name of the array that should be repeated (only 1 can be) ArrayList _Columns; // Columns specified for the request DataParameterCollection _Parameters = new DataParameterCollection(); public WebServiceCommand(WebServiceConnection conn) { _wsc = conn; } internal string Url { get { // Check to see if "Url" or "@Url" is a parameter IDbDataParameter dp= _Parameters["Url"] as IDbDataParameter; if (dp == null) dp= _Parameters["@Url"] as IDbDataParameter; // Then check to see if the Url value is a parameter? if (dp == null) dp = _Parameters[_Url] as IDbDataParameter; if (dp != null) return dp.Value != null? dp.Value.ToString(): _Url; // don't pass null; pass existing value return _Url; // the value must be a constant } set {_Url = value;} } internal string Operation { get { IDbDataParameter dp= _Parameters["Operation"] as IDbDataParameter; if (dp == null) dp= _Parameters["@Operation"] as IDbDataParameter; // Then check to see if the Operation value is a parameter? if (dp == null) dp = _Parameters[_Operation] as IDbDataParameter; return (dp != null && dp.Value != null)? dp.Value.ToString(): _Operation; // don't pass null; pass existing value } set {_Operation = value;} } internal string RepeatField { get { IDbDataParameter dp= _Parameters["RepeatField"] as IDbDataParameter; if (dp == null) dp= _Parameters["@RepeatField"] as IDbDataParameter; // Then check to see if the RepeatField value is a parameter? if (dp == null) dp = _Parameters[_RepeatField] as IDbDataParameter; return (dp != null && dp.Value != null)? null: _RepeatField; } set {_RepeatField = value;} } internal string Service { get { IDbDataParameter dp= _Parameters["Service"] as IDbDataParameter; if (dp == null) dp= _Parameters["@Service"] as IDbDataParameter; // Then check to see if the RowsXPath value is a parameter? if (dp == null) dp = _Parameters[_Service] as IDbDataParameter; return (dp != null && dp.Value != null)? dp.Value.ToString(): _Service; // don't pass null; pass existing value } set {_Service = value;} } internal ArrayList Columns { get {return _Columns;} set {_Columns = value;} } #region IDbCommand Members public void Cancel() { throw new NotImplementedException("Cancel not implemented"); } public void Prepare() { return; // Prepare is a noop } public System.Data.CommandType CommandType { get { throw new NotImplementedException("CommandType not implemented"); } set { throw new NotImplementedException("CommandType not implemented"); } } public IDataReader ExecuteReader(System.Data.CommandBehavior behavior) { if (!(behavior == CommandBehavior.SingleResult || behavior == CommandBehavior.SchemaOnly)) throw new ArgumentException("ExecuteReader supports SingleResult and SchemaOnly only."); return new WebServiceDataReader(behavior, _wsc, this); } IDataReader System.Data.IDbCommand.ExecuteReader() { return ExecuteReader(System.Data.CommandBehavior.SingleResult); } public object ExecuteScalar() { throw new NotImplementedException("ExecuteScalar not implemented"); } public int ExecuteNonQuery() { throw new NotImplementedException("ExecuteNonQuery not implemented"); } public int CommandTimeout { get { return _Timeout; } set { _Timeout = value; } } public IDbDataParameter CreateParameter() { return new WebServiceDataParameter(); } public IDbConnection Connection { get { return this._wsc; } set { throw new NotImplementedException("Setting Connection not implemented"); } } public System.Data.UpdateRowSource UpdatedRowSource { get { throw new NotImplementedException("UpdatedRowSource not implemented"); } set { throw new NotImplementedException("UpdatedRowSource not implemented"); } } public string CommandText { get { return this._cmd; } set { // Parse the command string for keyword value pairs separated by ';' string[] args = value.Split(';'); string url=null; string operation=null; string service=null; string[] columns=null; foreach(string arg in args) { string[] param = arg.Trim().Split('='); if (param == null || param.Length != 2) continue; string key = param[0].Trim().ToLower(); string val = param[1]; switch (key) { case "url": case "file": url = val; break; case "service": service = val; break; case "operation": operation = val; break; case "columns": // column list is separated by ',' columns = val.Trim().Split(','); break; default: throw new ArgumentException(string.Format("{0} is an unknown parameter key", param[0])); } } // User must specify both the url and the RowsXPath if (url == null || operation == null || service == null) throw new ArgumentException("CommandText requires 'Url', 'Service', and 'Operation' parameters."); _cmd = value; _Url = url; _Operation = operation; _Service = service; if (columns != null) _Columns = new ArrayList(columns); } } public IDataParameterCollection Parameters { get { return _Parameters; } } public IDbTransaction Transaction { get { throw new NotImplementedException("Transaction not implemented"); } set { throw new NotImplementedException("Transaction not implemented"); } } #endregion #region IDisposable Members public void Dispose() { // nothing to dispose of } #endregion } } ================================================ FILE: DataProviders/WebServiceConnection.cs ================================================ using System; using System.Xml; using System.Data; namespace Majorsilence.Reporting.Data { /// /// WebServiceConnection handles connections for WebServices /// public class WebServiceConnection : IDbConnection { string _Connection; // the connection string; of format directory= bool bOpen=false; public WebServiceConnection(string conn) { ConnectionString = conn; } internal bool IsOpen { get {return bOpen;} } #region IDbConnection Members public void ChangeDatabase(string databaseName) { throw new NotImplementedException("ChangeDatabase method not supported."); } public IDbTransaction BeginTransaction(System.Data.IsolationLevel il) { throw new NotImplementedException("BeginTransaction method not supported."); } IDbTransaction System.Data.IDbConnection.BeginTransaction() { throw new NotImplementedException("BeginTransaction method not supported."); } public System.Data.ConnectionState State { get { throw new NotImplementedException("State not implemented"); } } public string ConnectionString { get { return _Connection; } set { string c = value; // Now parse the connection string; Array args = c.Split (','); string directory=null; foreach(string arg in args) { if (arg.Trim().ToLower().StartsWith("directory=")) // Only have one type of argument right now directory = arg.Trim().Split('=').GetValue(1) as string; } _Connection = value; } } public IDbCommand CreateCommand() { return new WebServiceCommand(this); } public void Open() { bOpen = true; } public void Close() { bOpen = false; } public string Database { get { return null; // don't really have a database } } public int ConnectionTimeout { get { return 0; } } #endregion #region IDisposable Members public void Dispose() { this.Close(); } #endregion } } ================================================ FILE: DataProviders/WebServiceDataParameter.cs ================================================ using System; using System.Xml; using System.Data; namespace Majorsilence.Reporting.Data { /// /// WebServiceDataParameter /// public class WebServiceDataParameter : BaseDataParameter { public WebServiceDataParameter():base() { } } } ================================================ FILE: DataProviders/WebServiceDataReader.cs ================================================ using System; using System.Xml; using System.Xml.XPath; using System.Data; using System.Collections; using System.Collections.Specialized; using System.IO; using System.Net; using System.Reflection; namespace Majorsilence.Reporting.Data { /// /// Summary description for Class1. /// public class WebServiceDataReader : IDataReader { WebServiceConnection _wsconn; WebServiceCommand _wscmd; System.Data.CommandBehavior _behavior; static Type[] BASE_TYPES = new Type[] {System.String.Empty.GetType(), System.Double.MinValue.GetType(), System.Single.MinValue.GetType(), System.Decimal.MinValue.GetType(), System.DateTime.MinValue.GetType(), System.Char.MinValue.GetType(), new bool().GetType(), System.Int32.MinValue.GetType(), System.Int16.MinValue.GetType(), System.Int64.MinValue.GetType(), System.Byte.MinValue.GetType(), System.UInt16.MinValue.GetType(), System.UInt32.MinValue.GetType(), System.UInt64.MinValue.GetType()}; // column information ArrayList _RowData; // array of Data rows; IEnumerator _ie; // enumerator thru rows object[] _Data; // data values of the columns ArrayList _Names; // names of the columns ArrayList _Types; // types of the columns public WebServiceDataReader(System.Data.CommandBehavior behavior, WebServiceConnection conn, WebServiceCommand cmd) { _wsconn = conn; _wscmd = cmd; _behavior = behavior; WebServiceWsdl wsw = WebServiceWsdl.GetWebServiceWsdl(_wscmd.Url); // build the structure of the result BuildMetaData(wsw); if (_behavior == CommandBehavior.SchemaOnly) return; // build the array that will hold the data BuildData(wsw); return; } void BuildData(WebServiceWsdl wsw) { _RowData = new ArrayList(); object result = wsw.Invoke(_wscmd.Service, _wscmd.Operation, _wscmd.Parameters as DataParameterCollection, _wscmd.CommandTimeout); if (result == null) { _ie = null; return; } int ci=0; object[] row=null; GetDataProperties(null, result.GetType(), result, ref ci, ref row); _ie = _RowData.GetEnumerator(); } void GetDataProperties(string name, Type t, object data, ref int ci, ref object[] row) { // Handle arrays if (t.IsArray) { Type at = t.GetElementType(); if (data == null) // even with null we need to go down the tree GetDataProperties(name, at, null, ref ci, ref row); else { int saveci = ci; foreach (object d in data as Array) { ci = saveci; // seems funny, but we need to restore before each call GetDataProperties(name, at, d, ref ci, ref row); if (name != _wscmd.RepeatField) // only loop thru once if not the repeat field break; row = null; // we'll want another row } } return; } // Base types go no further if (IsBaseType(t)) { if (name == null) name = "result"; if (row == null) { row = new object[_Names.Count]; _RowData.Add(row); } row[ci++] = data; return; } // Handle complex type; get all its fields FieldInfo[] fis = t.GetFields(); foreach (FieldInfo fi in fis) { string column_name = name == null? fi.Name: name + "." + fi.Name; if (fi.FieldType.IsArray) { Array da = data == null? null: fi.GetValue(data) as Array; if (da == null) // still need to go down path even with null GetDataProperties(column_name, fi.FieldType.GetElementType(), null, ref ci, ref row); else { // loop thru the object object[] save_row = row; int saveci = ci; foreach (object d in da) { ci = saveci; // seems funny, but we need to restore before each call GetDataProperties(column_name, fi.FieldType.GetElementType(), d, ref ci, ref row); if (column_name != _wscmd.RepeatField) // only loop thru once if not the repeat field break; row = null; // we'll want another row after this one } row = save_row; } } else GetDataProperties(column_name, fi.FieldType, data == null? null: fi.GetValue(data), ref ci, ref row); } } void BuildMetaData(WebServiceWsdl wsw) { _Names = new ArrayList(); _Types = new ArrayList(); MethodInfo mi = wsw.GetMethodInfo(_wscmd.Service, _wscmd.Operation); GetProperties(null, mi.ReturnType); } void GetProperties(string name, Type t) { // Handle arrays if (t.IsArray) { GetProperties(name, t.GetElementType()); return; } // Base types go no further if (IsBaseType(t)) { if (name == null) name = "result"; _Names.Add(name); _Types.Add(t); return; } // Handle complex type; get all its fields FieldInfo[] fis = t.GetFields(); foreach (FieldInfo fi in fis) { string column_name = name == null? fi.Name: name + "." + fi.Name; if (fi.FieldType.IsArray) { if (_wscmd.RepeatField == null) // if no RepeatField specified use first Array encountered _wscmd.RepeatField = column_name; GetProperties(column_name, fi.FieldType.GetElementType()); } else GetProperties(column_name, fi.FieldType); } } // Determines if underlying type is a primitive bool IsBaseType(Type t) { foreach (Type bt in BASE_TYPES) { if (bt == t) return true; } return false; } #region IDataReader Members public int RecordsAffected { get { return 0; } } public bool IsClosed { get { return _RowData != null; } } public bool NextResult() { return false; } public void Close() { _RowData = null; // get rid of the data & metadata _ie = null; _Data = null; _Names = null; _Types = null; } public bool Read() { if (_ie == null || !_ie.MoveNext()) return false; _Data = _ie.Current as object[]; return true; } public int Depth { get { return 0; } } public DataTable GetSchemaTable() { // TODO: Add XmlDataReader.GetSchemaTable implementation return null; } #endregion #region IDisposable Members public void Dispose() { this.Close(); } #endregion #region IDataRecord Members public int GetInt32(int i) { return Convert.ToInt32(_Data[i]); } public object this[string name] { get { int ci = this.GetOrdinal(name); return _Data[ci]; } } object System.Data.IDataRecord.this[int i] { get { return _Data[i]; } } public object GetValue(int i) { return _Data[i]; } public bool IsDBNull(int i) { return _Data[i] == null; } public long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length) { throw new NotImplementedException("GetBytes not implemented."); } public byte GetByte(int i) { return Convert.ToByte(_Data[i]); } public Type GetFieldType(int i) { return this._Types[i] as Type; } public decimal GetDecimal(int i) { return Convert.ToDecimal(_Data[i]); } public int GetValues(object[] values) { int i; for (i=0; i < values.Length; i++) { values[i] = i >= _Data.Length? System.DBNull.Value: _Data[i]; } return Math.Min(values.Length, _Data.Length); } public string GetName(int i) { return _Names[i] as string; } public int FieldCount { get { return _Names == null? 0: _Names.Count; } } public long GetInt64(int i) { return Convert.ToInt64(_Data[i]); } public double GetDouble(int i) { return Convert.ToDouble(_Data[i]); } public bool GetBoolean(int i) { return Convert.ToBoolean(_Data[i]); } public Guid GetGuid(int i) { throw new NotImplementedException("GetGuid not implemented."); } public DateTime GetDateTime(int i) { return Convert.ToDateTime(_Data[i]); } public int GetOrdinal(string name) { int ci=0; // do case sensitive lookup foreach (string cname in _Names) { if (cname == name) return ci; ci++; } // do case insensitive lookup ci=0; name = name.ToLower(); foreach (string cname in _Names) { if (cname.ToLower() == name) return ci; ci++; } throw new ArgumentException(string.Format("Column '{0}' not known.", name)); } public string GetDataTypeName(int i) { Type t = _Types[i] as Type; return t.ToString(); } public float GetFloat(int i) { return Convert.ToSingle(_Data[i]); } public IDataReader GetData(int i) { throw new NotImplementedException("GetData not implemented."); } public long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length) { throw new NotImplementedException("GetChars not implemented."); } public string GetString(int i) { return Convert.ToString(_Data[i]); } public char GetChar(int i) { return Convert.ToChar(_Data[i]); } public short GetInt16(int i) { return Convert.ToInt16(_Data[i]); } #endregion } } ================================================ FILE: DataProviders/WebServiceWsdl.cs ================================================ using System; using System.Xml; using System.Data; using System.Collections; #if !NETSTANDARD2_0 && !NET6_0_OR_GREATER using System.Web.Services; using System.Web.Services.Description; using System.Web.Services.Protocols; #endif using System.CodeDom; using System.CodeDom.Compiler; using System.Text; using System.Reflection; using System.IO; using System.Net; using Microsoft.CSharp; using System.Net.Http; using System.Threading.Tasks; namespace Majorsilence.Reporting.Data { /// /// WebServiceWsdl handles generation and caching of Assemblies containing WSDL proxies /// It also will invoke proxies with the proper arguments. These arguments must be /// provided as a WebServiceParameter. /// public class WebServiceWsdl { // Cache the compiled assemblies const string _Namespace = "fyireporting.ws"; static Hashtable _cache = Hashtable.Synchronized(new Hashtable()); string _url; // url for this assembly Assembly _WsdlAssembly; // Assembly ready for invokation static internal WebServiceWsdl GetWebServiceWsdl(string url) { WebServiceWsdl w = _cache[url] as WebServiceWsdl; if (w != null) return w; return new WebServiceWsdl(url); } static public void ClearCache() { _cache.Clear(); } public MethodInfo GetMethodInfo(string service, string operation) { // Create an instance of the service object proxy object o = _WsdlAssembly.CreateInstance(_Namespace + "." + service, false); if (o == null) throw new Exception(string.Format("Unable to create instance of service '{0}'.", service)); // Get information about the method MethodInfo mi = o.GetType().GetMethod(operation); if (mi == null) throw new Exception(string.Format("Unable to find operation '{0}' in service '{1}'.", operation, service)); return mi; } // Invoke the operation for the requested service public object Invoke(string service, string operation, DataParameterCollection dpc, int timeout) { // Create an instance of the service object proxy object o = _WsdlAssembly.CreateInstance(_Namespace + "." + service, false); if (o == null) throw new Exception(string.Format("Unable to create instance of service '{0}'.", service)); // Get information about the method MethodInfo mi = o.GetType().GetMethod(operation); if (mi == null) throw new Exception(string.Format("Unable to find operation '{0}' in service '{1}'.", operation, service)); // Go thru the parameters building up an object array with the proper parameters ParameterInfo[] pis = mi.GetParameters(); object[] args = new object[pis.Length]; int ai=0; foreach (ParameterInfo pi in pis) { BaseDataParameter dp = dpc[pi.Name] as BaseDataParameter; if (dp == null) // retry with '@' in front! dp = dpc["@"+pi.Name] as BaseDataParameter; if (dp == null || dp.Value == null) args[ai] = null; else if (pi.ParameterType == dp.Value.GetType()) args[ai] = dp.Value; else // we need to do conversion args[ai] = Convert.ChangeType(dp.Value, pi.ParameterType); ai++; } #if !NETSTANDARD2_0 && !NET6_0_OR_GREATER SoapHttpClientProtocol so = o as SoapHttpClientProtocol; if (so != null && timeout != 0) so.Timeout = timeout; return mi.Invoke(o, args); #else throw new NotImplementedException("Some classes are not available on .NET STANDARD"); #endif } // constructor private WebServiceWsdl(string url) { _url = url; _WsdlAssembly = GetAssembly(); _cache.Add(url, this); } private Assembly GetAssembly() { #if !NETSTANDARD2_0 && !NET6_0_OR_GREATER ServiceDescription sd=null; // HACK: We need to run the async method synchronously here, but we can't use .Result or .Wait() because it can cause deadlocks. So we use Task.Run to run it on a separate thread and then wait for the result. Task.Run(async()=> sd = await GetServiceDescription()).GetAwaiter().GetResult(); // ServiceDescriptionImporter provide means for generating client proxy classes for XML Web services CodeNamespace cns = new CodeNamespace(_Namespace); ServiceDescriptionImporter sdi = new ServiceDescriptionImporter(); sdi.AddServiceDescription(sd, null, null); sdi.ProtocolName = "Soap"; sdi.Import(cns, null); // Generate the proxy source code CSharpCodeProvider cscp = new CSharpCodeProvider(); StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); cscp.GenerateCodeFromNamespace(cns, sw, null); string proxy = sb.ToString(); sw.Close(); // debug code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // StreamWriter tsw = File.CreateText(@"c:\temp\proxy.cs"); // tsw.Write(proxy); // tsw.Close(); // debug code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // Create Assembly CompilerParameters cp = new CompilerParameters(); cp.ReferencedAssemblies.Add("System.dll"); cp.ReferencedAssemblies.Add("System.Xml.dll"); cp.ReferencedAssemblies.Add("System.Web.Services.dll"); cp.GenerateExecutable = false; cp.GenerateInMemory = false; // just loading into memory causes problems when instantiating cp.IncludeDebugInformation = false; CompilerResults cr = cscp.CompileAssemblyFromSource(cp, proxy); if(cr.Errors.Count > 0) { StringBuilder err = new StringBuilder(string.Format("WSDL proxy compile has {0} error(s).", cr.Errors.Count)); foreach (CompilerError ce in cr.Errors) { err.AppendFormat("\r\n{0} {1}", ce.ErrorNumber, ce.ErrorText); } throw new Exception(err.ToString()); } return Assembly.LoadFrom(cr.PathToAssembly); // We need an assembly loaded from the file system // or instantiation of object complains #else throw new NotImplementedException("Some classes are missing on .NET STANDARD"); #endif } #if !NETSTANDARD2_0 && !NET6_0_OR_GREATER public async Task GetServiceDescription() { ServiceDescription sd = new ServiceDescription(); Stream sr=null; try { sr = await GetStream(); sd = ServiceDescription.Read(sr); } finally { if (sr != null) sr.Close(); } return sd; } #endif async Task GetStream() { string fname = _url; Stream strm = null; if (fname.StartsWith("http:") || fname.StartsWith("file:") || fname.StartsWith("https:")) { using (HttpClient client = new HttpClient()) { client.AddMajorsilenceReportingUserAgent(); HttpResponseMessage response = await client.GetAsync(fname); if (response.IsSuccessStatusCode) { strm = await response.Content.ReadAsStreamAsync(); } else { throw new Exception($"Failed to get response from {fname}. Status code: {response.StatusCode}"); } } } else { strm = new FileStream(fname, System.IO.FileMode.Open, FileAccess.Read); } return strm; } } } ================================================ FILE: DataProviders/XmlCommand.cs ================================================ using System; using System.Xml; using System.Data; using System.Collections; namespace Majorsilence.Reporting.Data { /// /// Summary description for Class1. /// public class XmlCommand : IDbCommand { XmlConnection _xc; // connection we're running under string _cmd; // command to execute // parsed constituents of the command string _Url; // url of the xml file string _RowsXPath; // XPath specifying rows selection ArrayList _ColumnsXPath; // XPath for each column string _Type; // type of request DataParameterCollection _Parameters = new DataParameterCollection(); public XmlCommand(XmlConnection conn) { _xc = conn; } internal string Url { get { // Check to see if "Url" or "@Url" is a parameter IDbDataParameter dp= _Parameters["Url"] as IDbDataParameter; if (dp == null) dp= _Parameters["@Url"] as IDbDataParameter; // Then check to see if the Url value is a parameter? if (dp == null) dp = _Parameters[_Url] as IDbDataParameter; if (dp != null) return dp.Value != null? dp.Value.ToString(): _Url; // don't pass null; pass existing value return _Url; // the value must be a constant } set {_Url = value;} } internal string RowsXPath { get { IDbDataParameter dp= _Parameters["RowsXPath"] as IDbDataParameter; if (dp == null) dp= _Parameters["@RowsXPath"] as IDbDataParameter; // Then check to see if the RowsXPath value is a parameter? if (dp == null) dp = _Parameters[_RowsXPath] as IDbDataParameter; if (dp != null) return dp.Value != null? dp.Value.ToString(): _RowsXPath; // don't pass null; pass existing value return _RowsXPath; // the value must be a constant } set {_RowsXPath = value;} } internal ArrayList ColumnsXPath { get {return _ColumnsXPath;} set {_ColumnsXPath = value;} } internal string Type { get {return _Type;} set {_Type = value;} } #region IDbCommand Members public void Cancel() { throw new NotImplementedException("Cancel not implemented"); } public void Prepare() { return; // Prepare is a noop } public System.Data.CommandType CommandType { get { throw new NotImplementedException("CommandType not implemented"); } set { throw new NotImplementedException("CommandType not implemented"); } } public IDataReader ExecuteReader(System.Data.CommandBehavior behavior) { if (!(behavior == CommandBehavior.SingleResult || behavior == CommandBehavior.SchemaOnly)) throw new ArgumentException("ExecuteReader supports SingleResult and SchemaOnly only."); return new XmlDataReader(behavior, _xc, this); } IDataReader System.Data.IDbCommand.ExecuteReader() { return ExecuteReader(System.Data.CommandBehavior.SingleResult); } public object ExecuteScalar() { throw new NotImplementedException("ExecuteScalar not implemented"); } public int ExecuteNonQuery() { throw new NotImplementedException("ExecuteNonQuery not implemented"); } public int CommandTimeout { get { return 0; } set { throw new NotImplementedException("CommandTimeout not implemented"); } } public IDbDataParameter CreateParameter() { return new XmlDataParameter(); } public IDbConnection Connection { get { return this._xc; } set { throw new NotImplementedException("Setting Connection not implemented"); } } public System.Data.UpdateRowSource UpdatedRowSource { get { throw new NotImplementedException("UpdatedRowSource not implemented"); } set { throw new NotImplementedException("UpdatedRowSource not implemented"); } } public string CommandText { get { return this._cmd; } set { // Parse the command string for keyword value pairs separated by ';' string[] args = value.Split(';'); string url=null; string[] colxpaths=null; string rowsxpath=null; string type="both"; // assume we want both attributes and elements foreach(string arg in args) { string[] param = arg.Trim().Split('='); if (param == null || param.Length != 2) continue; string key = param[0].Trim().ToLower(); string val = param[1]; switch (key) { case "url": case "file": url = val; break; case "rowsxpath": rowsxpath = val; break; case "type": { type = val.Trim().ToLower(); if (!(type == "attributes" || type == "elements" || type == "both")) throw new ArgumentException(string.Format("type '{0}' is invalid. Must be 'attributes', 'elements' or 'both'", val)); break; } case "columnsxpath": // column list is separated by ',' colxpaths = val.Trim().Split(','); break; default: throw new ArgumentException(string.Format("{0} is an unknown parameter key", param[0])); } } // User must specify both the url and the RowsXPath if (url == null) throw new ArgumentException("CommandText requires a 'Url=' parameter."); if (rowsxpath == null) throw new ArgumentException("CommandText requires a 'RowsXPath=' parameter."); _cmd = value; _Url = url; _Type = type; _RowsXPath = rowsxpath; if (colxpaths != null) _ColumnsXPath = new ArrayList(colxpaths); } } public IDataParameterCollection Parameters { get { return _Parameters; } } public IDbTransaction Transaction { get { throw new NotImplementedException("Transaction not implemented"); } set { throw new NotImplementedException("Transaction not implemented"); } } #endregion #region IDisposable Members public void Dispose() { // nothing to dispose of } #endregion } } ================================================ FILE: DataProviders/XmlConnection.cs ================================================ using System; using System.Xml; using System.Data; namespace Majorsilence.Reporting.Data { /// /// XmlConnection handles connections for XML /// public class XmlConnection : IDbConnection { string _Connection; // the connection string; of format directory= bool bOpen=false; public XmlConnection(string conn) { ConnectionString = conn; } internal bool IsOpen { get {return bOpen;} } #region IDbConnection Members public void ChangeDatabase(string databaseName) { throw new NotImplementedException("ChangeDatabase method not supported."); } public IDbTransaction BeginTransaction(System.Data.IsolationLevel il) { throw new NotImplementedException("BeginTransaction method not supported."); } IDbTransaction System.Data.IDbConnection.BeginTransaction() { throw new NotImplementedException("BeginTransaction method not supported."); } public System.Data.ConnectionState State { get { throw new NotImplementedException("State not implemented"); } } public string ConnectionString { get { return _Connection; } set { string c = value; // Now parse the connection string; Array args = c.Split (','); string directory=null; foreach(string arg in args) { if (arg.Trim().ToLower().StartsWith("directory=")) // Only have one type of argument right now directory = arg.Trim().Split('=').GetValue(1) as string; } _Connection = value; } } public IDbCommand CreateCommand() { return new XmlCommand(this); } public void Open() { bOpen = true; } public void Close() { bOpen = false; } public string Database { get { return null; // don't really have a database } } public int ConnectionTimeout { get { return 0; } } #endregion #region IDisposable Members public void Dispose() { this.Close(); } #endregion } } ================================================ FILE: DataProviders/XmlDataParameter.cs ================================================ using System; using System.Xml; using System.Data; namespace Majorsilence.Reporting.Data { /// /// XmlDataParameter /// public class XmlDataParameter : BaseDataParameter { public XmlDataParameter():base() { } } } ================================================ FILE: DataProviders/XmlDataReader.cs ================================================ using System; using System.Xml; using System.Xml.XPath; using System.Data; using System.Collections; using System.Collections.Specialized; using System.IO; namespace Majorsilence.Reporting.Data { /// /// Summary description for XmlDataReader. /// public class XmlDataReader : IDataReader { XmlConnection _xconn; XmlCommand _xcmd; System.Data.CommandBehavior _behavior; // xpath XPathDocument _xpd; // the document XPathNavigator _xpn; // the navigator XPathNodeIterator _xpni; // the main iterator XmlNamespaceManager _nsmgr; // name space manager ListDictionary _NameSpaces; // names spaces used in xml document // column information object[] _Data; // data values of the columns ArrayList _Names; // names of the columns ArrayList _Types; // types of the columns public XmlDataReader(System.Data.CommandBehavior behavior, XmlConnection conn, XmlCommand cmd) { _xconn = conn; _xcmd = cmd; _behavior = behavior; // create an iterator to the selected rows if (_xcmd.Url.Trim() == "") { //Use an empty XML to allow rendering from memory _xpd = new XPathDocument(new StringReader("")); } else { _xpd = new XPathDocument(_xcmd.Url); } _xpn = _xpd.CreateNavigator(); _xpni = _xpn.Select(_xcmd.RowsXPath); // select the rows _NameSpaces = new ListDictionary(); _Names = new ArrayList(); _Types = new ArrayList(); // Now determine the actual structure of the row depending on the command if (_xcmd.ColumnsXPath != null) ColumnsSpecifiedInit(); // xpaths to all columns specified else { _xcmd.ColumnsXPath = new ArrayList(); // xpath of all columns will simply be the name switch (_xcmd.Type) { case "both": ColumnsAttributes(); ColumnsElements(); break; case "attributes": ColumnsAttributes(); break; case "elements": ColumnsElements(); break; } } _Data = new object[_Names.Count]; // allocate enough room for data if (_NameSpaces.Count > 0) { _nsmgr = new XmlNamespaceManager(new NameTable()); foreach (string nsprefix in _NameSpaces.Keys) { _nsmgr.AddNamespace(nsprefix, _NameSpaces[nsprefix] as string); // setup namespaces } } else _nsmgr = null; } void ColumnsAttributes() { //go to the first row to get info XPathNodeIterator temp_xpni = _xpni.Clone(); // temporary iterator for determining columns temp_xpni.MoveNext(); XPathNodeIterator ni = temp_xpni.Current.Select("@*"); // select for attributes while (ni.MoveNext()) { _Types.Add(ni.Current.Value.GetType()); AddName(ni.Current.Name); _xcmd.ColumnsXPath.Add("@" + ni.Current.Name); } } void ColumnsElements() { //go to the first row to get info XPathNodeIterator temp_xpni = _xpni.Clone(); // temporary iterator for determining columns temp_xpni.MoveNext(); XPathNodeIterator ni = temp_xpni.Current.Select("*"); while (ni.MoveNext()) { _Types.Add(ni.Current.Value.GetType()); AddName(ni.Current.Name); _xcmd.ColumnsXPath.Add(ni.Current.Name); if (ni.Current.NamespaceURI != String.Empty && ni.Current.Prefix != String.Empty && _NameSpaces[ni.Current.Prefix] == null) { _NameSpaces.Add(ni.Current.Prefix, ni.Current.NamespaceURI); } } } void ColumnsSpecifiedInit() { XPathNodeIterator temp_xpni = _xpni.Clone(); // temporary iterator for determining columns temp_xpni.MoveNext (); foreach (string colxpath in _xcmd.ColumnsXPath ) { XPathNodeIterator ni = temp_xpni.Current.Select(colxpath); ni.MoveNext (); if (ni.Count < 1) { // didn't get anything in the first row; this is ok because // the element might not exist in the first row. _Types.Add("".GetType()); // assume string AddName(colxpath); // just use the name of the path } else { _Types.Add(ni.Current.Value.GetType()); AddName(ni.Current.Name); } } } // adds name to array; ensure name is unique in the table void AddName(string name) { int ci=0; string wname = name; while (_Names.IndexOf(wname) >= 0) { wname = name + "_" + (++ci).ToString(); } _Names.Add(wname); } #region IDataReader Members public int RecordsAffected { get { return 0; } } public bool IsClosed { get { return _xconn.IsOpen; } } public bool NextResult() { return false; } public void Close() { _xpd = null; _xpn = null; _xpni = null; _Data = null; _Names = null; _Types = null; } public bool Read() { if (!_xpni.MoveNext()) return false; // obtain the data from each column int ci=0; foreach (string colxpath in _xcmd.ColumnsXPath ) { XPathNodeIterator ni; if (_nsmgr == null) ni = _xpni.Current.Select(colxpath); else { XPathExpression xp = _xpni.Current.Compile(colxpath); xp.SetContext(_nsmgr); ni = _xpni.Current.Select(xp); } ni.MoveNext (); _Data[ci++] = ni.Count == 0? null: ni.Current.Value; } return true; } public int Depth { get { // TODO: Add XmlDataReader.Depth getter implementation return 0; } } public DataTable GetSchemaTable() { // TODO: Add XmlDataReader.GetSchemaTable implementation return null; } #endregion #region IDisposable Members public void Dispose() { this.Close(); } #endregion #region IDataRecord Members public int GetInt32(int i) { return Convert.ToInt32(_Data[i]); } public object this[string name] { get { int ci = this.GetOrdinal(name); return _Data[ci]; } } object System.Data.IDataRecord.this[int i] { get { return _Data[i]; } } public object GetValue(int i) { return _Data[i]; } public bool IsDBNull(int i) { return _Data[i] == null; } public long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length) { throw new NotImplementedException("GetBytes not implemented."); } public byte GetByte(int i) { return Convert.ToByte(_Data[i]); } public Type GetFieldType(int i) { return this._Types[i] as Type; } public decimal GetDecimal(int i) { return Convert.ToDecimal(_Data[i]); } public int GetValues(object[] values) { int i; for (i=0; i < values.Length; i++) { values[i] = i >= _Data.Length? System.DBNull.Value: _Data[i]; } return Math.Min(values.Length, _Data.Length); } public string GetName(int i) { return _Names[i] as string; } public int FieldCount { get { return _Data.Length; } } public long GetInt64(int i) { return Convert.ToInt64(_Data[i]); } public double GetDouble(int i) { return Convert.ToDouble(_Data[i]); } public bool GetBoolean(int i) { return Convert.ToBoolean(_Data[i]); } public Guid GetGuid(int i) { throw new NotImplementedException("GetGuid not implemented."); } public DateTime GetDateTime(int i) { return Convert.ToDateTime(_Data[i]); } public int GetOrdinal(string name) { int ci=0; // do case sensitive lookup foreach (string cname in _Names) { if (cname == name) return ci; ci++; } // do case insensitive lookup ci=0; name = name.ToLower(); foreach (string cname in _Names) { if (cname.ToLower() == name) return ci; ci++; } throw new ArgumentException(string.Format("Column '{0}' not known.", name)); } public string GetDataTypeName(int i) { Type t = _Types[i] as Type; return t.ToString(); } public float GetFloat(int i) { return Convert.ToSingle(_Data[i]); } public IDataReader GetData(int i) { throw new NotImplementedException("GetData not implemented."); } public long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length) { throw new NotImplementedException("GetChars not implemented."); } public string GetString(int i) { return Convert.ToString(_Data[i]); } public char GetChar(int i) { return Convert.ToChar(_Data[i]); } public short GetInt16(int i) { return Convert.ToInt16(_Data[i]); } #endregion } } ================================================ FILE: DataProviders/iTunesCommand.cs ================================================ using System; using System.Xml; using System.Data; using System.Collections; namespace Majorsilence.Reporting.Data { /// /// iTunesCommand represents the command. The user is allowed to specify the table needed. /// public class iTunesCommand : IDbCommand { iTunesConnection _xc; // connection we're running under string _cmd; // command to execute // parsed constituents of the command string _Table; // table requested DataParameterCollection _Parameters = new DataParameterCollection(); public iTunesCommand(iTunesConnection conn) { _xc = conn; } internal string Table { get { IDbDataParameter dp= _Parameters["Table"] as IDbDataParameter; if (dp == null) dp= _Parameters["@Table"] as IDbDataParameter; // Then check to see if the Table value is a parameter? if (dp == null) dp = _Parameters[_Table] as IDbDataParameter; if (dp != null) return dp.Value != null? dp.Value.ToString(): _Table; // don't pass null; pass existing value return _Table; // the value must be a constant } set {_Table = value;} } #region IDbCommand Members public void Cancel() { throw new NotImplementedException("Cancel not implemented"); } public void Prepare() { return; // Prepare is a noop } public System.Data.CommandType CommandType { get { throw new NotImplementedException("CommandType not implemented"); } set { throw new NotImplementedException("CommandType not implemented"); } } public IDataReader ExecuteReader(System.Data.CommandBehavior behavior) { if (!(behavior == CommandBehavior.SingleResult || behavior == CommandBehavior.SchemaOnly)) throw new ArgumentException("ExecuteReader supports SingleResult and SchemaOnly only."); return new iTunesDataReader(behavior, _xc, this); } IDataReader System.Data.IDbCommand.ExecuteReader() { return ExecuteReader(System.Data.CommandBehavior.SingleResult); } public object ExecuteScalar() { throw new NotImplementedException("ExecuteScalar not implemented"); } public int ExecuteNonQuery() { throw new NotImplementedException("ExecuteNonQuery not implemented"); } public int CommandTimeout { get { return 0; } set { throw new NotImplementedException("CommandTimeout not implemented"); } } public IDbDataParameter CreateParameter() { return new XmlDataParameter(); } public IDbConnection Connection { get { return this._xc; } set { throw new NotImplementedException("Setting Connection not implemented"); } } public System.Data.UpdateRowSource UpdatedRowSource { get { throw new NotImplementedException("UpdatedRowSource not implemented"); } set { throw new NotImplementedException("UpdatedRowSource not implemented"); } } public string CommandText { get { return this._cmd; } set { // Parse the command string for keyword value pairs separated by ';' string[] args = value.Split(';'); string table=null; foreach(string arg in args) { string[] param = arg.Trim().Split('='); if (param == null || param.Length != 2) continue; string key = param[0].Trim().ToLower(); string val = param[1]; switch (key) { case "table": table = val; break; default: throw new ArgumentException(string.Format("{0} is an unknown parameter key", param[0])); } } // User must specify both the url and the RowsXPath if (table == null) table = "Tracks"; _cmd = value; _Table = table; } } public IDataParameterCollection Parameters { get { return _Parameters; } } public IDbTransaction Transaction { get { throw new NotImplementedException("Transaction not implemented"); } set { throw new NotImplementedException("Transaction not implemented"); } } #endregion #region IDisposable Members public void Dispose() { // nothing to dispose of } #endregion } } ================================================ FILE: DataProviders/iTunesConnection.cs ================================================ using System; using System.Xml; using System.Data; using System.IO; namespace Majorsilence.Reporting.Data { /// /// iTunesConnection handles connections for the iTunes XML file /// public class iTunesConnection : IDbConnection { string _Connection; // the connection string; of format directory= string _File; bool bOpen=false; public iTunesConnection(string conn) { ConnectionString = conn; } internal bool IsOpen { get {return bOpen;} } #region IDbConnection Members public void ChangeDatabase(string databaseName) { throw new NotImplementedException("ChangeDatabase method not supported."); } public IDbTransaction BeginTransaction(System.Data.IsolationLevel il) { throw new NotImplementedException("BeginTransaction method not supported."); } IDbTransaction System.Data.IDbConnection.BeginTransaction() { throw new NotImplementedException("BeginTransaction method not supported."); } public System.Data.ConnectionState State { get { throw new NotImplementedException("State not implemented"); } } public string ConnectionString { get { return _Connection; } set { string c = value; // Now parse the connection string; Array args = c.Split (','); _File=null; foreach(string arg in args) { if (arg.Trim().ToLower().StartsWith("file=")) // Only have one type of argument right now _File = arg.Trim().Split('=').GetValue(1) as string; } _Connection = value; } } public string File { get { if (_File != null) return _File; // Search for the iTunes file; In My Documents/My Music/iTunes/iTunes Music Library.xml string f = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic) + Path.DirectorySeparatorChar + "iTunes" + Path.DirectorySeparatorChar + "iTunes Music Library.xml"; return f; } } public IDbCommand CreateCommand() { return new iTunesCommand(this); } public void Open() { bOpen = true; } public void Close() { bOpen = false; } public string Database { get { return null; // don't really have a database } } public int ConnectionTimeout { get { return 0; } } #endregion #region IDisposable Members public void Dispose() { this.Close(); } #endregion } } ================================================ FILE: DataProviders/iTunesDataParameter.cs ================================================ using System; using System.Xml; using System.Data; namespace Majorsilence.Reporting.Data { /// /// iTunesDataParameter /// public class iTunesDataParameter : BaseDataParameter { public iTunesDataParameter():base() { } } } ================================================ FILE: DataProviders/iTunesDataReader.cs ================================================ using System; using System.Xml; using System.Xml.XPath; using System.Data; using System.Collections; using System.Collections.Specialized; using System.Collections.Generic; namespace Majorsilence.Reporting.Data { /// /// Summary description for iTunesDataReader. /// public class iTunesDataReader : IDataReader { iTunesConnection _xconn; iTunesCommand _xcmd; System.Data.CommandBehavior _behavior; // xpath XPathDocument _xpd; // the document XPathNavigator _xpn; // the navigator XPathNodeIterator _xpni; // the main iterator XmlNamespaceManager _nsmgr; // name space manager ListDictionary _NameSpaces; // names spaces used in xml document // column information object[] _Data; // data values of the columns static readonly string[] _Names = new string[] { "Track_ID", "Name", "Artist", "Composer", "Album", "Album Artist", "Genre", "Category", "Kind", "Size", "Total_Time", "Track_Number", "Year", "Date_Modified", "Date_Added", "Beats_Per_Minute", "Bit_Rate", "Sample_Rate", "Comments", "Skip_Count", "Skip_Date", "Artwork_Count", "Persistent_ID", "Track_Type", "Location", "File_Folder_Count", "Library_Folder_Count", "Has_Video", "Movie", "Play_Count", "Play_Date", "Play_Date_UTC", "Disc_Number", "Disc_Count", "Compilation", "Track_Count" }; // types of all the columns static readonly Type _dttype = DateTime.MinValue.GetType(); // work variable for getting the type static readonly Type _stype = "".GetType(); static readonly Type _btype = true.GetType(); static readonly Type _itype = int.MaxValue.GetType(); static readonly Type _ltype = long.MaxValue.GetType(); static readonly Type _dtype = Double.MinValue.GetType(); static readonly Type[] _Types = new Type[] { /* "Track_ID" */ _itype, /* Name */ _stype, /* Artist */ _stype, /* Composer */ _stype, /* Album */ _stype, /* Album Artist */ _stype, /* Genre */ _stype, /* Category */ _stype, /* Kind */ _stype, /* Size */ _itype, /* Total_Time */ _itype, /* Track_Number */ _itype, /* Year */ _itype, /* Date_Modified */ _dttype, /* Date_Added */ _dttype, /* Beats_Per_Minute */ _itype, /* Bit_Rate */ _itype, /* Sample_Rate */ _itype, /* Comments */ _stype, /* Skip_Count */ _itype, /* Skip_Date */ _dttype, /* Artwork_Count */ _itype, /* Persistent_ID */ _stype, /* Track_Type */ _stype, /* Location */ _stype, /* File_Folder_Count */ _itype, /* Library_Folder_Count */ _itype, /* Has_Video */ _btype, /* Movie */ _btype, /* Play_Count */ _itype, /* Play_Date */ _ltype, /* Play_Date will overflow an integer */ /* Play_Date_UTC */ _dttype, /* Disc_Number */ _itype, /* Disc_Count */ _itype, /* Compilation */ _btype, /* Track_Count */ _itype }; public iTunesDataReader(System.Data.CommandBehavior behavior, iTunesConnection conn, iTunesCommand cmd) { _xconn = conn; _xcmd = cmd; _behavior = behavior; _Data = new object[_Names.Length]; // allocate enough room for data if (behavior == CommandBehavior.SchemaOnly) return; // create an iterator to the selected rows _xpd = new XPathDocument(_xconn.File); _xpn = _xpd.CreateNavigator(); _xpni = _xpn.Select("/plist/dict"); // select the rows _NameSpaces = new ListDictionary(); // Now determine the actual structure of the row depending on the command switch (_xcmd.Table) { case "Tracks": default: _xpni = GetTracksColumns(); break; } if (_NameSpaces.Count > 0) { _nsmgr = new XmlNamespaceManager(new NameTable()); foreach (string nsprefix in _NameSpaces.Keys) { _nsmgr.AddNamespace(nsprefix, _NameSpaces[nsprefix] as string); // setup namespaces } } else _nsmgr = null; } XPathNodeIterator GetTracksColumns() { /* this routine figures out based on first row in file; the problem is not * all rows contain all the fields. Now fields are hard coded. XPathNodeIterator ti = PositionToTracks(); while (ti.MoveNext()) { if (ti.Current.Name != "key") continue; if (AddName(ti.Current.Value)) // when duplicate we've gone too far break; ti.MoveNext(); Type t; switch (ti.Current.Name) { case "integer": t = long.MaxValue.GetType(); break; case "string": t = string.Empty.GetType(); break; case "real": t = Double.MaxValue.GetType(); break; case "true": case "false": t = true.GetType(); break; case "date": t = DateTime.MaxValue.GetType(); break; default: t = string.Empty.GetType(); break; } _Types.Add(t); } _Names.TrimExcess(); // no longer need extra space */ return PositionToTracks(); // return iterator to first row } XPathNodeIterator PositionToTracks() { //go to the first row to get info XPathNodeIterator temp_xpni = _xpni.Clone(); // temporary iterator for determining columns temp_xpni.MoveNext(); XPathNodeIterator ni = temp_xpni.Current.Select("*"); while (ni.MoveNext()) { if (ni.Current.Name != "key") continue; if (ni.Current.Value == "Tracks") { ni.MoveNext(); if (ni.Current.Name != "dict") // next item should be "dict" break; string sel = "dict/*"; XPathNodeIterator ti = ni.Current.Select(sel); return ti; } } return null; } // adds name to array; return true when duplicate //bool AddName(string name) //{ // string wname = name.Replace(' ', '_'); // if (_Names.ContainsKey(wname)) // return true; // _Names.Add(wname, _Names.Count); // return false; //} #region IDataReader Members public int RecordsAffected { get { return 0; } } public bool IsClosed { get { return _xconn.IsOpen; } } public bool NextResult() { return false; } public void Close() { _xpd = null; _xpn = null; _xpni = null; _Data = null; } public bool Read() { if (_xpni == null) return false; XPathNodeIterator ti = _xpni; Hashtable ht = new Hashtable(_Names.Length); // clear out previous values; previous row might have values this row doesn't for (int i = 0; i < _Data.Length; i++) _Data[i] = null; XPathNodeIterator save_ti = ti.Clone(); bool rc = false; while (ti.MoveNext()) { if (ti.Current.Name != "key") continue; string name = ti.Current.Value.Replace(' ', '_'); // we only know we're on the next row when a column repeats if (ht.Contains(name)) { break; } ht.Add(name, name); int ix; try { ix = this.GetOrdinal(name); rc = true; // we know we got at least one column value } catch // this isn't a know column; skip it { ti.MoveNext(); save_ti = ti.Clone(); continue; // but keep trying } ti.MoveNext(); save_ti = ti.Clone(); try { switch (ti.Current.Name) { case "integer": if (_Names[ix] == "Play_Date") // will overflow a long _Data[ix] = ti.Current.ValueAsLong; else _Data[ix] = ti.Current.ValueAsInt; break; case "string": _Data[ix] = ti.Current.Value; break; case "real": _Data[ix] = ti.Current.ValueAsDouble; break; case "true": _Data[ix] = true; break; case "false": _Data[ix] = false; break; case "date": _Data[ix] = ti.Current.ValueAsDateTime; break; default: _Data[ix] = ti.Current.Value; break; } } catch { _Data[ix] = null; } } _xpni = save_ti; return rc; } public int Depth { get { // TODO: Add XmlDataReader.Depth getter implementation return 0; } } public DataTable GetSchemaTable() { // TODO: Add XmlDataReader.GetSchemaTable implementation return null; } #endregion #region IDisposable Members public void Dispose() { this.Close(); } #endregion #region IDataRecord Members public int GetInt32(int i) { return Convert.ToInt32(_Data[i]); } public object this[string name] { get { int ci = this.GetOrdinal(name); return _Data[ci]; } } object System.Data.IDataRecord.this[int i] { get { return _Data[i]; } } public object GetValue(int i) { return _Data[i]; } public bool IsDBNull(int i) { return _Data[i] == null; } public long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length) { throw new NotImplementedException("GetBytes not implemented."); } public byte GetByte(int i) { return Convert.ToByte(_Data[i]); } public Type GetFieldType(int i) { return _Types[i]; } public decimal GetDecimal(int i) { return Convert.ToDecimal(_Data[i]); } public int GetValues(object[] values) { int i; for (i=0; i < values.Length; i++) { values[i] = i >= _Data.Length? System.DBNull.Value: _Data[i]; } return Math.Min(values.Length, _Data.Length); } public string GetName(int i) { return _Names[i]; } public int FieldCount { get { return _Data.Length; } } public long GetInt64(int i) { return Convert.ToInt64(_Data[i]); } public double GetDouble(int i) { return Convert.ToDouble(_Data[i]); } public bool GetBoolean(int i) { return Convert.ToBoolean(_Data[i]); } public Guid GetGuid(int i) { throw new NotImplementedException("GetGuid not implemented."); } public DateTime GetDateTime(int i) { return Convert.ToDateTime(_Data[i]); } public int GetOrdinal(string name) { // do case sensitive lookup int ci = 0; foreach (string cname in _Names) { if (cname == name) return ci; ci++; } // do case insensitive lookup ci=0; foreach (string cname in _Names) { if (string.Compare(cname, name, true) == 0) return ci; ci++; } throw new ArgumentException(string.Format("Column '{0}' not known.", name)); } public string GetDataTypeName(int i) { Type t = _Types[i] as Type; return t.ToString(); } public float GetFloat(int i) { return Convert.ToSingle(_Data[i]); } public IDataReader GetData(int i) { throw new NotImplementedException("GetData not implemented."); } public long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length) { throw new NotImplementedException("GetChars not implemented."); } public string GetString(int i) { return Convert.ToString(_Data[i]); } public char GetChar(int i) { return Convert.ToChar(_Data[i]); } public short GetInt16(int i) { return Convert.ToInt16(_Data[i]); } #endregion } } ================================================ FILE: Directory.Build.props ================================================ DRAWINGCOMPAT True true true https://github.com/majorsilence/My-FyiReporting 5.0.18 5.0.18 5.0.18 true Majorsilence Reporting Copyright © 2004-2008 fyiReporting Software, LLC, Majorsilence Reporting Devs 2026 latest Apache-2.0 true snupkg ================================================ FILE: Directory.Packages.props ================================================ true false all runtime; build; native; contentfiles; analyzers; buildtransitive ================================================ FILE: EncryptionProvider/EncryptionProvider.csproj ================================================ Library true true True EncryptionProvider Majorsilence.Reporting.EncryptionProvider Debug;Release;Debug-DrawingCompat net48;net8.0-windows;net10.0-windows 4014 ================================================ FILE: EncryptionProvider/Prompt.cs ================================================ using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using EncryptionProvider.Properties; namespace EncryptionProvider { public static class Prompt { public static string ShowDialog(string text, string caption) { Form prompt = new Form(); prompt.Width = 500; prompt.Height = 200; prompt.FormBorderStyle = FormBorderStyle.FixedDialog; prompt.Text = caption; Label textLabel = new Label() {Left = 50, Top = 20, Width = 400, Height = 110, Text = text}; TextBox textBox = new TextBox() {Left = 50, Top = 100, Width = 400}; Button confirmation = new Button() { Text = Resources.Prompt_ShowDialog_OK, Left = 350, Width = 100, Top = 120 }; confirmation.Click += (sender, e) => { prompt.Close(); }; prompt.Controls.Add(textBox); prompt.Controls.Add(confirmation); prompt.Controls.Add(textLabel); prompt.AcceptButton = confirmation; prompt.ShowDialog(); prompt.TopMost = true; Screen screen = Screen.FromControl(prompt); Rectangle workingArea = screen.WorkingArea; prompt.Location = new Point() { X = Math.Max(workingArea.X, workingArea.X + (workingArea.Width - prompt.Width) / 2), Y = Math.Max(workingArea.Y, workingArea.Y + (workingArea.Height - prompt.Height) / 3) }; prompt.StartPosition = FormStartPosition.Manual; return textBox.Text; } } } ================================================ FILE: EncryptionProvider/Properties/Resources.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace EncryptionProvider.Properties { using System; /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Resources() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("EncryptionProvider.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } /// /// Looks up a localized string similar to OK. /// internal static string Prompt_ShowDialog_OK { get { return ResourceManager.GetString("Prompt_ShowDialog_OK", resourceCulture); } } } } ================================================ FILE: EncryptionProvider/Properties/Resources.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 OK ================================================ FILE: EncryptionProvider/String/StringEncryption.cs ================================================ using System; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; namespace EncryptionProvider.String { public class StringEncryption { private readonly Random random; private readonly byte[] key; private readonly Aes aes; private readonly UTF8Encoding encoder; public StringEncryption(string pass) { //make sure that the password contains base 64 characters ONLY string codes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; StringBuilder sb = new StringBuilder(); foreach (char c in pass) { if (codes.Contains(c)) { sb.Append(c); } else { sb.Append("+"); } } //make sure that the length of the password is divisible by 4 int padding = sb.Length % 4; if (padding > 0) { for (int i = 4; i > padding; i--) { sb = sb.Append(Convert.ToString(i)); } } this.random = new Random(); this.aes = Aes.Create(); this.encoder = new UTF8Encoding(); this.key = Convert.FromBase64String(sb.ToString()); } public string Encrypt(string unencrypted) { var vector = new byte[16]; this.random.NextBytes(vector); var cryptogram = vector.Concat(this.Encrypt(this.encoder.GetBytes(unencrypted), vector)); return Convert.ToBase64String(cryptogram.ToArray()); } public string Decrypt(string encrypted) { var cryptogram = Convert.FromBase64String(encrypted); if (cryptogram.Length < 17) { throw new ArgumentException("Not a valid encrypted string", "encrypted"); } var vector = cryptogram.Take(16).ToArray(); var buffer = cryptogram.Skip(16).ToArray(); return this.encoder.GetString(this.Decrypt(buffer, vector)); } private byte[] Encrypt(byte[] buffer, byte[] vector) { var encryptor = this.aes.CreateEncryptor(this.key, vector); return this.Transform(buffer, encryptor); } private byte[] Decrypt(byte[] buffer, byte[] vector) { var decryptor = this.aes.CreateDecryptor(this.key, vector); return this.Transform(buffer, decryptor); } private byte[] Transform(byte[] buffer, ICryptoTransform transform) { var stream = new MemoryStream(); using (var cs = new CryptoStream(stream, transform, CryptoStreamMode.Write)) { cs.Write(buffer, 0, buffer.Length); } return stream.ToArray(); } } } ================================================ FILE: Examples/.editorconfig ================================================ # Remove the line below if you want to inherit .editorconfig settings from higher directories root = true # Visual Basic files [*.vb] #### Core EditorConfig Options #### # Indentation and spacing indent_size = 4 indent_style = space tab_width = 4 # New line preferences end_of_line = crlf insert_final_newline = false #### .NET Code Actions #### # Type members dotnet_hide_advanced_members = true dotnet_member_insertion_location = with_other_members_of_the_same_kind dotnet_property_generation_behavior = prefer_throwing_properties # Symbol search dotnet_search_reference_assemblies = true #### .NET Coding Conventions #### # Organize usings dotnet_separate_import_directive_groups = false dotnet_sort_system_directives_first = true file_header_template = unset # this. and Me. preferences dotnet_style_qualification_for_event = false dotnet_style_qualification_for_field = false dotnet_style_qualification_for_method = false dotnet_style_qualification_for_property = false # Language keywords vs BCL types preferences dotnet_style_predefined_type_for_locals_parameters_members = true dotnet_style_predefined_type_for_member_access = true # Parentheses preferences dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity dotnet_style_parentheses_in_other_binary_operators = always_for_clarity dotnet_style_parentheses_in_other_operators = never_if_unnecessary dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity # Modifier preferences dotnet_style_require_accessibility_modifiers = for_non_interface_members # Expression-level preferences dotnet_prefer_system_hash_code = true dotnet_style_coalesce_expression = true dotnet_style_collection_initializer = true dotnet_style_explicit_tuple_names = true dotnet_style_namespace_match_folder = true dotnet_style_null_propagation = true dotnet_style_object_initializer = true dotnet_style_operator_placement_when_wrapping = beginning_of_line dotnet_style_prefer_auto_properties = true dotnet_style_prefer_collection_expression = when_types_loosely_match dotnet_style_prefer_compound_assignment = true dotnet_style_prefer_conditional_expression_over_assignment = true dotnet_style_prefer_conditional_expression_over_return = true dotnet_style_prefer_foreach_explicit_cast_in_source = when_strongly_typed dotnet_style_prefer_inferred_anonymous_type_member_names = true dotnet_style_prefer_inferred_tuple_names = true dotnet_style_prefer_is_null_check_over_reference_equality_method = true dotnet_style_prefer_simplified_boolean_expressions = true dotnet_style_prefer_simplified_interpolation = true # Field preferences dotnet_style_readonly_field = true # Parameter preferences dotnet_code_quality_unused_parameters = all # Suppression preferences dotnet_remove_unnecessary_suppression_exclusions = none # New line preferences dotnet_style_allow_multiple_blank_lines_experimental = true dotnet_style_allow_statement_immediately_after_block_experimental = true #### VB Coding Conventions #### # Modifier preferences visual_basic_preferred_modifier_order = partial,default,private,protected,public,friend,notoverridable,overridable,mustoverride,overloads,overrides,mustinherit,notinheritable,static,shared,shadows,readonly,writeonly,dim,const,withevents,widening,narrowing,custom,async,iterator # Expression-level preferences visual_basic_style_prefer_isnot_expression = true visual_basic_style_prefer_simplified_object_creation = true visual_basic_style_unused_value_assignment_preference = unused_local_variable visual_basic_style_unused_value_expression_statement_preference = unused_local_variable #### Naming styles #### # Naming rules dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion dotnet_naming_rule.types_should_be_pascal_case.symbols = types dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case # Symbol specifications dotnet_naming_symbols.interface.applicable_kinds = interface dotnet_naming_symbols.interface.applicable_accessibilities = public, friend, private, protected, protected_friend, private_protected dotnet_naming_symbols.interface.required_modifiers = dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum dotnet_naming_symbols.types.applicable_accessibilities = public, friend, private, protected, protected_friend, private_protected dotnet_naming_symbols.types.required_modifiers = dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, friend, private, protected, protected_friend, private_protected dotnet_naming_symbols.non_field_members.required_modifiers = # Naming styles dotnet_naming_style.pascal_case.required_prefix = dotnet_naming_style.pascal_case.required_suffix = dotnet_naming_style.pascal_case.word_separator = dotnet_naming_style.pascal_case.capitalization = pascal_case dotnet_naming_style.begins_with_i.required_prefix = I dotnet_naming_style.begins_with_i.required_suffix = dotnet_naming_style.begins_with_i.word_separator = dotnet_naming_style.begins_with_i.capitalization = pascal_case # CA2000: Dispose objects before losing scope #dotnet_diagnostic.CA2000.severity = warning # CA2007: Do not directly await a Task without calling ConfigureAwait #dotnet_diagnostic.CA2007.severity = warning # CA4014: async code not awaited. See https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-messages/cs4014 dotnet_diagnostic.CA4014.severity = error ================================================ FILE: Examples/Designer.xsd ================================================  The following schema for fyiReporting Project RDL describes the extensions to the Report Definition Language (RDL) for defining reports. fyiReporting does not make any representation or warranty regarding the schema or any product or item developed based on the schema. The schema is provided to you on an AS IS basis. fyiReporting disclaims all express, implied and statutory warranties, including but not limited to the implied warranties of merchantability, fitness for a particular purpose, and freedom from infringement. Without limiting the generality of the foregoing, fyiReporting does not make any warranty of any kind that any item developed based on the schema, or any portion of the schema, will not infringe any copyright, patent, trade secret, or other intellectual property right of any person or entity in any country. It is your responsibility to seek licenses for such intellectual property rights where appropriate. FYIREPORTING SHALL NOT BE LIABLE FOR ANY DAMAGES OF ANY KIND ARISING OUT OF OR IN CONNECTION WITH THE USE OF THE SCHEMA, INCLUDING WITHOUT LIMITATION, ANY DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL (INCLUDING ANY LOST PROFITS), PUNITIVE OR SPECIAL DAMAGES, WHETHER OR NOT MICROSOFT HAS BEEN ADVISED OF SUCH DAMAGES. (c) fyiReportin Software, LLC. All rights reserved. ================================================ FILE: Examples/Examples/ChartExampleArea.rdl ================================================ fyiReporting Software, LLC SQL Server=(local)\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5 DS1 Category String Year String Sales Float 0.0pt True True 6 in 5.25 in 7.5 in true RightCenter Column Default =Sum(Fields!Sales.Value) 1 1 true true true <Caption>Categories</Caption> <Style> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> Cross Data Area 12.9pt true <Caption>Sales by Category</Caption> <Style> <WritingMode>rl-tb</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> =Fields!Year.Value =Fields!Category.Value Plain <Caption>Values</Caption> <Style> <WritingMode>tb-rl</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> true true Cross 13.0pt 1 0pt True True 8in 8.5in 11in Report AttributeNormal ================================================ FILE: Examples/Examples/ChartExampleAreaPercentStacked.rdl ================================================ fyiReporting Software, LLC SQL Server=(local)\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5 DS1 Category String Year String Sales Float 0.0pt True True 6 in Year\Category 26.0pt =Fields!Category.Value ="" + Fields!Category.Value + " = "+ Sum(Fields!Sales.Value) Grand Total 86.7pt =Fields!Year.Value =Fields!Year.Value Grand Total 0.25in =sum(Fields!Sales.Value) 1 in 14.4pt 2.2pt This is an Area Percent Stacked chart 378.0pt 540.0pt true BottomCenter Row Default =Sum(Fields!Sales.Value) 1 1 true true true <Caption>Categories</Caption> <Style> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> Cross Data Area 71.9pt true <Caption>Sales by Category</Caption> <Style> <WritingMode>rl-tb</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> =Fields!Year.Value =Fields!Category.Value PercentStacked <Caption>Values</Caption> <Style> <WritingMode>tb-rl</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> true true Cross 15.9pt 1 0pt True True 8in 8.5in 11in Report AttributeNormal ================================================ FILE: Examples/Examples/ChartExampleAreaStacked.rdl ================================================ fyiReporting Software, LLC SQL Server=(local)\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5 DS1 Category String Year String Sales Float 0.0pt True True 6 in Year\Category 24.7pt =Fields!Category.Value ="" + Fields!Category.Value + " = "+ Sum(Fields!Sales.Value) Grand Total 106.3pt =Fields!Year.Value =Fields!Year.Value Grand Total 0.25in =sum(Fields!Sales.Value) 1 in 13.7pt 2.2pt 378.0pt 540.0pt true BottomCenter Row Default =Sum(Fields!Sales.Value) 1 1 true true true <Caption>Categories</Caption> <Style> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> Cross Data Area 66.6pt true <Caption>Sales by Category</Caption> <Style> <WritingMode>rl-tb</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> =Fields!Year.Value =Fields!Category.Value Stacked <Caption>Values</Caption> <Style> <WritingMode>tb-rl</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> true true Cross 13.8pt 1 0pt True True 8in 8.5in 11in Report AttributeNormal ================================================ FILE: Examples/Examples/ChartExampleBar.rdl ================================================ 8.5 in 11 in 1 in fyiReporting Software, LLC SQL Server=(local)\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5 DS1 Category String Year String Sales Float .4 in True True 6 in Year\Category 22.4pt =Fields!Category.Value ="" + Fields!Category.Value + " = "+ Sum(Fields!Sales.Value) Grand Total 86.8pt =Fields!Year.Value =Fields!Year.Value Grand Total 0.25in =sum(Fields!Sales.Value) 1 in 15.9pt 6.9pt http://www.fyireporting.com 382.01pt 680.76pt 13.1pt true BottomCenter Row Excel =Sum(Fields!Sales.Value) true 1 1 true true true <Caption>Categories</Caption> <Style> <WritingMode>tb-rl</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> <VerticalAlign>Middle</VerticalAlign> </Style> Cross Data Bar Plain 75.9pt true <Caption>Sales by Category</Caption> <Style> <WritingMode>rl-tb</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> =Fields!Year.Value =Fields!Category.Value <Caption>Values</Caption> <Style> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> <TextAlign>Center</TextAlign> <VerticalAlign>Middle</VerticalAlign> </Style> true true Cross 1 0pt True True 10in Report AttributeNormal ================================================ FILE: Examples/Examples/ChartExampleBarPercentStacked.rdl ================================================ fyiReporting Software, LLC SQL Server=(local)\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5 DS1 Category String Year String Sales Float 0.0pt True True 6 in Year\Category 20.9pt =Fields!Category.Value ="" + Fields!Category.Value + " = "+ Sum(Fields!Sales.Value) True Grand Total 89.8pt =Fields!Year.Value =Fields!Year.Value Grand Total 0.25in =sum(Fields!Sales.Value) 1 in 8.0pt 2.9pt 378.0pt 540.0pt true BottomCenter Row Excel =Sum(Fields!Sales.Value) true 1 1 true true true <Caption>Categories</Caption> <Style> <WritingMode>tb-rl</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> <VerticalAlign>Middle</VerticalAlign> </Style> Cross Data Bar PercentStacked 62.9pt true <Caption>Sales by Category</Caption> <Style> <WritingMode>rl-tb</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> =Fields!Year.Value =Fields!Category.Value <Caption>Percentage</Caption> <Style> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> <TextAlign>Center</TextAlign> <VerticalAlign>Middle</VerticalAlign> </Style> true true Cross 8.5pt 1 0pt True True 8in 8.5in 11in Report AttributeNormal ================================================ FILE: Examples/Examples/ChartExampleBarStacked.rdl ================================================ fyiReporting Software, LLC SQL Server=(local)\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5 DS1 Category String Year String Sales Float 0.0pt True True 6 in Year\Category 21.6pt =Fields!Category.Value ="" + Fields!Category.Value + " = "+ Sum(Fields!Sales.Value) True Grand Total 82.1pt =Fields!Year.Value =Fields!Year.Value Grand Total 0.25in =sum(Fields!Sales.Value) 1 in 10.4pt 3.0pt 5.25 in 7.5 in true BottomCenter Row Excel =Sum(Fields!Sales.Value) true 1 1 true true true <Caption>Categories</Caption> <Style> <WritingMode>tb-rl</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> <VerticalAlign>Middle</VerticalAlign> </Style> Cross Data Bar Stacked 62.4pt true <Caption>Sales by Category</Caption> <Style> <WritingMode>rl-tb</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> =Fields!Year.Value =Fields!Category.Value <Caption>Sales in Dollars</Caption> <Style> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> <TextAlign>Center</TextAlign> <VerticalAlign>Middle</VerticalAlign> </Style> true true Cross 9.7pt 1 0pt True True 8in 8.5in 11in Report AttributeNormal ================================================ FILE: Examples/Examples/ChartExampleColumn.rdl ================================================ fyiReporting Software, LLC SQL Server=(local)\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5 DS1 Category String Year String Sales Float 0.8pt True True 6 in Year\Category 23.8pt =Fields!Category.Value ="" + Fields!Category.Value + " = "+ Sum(Fields!Sales.Value) Grand Total 89.5pt =Fields!Year.Value =Fields!Year.Value Grand Total 0.25in =sum(Fields!Sales.Value) 1 in 18.6pt 2.2pt 5.25 in 7.5 in true BottomCenter Row Default =Sum(Fields!Sales.Value) 1 1 true true true <Caption>Years</Caption> <Style> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> Cross Data Column 67.1pt true <Caption>Sales by Category</Caption> <Style> <WritingMode>rl-tb</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> =Fields!Year.Value =Fields!Category.Value Plain <Caption>Values</Caption> <Style> <WritingMode>tb-rl</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> true true Cross 16.7pt 1 0pt True True 8in 8.5in 11in Report AttributeNormal ================================================ FILE: Examples/Examples/ChartExampleColumnPercentStacked.rdl ================================================ 8.5in 11in .5in Column Chart fyiReporting Software, LLC xxx Server=(local)\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5 DS1 Category String Year String Sales Float 0.0pt True True 6 in Year\Category 0.25in =Fields!Category.Value ="" + Fields!Category.Value + " = "+ Sum(Fields!Sales.Value) Grand Total 1.25 in =Fields!Year.Value =Fields!Year.Value Grand Total 0.25in =sum(Fields!Sales.Value) 1.5 in 5.1pt 1.5pt 7 in 10 in true BottomCenter Row Default =Sum(Fields!Sales.Value) true 1 1 true true true <Caption>Years</Caption> <Style> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> Cross Data Column 64.8pt true <Caption>Sales by Category</Caption> <Style> <WritingMode>rl-tb</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> =Fields!Year.Value =Fields!Category.Value PercentStacked <Caption>Percentages</Caption> <Style> <WritingMode>tb-rl</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> true true Cross 0.0pt 1 0pt True True 10in Report AttributeNormal ================================================ FILE: Examples/Examples/ChartExampleColumnStacked.rdl ================================================ fyiReporting Software, LLC SQL Server=(local)\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5 DS1 Category String Year String Sales Float 0.0pt True True 6 in Year\Category 22.4pt =Fields!Category.Value ="" + Fields!Category.Value + " = "+ Sum(Fields!Sales.Value) Grand Total 77.1pt =Fields!Year.Value =Fields!Year.Value Grand Total 0.25in =sum(Fields!Sales.Value) 1 in 12.6pt 2.1pt 378.0pt 540.0pt true BottomCenter Row Default =Sum(Fields!Sales.Value) 1 1 true true true <Caption>Years</Caption> <Style> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> Cross Data Column 65.9pt true <Caption>Sales by Category</Caption> <Style> <WritingMode>rl-tb</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> =Fields!Year.Value =Fields!Category.Value Stacked <Caption>Sales</Caption> <Style> <WritingMode>tb-rl</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> true true Cross 7.3pt 1 0pt True True 8in 8.5in 11in Report AttributeNormal ================================================ FILE: Examples/Examples/ChartExampleDoughnut.rdl ================================================ fyiReporting Software, LLC SQL Server=(local)\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5 DS1 Category String Year String Sales Float 0.0pt True True 6 in Year\Category 20.9pt =Fields!Category.Value ="" + Fields!Category.Value + " = "+ Sum(Fields!Sales.Value) True Grand Total 81.5pt =Fields!Year.Value =Fields!Year.Value Grand Total 0.25in =sum(Fields!Sales.Value) 1 in 5.1pt 0.6pt 3.75 in 4.0 in true BottomCenter Row Excel =Sum(Fields!Sales.Value) true 1 1 true true true <Caption>Categories</Caption> <Style> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> <VerticalAlign>Middle</VerticalAlign> </Style> Cross Data Doughnut Plain 66.6pt true <Caption>Sales by Category</Caption> <Style> <WritingMode>rl-tb</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> =Fields!Year.Value =Fields!Category.Value <Caption>Values</Caption> <Style> <WritingMode>tb-rl</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> <TextAlign>Center</TextAlign> <VerticalAlign>Middle</VerticalAlign> </Style> true true Cross 8.1pt 1 0pt True True 8in 8.5in 11in Report AttributeNormal ================================================ FILE: Examples/Examples/ChartExampleLine.rdl ================================================ SQL Server=(local)\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5 DS1 Category String Year String Sales Float 0.0pt True True 6 in Year\Category 20.9pt =Fields!Category.Value ="" + Fields!Category.Value + " = "+ Sum(Fields!Sales.Value) Grand Total 89.5pt =Fields!Year.Value =Fields!Year.Value Grand Total 0.25in =sum(Fields!Sales.Value) 80.0pt 4.4pt 4.3pt 378.0pt 540.0pt true RightCenter Column Excel =Sum(Fields!Sales.Value) 1 1 true true true <Caption>Year</Caption> <Style> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> Cross Data Line Smooth 78.6pt true <Caption>Sales by Category</Caption> <Style> <WritingMode>rl-tb</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> =Fields!Year.Value =Fields!Category.Value <Caption>Sales</Caption> <Style> <WritingMode>tb-rl</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> true true Cross 7.2pt 1 0pt True True 8in 8.5in 11in Report AttributeNormal ================================================ FILE: Examples/Examples/ChartExamplePie.rdl ================================================ SQL Server=(local)\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5 DS1 Category String Year String Sales Float 0.0pt True True 6 in Year\Category 0.25in =Fields!Category.Value ="" + Fields!Category.Value + " = "+ Sum(Fields!Sales.Value) True Grand Total 1 in =Fields!Year.Value =Fields!Year.Value Grand Total 0.25in =sum(Fields!Sales.Value) 1 in 3.6pt 3.6pt 3.75 in 7.5 in true BottomCenter Row =Sum(Fields!Sales.Value) true 1 1 true true true <Caption>Categories</Caption> <Style> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> <VerticalAlign>Middle</VerticalAlign> </Style> Cross Data Pie Exploded 65.1pt true <Caption>Sales by Category</Caption> <Style> <WritingMode>rl-tb</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> </Style> =Fields!Year.Value =Fields!Category.Value <Caption>Values</Caption> <Style> <WritingMode>tb-rl</WritingMode> <FontWeight>Bolder</FontWeight> <FontSize>20pt</FontSize> <FontStyle>Normal</FontStyle> <TextAlign>Center</TextAlign> <VerticalAlign>Middle</VerticalAlign> </Style> true true Cross 13.9pt 1 0pt True True 8in 8.5in 11in Report AttributeNormal ================================================ FILE: Examples/Examples/ChartMap.rdl ================================================ 8.5 in 11 in DS1 Region String State String Year Integer Qtr String Sales Float XValue Float DS1 Region String State String Year Integer Qtr String Sales Float XValue Float New England MA 1993 Q1 50 1 New England MA 1993 Q2 21 1 New England MA 1993 Q3 36 1 New England MA 1993 Q4 42 1 New England MA 1994 Q1 27 1 New England MA 1994 Q2 19 1 New England MA 1994 Q3 10 1 New England MA 1994 Q4 34 1 New England RI 1993 Q1 32 1 New England RI 1993 Q2 28 1 New England RI 1993 Q3 9 1 New England RI 1993 Q4 21 1 New England RI 1994 Q1 20 1 New England RI 1994 Q2 11 1 New England RI 1994 Q3 16 1 New England RI 1994 Q4 47 1 New England CT 1993 Q1 37 1 New England CT 1993 Q2 5 1 New England CT 1993 Q3 48 1 New England CT 1993 Q4 5 1 New England CT 1994 Q1 44 1 New England CT 1994 Q2 7 1 New England CT 1994 Q3 43 1 New England CT 1994 Q4 29 1 New England ME 1993 Q1 31 1 New England ME 1993 Q2 41 1 New England ME 1993 Q3 45 1 New England ME 1993 Q4 24 1 New England ME 1994 Q1 30 1 New England ME 1994 Q2 43 1 New England ME 1994 Q3 27 1 New England ME 1994 Q4 18 1 Central WI 1993 Q1 34 1 Central WI 1993 Q2 6 1 Central WI 1993 Q3 33 1 Central WI 1993 Q4 20 1 Central WI 1994 Q1 16 1 Central WI 1994 Q2 35 1 Central WI 1994 Q3 21 1 Central WI 1994 Q4 35 1 Central MI 1993 Q1 29 1 Central MI 1993 Q2 29 1 Central MI 1993 Q3 22 1 Central MI 1993 Q4 34 1 Central MI 1994 Q1 12 1 Central MI 1994 Q2 20 1 Central MI 1994 Q3 10 1 Central MI 1994 Q4 15 1 Central KS 1993 Q1 30 1 Central KS 1993 Q2 32 1 Central KS 1993 Q3 29 1 Central KS 1993 Q4 13 1 Central KS 1994 Q1 21 1 Central KS 1994 Q2 11 1 Central KS 1994 Q3 50 1 Central KS 1994 Q4 39 1 Central TX 1993 Q1 13 1 Central TX 1993 Q2 9 1 Central TX 1993 Q3 21 1 Central TX 1993 Q4 24 1 Central TX 1994 Q1 15 1 Central TX 1994 Q2 36 1 Central TX 1994 Q3 25 1 Central TX 1994 Q4 11 1 West CA 1993 Q1 22 1 West CA 1993 Q2 13 1 West CA 1993 Q3 35 1 West CA 1993 Q4 18 1 West CA 1994 Q1 25 1 West CA 1994 Q2 28 1 West CA 1994 Q3 49 1 West CA 1994 Q4 7 1 West OR 1993 Q1 8 1 West OR 1993 Q2 24 1 West OR 1993 Q3 37 1 West OR 1993 Q4 32 1 West OR 1994 Q1 36 1 West OR 1994 Q2 10 1 West OR 1994 Q3 26 1 West OR 1994 Q4 18 1 West WA 1993 Q1 26 1 West WA 1993 Q2 15 1 West WA 1993 Q3 44 1 West WA 1993 Q4 22 1 West WA 1994 Q1 48 1 West WA 1994 Q2 30 1 West WA 1994 Q3 24 1 West WA 1994 Q4 25 1 South FL 1993 Q1 35 1 South FL 1993 Q2 16 1 South FL 1993 Q3 5 1 South FL 1993 Q4 35 1 South FL 1994 Q1 32 1 South FL 1994 Q2 5 1 South FL 1994 Q3 6 1 South FL 1994 Q4 28 1 South LA 1993 Q1 39 1 South LA 1993 Q2 42 1 South LA 1993 Q3 39 1 South LA 1993 Q4 28 1 South LA 1994 Q1 39 1 South LA 1994 Q2 40 1 South LA 1994 Q3 41 1 South LA 1994 Q4 9 1 South NC 1993 Q1 25 1 South NC 1993 Q2 37 1 South NC 1993 Q3 16 1 South NC 1993 Q4 40 1 South NC 1994 Q1 40 1 South NC 1994 Q2 45 1 South NC 1994 Q3 29 1 South NC 1994 Q4 27 1 0.0pt True True 386.1pt 364.38pt 528.70pt Data Query returned no rows! Map usa_map =1 True Inside True True <Caption>Region</Caption> <Style> <BorderStyle /> <BorderColor /> <BorderWidth /> </Style> =UCase(Fields!State.Value) =Code.GetRangeColor(Sum(Fields!Sales.Value)) False True Inside True True <Caption>Sales</Caption> <Style> <WritingMode>tb-rl</WritingMode> </Style> false RightCenter <Style> <FontWeight>Bold</FontWeight> <FontSize>32pt</FontSize> <TextAlign>Left</TextAlign> <BorderStyle /> <BorderColor /> <BorderWidth /> </Style> <Caption>United States Sales</Caption> 0.80pt 0.00pt True True DataQuery returned no rows! 25.6pt 27.0pt
12 pt State Sales true
12 pt All true =Sum(Fields!Sales.Value) true
=Fields!State.Value
12 pt =Fields!State.Value true =Sum(Fields!Sales.Value) true
17.2pt368.3pt
65.9pt 23.1pt
11.2pt Sales < 175 false true 12 pt Sales < 200 false 12 pt Sales < 225 false 99 12 pt Sales < 250 12 pt Sales < 275 false 12 pt Sales >= 275 false
557.6pt 90.7pt
1 0pt True True 7in Report AttributeNormal SQL false Public Function GetRangeColor(sum as double) as String dim color as String if sum < 175 Then color = "red" elseif sum < 200 Then color = "#00ff00" elseif sum < 225 Then color = "blue" elseif sum < 250 Then color = "yellow" elseif sum < 275 Then color = "orange" else color = "pink" end if return color End Function
================================================ FILE: Examples/Examples/ChartMapWorld.rdl ================================================ 8.5 in 11 in DS1 Country String Year Integer Qtr String Sales Float USA 1993 Q1 50 USA 1993 Q2 21 Mexico 1993 Q3 36 Canada 1993 Q4 42 Russia 1994 Q1 27 Greenland 1994 Q2 19 Algeria 1994 Q3 10 South Africa 1994 Q4 34 China 1993 Q1 32 China 1993 Q2 28 USA 1993 Q3 9 India 1993 Q4 21 Antarctica 1994 Q1 20 Portugal 1994 Q2 11 Argentina 1994 Q3 16 Mexico 1994 Q4 47 USA 1993 Q1 37 USA 1993 Q2 5 Russia 1993 Q3 48 China 1993 Q4 5 China 1994 Q1 44 India 1994 Q2 7 Mexico 1994 Q3 43 Algeria 1994 Q4 29 Algeria 1993 Q1 31 Algeria 1993 Q2 41 Greenland 1993 Q3 45 Russia 1993 Q4 24 USA 1994 Q1 30 USA 1994 Q2 43 South Africa 1994 Q3 27 South Africa 1994 Q4 18 South Africa 1993 Q1 34 South Africa 1993 Q2 6 South Africa 1993 Q3 33 South Africa 1993 Q4 20 Canada 1994 Q1 16 Canada 1994 Q2 35 Canada 1994 Q3 21 Canada 1994 Q4 35 Canada 1993 Q1 29 Canada 1993 Q2 29 Canada 1993 Q3 22 Canada 1993 Q4 34 Canada 1994 Q1 12 USA 1994 Q2 20 USA 1994 Q3 10 USA 1994 Q4 15 USA 1993 Q1 30 USA 1993 Q2 32 USA 1993 Q3 29 USA 1993 Q4 13 India 1994 Q1 21 India 1994 Q2 11 India 1994 Q3 50 India 1994 Q4 39 India 1993 Q1 13 India 1993 Q2 9 India 1993 Q3 21 India 1993 Q4 24 India 1994 Q1 15 India 1994 Q2 36 China 1994 Q3 25 China 1994 Q4 11 China 1993 Q1 22 China 1993 Q2 13 China 1993 Q3 35 China 1993 Q4 18 China 1994 Q1 25 China 1994 Q2 28 China 1994 Q3 49 Brazil 1994 Q4 7 Brazil 1993 Q1 8 Brazil 1993 Q2 24 Brazil 1993 Q3 37 Brazil 1993 Q4 32 Brazil 1994 Q1 36 Brazil 1994 Q2 10 Brazil 1994 Q3 26 Brazil 1994 Q4 18 Portugal 1993 Q1 26 Portugal 1993 Q2 15 Portugal 1993 Q3 44 Portugal 1993 Q4 22 Portugal 1994 Q1 48 Portugal 1994 Q2 30 Portugal 1994 Q3 24 Portugal 1994 Q4 25 Portugal 1993 Q1 35 Portugal 1993 Q2 16 Canada 1993 Q3 5 Canada 1993 Q4 35 Canada 1994 Q1 32 Canada 1994 Q2 5 Canada 1994 Q3 6 Canada 1994 Q4 28 Canada 1993 Q1 39 Canada 1993 Q2 42 Canada 1993 Q3 39 Canada 1993 Q4 28 Canada 1994 Q1 39 Mexico 1994 Q2 40 Mexico 1994 Q3 41 Mexico 1994 Q4 9 Mexico 1993 Q1 25 Mexico 1993 Q2 37 Mexico 1993 Q3 16 Mexico 1993 Q4 40 Mexico 1994 Q1 40 Mexico 1994 Q2 45 Mexico 1994 Q3 29 Mexico 1994 Q4 27 47.6pt True True 27.78pt 177.59pt World Sales 309.41pt 11.29pt 364.5pt 345.63pt 516.69pt Data Query returned no rows! Map world_map =1 True Inside True True <Caption>Region</Caption> <Style> <BorderStyle /> <BorderColor /> <BorderWidth /> </Style> =Fields!Country.Value =Code.GetRangeColor(Sum(Fields!Sales.Value)) False True Inside True True <Caption>Sales</Caption> <Style> <WritingMode>tb-rl</WritingMode> </Style> false RightCenter <Style> <FontWeight>Bold</FontWeight> <FontSize>1pt</FontSize> <TextAlign>Left</TextAlign> <BorderStyle /> <BorderColor /> <BorderWidth /> </Style> <Caption> </Caption> 0.00pt 0.74pt True True DataQuery returned no rows! 1in 39.3pt
12 pt Country Sales true
12 pt true =Sum(Fields!Sales.Value) true
=Fields!Country.Value
12 pt =Fields!Country.Value true =Sum(Fields!Sales.Value) true
526.9pt5.1pt
44.1pt 22.8pt
12 pt <= 100 true true 12 pt <= 200 12 pt <= 300 12 pt <= 400 12 pt <= 500 12 pt over 500
656.5pt 6.1pt
1 0pt True True 7in Report AttributeNormal SQL false Public Function GetRangeColor(sum as double) as String dim color as String if sum <= 100 Then color = "red" elseif sum <= 200 Then color = "#00ff00" elseif sum <= 300 Then color = "blue" elseif sum <= 400 Then color = "yellow" elseif sum <= 500 Then color = "orange" else color = "pink" end if return color End Function .5in .5in
================================================ FILE: Examples/Examples/ChartTypes.rdl ================================================ 8.5 in 11 in SQL Server=(local)\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5 DS1 Region String State String Year String Qtr String Sales Float New England MA 1993 Q1 50 New England MA 1993 Q2 21 New England MA 1993 Q3 36 New England MA 1993 Q4 42 New England MA 1994 Q1 27 New England MA 1994 Q2 19 New England MA 1994 Q3 10 New England MA 1994 Q4 34 New England RI 1993 Q1 32 New England RI 1993 Q2 28 New England RI 1993 Q3 9 New England RI 1993 Q4 21 New England RI 1994 Q1 20 New England RI 1994 Q2 11 New England RI 1994 Q3 16 New England RI 1994 Q4 47 New England CT 1993 Q1 37 New England CT 1993 Q2 5 New England CT 1993 Q3 48 New England CT 1993 Q4 5 New England CT 1994 Q1 44 New England CT 1994 Q2 7 New England CT 1994 Q3 43 New England CT 1994 Q4 29 New England ME 1993 Q1 31 New England ME 1993 Q2 41 New England ME 1993 Q3 45 New England ME 1993 Q4 24 New England ME 1994 Q1 30 New England ME 1994 Q2 43 New England ME 1994 Q3 27 New England ME 1994 Q4 18 Central WI 1993 Q1 34 Central WI 1993 Q2 6 Central WI 1993 Q3 33 Central WI 1993 Q4 20 Central WI 1994 Q1 16 Central WI 1994 Q2 35 Central WI 1994 Q3 21 Central WI 1994 Q4 35 Central MI 1993 Q1 29 Central MI 1993 Q2 29 Central MI 1993 Q3 22 Central MI 1993 Q4 34 Central MI 1994 Q1 12 Central MI 1994 Q2 20 Central MI 1994 Q3 10 Central MI 1994 Q4 15 Central KS 1993 Q1 30 Central KS 1993 Q2 32 Central KS 1993 Q3 29 Central KS 1993 Q4 13 Central KS 1994 Q1 21 Central KS 1994 Q2 11 Central KS 1994 Q3 50 Central KS 1994 Q4 39 Central TX 1993 Q1 13 Central TX 1993 Q2 9 Central TX 1993 Q3 21 Central TX 1993 Q4 24 Central TX 1994 Q1 15 Central TX 1994 Q2 36 Central TX 1994 Q3 25 Central TX 1994 Q4 11 West CA 1993 Q1 22 West CA 1993 Q2 13 West CA 1993 Q3 35 West CA 1993 Q4 18 West CA 1994 Q1 25 West CA 1994 Q2 28 West CA 1994 Q3 49 West CA 1994 Q4 7 West OR 1993 Q1 8 West OR 1993 Q2 24 West OR 1993 Q3 37 West OR 1993 Q4 32 West OR 1994 Q1 36 West OR 1994 Q2 10 West OR 1994 Q3 26 West OR 1994 Q4 18 West WA 1993 Q1 26 West WA 1993 Q2 15 West WA 1993 Q3 44 West WA 1993 Q4 22 West WA 1994 Q1 48 West WA 1994 Q2 30 West WA 1994 Q3 24 West WA 1994 Q4 25 South FL 1993 Q1 35 South FL 1993 Q2 16 South FL 1993 Q3 5 South FL 1993 Q4 35 South FL 1994 Q1 32 South FL 1994 Q2 5 South FL 1994 Q3 6 South FL 1994 Q4 28 South LA 1993 Q1 39 South LA 1993 Q2 42 South LA 1993 Q3 39 South LA 1993 Q4 28 South LA 1994 Q1 39 South LA 1994 Q2 40 South LA 1994 Q3 41 South LA 1994 Q4 9 South NC 1993 Q1 25 South NC 1993 Q2 37 South NC 1993 Q3 16 South NC 1993 Q4 40 South NC 1994 Q1 40 South NC 1994 Q2 45 South NC 1994 Q3 29 South NC 1994 Q4 27 0.0pt True True 553.6pt Region\Year 12.1pt =Fields!Year.Value ="" + Fields!Year.Value + " = "+ Sum(Fields!Sales.Value) Column Grand Total True 82.1pt =Fields!Region.Value =Fields!Region.Value Grand Total 15.7pt =sum(Fields!Sales.Value) 1 in 40.7pt 450.0pt 144.00pt 288.00pt Data Query returned no rows! Column Plain =Fields!Region.Value True Inside True True <Caption>Region</Caption> <Style> <BorderStyle /> <BorderColor /> <BorderWidth /> </Style> =Fields!Year.Value =Sum(Fields!Sales.Value) True Inside True True <Caption>Sales</Caption> <Style> <WritingMode>tb-rl</WritingMode> </Style> True RightCenter <Style> <FontWeight>Bold</FontWeight> <FontSize>14pt</FontSize> <TextAlign>Center</TextAlign> <BorderStyle /> <BorderColor /> <BorderWidth /> </Style> <Caption>Region Year Chart</Caption> 40.6pt 2.7pt 111.62pt 288.00pt Data Query returned no rows! Area Stacked =Fields!Region.Value True Inside True True <Caption>Region</Caption> <Style> <BorderStyle /> <BorderColor /> <BorderWidth /> </Style> =Fields!Year.Value =Sum(Fields!Sales.Value) True Inside True True <Caption>Sales</Caption> <Style> <WritingMode>tb-rl</WritingMode> </Style> 200 True RightCenter <Style> <FontWeight>Bold</FontWeight> <FontSize>14pt</FontSize> <TextAlign>Center</TextAlign> <BorderStyle /> <BorderColor /> <BorderWidth /> </Style> <Caption>Region Year Chart</Caption> 378.00pt 2.70pt 144.00pt 288.00pt Data Query returned no rows! Bar Plain =Fields!Region.Value True Inside True True <Caption>Region</Caption> <Style> <BorderStyle /> <BorderColor /> <BorderWidth /> <WritingMode>tb-rl</WritingMode> </Style> =Fields!Year.Value =Sum(Fields!Sales.Value) True Inside True True <Caption>Sales</Caption> <Style> <WritingMode>lr-tb</WritingMode> <BorderStyle /> <BorderColor /> <BorderWidth /> </Style> True RightCenter <Style> <FontWeight>Bold</FontWeight> <FontSize>14pt</FontSize> <TextAlign>Center</TextAlign> <BorderStyle /> <BorderColor /> <BorderWidth /> </Style> <Caption>Region Year Chart</Caption> 40.6pt 151.3pt 118.42pt 288.00pt Data Query returned no rows! Line Smooth =Fields!Region.Value True Inside True True <Caption>Region</Caption> <Style> <BorderStyle /> <BorderColor /> <BorderWidth /> </Style> =Fields!Year.Value =Sum(Fields!Sales.Value) True Inside True True <Caption>Sales</Caption> <Style> <WritingMode>tb-rl</WritingMode> </Style> 100 True RightCenter <Style> <FontWeight>Bold</FontWeight> <FontSize>14pt</FontSize> <TextAlign>Center</TextAlign> <BorderStyle /> <BorderColor /> <BorderWidth /> </Style> <Caption>Region Year Chart</Caption> 378.00pt 131.50pt 144.00pt 288.00pt Data Query returned no rows! Pie Plain =Fields!Region.Value True Inside True True <Caption>Region</Caption> <Style> <BorderStyle /> <BorderColor /> <BorderWidth /> </Style> =Fields!Year.Value =Sum(Fields!Sales.Value) True Inside True True <Caption>Sales</Caption> <Style> <WritingMode>tb-rl</WritingMode> </Style> True RightCenter <Style> <FontWeight>Bold</FontWeight> <FontSize>14pt</FontSize> <TextAlign>Center</TextAlign> <BorderStyle /> <BorderColor /> <BorderWidth /> </Style> <Caption>Region Year Chart</Caption> 40.6pt 300.2pt 62.49pt 21.06pt Column 9.70pt 31.20pt 62.49pt 21.06pt Bar 9.70pt 171.69pt 118.21pt 23.31pt Area - Stacked 345.60pt 0.00pt 111.41pt 27.83pt Line - Smooth 341.08pt 130.90pt 62.49pt 21.06pt Pie 9.70pt 313.97pt 62.49pt 21.06pt Matrix 9.7pt 462.5pt 100.90pt 24.06pt Doughnut 344.85pt 261.40pt 113.17pt 288.00pt Data Query returned no rows! Doughnut Plain =Fields!Region.Value True Inside True True <Caption>Region</Caption> <Style> <BorderStyle /> <BorderColor /> <BorderWidth /> </Style> =Fields!Year.Value =Sum(Fields!Sales.Value) True Inside True True <Caption>Sales</Caption> <Style> <WritingMode>tb-rl</WritingMode> </Style> True RightCenter <Style> <FontWeight>Bold</FontWeight> <FontSize>14pt</FontSize> <TextAlign>Center</TextAlign> <BorderStyle /> <BorderColor /> <BorderWidth /> </Style> <Caption>Region Year Chart</Caption> 378.00pt 262.00pt 111.41pt 27.83pt Bubble 341.1pt 386.0pt 157.13pt 281.92pt Data Query returned no rows! true BottomCenter Table false Plain <CategoryAxis> <Axis> <Title> <Caption>Sales</Caption> <Style> <FontWeight>700</FontWeight> </Style> true Outside true true 0 30 30 Simple 50 =Fields!Region.Value + " " + Fields!Year.Value <Caption>Year</Caption> <Style> <FontWeight>700</FontWeight> <WritingMode>tb-rl</WritingMode> <BorderStyle /> <BorderColor /> <BorderWidth /> </Style> true false None 1992 1 true true true 1995 Bubble Default =Sum(Fields!Sales.Value) =Fields!Year.Value =Sum(Fields!Sales.Value) 6pt 378.00pt 384.70pt 1 0pt True True 7in Report AttributeNormal ================================================ FILE: Examples/Examples/Contacts.xml ================================================ Alejandra Camino(91) 745 6200 Alexander Feuer0342-023176 Ana Trujillo(5) 555-4729 Anabela Domingues(11) 555-2167 André Fonseca(11) 555-9482 Ann Devon(171) 555-0297 Annette Roulet61.77.61.10 Antonio Moreno(5) 555-3932 Aria Cruz(11) 555-9857 Art Braunschweiger(307) 555-4680 Bernardo Batista(21) 555-4252 Carine Schmitt40.32.21.21 Carlos González(9) 331-6954 Carlos Hernández(5) 555-1340 Catherine Dewey(02) 201 24 67 Christina Berglund0921-12 34 65 Daniel Tonini30.59.84.10 Diego Roel(91) 555 94 44 Dominique Perrier(1) 47.55.60.10 Eduardo Saavedra(93) 203 4560 Elizabeth Brown(171) 555-2282 Elizabeth Lincoln(604) 555-4729 Felipe Izquierdo(8) 34-56-12 Fran Wilson(503) 555-9573 Francisco Chang(5) 555-3392 Frédérique Citeaux88.60.15.31 Georg Pipps6562-9722 Giovanni Rovelli035-640230 Guillermo Fernández(5) 552-3745 Hanna Moos0621-08460 Hari Kumar(171) 555-1717 Helen Bennett(198) 555-8888 Helvetius Nagy(206) 555-8257 Henriette Pfalzheim0221-0644327 Horst Kloss0372-035188 Howard Snyder(503) 555-7555 Isabel de Castro(1) 356-5634 Jaime Yorres(415) 555-5938 Janete Limeira(21) 555-3412 Janine Labrune40.67.88.88 Jean Fresnière(514) 555-8054 John Steel(509) 555-7969 Jonas Bergulfsen07-98 92 35 Jose Pavarotti(208) 555-8097 José Pedro Freyre(95) 555 82 82 Jytte Petersen31 12 34 56 Karin Josephs0251-031259 Karl Jablonski(206) 555-4112 Laurence Lebihan91.24.45.40 Lino Rodriguez(1) 354-2534 Liu Wong(406) 555-5834 Liz Nixon(503) 555-3612 Lúcia Carvalho(11) 555-1189 Manuel Pereira(2) 283-2951 Maria Anders030-0074321 Maria Larsson0695-34 67 21 Marie Bertrand(1) 42.34.22.66 Mario Pontes(21) 555-0091 Martín Sommer(91) 555 22 82 Martine Rancé20.16.10.16 Mary Saveley78.32.54.86 Matti Karttunen90-224 8858 Maurizio Moroni0522-556721 Michael Holz0897-034214 Miguel Angel Paolino(5) 555-2933 Palle Ibsen86 21 32 43 Paolo Accorti011-4988260 Pascale Cartrain(071) 23 67 22 20 Patricia McKenna2967 542 Patricio Simpson(1) 135-5555 Paul Henriot26.47.15.10 Paula Parente(14) 555-8122 Paula Wilson(505) 555-5939 Pedro Afonso(11) 555-7647 Peter Franken089-0877310 Philip Cramer0555-09876 Pirkko Koskitalo981-443655 Renate Messner069-0245984 Rene Phillips(907) 555-7584 Rita Müller0711-020361 Roland Mendel7675-3425 Sergio Gutiérrez(1) 123-5555 Simon Crowther(171) 555-7733 Sven Ottlieb0241-039123 Thomas Hardy(171) 555-7788 Victoria Ashworth(171) 555-1212 Yang Wang0452-076545 Yoshi Latimer(503) 555-6874 Yoshi Tannamuri(604) 555-3392 Yvonne Moncada(1) 135-5333 Zbyszek Piestrzeniewicz(26) 642-7012 ================================================ FILE: Examples/Examples/DrilldownTest.rdl ================================================ fyiReporting Software, LLC SQL Server=(local)\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5 DS1 SELECT CategoryName, ProductName, ProductSales FROM "Product Sales for 1997" CategoryName ProductName ProductSales .25 in True True 57.1pt
12 pt =Fields!CategoryName.Value =sum(Fields!ProductSales.Value) true
=Fields!CategoryName.Value
1 in 2 in 1 in 1 in
12 pt Category Product Sales Running Sum true
true CatToggle 12 pt =Fields!ProductName.Value =Fields!ProductSales.Value =RunningValue(Fields!ProductSales.Value, sum, CatNameGroup)
12 pt All products =sum(Fields!ProductSales.Value) true
1 0pt True True 8.5in 8.5in 11in Report AttributeNormal
================================================ FILE: Examples/Examples/DrilldownTwoLevel.rdl ================================================ Drilldown with two level Kim SQL Server=(local)\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5 DS1 SELECT CompanyName,Orders.OrderID,OrderDate,ProductName, od.UnitPrice*od.Quantity*(1-od.Discount) as 'Cost' FROM Customers, Orders, "Order Details" od, Products WHERE Customers.CustomerID = Orders.CustomerID and Orders.OrderID = od.OrderID and od.ProductID = Products.ProductID CompanyName OrderID OrderDate ProductName Cost 0.0pt True True 78.6pt 1 in .75 in 1.5 in 2 in .5 in
12 pt =Fields!CompanyName.Value 5 true
=Fields!CompanyName.Value
true CmpToggle
12 pt =Fields!OrderID.Value =Fields!OrderDate.Value true
=Fields!OrderID.Value
12 pt Company OrderID OrderDate ProductName Cost true
true OrdToggle 12 pt =Fields!ProductName.Value =Fields!Cost.Value
5.8pt3.3pt
1 0pt True True 8in 8.5in 11in Report AttributeNormal
================================================ FILE: Examples/Examples/EmployeeOrg.rdl ================================================ 27.4pt 0.375in 4in true Employee Organization Chart true true 0.75in28trueEmployee Name 7 true Level 6 true Employees MgrIDGroup Salary
0.25in 2 true =First(Fields!EmployeeName.Value) 1 true =Level("OrgChart_Recursive") + 1 true =Count(Fields!EmployeeID.Value, "OrgChart_Recursive", Recursive) =Sum(Fields!Salary.Value, "OrgChart_Recursive", Recursive) =Fields!EmployeeID.Value =Fields!ManagerID.Value =Fields!EmployeeName.Value Ascending
EmployeesAndManagers0.325in
0.25in 5 true 4 true 3 true
2in 1in 1in 1in
181.1pt 62.5pt 1.5in 87.9pt 82.5pt 31.9pt 38.7pt 36.1pt 58.9pt 284.1pt
12 pt Name False Size False CreationTime False LastAccessTime False LastWriteTime False ID False ParentID False IsDirectory False Extension False FullName False true
12 pt =Fields!Name.Value False =Fields!Size.Value False =Fields!CreationTime.Value False =Fields!LastAccessTime.Value False =Fields!LastWriteTime.Value False =Fields!ID.Value False =Fields!ParentID.Value False =Fields!IsDirectory.Value False =Fields!Extension.Value False =Fields!FullName.Value False False False =Fields!ID.Value =Fields!ParentID.Value
36pt 1 14 pt 1 pt 10 pt 12 pt 3in =Globals!PageNumber.Value + ' of ' + Globals!TotalPages.Value False True True 0pt True True Report AttributeNormal String c:\fyiReporting False False Enter a Directory String *.rdl False False Enter a file search pattern (e.g. *.rdl) String * False False Enter a directory pattern (e.g *)
================================================ FILE: Examples/Examples/FinancialFunctions.rdl ================================================ SQL Server=(local)\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5 DS1 Work String a 6 in 3.25 in 1 in
12 pt Expression Result true
12 pt String.Format("{0}...{1}", "a1", "a2") false =String.Format("{0}...{1}", "a1", "a2") false 12 pt Math.Sqrt(10) false =Math.Sqrt(10) false 12 pt FV(.005, 10, -200, -500, false)=2581.4 false =Financial.FV(.005, 10, -200, -500, false) false 12 pt FV(.01, 12, -1000, 0, true)=12682.5 false =Financial.FV(.01, 12, -1000, 0, true) false 12 pt FV(.11/12, 35, -2000, 0, false)=82846.25 false =Financial.FV(.11/12, 35, -2000, 0, false) false 12 pt FV(.005, 12, -100, -1000, false)=2301.4 false =Financial.FV(.005, 12, -100, -1000, false) false 12 pt SLN(30000, 7500, 10) false =Financial.SLN(30000, 7500,10) false 12 pt SYD(30000, 7500, 10, 1) false =Financial.SYD(30000, 7500,10,1) false 12 pt DDB(2400,300,3650,1)=1.32 false =Financial.DDB(2400,300,3650,1) false 12 pt DDB(2400,300,120,1,2)=40 false =Financial.DDB(2400,300,120,1,2) false 12 pt DDB(2400,300,10,1,2)=480 false =Financial.DDB(2400,300,10,1,2) false 12 pt DDB(2400,300,10,2,1.5)=306 false =Financial.DDB(2400,300,10,2,Convert.ToDouble(1.5)) false 12 pt DDB(2400,300,10,10)=22.12 false =Financial.DDB(2400,300,10,10) false 12 pt PV(0.08/12,12*20,500,0,true)=-59777.15 false =Financial.PV(0.08/12,Convert.ToInt32(12*20),500,0,true) false 12 pt Pmt(0.08/12,10,10000,0,true)=-1037.03 false =Financial.Pmt(0.08/12,10,10000,0,true) false 12 pt Pmt(0.08/12,10,10000,0,false)=-1030.16 false =Financial.Pmt(0.08/12,10,10000,0,false) false 12 pt Pmt(0.12/12,5,-5000,0,true)=-1030.20 false =Financial.Pmt(0.12/12,5,-5000,0,true) false 12 pt Pmt(0.06/12,18*12,0,50000,true)=-129.08 false =Financial.Pmt(0.06/12,216,0,50000,true) false 12 pt NPer(.12/12,-100,-1000, 10000, false)=59.67386567 false =Financial.NPer(.12/12,-100,-1000, 10000, false) false 12 pt NPer(.01, -100, 1000, 0, true)=10.5886444594232 false =Financial.NPer(.01, -100, 1000, 0, true) false 12 pt Rate(48, -200, 8000, 0, true, .1/1)=.0077 false =Financial.Rate(48, -200, 8000, 0, true, .1/1) false 12 pt Rate(12, -200, 8000, 0, true, .1/1)=-0.1494855 false =Financial.Rate(12, -200, 8000, 0, true, .1/1) false 12 pt Choose(2,"a", "b", "c") false =Choose(2,"a", "b", "c") false 12 pt Switch(1=2,"a", 2=2,"b",3=3, "c") false =Switch(1=2,"a", 2=2,"b",3=3, "c") false 12 pt IPmt(.1/12,1,36,8000,0,true)=-66.67 false =Financial.IPmt(.1/12,1,36,8000,0,true) false 12 pt IPmt(.1,3,3,8000,0,true)=-292.45 false =Financial.IPmt(.1,3,3,8000,0,true) false
1 0pt True True 0pt True True 8in 8.5in 11in Report AttributeNormal
================================================ FILE: Examples/Examples/ListReport.rdl ================================================ This is the very first report Kim A, Sheffield SQL Server=(local)\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5 DS1 Select EmployeeID, LastName, FirstName from Employees EmployeeID LastName FirstName 31.7pt 20.4pt 320.1pt List Report Showing Absolute Positioning 31.5pt 5.25pt True True 96.9pt 0 in .5 in 1 in .25 in Employee ID http://www.fyireporting.com 0 in 1.5 in 1 in .25 in Last Name .25 in 2.5 in 1 in .25 in First Name -- .75 in .5 in 0 in .5 in 1 in .25 in =Fields!EmployeeID.Value 0 in 1.5 in 1 in .25 in =Fields!LastName.Value ="http://www.google.com/search?q=" + Fields!LastName.Value 0 in 2.5 in 1 in .25 in =Fields!FirstName.Value .25 in .5 in 2 in .25 in =Fields!FirstName.Value+" "+Fields!LastName.Value 1 0pt True True 8in 8.5in 11in Report AttributeNormal ================================================ FILE: Examples/Examples/MatrixExample.rdl ================================================ 8.5 in 11 in SQL Server=(local)\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5 DS1 Region String State String Year String Qtr String Sales Float New England MA 1993 Q1 50 New England MA 1993 Q2 21 New England MA 1993 Q3 36 New England MA 1993 Q4 42 New England MA 1994 Q1 27 New England MA 1994 Q2 19 New England MA 1994 Q3 10 New England MA 1994 Q4 34 New England RI 1993 Q1 32 New England RI 1993 Q2 28 New England RI 1993 Q3 9 New England RI 1993 Q4 21 New England RI 1994 Q1 20 New England RI 1994 Q2 11 New England RI 1994 Q3 16 New England RI 1994 Q4 47 New England CT 1993 Q1 37 New England CT 1993 Q2 5 New England CT 1993 Q3 48 New England CT 1993 Q4 5 New England CT 1994 Q1 44 New England CT 1994 Q2 7 New England CT 1994 Q3 43 New England CT 1994 Q4 29 New England ME 1993 Q1 31 New England ME 1993 Q2 41 New England ME 1993 Q3 45 New England ME 1993 Q4 24 New England ME 1994 Q1 30 New England ME 1994 Q2 43 New England ME 1994 Q3 27 New England ME 1994 Q4 18 Central WI 1993 Q1 34 Central WI 1993 Q2 6 Central WI 1993 Q3 33 Central WI 1993 Q4 20 Central WI 1994 Q1 16 Central WI 1994 Q2 35 Central WI 1994 Q3 21 Central WI 1994 Q4 35 Central MI 1993 Q1 29 Central MI 1993 Q2 29 Central MI 1993 Q3 22 Central MI 1993 Q4 34 Central MI 1994 Q1 12 Central MI 1994 Q2 20 Central MI 1994 Q3 10 Central MI 1994 Q4 15 Central KS 1993 Q1 30 Central KS 1993 Q2 32 Central KS 1993 Q3 29 Central KS 1993 Q4 13 Central KS 1994 Q1 21 Central KS 1994 Q2 11 Central KS 1994 Q3 50 Central KS 1994 Q4 39 Central TX 1993 Q1 13 Central TX 1993 Q2 9 Central TX 1993 Q3 21 Central TX 1993 Q4 24 Central TX 1994 Q1 15 Central TX 1994 Q2 36 Central TX 1994 Q3 25 Central TX 1994 Q4 11 West CA 1993 Q1 22 West CA 1993 Q2 13 West CA 1993 Q3 35 West CA 1993 Q4 18 West CA 1994 Q1 25 West CA 1994 Q2 28 West CA 1994 Q3 49 West CA 1994 Q4 7 West OR 1993 Q1 8 West OR 1993 Q2 24 West OR 1993 Q3 37 West OR 1993 Q4 32 West OR 1994 Q1 36 West OR 1994 Q2 10 West OR 1994 Q3 26 West OR 1994 Q4 18 West WA 1993 Q1 26 West WA 1993 Q2 15 West WA 1993 Q3 44 West WA 1993 Q4 22 West WA 1994 Q1 48 West WA 1994 Q2 30 West WA 1994 Q3 24 West WA 1994 Q4 25 South FL 1993 Q1 35 South FL 1993 Q2 16 South FL 1993 Q3 5 South FL 1993 Q4 35 South FL 1994 Q1 32 South FL 1994 Q2 5 South FL 1994 Q3 6 South FL 1994 Q4 28 South LA 1993 Q1 39 South LA 1993 Q2 42 South LA 1993 Q3 39 South LA 1993 Q4 28 South LA 1994 Q1 39 South LA 1994 Q2 40 South LA 1994 Q3 41 South LA 1994 Q4 9 South NC 1993 Q1 25 South NC 1993 Q2 37 South NC 1993 Q3 16 South NC 1993 Q4 40 South NC 1994 Q1 40 South NC 1994 Q2 45 South NC 1994 Q3 29 South NC 1994 Q4 27 0.7pt True True 6 in Region\Year 24.5pt =Fields!Year.Value ="" + Fields!Year.Value + " = "+ Sum(Fields!Sales.Value) Column Grand Total 1 in =Fields!Region.Value =Fields!Region.Value Grand Total 0.25in =sum(Fields!Sales.Value) 1 in 7.1pt 4.7pt ="Total: " + sum(Fields!Sales.Value) 23.8pt =Fields!Year.Value =Fields!Year.Value ="Total= " + sum(Fields!Sales.Value) True 22.0pt =Fields!Qtr.Value =Fields!Qtr.Value Total 1 in =Fields!Region.Value =Fields!Region.Value =" Total " + sum(Fields!Sales.Value) True 1 in =Fields!State.Value =Fields!State.Value Total 0.25in =sum(Fields!Sales.Value) 45.7pt 17.8pt 87.2pt 1 0pt True True 11in Report AttributeNormal ================================================ FILE: Examples/Examples/MatrixStaticTest.rdl ================================================ 11in 43.5in iAnywhere.NET Data Source=ASA 9.0 Sample;UID=DBA;PWD=SQL 7.5in .25in .25in .25in .25in DS1 SELECT year, quarter, code, amount FROM "fin_data" year System.String quarter System.String code System.String amount System.Decimal 1999 Q1 e1 101 1999 Q1 e2 403 1999 Q1 e3 1437 1999 Q1 e4 623 1999 Q1 e5 381 1999 Q1 r1 1023 1999 Q1 r2 234 1999 Q2 e1 93 1999 Q2 e2 459 1999 Q2 e3 2033 1999 Q2 e4 784 1999 Q2 e5 402 1999 Q2 r1 2033 1999 Q2 r2 459 1999 Q3 e1 129 1999 Q3 e2 609 1999 Q3 e3 2184 1999 Q3 e4 856 1999 Q3 e5 412 1999 Q3 r1 2998 1999 Q3 r2 601 1999 Q4 e1 145 1999 Q4 e2 632 1999 Q4 e3 2145 1999 Q4 e4 1043 1999 Q4 e5 467 1999 Q4 r1 3014 1999 Q4 r2 944 2000 Q1 e1 153 2000 Q1 e2 643 2000 Q1 e3 2478 2000 Q1 e4 1051 2000 Q1 e5 523 2000 Q1 r1 3114 2000 Q1 r2 992 2000 Q2 e1 149 2000 Q2 e2 687 2000 Q2 e3 2998 2000 Q2 e4 1158 2000 Q2 e5 749 2000 Q2 r1 3998 2000 Q2 r2 1195 2000 Q3 e1 157 2000 Q3 e2 898 2000 Q3 e3 3702 2000 Q3 e4 1459 2000 Q3 e5 723 2000 Q3 r1 6523 2000 Q3 r2 1704 2000 Q4 e1 163 2000 Q4 e2 923 2000 Q4 e3 3600 2000 Q4 e4 1439 2000 Q4 e5 748 2000 Q4 r1 7267 2000 Q4 r2 1823 2001 Q1 e1 198 2001 Q1 e2 921 2001 Q1 e3 4139 2001 Q1 e4 1462 2001 Q1 e5 798 2001 Q1 r1 9144 2001 Q1 r2 1839 2001 Q2 e1 204 2001 Q2 e2 975 2001 Q2 e3 4500 2001 Q2 e4 1472 2001 Q2 e5 983 2001 Q2 r1 10988 2001 Q2 r2 2011 2001 Q3 e1 214 2001 Q3 e2 984 2001 Q3 e3 4532 2001 Q3 e4 1439 2001 Q3 e5 956 2001 Q3 r1 13567 2001 Q3 r2 2897 2001 Q4 e1 231 2001 Q4 e2 982 2001 Q4 e3 5298 2001 Q4 e4 1498 2001 Q4 e5 963 2001 Q4 r1 15199 2001 Q4 r2 4129 71.1pt Year/Qtr Data Query returned no rows! 14.2pt =Fields!quarter.Value =Fields!quarter.Value Quarter Total 15.8pt 5 true Sum Amount 4 true % of Column 58.2pt =Fields!year.Value =Fields!year.Value Total 71.5pt 64.3pt 12pt =Sum(Fields!amount.Value) =Sum(Fields!amount.Value)/Sum(Fields!amount.Value, "DynamicColumnsGroup1") 0.0pt 0.0pt 1 14 pt 1 pt 10 pt 12 pt 3in =Globals!PageNumber.Value + ' of ' + Globals!TotalPages.Value true true 0pt true true Report AttributeNormal ================================================ FILE: Examples/Examples/MatrixTest.rdl ================================================ 8.5 in 11 in SQL Server=(local)\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5 DS1 SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued, ct.CategoryID, CategoryName, Description, s.SupplierID, s.CompanyName FROM Products p, Categories ct, Suppliers s WHERE ct.CategoryID = p.CategoryID and s.SupplierID = p.SupplierID ProductID ProductName QuantityPerUnit UnitPrice UnitsInStock UnitsOnOrder ReorderLevel Discontinued CategoryID CategoryName Description SupplierID CompanyName 8.7pt True True 6 in 0.25in =Fields!CategoryName.Value =Fields!CategoryName.Value True Column Grand Total True 1.5 in =Fields!CompanyName.Value =Fields!CompanyName.Value True Grand Total 0.25in =count(Fields!SupplierID.Value) 1 in 1 0pt True True 11in Report AttributeNormal ================================================ FILE: Examples/Examples/RssShort.rdl ================================================ RSS Reporting 5in 5.2in 5.2in .1in .1in .1in .1in DS1 Url=http://rss.news.yahoo.com/rss/us;RowsXPath=rss/channel/item;ColumnsXPath=title,link,pubDate,description,../title,../copyright,../image/url,../image/width,../image/height,../link =Parameters!RSSFeed.Value title link pubDate description title_1 copyright url width height link_1 NullDS Name Url US News http://rss.news.yahoo.com/rss/us Nasa http://rss.news.yahoo.com/rss/nasashuttle Business http://rss.news.yahoo.com/rss/business DataQuery returned no rows! 179.6pt 173.8pt
12 pt =First(Fields!title_1.Value, "Data") =Globals!ExecutionTime.Value true
14.1pt =Fields!title.Value true =Fields!link.Value ="Time " + Fields!pubDate.Value 2
3.6pt35.5pt
14.30pt 258.97pt =First(Fields!copyright.Value, "Data") 2.9pt 64.5pt 31.07pt 194.54pt 2.13pt 0.00pt External =First(Fields!url.Value, "Data") =First(Fields!link_main.Value, "Data")
80.1pt 1 0.0pt True True 0pt True True Report AttributeNormal XML false SQL false String http://rss.news.yahoo.com/rss/business False False Pick your RSS Feed RSSFeeds Url Name
================================================ FILE: Examples/Examples/SalesData.xml ================================================ Component2002525 Clothing2004227 Bike2002892 Clothing2004487 Bike2004873 Clothing2002782 Bike2002848 Bike2002402 Bike2003245 Clothing2004897 Component2002273 Component2002652 Bike2002408 Clothing2004881 Clothing2004448 Component2003500 Component2002220 Bike2004806 Component2002798 Clothing2004953 Bike2003685 Clothing2004470 Clothing2003265 Component2003775 Bike2003773 Bike2004706 Component2004777 Component2002231 Clothing2002415 Bike2004868 Clothing2003781 Bike2004887 Component2002310 Clothing2002633 Clothing2004789 Component2004533 Clothing2004510 Clothing2002380 Clothing2003567 Clothing2004439 Bike2004927 Bike2002287 Bike2003900 Clothing2003474 Clothing2002455 Clothing2002228 Component2002828 Clothing2002442 Clothing2004323 Clothing2004684 Component2004339 Clothing2002329 Bike2002619 Bike2003326 Clothing2002246 Clothing2003651 Bike2004744 Clothing2003911 Clothing2004649 Component2003743 Bike2002870 Bike2002664 ================================================ FILE: Examples/Examples/Suppliers.rdl ================================================ 8.5 in 11 in Suppliers List for My Company Alfred P. Sloan MySuppliers ElementNormal SQL Server=(local)\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5 DS1 SELECT SupplierID, CompanyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country, Phone, Fax, HomePage FROM Suppliers SupplierID CompanyName ContactName ContactTitle Address City Region PostalCode Country Phone Fax HomePage 6.0pt True True 31.1pt supplierssupplier 1 in 1 in 1 in 1 in 1 in 1 in 1 in 1 in 1 in 1 in 1 in 1 in
12 pt SupplierID CompanyName ContactName ContactTitle Address City Region PostalCode Country Phone Fax HomePage true
12 pt =Fields!SupplierID.Value =Fields!CompanyName.Value =Fields!ContactName.Value =Fields!ContactTitle.Value =Fields!Address.Value =Fields!City.Value =Fields!Region.Value =Fields!PostalCode.Value =Fields!Country.Value =Fields!Phone.Value =Fields!Fax.Value =Fields!HomePage.Value
1 0pt True True 11in
================================================ FILE: Examples/Examples/SuppliersStyled.rdl ================================================ 8.5 in 11 in Suppliers List for My Company Alfred P. Sloan MySuppliers ElementNormal SQL Server=(local)\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5 DS1 SELECT SupplierID, CompanyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country, Phone, Fax, HomePage FROM Suppliers SupplierID CompanyName ContactName ContactTitle Address City Region PostalCode Country Phone Fax HomePage 0.0pt True True 33.7pt True supplierssupplier 1 in 1 in 1 in 1 in 1 in 1 in 1 in 1 in 1 in 1 in 1 in 1 in
12 pt SupplierID CompanyName ContactName ContactTitle Address City Region PostalCode Country Phone Fax HomePage true
12 pt =Fields!SupplierID.Value =Fields!CompanyName.Value =Fields!ContactName.Value =Fields!ContactTitle.Value =Fields!Address.Value =Fields!City.Value =Fields!Region.Value =Fields!PostalCode.Value =Fields!Country.Value =Fields!Phone.Value =Fields!Fax.Value =Fields!HomePage.Value
1 0pt True True 11in
================================================ FILE: Examples/Examples/TableThreeColumns.rdl ================================================ 0.25in 1.25intrue=Fields!ContactName.Value true =Fields!Phone.Value
.25 in 1.125 in 1 in 1 in 1 in 1.375 in 1.125 in 1.25 in 1.75 in 1 in 1 in 1.125 in 1.75 in 1.375 in 1 in 1 in
12 pt Continent Code Name Region SurfaceArea IndepYear Population LifeExpectancy GNP GNPOld LocalName GovernmentForm HeadOfState Capital Code2 true
12 pt 15 =Fields.Continent.Value true
12 pt =Count(Fields!Name.Value) false =Sum(Fields!SurfaceArea.Value) false =Sum(Fields!Population.Value) false
=Fields!Continent.Value
12 pt =Fields!Code.Value true =Fields!Name.Value true =Fields!Region.Value true =Fields!SurfaceArea.Value false =iif(Fields!IndepYear.Value >= 0, Fields!IndepYear.Value + " AD", -Fields!IndepYear.Value + " BC") false =Fields!Population.Value false =Fields!LifeExpectancy.Value false =Fields!GNP.Value false =Fields!GNPOld.Value false =Fields!LocalName.Value true =Fields!GovernmentForm.Value true =Fields!HeadOfState.Value true =Fields!Capital.Value false =Fields!Code2.Value true
12 pt =Count(Fields!Name.Value) false =Sum(Fields!SurfaceArea.Value) false =Sum(Fields!Population.Value) false
84pt 1 14 pt 1 pt 10 pt 12 pt ='Page ' + Globals!PageNumber.Value + ' of ' + Globals!TotalPages.Value True True 0pt True True 7in Integer 0 False False Enter a minimum population Report AttributeNormal
================================================ FILE: Examples/Examples/TextProviderTest.rdl ================================================ 11in 8.5in Text 7.5in .25in .25in .25in .25in DS1 Url=c:\temp\todo.csv;Header=yes Category Importance Description DataQuery returned no rows! 1in 63.8pt 426.4pt
12 pt Category Description 2 true
12 pt 3 =Fields.Category.Value true
=Fields!Category.Value
12 pt =Fields!Importance.Value true =Fields!Description.Value true 2
72pt 14 pt 1 pt 10 pt 12 pt 3in =Globals!PageNumber.Value + ' of ' + Globals!TotalPages.Value 0pt
================================================ FILE: Examples/Examples/ThreeColumns.rdl ================================================ 0.25in Data 1 false =Fields!Phone.Value 115.8pt 144.00pt 15.99pt 0.0pt 116.18pt True =Fields!ContactName.Value 15.17pt 0.00pt 0.00pt =Fields!ContactName.Value Ascending 12.44pt 124.11pt =Last(ReportItems!ContactName) 460.1pt 0.0pt 0pt True True 8.5in 4in Report AttributeNormal ================================================ FILE: Examples/Examples/WebLogHitCount.rdl ================================================ 8.5in 11in WebLog 10in .25in .25in .25in .25in DS1 Url=c:\temp\access103105.log;Domain=www.fyireporting.com;IndexFile=index.html host client_identifier user datetime request_cmd request_url request_type request_parameters status_code bytes referrer user_agent cookie DataQuery returned no rows! 397.7pt 60.8pt 112.4pt
12 pt URL False Hit Count False Bytes Downloaded true
False False =Fields!request_url.Value
False .2in =Fields!request_url.Value =Count(Fields!request_url.Value) =Sum(Fields!bytes.Value)/1024
.2in =Count(Fields!request_url.Value) =Sum(Fields!bytes.Value)/1024
47.1pt 1 0.0pt True True 0pt True True Report AttributeNormal
================================================ FILE: Examples/Examples/WorldFacts.rdl ================================================ Worlds Facts - test data from MySQL World database fyiReporting Software, LLC ElementNormal .4in .4in .5in .5in xxx dsn=world;UID=uuu;PWD=ppp; DS1 Code String Name String Continent String Region String Population Float IndependenceYear Float SurfaceArea Float .5 in .1 in .1 in .25 in The World's Countries True True 64.4pt RowRows .75 in .5 in 2.5 in 1 in 1 in 1 in 1 in
12 pt Continent Code Name Region Population Independence Surface Area true
12 pt 7 =Fields.Continent.Value true
12 pt 7 ="Count of countries in " + Fields.Continent.Value + " = " +Count(Fields.Name.Value)
=Fields!Continent.Value
=Fields!Name.Value 12 pt =Fields!Code.Value true =Fields!Name.Value true =Fields!Region.Value =Fields!Population.Value =switch(Fields!IndependenceYear.Value = 0, "", Fields!IndependenceYear.Value > 0, Fields!IndependenceYear.Value, true, -Fields!IndependenceYear.Value + " BC") =Fields!SurfaceArea.Value
12 pt 4 =CountDistinct(Fields.Continent.Value) + " continents. " + Count(Fields.Name.Value)+ " countries." 1 =Sum(Fields.Population.Value) 1 1 =Sum(Fields.SurfaceArea.Value)
1 0pt True True 7in 8.5in 11in Report
================================================ FILE: Examples/Examples/WorldFacts.xml ================================================ DZAAfricaAlgeriaNorthern Africa31,471,00019622,381,741 AGOAfricaAngolaCentral Africa12,878,00019751,246,700 BENAfricaBeninWestern Africa6,097,0001960112,622 BWAAfricaBotswanaSouthern Africa1,622,0001966581,730 IOTAfricaBritish Indian Ocean TerritoryEastern Africa0000078 BFAAfricaBurkina FasoWestern Africa11,937,0001960274,000 BDIAfricaBurundiEastern Africa6,695,000196227,834 CMRAfricaCameroonCentral Africa15,085,0001960475,442 CPVAfricaCape VerdeWestern Africa428,00019754,033 CAFAfricaCentral African RepublicCentral Africa3,615,0001960622,984 TCDAfricaChadCentral Africa7,651,00019601,284,000 COMAfricaComorosEastern Africa578,00019751,862 COGAfricaCongoCentral Africa2,943,0001960342,000 CODAfricaCongo, The Democratic Republic of theCentral Africa51,654,00019602,344,858 CIVAfricaCôte d’IvoireWestern Africa14,786,0001960322,463 DJIAfricaDjiboutiEastern Africa638,000197723,200 EGYAfricaEgyptNorthern Africa68,470,00019221,001,449 GNQAfricaEquatorial GuineaCentral Africa453,000196828,051 ERIAfricaEritreaEastern Africa3,850,0001993117,600 ETHAfricaEthiopiaEastern Africa62,565,000-10001,104,300 GABAfricaGabonCentral Africa1,226,0001960267,668 GMBAfricaGambiaWestern Africa1,305,000196511,295 GHAAfricaGhanaWestern Africa20,212,0001957238,533 GINAfricaGuineaWestern Africa7,430,0001958245,857 GNBAfricaGuinea-BissauWestern Africa1,213,000197436,125 KENAfricaKenyaEastern Africa30,080,0001963580,367 LSOAfricaLesothoSouthern Africa2,153,000196630,355 LBRAfricaLiberiaWestern Africa3,154,0001847111,369 LBYAfricaLibyan Arab JamahiriyaNorthern Africa5,605,00019511,759,540 MDGAfricaMadagascarEastern Africa15,942,0001960587,041 MWIAfricaMalawiEastern Africa10,925,0001964118,484 MLIAfricaMaliWestern Africa11,234,00019601,240,192 MRTAfricaMauritaniaWestern Africa2,670,00019601,025,520 MUSAfricaMauritiusEastern Africa1,158,00019682,040 MYTAfricaMayotteEastern Africa149,0000000373 MARAfricaMoroccoNorthern Africa28,351,0001956446,550 MOZAfricaMozambiqueEastern Africa19,680,0001975801,590 NAMAfricaNamibiaSouthern Africa1,726,0001990824,292 NERAfricaNigerWestern Africa10,730,00019601,267,000 NGAAfricaNigeriaWestern Africa111,506,0001960923,768 REUAfricaRéunionEastern Africa699,00000002,510 RWAAfricaRwandaEastern Africa7,733,000196226,338 SHNAfricaSaint HelenaWestern Africa6,0000000314 STPAfricaSao Tome and PrincipeCentral Africa147,0001975964 SENAfricaSenegalWestern Africa9,481,0001960196,722 SYCAfricaSeychellesEastern Africa77,0001976455 SLEAfricaSierra LeoneWestern Africa4,854,000196171,740 SOMAfricaSomaliaEastern Africa10,097,0001960637,657 ZAFAfricaSouth AfricaSouthern Africa40,377,00019101,221,037 SDNAfricaSudanNorthern Africa29,490,00019562,505,813 SWZAfricaSwazilandSouthern Africa1,008,000196817,364 TZAAfricaTanzaniaEastern Africa33,517,0001961883,749 TGOAfricaTogoWestern Africa4,629,000196056,785 TUNAfricaTunisiaNorthern Africa9,586,0001956163,610 UGAAfricaUgandaEastern Africa21,778,0001962241,038 ESHAfricaWestern SaharaNorthern Africa293,0000000266,000 ZMBAfricaZambiaEastern Africa9,169,0001964752,618 ZWEAfricaZimbabweEastern Africa11,669,0001980390,757 ATAAntarcticaAntarcticaAntarctica0000013,120,000 BVTAntarcticaBouvet IslandAntarctica0000059 ATFAntarcticaFrench Southern territoriesAntarctica000007,780 HMDAntarcticaHeard Island and McDonald IslandsAntarctica00000359 SGSAntarcticaSouth Georgia and the South Sandwich IslandsAntarctica000003,903 AFGAsiaAfghanistanSouthern and Central Asia22,720,0001919652,090 ARMAsiaArmeniaMiddle East3,520,000199129,800 AZEAsiaAzerbaijanMiddle East7,734,000199186,600 BHRAsiaBahrainMiddle East617,0001971694 BGDAsiaBangladeshSouthern and Central Asia129,155,0001971143,998 BTNAsiaBhutanSouthern and Central Asia2,124,000191047,000 BRNAsiaBruneiSoutheast Asia328,00019845,765 KHMAsiaCambodiaSoutheast Asia11,168,0001953181,035 CHNAsiaChinaEastern Asia1,277,558,000-15239,572,900 CYPAsiaCyprusMiddle East754,70019609,251 TMPAsiaEast TimorSoutheast Asia885,000000014,874 GEOAsiaGeorgiaMiddle East4,968,000199169,700 HKGAsiaHong KongEastern Asia6,782,00000001,075 INDAsiaIndiaSouthern and Central Asia1,013,662,00019473,287,263 IDNAsiaIndonesiaSoutheast Asia212,107,00019451,904,569 IRNAsiaIranSouthern and Central Asia67,702,00019061,648,195 IRQAsiaIraqMiddle East23,115,0001932438,317 ISRAsiaIsraelMiddle East6,217,000194821,056 JPNAsiaJapanEastern Asia126,714,000-0660377,829 JORAsiaJordanMiddle East5,083,000194688,946 KAZAsiaKazakstanSouthern and Central Asia16,223,00019912,724,900 KWTAsiaKuwaitMiddle East1,972,000196117,818 KGZAsiaKyrgyzstanSouthern and Central Asia4,699,0001991199,900 LAOAsiaLaosSoutheast Asia5,433,0001953236,800 LBNAsiaLebanonMiddle East3,282,000194110,400 MACAsiaMacaoEastern Asia473,000000018 MYSAsiaMalaysiaSoutheast Asia22,244,0001957329,758 MDVAsiaMaldivesSouthern and Central Asia286,0001965298 MNGAsiaMongoliaEastern Asia2,662,00019211,566,500 MMRAsiaMyanmarSoutheast Asia45,611,0001948676,578 NPLAsiaNepalSouthern and Central Asia23,930,0001769147,181 PRKAsiaNorth KoreaEastern Asia24,039,0001948120,538 OMNAsiaOmanMiddle East2,542,0001951309,500 PAKAsiaPakistanSouthern and Central Asia156,483,0001947796,095 PSEAsiaPalestineMiddle East3,101,00000006,257 PHLAsiaPhilippinesSoutheast Asia75,967,0001946300,000 QATAsiaQatarMiddle East599,000197111,000 SAUAsiaSaudi ArabiaMiddle East21,607,00019322,149,690 SGPAsiaSingaporeSoutheast Asia3,567,0001965618 KORAsiaSouth KoreaEastern Asia46,844,000194899,434 LKAAsiaSri LankaSouthern and Central Asia18,827,000194865,610 SYRAsiaSyriaMiddle East16,125,0001941185,180 TWNAsiaTaiwanEastern Asia22,256,000194536,188 TJKAsiaTajikistanSouthern and Central Asia6,188,0001991143,100 THAAsiaThailandSoutheast Asia61,399,0001350513,115 TURAsiaTurkeyMiddle East66,591,0001923774,815 TKMAsiaTurkmenistanSouthern and Central Asia4,459,0001991488,100 AREAsiaUnited Arab EmiratesMiddle East2,441,000197183,600 UZBAsiaUzbekistanSouthern and Central Asia24,318,0001991447,400 VNMAsiaVietnamSoutheast Asia79,832,0001945331,689 YEMAsiaYemenMiddle East18,112,0001918527,968 ALBEuropeAlbaniaSouthern Europe3,401,200191228,748 ANDEuropeAndorraSouthern Europe78,0001278468 AUTEuropeAustriaWestern Europe8,091,800191883,859 BLREuropeBelarusEastern Europe10,236,0001991207,600 BELEuropeBelgiumWestern Europe10,239,000183030,518 BIHEuropeBosnia and HerzegovinaSouthern Europe3,972,000199251,197 BGREuropeBulgariaEastern Europe8,190,9001908110,994 HRVEuropeCroatiaSouthern Europe4,473,000199156,538 CZEEuropeCzech RepublicEastern Europe10,278,100199378,866 DNKEuropeDenmarkNordic Countries5,330,000080043,094 ESTEuropeEstoniaBaltic Countries1,439,200199145,227 FROEuropeFaroe IslandsNordic Countries43,00000001,399 FINEuropeFinlandNordic Countries5,171,3001917338,145 FRAEuropeFranceWestern Europe59,225,7000843551,500 DEUEuropeGermanyWestern Europe82,164,7001955357,022 GIBEuropeGibraltarSouthern Europe25,00000006 GRCEuropeGreeceSouthern Europe10,545,7001830131,626 VATEuropeHoly See (Vatican City State)Southern Europe1,00019290 HUNEuropeHungaryEastern Europe10,043,200191893,030 ISLEuropeIcelandNordic Countries279,0001944103,000 IRLEuropeIrelandBritish Islands3,775,100192170,273 ITAEuropeItalySouthern Europe57,680,0001861301,316 LVAEuropeLatviaBaltic Countries2,424,200199164,589 LIEEuropeLiechtensteinWestern Europe32,3001806160 LTUEuropeLithuaniaBaltic Countries3,698,500199165,301 LUXEuropeLuxembourgWestern Europe435,70018672,586 MKDEuropeMacedoniaSouthern Europe2,024,000199125,713 MLTEuropeMaltaSouthern Europe380,2001964316 MDAEuropeMoldovaEastern Europe4,380,000199133,851 MCOEuropeMonacoWestern Europe34,00018612 NLDEuropeNetherlandsWestern Europe15,864,000158141,526 NOREuropeNorwayNordic Countries4,478,5001905323,877 POLEuropePolandEastern Europe38,653,6001918323,250 PRTEuropePortugalSouthern Europe9,997,600114391,982 ROMEuropeRomaniaEastern Europe22,455,5001878238,391 RUSEuropeRussian FederationEastern Europe146,934,000199117,075,400 SMREuropeSan MarinoSouthern Europe27,000088561 SVKEuropeSlovakiaEastern Europe5,398,700199349,012 SVNEuropeSloveniaSouthern Europe1,987,800199120,256 ESPEuropeSpainSouthern Europe39,441,7001492505,992 SJMEuropeSvalbard and Jan MayenNordic Countries3,200000062,422 SWEEuropeSwedenNordic Countries8,861,4000836449,964 CHEEuropeSwitzerlandWestern Europe7,160,400149941,284 UKREuropeUkraineEastern Europe50,456,0001991603,700 GBREuropeUnited KingdomBritish Islands59,623,4001066242,900 YUGEuropeYugoslaviaSouthern Europe10,640,0001918102,173 AIANorth AmericaAnguillaCaribbean8,000000096 ATGNorth AmericaAntigua and BarbudaCaribbean68,0001981442 ABWNorth AmericaArubaCaribbean103,0000000193 BHSNorth AmericaBahamasCaribbean307,000197313,878 BRBNorth AmericaBarbadosCaribbean270,0001966430 BLZNorth AmericaBelizeCentral America241,000198122,696 BMUNorth AmericaBermudaNorth America65,000000053 CANNorth AmericaCanadaNorth America31,147,00018679,970,610 CYMNorth AmericaCayman IslandsCaribbean38,0000000264 CRINorth AmericaCosta RicaCentral America4,023,000182151,100 CUBNorth AmericaCubaCaribbean11,201,0001902110,861 DMANorth AmericaDominicaCaribbean71,0001978751 DOMNorth AmericaDominican RepublicCaribbean8,495,000184448,511 SLVNorth AmericaEl SalvadorCentral America6,276,000184121,041 GRLNorth AmericaGreenlandNorth America56,00000002,166,090 GRDNorth AmericaGrenadaCaribbean94,0001974344 GLPNorth AmericaGuadeloupeCaribbean456,00000001,705 GTMNorth AmericaGuatemalaCentral America11,385,0001821108,889 HTINorth AmericaHaitiCaribbean8,222,000180427,750 HNDNorth AmericaHondurasCentral America6,485,0001838112,088 JAMNorth AmericaJamaicaCaribbean2,583,000196210,990 MTQNorth AmericaMartiniqueCaribbean395,00000001,102 MEXNorth AmericaMexicoCentral America98,881,00018101,958,201 MSRNorth AmericaMontserratCaribbean11,0000000102 ANTNorth AmericaNetherlands AntillesCaribbean217,0000000800 NICNorth AmericaNicaraguaCentral America5,074,0001838130,000 PANNorth AmericaPanamaCentral America2,856,000190375,517 PRINorth AmericaPuerto RicoCaribbean3,869,00000008,875 KNANorth AmericaSaint Kitts and NevisCaribbean38,0001983261 LCANorth AmericaSaint LuciaCaribbean154,0001979622 SPMNorth AmericaSaint Pierre and MiquelonNorth America7,0000000242 VCTNorth AmericaSaint Vincent and the GrenadinesCaribbean114,0001979388 TTONorth AmericaTrinidad and TobagoCaribbean1,295,00019625,130 TCANorth AmericaTurks and Caicos IslandsCaribbean17,0000000430 USANorth AmericaUnited StatesNorth America278,357,00017769,363,520 VGBNorth AmericaVirgin Islands, BritishCaribbean21,0000000151 VIRNorth AmericaVirgin Islands, U.S.Caribbean93,0000000347 ASMOceaniaAmerican SamoaPolynesia68,0000000199 AUSOceaniaAustraliaAustralia and New Zealand18,886,00019017,741,220 CXROceaniaChristmas IslandAustralia and New Zealand2,5000000135 CCKOceaniaCocos (Keeling) IslandsAustralia and New Zealand600000014 COKOceaniaCook IslandsPolynesia20,0000000236 FJIOceaniaFiji IslandsMelanesia817,000197018,274 PYFOceaniaFrench PolynesiaPolynesia235,00000004,000 GUMOceaniaGuamMicronesia168,0000000549 KIROceaniaKiribatiMicronesia83,0001979726 MHLOceaniaMarshall IslandsMicronesia64,0001990181 FSMOceaniaMicronesia, Federated States ofMicronesia119,0001990702 NRUOceaniaNauruMicronesia12,000196821 NCLOceaniaNew CaledoniaMelanesia214,000000018,575 NZLOceaniaNew ZealandAustralia and New Zealand3,862,0001907270,534 NIUOceaniaNiuePolynesia2,0000000260 NFKOceaniaNorfolk IslandAustralia and New Zealand2,000000036 MNPOceaniaNorthern Mariana IslandsMicronesia78,0000000464 PLWOceaniaPalauMicronesia19,0001994459 PNGOceaniaPapua New GuineaMelanesia4,807,0001975462,840 PCNOceaniaPitcairnPolynesia50000049 WSMOceaniaSamoaPolynesia180,00019622,831 SLBOceaniaSolomon IslandsMelanesia444,000197828,896 TKLOceaniaTokelauPolynesia2,000000012 TONOceaniaTongaPolynesia99,0001970650 TUVOceaniaTuvaluPolynesia12,000197826 UMIOceaniaUnited States Minor Outlying IslandsMicronesia/Caribbean0000016 VUTOceaniaVanuatuMelanesia190,000198012,189 WLFOceaniaWallis and FutunaPolynesia15,0000000200 ARGSouth AmericaArgentinaSouth America37,032,00018162,780,400 BOLSouth AmericaBoliviaSouth America8,329,00018251,098,581 BRASouth AmericaBrazilSouth America170,115,00018228,547,403 CHLSouth AmericaChileSouth America15,211,0001810756,626 COLSouth AmericaColombiaSouth America42,321,00018101,138,914 ECUSouth AmericaEcuadorSouth America12,646,0001822283,561 FLKSouth AmericaFalkland IslandsSouth America2,000000012,173 GUFSouth AmericaFrench GuianaSouth America181,000000090,000 GUYSouth AmericaGuyanaSouth America861,0001966214,969 PRYSouth AmericaParaguaySouth America5,496,0001811406,752 PERSouth AmericaPeruSouth America25,662,00018211,285,216 SURSouth AmericaSurinameSouth America417,0001975163,265 URYSouth AmericaUruguaySouth America3,337,0001828175,016 VENSouth AmericaVenezuelaSouth America24,170,0001811912,050 ================================================ FILE: Examples/Examples/WorldFactsQueryArgs.rdl ================================================ Worlds Facts - test data from MySQL World database fyiReporting Software, LLC ElementNormal .4in .4in .5in .5in ODBC dsn=world;UID=root;PWD=anydaynow; DS1 SELECT DISTINCT Continent, Continent as "DContinent" FROM Country UNION SELECT "^*", "All" From Country Continent String DContinent String Africa Africa Antarctica Antarctica Asia Asia Europe Europe Oceania Oceania South America South America North America North America ^* All DS1 SELECT Code, Name, Continent, Region, Population, IndepYear, SurfaceArea FROM Country Code String Name String Continent String Region String Population Float IndepYear Float SurfaceArea Float =Fields!Continent Like =Parameters!Continent =Fields!Population GreaterThanOrEqual =Parameters!Population .5 in 7.2pt 0.0pt 17.62pt ="Countries = " + Parameters!Continent.Label + " Population >= " + Parameters!Population.Label 384.72pt 7.20pt 396.0pt 17.3pt =Globals!ExecutionTime 116.0pt 7.20pt 518.2pt 18.8pt =Globals!PageNumber + " of " + Globals!TotalPages 52.2pt True True DataRowRows .75 in .5 in 2.5 in 1 in 1 in 1 in 1 in
12 pt Continent Code Name Region Population Independence Surface Area true
12 pt 7 =Fields.Continent.Value true
12 pt 7 ="Count of countries in " + Fields.Continent.Value + " = " +Count(Fields.Name.Value)
=Fields!Continent.Value
=Fields!Name.Value 12 pt =Fields!Code.Value true =Fields!Name.Value true =Fields!Region.Value =Fields!Population.Value =switch(Fields!IndependenceYear.Value = 0, "", Fields!IndependenceYear.Value > 0, Fields!IndependenceYear.Value, true, -Fields!IndependenceYear.Value + " BC") =Fields!SurfaceArea.Value
12 pt 4 =CountDistinct(Fields.Continent.Value) + " continents. " + Count(Fields.Name.Value)+ " countries." 1 =Sum(Fields.Population.Value) 1 1 =Sum(Fields.SurfaceArea.Value)
66.3pt 1 0pt True True 8.5in 8.5 in 11 in String ^* Continents Continent DContinent False False Please provide a continent Integer 0 False False Specify minimum population of country wanted Report
================================================ FILE: Examples/Examples/iTunes.rdl ================================================ 8.5in 47in iTunes 46.5in .25in .25in .25in .25in DS1 Track_ID System.Int32 Name System.String Artist System.String Composer System.String Album System.String Album Artist System.String Genre System.String Category System.String Kind System.String Size System.Int32 Total_Time System.Int32 Track_Number System.Int32 Year System.Int32 Date_Modified System.DateTime Date_Added System.DateTime Beats_Per_Minute System.Int32 Bit_Rate System.Int32 Sample_Rate System.Int32 Comments System.String Skip_Count System.Int32 Skip_Date System.DateTime Artwork_Count System.Int32 Persistent_ID System.String Track_Type System.String Location System.String File_Folder_Count System.Int32 Library_Folder_Count System.Int32 Has_Video System.Boolean Movie System.Boolean Play_Count System.Int32 Play_Date System.Int64 Play_Date_UTC System.DateTime Disc_Number System.Int32 Disc_Count System.Int32 Compilation System.Boolean Track_Count System.Int32 DataQuery returned no rows! 1in 1in 106.3pt 1in 139.8pt 1in 1in 1in 1in 1.25in 1.5in 1in 1.625in 1.25in 2in 1in 1.375in 1in 1.25in 1.125in 1.625in 1.625in 1.25in 1in 2.125in 2.5in 1.125in 1in 1.25in 1.125in 1.625in 1.375in 1.25in 1.375in 1.375in
12 pt Track_ID false Name false Artist false Composer false Album false Genre false Category false Kind false Size false Total_Time false Track_Number false Year false Date_Modified false Date_Added false Beats_Per_Minute false Bit_Rate false Sample_Rate false Comments false Skip_Count false Skip_Date false Artwork_Count false Persistent_ID false Track_Type false Location false File_Folder_Count false Library_Folder_Count false Has_Video false Movie false Play_Count false Play_Date false Play_Date_UTC false Disc_Number false Disc_Count false Compilation false Track_Count false true
12 pt =Fields!Track_ID.Value false =Fields!Name.Value false =Fields!Artist.Value false =Fields!Composer.Value false =Fields!Album.Value false =Fields!Genre.Value false =Fields!Category.Value false =Fields!Kind.Value false =Fields!Size.Value false =Fields!Total_Time.Value false =Fields!Track_Number.Value false =Fields!Year.Value false =Fields!Date_Modified.Value false =Fields!Date_Added.Value false =Fields!Beats_Per_Minute.Value false =Fields!Bit_Rate.Value false =Fields!Sample_Rate.Value false =Fields!Comments.Value false =Fields!Skip_Count.Value false =Fields!Skip_Date.Value false =Fields!Artwork_Count.Value false =Fields!Persistent_ID.Value false =Fields!Track_Type.Value false =Fields!Location.Value false =Fields!File_Folder_Count.Value false =Fields!Library_Folder_Count.Value false =Fields!Has_Video.Value false =Fields!Movie.Value false =Fields!Play_Count.Value false =Fields!Play_Date.Value false =Fields!Play_Date_UTC.Value false =Fields!Disc_Number.Value false =Fields!Disc_Count.Value false =Fields!Compilation.Value false =Fields!Track_Count.Value false
36pt 14 pt 1 pt 10 pt 12 pt 3in =Globals!PageNumber.Value + ' of ' + Globals!TotalPages.Value false 0pt
================================================ FILE: Examples/Examples.416/HIDERIGA_ON_COMMAND.rdl ================================================ 11in 8.5in 7.5in .25in .25in .25in .25in 33.9pt true true 114.3pt DSQuery returned no rows! 140.5pt 142.1pt
12.0pt VALORE true
18pt ={VALORE} true 8.8pt ----------------------------------------------------------------------------- true 2 =iIF(UCase({?RIGAPRESENTE})='S',False,True)
41.9pt13.5pt
.2in
1 148.4pt 1pt 10pt 12pt 3in =Globals!PageNumber + ' of ' + Globals!TotalPages true true false XML VALORE System.String Report AttributeNormal String false false false RIGA PRESENTE 1 ?
================================================ FILE: Examples/Examples.416/HIDERIGA_ON_COMMAND.xml ================================================ A B C D ================================================ FILE: Examples/Examples.416/STAMPA_TABELLONE_RADIO_CON_DATI.RDL ================================================ turni di un anno alberti 8.3in 11.7in 18.0in 0.5in 0.25in 0.25in 0.25in DS1 CBASEGIORNI1 System.String CBASETURNI1 System.String CBASECOLORE1 System.Int32 CBASEGIORNI2 System.String CBASETURNI2 System.String CBASECOLORE2 System.Int32 CBASEGIORNI3 System.String CBASETURNI3 System.String CBASECOLORE3 System.Int32 CBASEGIORNI4 System.String CBASETURNI4 System.String CBASECOLORE4 System.Int32 CBASEGIORNI5 System.String CBASETURNI5 System.String CBASECOLORE5 System.Int32 CBASEGIORNI6 System.String CBASETURNI6 System.String CBASECOLORE6 System.Int32 CBASEGIORNI7 System.String CBASETURNI7 System.String CBASECOLORE7 System.Int32 CBASEGIORNI8 System.String CBASETURNI8 System.String CBASECOLORE8 System.Int32 CBASEGIORNI9 System.String CBASETURNI9 System.String CBASECOLORE9 System.Int32 CBASEGIORNI10 System.String CBASETURNI10 System.String CBASECOLORE10 System.Int32 CBASEGIORNI11 System.String CBASETURNI11 System.String CBASECOLORE11 System.Int32 CBASEGIORNI12 System.String CBASETURNI12 System.String CBASECOLORE12 System.Int32 CBASEGIORNI13 System.String CBASETURNI13 System.String CBASECOLORE13 System.Int32 CBASEGIORNI14 System.String CBASETURNI14 System.String CBASECOLORE14 System.Int32 CBASEGIORNI15 System.String CBASETURNI15 System.String CBASECOLORE15 System.Int32 CBASEGIORNI16 System.String CBASETURNI16 System.String CBASECOLORE16 System.Int32 CBASEGIORNI17 System.String CBASETURNI17 System.String CBASECOLORE17 System.Int32 CBASEGIORNI18 System.String CBASETURNI18 System.String CBASECOLORE18 System.Int32 CBASEGIORNI19 System.String CBASETURNI19 System.String CBASECOLORE19 System.Int32 CBASEGIORNI20 System.String CBASETURNI20 System.String CBASECOLORE20 System.Int32 CBASEGIORNI21 System.String CBASETURNI21 System.String CBASECOLORE21 System.Int32 CBASEGIORNI22 System.String CBASETURNI22 System.String CBASECOLORE22 System.Int32 CBASEGIORNI23 System.String CBASETURNI23 System.String CBASECOLORE23 System.Int32 CBASEGIORNI24 System.String CBASETURNI24 System.String CBASECOLORE24 System.Int32 CBASEGIORNI25 System.String CBASETURNI25 System.String CBASECOLORE25 System.Int32 CBASEGIORNI26 System.String CBASETURNI26 System.String CBASECOLORE26 System.Int32 CBASEGIORNI27 System.String CBASETURNI27 System.String CBASECOLORE27 System.Int32 CBASEGIORNI28 System.String CBASETURNI28 System.String CBASECOLORE28 System.Int32 CBASEGIORNI29 System.String CBASETURNI29 System.String CBASECOLORE29 System.Int32 CBASEGIORNI30 System.String CBASETURNI30 System.String CBASECOLORE30 System.Int32 CBASEGIORNI31 System.String CBASETURNI31 System.String CBASECOLORE31 System.Int32 GPIANIF System.String MATRICOLA System.String NOME System.String TIPOCOLONNA System.Int32 NUMLP System.Int32 51.6pt true true 46.41pt 161.91pt ="Stampato il " & "\r\n" & {@ExecutionTime} 1 601.70pt 2.20pt 20.99pt 476.54pt TABELLONE MENSILE 1 108.4pt 3.8pt 20.99pt 476.54pt ={?REPARTO} 1 108.4pt 24.79pt 49.3pt DataQuery returned no rows! 98.9pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt 21.5pt
19.4pt Dipendenti Lp =1 + "\r\n" + {CBASEGIORNI1} ="2" + "\r\n" + {CBASEGIORNI2} ="3" + "\r\n" + {CBASEGIORNI3} ="4" + "\r\n" + {CBASEGIORNI4} ="5" + "\r\n" + {CBASEGIORNI5} ="6" + "\r\n" + {CBASEGIORNI6} ="7" + "\r\n" + {CBASEGIORNI7} ="8" + "\r\n" + {CBASEGIORNI8} ="9" + "\r\n" + {CBASEGIORNI9} ="10" + "\r\n" + {CBASEGIORNI10} ="11" + "\r\n" + {CBASEGIORNI11} ="12" + "\r\n" + {CBASEGIORNI12} ="13" + "\r\n" + {CBASEGIORNI13} ="14" + "\r\n" + {CBASEGIORNI14} ="15" + "\r\n" + {CBASEGIORNI15} ="16" + "\r\n" + {CBASEGIORNI16} ="17" + "\r\n" + {CBASEGIORNI17} ="18" + "\r\n" + {CBASEGIORNI18} ="19" + "\r\n" + {CBASEGIORNI19} ="20" + "\r\n" + {CBASEGIORNI20} ="21" + "\r\n" + {CBASEGIORNI21} ="22" + "\r\n" + {CBASEGIORNI22} ="23" + "\r\n" + {CBASEGIORNI23} ="24" + "\r\n" + {CBASEGIORNI24} ="25" + "\r\n" + {CBASEGIORNI25} ="26" + "\r\n" + {CBASEGIORNI26} ="27" + "\r\n" + {CBASEGIORNI27} ="28" + "\r\n" + {CBASEGIORNI28} ="29" + "\r\n" + {CBASEGIORNI29} ="30" + "\r\n" + {CBASEGIORNI30} ="31" + "\r\n" + {CBASEGIORNI31} true
11.5pt ={NOME} ={NUMLP} ={CBASETURNI1} ={CBASETURNI2} ={CBASETURNI3} ={CBASETURNI4} ={CBASETURNI5} ={CBASETURNI6} ={CBASETURNI7} ={CBASETURNI8} ={CBASETURNI9} ={CBASETURNI10} ={CBASETURNI11} ={CBASETURNI12} ={CBASETURNI13} ={CBASETURNI14} ={CBASETURNI15} ={CBASETURNI16} ={CBASETURNI17} ={CBASETURNI18} ={CBASETURNI19} ={CBASETURNI20} ={CBASETURNI21} ={CBASETURNI22} ={CBASETURNI23} ={CBASETURNI24} ={CBASETURNI25} ={CBASETURNI26} ={CBASETURNI27} ={CBASETURNI28} ={CBASETURNI29} ={CBASETURNI30} ={CBASETURNI31}
1.6pt0.0pt true false ={TIPOCOLONNA} =Iif({TIPOCOLONNA}<>3,false,true) true false ={GPIANIF} =false
false 11.6pt ={GPIANIF} 31
NoOutput
1 30.8pt false false Report AttributeNormal Function GetRagName(F as string) as string if F="zJ1" then getRagName="JOLLY" elseif trim(F)="" then getRagName="TOTALI" else getRagName=F end if end function FUNCTION CONTEGGIO_VERO(C AS STRING) AS BOOLEAN STATIC CONTEGGIO AS INTEGER=0 CONTEGGIO_VERO=TRUE if C="C" then if CONTEGGIO=0 then CONTEGGIO_VERO=FALSE end if CONTEGGIO = CONTEGGIO+1 end if END FUNCTION String false false false IMMAGINE String false false false false
================================================ FILE: Examples/Examples.416/TESTRIG.rdl ================================================ 11in 8.5in 7.5in .25in .25in .25in .25in 33.9pt true true 114.3pt DSQuery returned no rows! 142.1pt 142.1pt
11.2pt VALORE true
18pt ={VALORE} true 8.8pt ----------------------------------------------------------------------------- true 2 =iIF(UCase({?RIGAPRESENTE})='S',False,True)
62.48pt11.92pt
.2in
1 148.4pt 1pt 10pt 12pt 3in =Globals!PageNumber + ' of ' + Globals!TotalPages true true false XML VALORE System.String Report AttributeNormal String false false false RIGA PRESENTE 1 ?
================================================ FILE: Examples/Examples.416/TESTXGRUPPO.rdl ================================================ 11in 8.5in 7.5in .25in .25in .25in .25in XML SELECT * FROM TBL_TEST K System.String D1 System.String D2 System.String GRUPPO System.String LIVELLO System.Int32 46.4pt true true 31.56pt 515.71pt ="TEST FOR PAGE BREAK" + "CHANGE FORMULA" 1 15.82pt 5.26pt DataQuery returned no rows! 1in 1in 1in 132.5pt 212.9pt
11.2pt LIVELLO GRUPPO K D1 D2 true
12pt ={LIVELLO} ={GRUPPO} LIVELLO = {K} true Data =Fields!D1.Value true =add(Fields!D2.Value) true
11.0pt10.7ptfalsefalse true false ={LIVELLO} =false false false ={GRUPPO}
66.4pt 1 43.2pt 5.4pt 8.6pt 12pt 3in =Globals!PageNumber + ' of ' + Globals!TotalPages true true Report AttributeNormal public function add(x as string) as string add = x + " addedde " end function false
================================================ FILE: Examples/Examples.416/TESTXGRUPPO_Break3.rdl ================================================ 11in 8.5in 7.5in .25in .25in .25in .25in XML SELECT * FROM TBL_TEST K System.String D1 System.String D2 System.String GRUPPO System.String LIVELLO System.Int32 46.4pt true true 31.56pt 392.19pt ="TEST FOR PAGE BREAK AT LEVEL 3" + crlf() + " CHANGE FORMULA FOR TESTS" 1 15.82pt 5.26pt DataQuery returned no rows! 1in 1in 1in 132.5pt 212.9pt
11.2pt LIVELLO GRUPPO K D1 D2 true
12pt ={LIVELLO} ={GRUPPO} LIVELLO = {K} true Data =Fields!D1.Value true =add(Fields!D2.Value) true
11.0pt10.7ptfalsefalse true false ={LIVELLO} =Iif({LIVELLO} <> 3 , false , true) =false false false ={GRUPPO}
45.4pt 1 29.4pt 5.4pt 8.6pt 12pt 3in =Globals!PageNumber + ' of ' + Globals!TotalPages true true Report AttributeNormal public function add(x as string) as string add = x + " addedde " end function public function crlf() as string crlf = vbcrlf end function false
================================================ FILE: Examples/Examples.416/datI_RADIO.xml ================================================  10TC001117Aloia Daniele2MAR18-1MER19-1GIO18-1VEN19-1SABFF-1DOMFF-7278960LUN12+-1MAR20-1MER21-1GIO22-1VEN15-1SABFF-1DOMFF-7278960LUN19-1MAR03B-1MER19B-1GIO02-1VEN18-1SAB18-1DOMFF-7278960LUN15-1MAR19B-1MER03C-1GIO03C-1VENMAL-1SABFF-1DOMFF-7278960LUN07+-1MAR03C-1MER17-1GIO20-1 20TC22222Balice Giulio8MARFF-1MER00-1GIO00-1VEN00-1SAB19-1DOMFF-7278960LUN14+-1MAR08C-1MER03-1GIO20-1VEN21-1SAB22-1DOMFF-7278960LUN12+-1MAR04-1MER09C-1GIO23-1VEN13+-1SABFF-1DOMFF-7278960LUN09C-1MAR09BM-1MER19-1GIO13+-1VEN09+-1SABFF-1DOMFF-7278960LUN00-1MAR00-1MER00-1GIO00-1 30TC000034Bottoni Franco Maria6MAR19B-1MER03C-1GIO08+-1VEN18-1SABFF-1DOMFF-7278960LUN09A-1MAR00-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUN04-1MAR12+-1MER18-1GIO08C-1VEN14+-1SABFF-1DOMFF-7278960LUN00-1MAR00-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUN06C-1MAR14+-1MER03B-1GIO23-1 40TC002220Carbone Luca0MARFF-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUN19B-1MAR03C-1MER01-1GIO02-1VEN03B-1SABFF-1DOM20-7278960LUN21-1MAR22-1MER09BP-1GIO19B-1VEN00-1SABFF-1DOMFF-7278960LUN09BM-1MAR09BP-1MER18-1GIO09BP-1VEN00-1SABFF-1DOM19-7278960LUN19B-1MAR00-1MER09BM-1GIO09BM-1 50TC001769Chiacchio Maria0MARFF-1MERMAT-1GIOMAT-1VENMAT-1SABFF-1DOMFF-7278960LUN10B-1MAR11-1MER19-1GIO10-1VEN10B-1SABFF-1DOM18-7278960LUN10B-1MAR10B-1MER03B-1GIO23-1VEN19-1SABFF-1DOMMD-7278960LUN11-1MAR11-1MER10B-1GIO00-1VEN10B-1SABFF-1DOMFF-7278960LUN03C-1MAR10B-1MER23-1GIO18-1 60TC001263Colucci Luigi9MARFF-1MER09+-1GIO01-1VEN02-1SABFF-1DOMFF-7278960LUN00-1MAR00-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUN09BP-1MAR09C-1MER17-1GIO13+-1VEN12+-1SABFF-1DOM20-7278960LUN21-1MAR22-1MER06C-1GIO14+-1VEN08C-1SABFF-1DOMFF-7278960LUN09+-1MAR19B-1MER03-1GIO09+-1 70TC98765Craba Giulia0MARFF-1MER05R-1GIO05-1VEN05R-1SABFF-1DOMFF-7278960LUN00-1MAR00-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUN17-1MAR05R-1MER02-1GIO17-1VEN17-1SABM1-1DOMFF-7278960LUN05R-1MAR17-1MER05-1GIO15-1VEN17-1SABFF-1DOMFF-7278960LUN05-1MAR17-1MER15-1GIO05-1 80TC002041Cuomo Romolo8MAR20-1MER21-1GIO22-1VEN12+-1SABFF-1DOMFF-7278960LUN13+-1MAR19-1MER06+-1GIO15-1VEN06+-1SABFF-1DOMFF-7278960LUN06+-1MAR20-1MER21-1GIO22-1VEN03B-1SAB19-1DOMFF-7278960LUN03-1MAR14+-1MER13-1GIO08+-1VEN19-1SABFF-1DOMFF-7278960LUN15-1MAR12+-1MER18-1GIO19-1 90TC123456D'angelo Dario4MARFF-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUN01-1MAR02-1MER15-1GIO08+-1VEN20-1SAB21-1DOM22-7278960LUN17C-1MAR08+-1MER03-1GIO17B-1VEN17C-1SABFF-1DOMFF-7278960LUN13-1MAR03F-1MER08+-1GIO03-1VEN04-1SABFF-1DOM20-7278960LUN21-1MAR22-1MER17C-1GIO08+-1 100TCXXXXDella Rocchetta Andrea0MARFF-1MER01-1GIO02-1VEN17-1SABFF-1DOMFF-7278960LUN00-1MAR00-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUN00-1MAR00-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUN17A-1MAR17A-1MER17A-1GIO17B-1VEN01-1SABFF-1DOM01--7278960LUN02-1MARCOR-1MER17B-1GIO17-1 110TC000003Fabbi Riccardo9MAR19-1MER14+-1GIO20-1VEN21-1SAB22-1DOMFF-7278960LUN09C-1MAR19B-1MER03C-1GIO09+-1VEN13-1SABFF-1DOMFF-7278960LUN14+-1MAR09BP-1MER13+-1GIO20-1VEN21-1SAB22-1DOM19B-7278960LUN09BP-1MAR01-1MER09BM-1GIO09C-1VEN12+-1SABFF-1DOMFF-7278960LUN18-1MAR06C-1MER23-1GIO06C-1 120TC002010Fabbri Elisa3MAR05+-1MER02-1GIO06+-1VEN15-1SABFF-1DOMFF-7278960LUN17-1MAR14+-1MER05R-1GIOPR-1VEN09BM-1SABFF-1DOMFF-7278960LUN05-1MAR09BM-1MER07+-1GIO05R-1VEN09BM-1SABFF-1DOMFF-7278960LUN17-1MAR19-1MER23-1GIOPR-1VEN23-1SABFF-1DOMFF-7278960LUN09BM-1MAR09BP-1MER10B-1GIO13-1 130TC002184Fasanella Incoronata Pierpaola8MARFF-1MER06+-1GIO10B-1VEN06+-1SABFF-1DOMFF-7278960LUN20-1MAR21-1MER22-1GIO12+-1VEN14+-1SAB18-1DOMFF-7278960LUN05A-1MAR05A-1MER05A-1GIO05-1VEN06+-1SABFF-1DOMFF-7278960LUN13+-1MAR03C-1MER12+-1GIO09BM-1VEN05-1SAB20-1DOM21-7278960LUN22-1MAR08-1MERMAL-1GIOMAL-1 140TC33333Furfaro Nadia0MARFF-1MERMAT-1GIOMAT-1VENMAT-1SABFF-1DOMFF-7278960LUN16-1MAR16-1MER16-1GIO16-1VEN16-1SABFF-1DOMFF-7278960LUN16-1MAR16-1MER16-1GIO16-1VEN16-1SABFF-1DOMFF-7278960LUN16-1MAR16-1MER16-1GIO16-1VEN16-1SABFF-1DOMFF-7278960LUN16-1MAR16-1MER16-1GIO16-1 150TC001886Gagliano Nicolo'9MARFF-1MER00-1GIO00-1VEN00-1SABFF-1DOM20-7278960LUN21-1MAR22-1MER09C-1GIO13+-1VEN09C-1SABFF-1DOMFF-7278960LUN01-1MAR02-1MER14+-1GIO09B-1VEN09C-1SABFF-1DOM19-7278960LUN12+-1MAR09C-1MER03-1GIO18-1VEN03-1SABFF-1DOMFF-7278960LUN14+-1MAR19-1MER09C-1GIO15-1 160TC0006Genta Monica0MARFF-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUN05P-1MAR05-1MER05P-1GIO05M-1VEN05M-1SABFF-1DOMFF-7278960LUN05M-1MAR05-1MER05M-1GIO05P-1VEN05P-1SABFF-1DOMFF-7278960LUN05P-1MAR05M-1MER00-1GIO05P-1VEN05M-1SABFF-1DOMFF-7278960LUN05P-1MAR05-1MER05M-1GIO05P-1 170TC001937Lafergola Michele0MARFF-1MER03B-1GIO19B-1VEN20-1SAB21-1DOM22-7278960LUN13-1MAR17-1MER19B-1GIO03C-1VEN03C-1SABFF-1DOMMD-7278960LUN03-1MAR03F-1MER03F-1GIO15-1VEN02-1SAB01--1DOMFF-7278960LUN17B-1MAR13-1MER17-1GIO03B-1VEN03F-1SAB19B-1DOMFF-7278960LUN20-1MAR21-1MER22-1GIO03-1 180TC002313Lanave Tiziano0MARFF-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUN05R-1MAR10B-1MER10B-1GIO17-1VEN05-1SABM2-1DOMFF-7278960LUN05R-1MAR17-1MER05-1GIO10-1VEN15-1SAB05+-1DOMFF-7278960LUN05-1MAR10B-1MER15-1GIO10-1VEN11-1SABFF-1DOMFF-7278960LUN05R-1MAR15-1MER00-1GIO17B-1 190TC002186Lauriola Francesco0MARFF-1MER05M-1GIO05M-1VEN05M-1SABFF-1DOM05+-7278960LUN11-1MAR05P-1MER05M-1GIO05R-1VEN17-1SABM1-1DOMFF-7278960LUN00-1MAR00-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUN05M-1MAR05P-1MER05M-1GIO11-1VEN05P-1SAB05+-1DOMFF-7278960LUN11-1MAR05P-1MER05R-1GIO10-1 200TC35148Lucini Elisabetta0MAR01--1MER04-1GIO03B-1VEN03C-1SABFF-1DOMFF-7278960LUN00-1MAR00-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUN11-1MAR01-1MER11-1GIO10B-1VEN11-1SABFF-1DOMFF-7278960LUN01-1MAR02-1MER03B-1GIO10B-1VEN03C-1SABM1-1DOMFF-7278960LUN10B-1MAR01-1MER02-1GIO03B-1 210TC464789Marconi Giacomo6MARFF-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUN03B-1MAR09B-1MER13+-1GIO19B-1VEN17C-1SAB19B-1DOMFF-7278960LUN09+-1MAR19-1MER04-1GIO12+-1VEN03-1SABFF-1DOMFF-7278960LUN14+-1MAR20-1MER21-1GIO22-1VEN09BM-1SAB18-1DOMFF-7278960LUN08+-1MAR09+-1MER20-1GIO21-1 220TC45523Milan Antonio2MARMF-1MER19B-1GIO04-1VEN03B-1SABFF-1DOMFF-7278960LUN18-1MAR04-1MER20-1GIO21-1VEN22-1SABFF-1DOM19B-7278960LUN17B-1MAR07+-1MER17B-1GIO04-1VEN20-1SAB21-1DOM22-7278960LUN03F-1MAR04-1MER07+-1GIO17-1VEN20-1SAB21-1DOM22-7278960LUN23-1MAR04-1MER03C-1GIO01-1 230TC000020Milano Shari0MARFF-1MER10B-1GIO05R-1VEN10B-1SAB01--1DOMFF-7278960LUN10-1MAR03F-1MER05-1GIO19-1VEN11-1SAB05+-1DOMFF-7278960LUN15-1MAR17C-1MER19-1GIO11-1VEN10B-1SABFF-1DOMFF-7278960LUN03C-1MAR10-1MER05R-1GIO02-1VEN17C-1SABFF-1DOMMD-7278960LUN03B-1MAR11-1MER11-1GIO03F-1 240TC001885Morrone Giuseppe6MAR22-1MER12+-1GIO09+-1VEN09+-1SABFF-1DOMFF-7278960LUN03C-1MAR03B-1MER09BM-1GIO09B-1VEN19-1SABFF-1DOM19-7278960LUN09BM-1MAR14+-1MER09BM-1GIO09+-1VEN03C-1SABFF-1DOMFF-7278960LUN20-1MAR21-1MER22-1GIO12+-1VEN00-1SABFF-1DOM18-7278960LUN19-1MAR20-1MER21-1GIO22-1 250TC001340Mura Antonello0MARFF-1MER03-1GIO03C-1VEN01-1SABFF-1DOMMF-7278960LUN17B-1MAR05R-1MER17-1GIO05-1VEN03F-1SAB01--1DOMFF-7278960LUN03C-1MAR17B-1MER15-1GIO03F-1VEN03F-1SABFF-1DOMFF-7278960LUN03B-1MAR05R-1MER19B-1GIO05R-1VEN17B-1SABFF-1DOMFF-7278960LUN03-1MAR03-1MER19-1GIO03C-1 260TC000002Pagani Erika Rosa3MARFF-1MER17-1GIO19-1VEN14+-1SAB18-1DOMFF-7278960LUN15-1MAR13-1MER11-1GIO03B-1VENMAT-1SABFF-1DOMFF-7278960LUN00-1MAR00-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUN23-1MAR07+-1MER10-1GIO19-1VENMAL-1SABFF-1DOMFF-7278960LUN17B-1MAR18-1MER13+-1GIO11-1 270TC0007Perco Natascia0MARFF-1MER00-1GIO00-1VEN00-1SAB05+-1DOMFF-7278960LUN05M-1MAR05M-1MER00-1GIO05P-1VEN05P-1SABFF-1DOMFF-7278960LUN05P-1MAR05M-1MER05R-1GIO05M-1VEN05M-1SABFF-1DOMFF-7278960LUN00-1MAR00-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUN05M-1MAR05M-1MER05P-1GIO05M-1 280TC001567Radogna Giovanni Luca9MARFF-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUN08+-1MAR12+-1MER18-1GIO14+-1VEN04-1SABFF-1DOMFF-7278960LUN18-1MAR06+-1MER03C-1GIO03-1VEN08+-1SAB19B-1DOMFF-7278960LUN06+-1MAR18-1MER01-1GIO04-1VEN14+-1SABFF-1DOMFF-7278960LUN09A-1MAR09A-1MER06+-1GIO12+-1 290TC000055Ragucci Pasquala6MARFF-1MER17C-1GIO14+-1VEN17C-1SABFF-1DOMFF-7278960LUNFOR-1MARFOR-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUN00-1MAR00-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUN17C-1MAR06+-1MER13+-1GIO17C-1VEN06+-1SABFF-1DOMFF-7278960LUN13+-1MAR17C-1MER14+-1GIO17C-1 300TC475464Ramberti Riccardo6MARFF-1MER00-1GIO00-1VEN00-1SABFF-1DOM18-7278960LUN03-1MAR09+-1MER14+-1GIO01-1VEN02-1SABFF-1DOMFF-7278960LUNMAL-1MARMAL-1MER12+-1GIOMAL-1VENMAL-1SABFF-1DOMFF-7278960LUN08+-1MAR15-1MER09+-1GIO23-1VEN09BP-1SABFF-1DOM19B-7278960LUN09BP-1MAR17B-1MER12+-1GIO23-1 310TC77777Resta Patrizia0MARFF-1MER05-1GIO15-1VEN05-1SABMF-1DOMFF-7278960LUN05-1MAR10-1MER03F-1GIO11-1VEN19B-1SABFF-1DOMFF-7278960LUN03F-1MAR11-1MER10B-1GIO03B-1VEN05R-1SABFF-1DOM05+-7278960LUN10-1MAR03B-1MER11-1GIO03F-1VEN15-1SAB01--1DOMFF-7278960LUN10-1MAR05R-1MER04-1GIO10B-1 320TC00001Rojario Soshanna0MARFF-1MERMAT-1GIOMAT-1VENMAT-1SABFF-1DOMFF-7278960LUNMAT-1MARMAT-1MERMAT-1GIOMAT-1VENMAT-1SABFF-1DOMFF-7278960LUNMAT-1MARMAT-1MERMAT-1GIOMAT-1VENMAT-1SABFF-1DOMFF-7278960LUNMAT-1MARMAT-1MERMAT-1GIOMAT-1VENMAT-1SABFF-1DOMFF-7278960LUNMAT-1MARMAT-1MERMAT-1GIOMAT-1 330TC897986Salzano Alex2MARFF-1MER00-1GIO00-1VEN00-1SABFF-1DOM19-7278960LUN04-1MAR17C-1MER17C-1GIO03-1VEN01-1SABFF-1DOM01--7278960LUN02-1MAR19B-1MER20-1GIO21-1VEN22-1SABFF-1DOMFF-7278960LUN04-1MAR17B-1MER02-1GIO07+-1VEN19B-1SABFF-1DOMFF-7278960LUN00-1MAR03B-1MER07+-1GIO04-1 340TC001949Sari Arianna6MARFF-1MER20-1GIO21-1VEN22-1SAB19B-1DOMFF-7278960LUN06+-1MAR06+-1MER03B-1GIO10B-1VEN10-1SABFF-1DOMFF-7278960LUN13-1MAR13+-1MER10-1GIO14+-1VEN19B-1SABFF-1DOMFF-7278960LUN00-1MAR00-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUN17-1MAR02-1MER08+-1GIO13+-1 350TC000111Seggio Giovanni4MARFF-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUN03F-1MAR13+-1MER10-1GIO17B-1VEN05R-1SABFF-1DOM05+-7278960LUN20-1MAR21-1MER22-1GIO07+-1VEN05-1SABFF-1DOMFF-7278960LUN19B-1MAR05-1MER17B-1GIO05-1VEN13+-1SABFF-1DOMFF-7278960LUN01-1MAR10-1MER05-1GIO07+-1 360TC00008Stablum Stefano5MAR21-1MER22-1GIO12+-1VEN08+-1SABFF-1DOMFF-7278960LUN17C-1MAR01-1MER02-1GIO17C-1VEN08+-1SAB20-1DOM21-7278960LUN22-1MARMAL-1MERMAL-1GIOMAL-1VENMAL-1SABFF-1DOMFF-7278960LUN18-1MAR08+-1MER17C-1GIO19B-1VEN03B-1SABFF-1DOMFF-7278960LUN00-1MAR03F-1MER19B-1GIO14+-1 370TC000881Superbi Simona5MARFF-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUNCOO-1MARCOO-1MERCOO-1GIOCOO-1VEN13+-1SABFF-1DOMFF-7278960LUNCOO-1MAR15-1MERCOO-1GIO06+-1VENCOO-1SABFF-1DOMFF-7278960LUNCOO-1MAR13+-1MERCOO-1GIOCOO-1VEN07+-1SABFF-1DOMFF-7278960LUNCOO-1MAR08+-1MER00-1GIO00-1 380TC0005Toscani Nicolò2MARFF-1MER18-1GIO03-1VEN04-1SABFF-1DOMFF-7278960LUN00-1MAR00-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUN19B-1MAR05P-1MER05P-1GIO17C-1VEN07+-1SABFF-1DOM01--7278960LUN02-1MAR17C-1MER05P-1GIO05M-1VEN05R-1SABFF-1DOM05+-7278960LUN04-1MAR07+-1MER03F-1GIO05R-1 390TC78910Totaro Silvia0MARFF-1MER15-1GIO17-1VEN03-1SABFF-1DOM01--7278960LUN02-1MAR17B-1MER04-1GIO03F-1VEN17B-1SABFF-1DOMFF-7278960LUN03B-1MAR10-1MER23-1GIO01-1VEN04-1SABM2-1DOMFF-7278960LUN10B-1MAR03-1MER03F-1GIO01-1VEN02-1SABM2-1DOMFF-7278960LUN03F-1MARCOR-1MER01-1GIO02-1 400TC23588Valtolina Chiara6MARFF-1MER08+-1GIO17C-1VEN19B-1SAB20-1DOM21-7278960LUN22-1MAR03-1MER08+-1GIO18-1VEN12+-1SABFF-1DOMFF-7278960LUN10-1MAR18-1MER08+-1GIO03C-1VEN10-1SABFF-1DOM18-7278960LUN19-1MAR12+-1MER20-1GIO21-1VEN22-1SAB19-1DOMFF-7278960LUN17C-1MAR13+-1MER10-1GIO19B-1 410TC009Vela Riccardo2MARFF-1MER00-1GIO00-1VEN00-1SABFF-1DOMFF-7278960LUN19-1MAR15-1MER17B-1GIO04-1VEN18-1SAB19-1DOMFF-7278960LUN13+-1MAR03C-1MER01-1GIO19-1VEN17B-1SABFF-1DOMFF-7278960LUN07+-1MAR23-1MER04-1GIO20-1VEN21-1SAB22-1DOMFF-7278960LUN00-1MAR00-1MER00-1GIO00-1 420TC001269Vurro Michele7MARFF-1MER00-1GIO00-1VEN00-1SABFF-1DOM19B-7278960LUN09B-1MAR18-1MER12+-1GIO06C-1VEN03-1SABFF-1DOMFF-7278960LUN08C-1MAR03-1MER06+-1GIO18-1VEN01-1SAB20-1DOM21-7278960LUN22-1MAR23-1MER14+-1GIO06+-1VEN18-1SABFF-1DOMFF-7278960LUN12+-1MARMAL-1MERMAL-1GIOMAL-1 431Esterni1Manutenzione0MAR-1MER-1GIO-1VEN-1SAB-1DOM-7278960LUN-1MAR-1MER-1GIO-1VEN-1SAB-1DOM-7278960LUN-1MAR-1MERman-1GIO-1VEN13-1SAB-1DOM-7278960LUN-1MAR-1MER-1GIO-1VEN-1SAB-1DOM-7278960LUN-1MAR-1MER-1GIO15-1 441Esterni2Manutenzione0MAR-1MER-1GIO-1VEN-1SAB-1DOM-7278960LUN-1MAR-1MER-1GIO-1VEN-1SAB-1DOM-7278960LUN-1MAR-1MER-1GIO-1VEN-1SAB-1DOM-7278960LUN-1MAR-1MER-1GIO-1VEN-1SAB-1DOM-7278960LUN-1MAR-1MER-1GIO-1 453Totali 01REPER. RADIO0-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-1 463Totali 01-REP S/D1-10-10-10-11-11-10-10-10-10-10-11-11-10-10-10-10-10-11-11-10-10-10-10-10-11-11-10-10-10-10-1 473Totali 02POM. RADIOL.0-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-1 483Totali 03SALA OPERATORIA 10-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-1 493Totali 03BSALA OPERATORIA 20-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-1 503Totali 03CSALA OPERATORIA 30-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-1 513Totali 03FSALA OPER.BOG0-10-10-10-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-1 523Totali 04POMERIGGIO S.O.0-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-1 533Totali 05ANGIO0-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-1 543Totali 05+REP ANGIO S/D1-10-10-10-11-11-10-10-10-10-10-11-11-10-10-10-10-10-11-11-10-10-10-10-10-11-11-10-10-10-10-1 553Totali 05AANGIO AFF.0-10-10-10-10-10-10-10-10-10-10-10-10-11-11-11-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-1 563Totali 05MEMO MATTINO0-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-1 573Totali 05PEMO POMERIGGIO0-10-10-10-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-1 583Totali 05RREP ANGIO0-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-1 593Totali 06+RM 3.0 T LP0-11-11-11-10-10-11-11-11-10-11-10-10-11-11-11-11-11-10-10-11-11-10-11-11-10-10-10-10-11-10-1 603Totali 06CRM 3T COORD.0-10-10-10-10-10-10-10-10-11-10-10-10-10-10-10-10-10-10-10-10-10-11-10-10-10-10-11-11-10-11-1 613Totali 07+RM 1T LP0-10-10-10-10-10-10-10-10-10-10-10-10-10-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-1 623Totali 08RM 1,5 GE0-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-11-10-10-1 633Totali 08+RM 1.5 GE LP0-11-11-11-10-10-11-10-11-11-11-10-10-10-11-11-10-11-10-10-11-11-11-11-10-10-10-11-11-11-11-1 643Totali 08CRM 1.5 GE COOR0-10-10-10-10-10-10-11-10-10-10-10-10-11-10-10-11-10-10-10-10-10-10-10-11-10-10-10-10-10-10-1 653Totali 09+RM 1.5 SIEM LP0-11-11-11-10-10-10-11-10-11-10-10-10-11-10-10-11-10-10-10-10-10-11-10-11-10-10-11-11-10-11-1 663Totali 09ARM 1,5 SIEM. AFF.0-10-10-10-10-10-11-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-11-11-10-10-1 673Totali 09BRM 1.5 CCP LP0-10-10-10-10-10-11-11-10-11-10-10-10-10-10-10-11-10-10-10-10-10-10-10-10-10-10-10-10-10-10-1 683Totali 09BMRM 1.5 CCP LP0-10-10-10-10-10-10-10-11-10-11-10-10-11-11-11-10-11-10-10-11-11-11-11-11-10-10-11-10-11-11-1 693Totali 09BPRM 1.5 CCP LP0-10-10-10-10-10-10-10-10-10-10-10-10-11-11-11-10-10-10-10-11-11-10-11-11-10-10-11-11-10-10-1 703Totali 09CRM 1.5 SIEM. COOR0-10-10-10-10-10-11-10-11-10-11-10-10-10-11-11-10-11-10-10-11-11-10-11-10-10-10-10-10-11-10-1 713Totali 10MAMMO SCREENING0-10-10-10-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-10-10-10-11-11-11-11-1 723Totali 10BMAMMO CDH0-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-1 733Totali 11MAMMO0-10-10-10-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-1 743Totali 12+TAC PHIL. LP0-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-1 753Totali 13TAC EVO0-10-10-10-10-10-11-11-10-10-11-10-10-11-10-10-10-10-10-10-11-11-11-10-10-10-10-10-10-10-11-1 763Totali 13+TAC EVO LP0-10-10-10-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-1 773Totali 14+TAC 2560-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-1 783Totali 15RX03 INTERNI0-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-1 793Totali 16RX04 ESTERNI0-10-10-10-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-1 803Totali 17RX06 ESTERNI0-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-1 813Totali 17ARX OSSA AFF0-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-11-11-11-10-10-10-10-10-10-10-10-1 823Totali 17BRX PRERIC.0-10-10-10-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-1 833Totali 17CEOS0-11-11-11-10-10-11-11-11-11-11-10-10-11-11-10-11-11-10-10-11-11-11-11-11-10-10-11-11-11-11-1 843Totali 181° MATTINA PS1-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-1 853Totali 191° POMER. PS1-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-1 863Totali 19B2° POMER. PS1-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-1 873Totali 20PS NOTTE1-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-1 883Totali OpTurni Operativi 6-1 22-1 22-1 22-1 6-1 6-1 32-1 31-1 30-1 30-1 31-1 6-1 6-1 33-1 33-1 32-1 31-1 31-1 6-1 6-1 34-1 34-1 33-1 32-1 31-1 6-1 6-1 33-1 33-1 31-1 32-1 ================================================ FILE: Examples/Examples.418/Test for Alignment.rdl ================================================ 11in 8.5in 7.5in .25in .25in .25in .25in 196.2pt true true 55.68pt 158.93pt 68.0pt 12.2pt 32.31pt 111.66pt ="TESTO 1 IN" + vbcrlf() + "BIANCO" 2 23.6pt 11.0pt true false 1 112.82pt 230.31pt 168.30pt 63.46pt 55.68pt 158.93pt 35.69pt 28.57pt 32.31pt 140pt ="TESTO IN" + VbCrlf() +"BIANCO" 2 9.46pt 11.69pt 1 0.00pt 72.27pt 73.40pt 15.4pt 40.57pt 153.53pt ="TESTO IN" + VbCrlf() +"BIANCO" 2 419.3pt 17.2pt 82.13pt 103.91pt 440.40pt 75.28pt 0.00pt 72.27pt 15.82pt 41.07pt 140.3pt 88.88pt 327.41pt 125.38pt 16.8pt 44.50pt 229.38pt TESTO IN BIANCO 2 49.02pt 22.19pt 73.2pt 12.8pt 5.2pt 12.00pt 216.81pt =Globals!PageNumber + ' of ' + Globals!TotalPages true true ================================================ FILE: Examples/Examples.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.12.35527.113 d17.12 MinimumVisualStudioVersion = 10.0.40219.1 Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SampleReportApp", "SampleApp\SampleReportApp\SampleReportApp.vbproj", "{A542F20D-0395-4969-975F-3DA1033BD433}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleApp2-SetData", "SampleApp2-SetData\SampleApp2-SetData\SampleApp2-SetData.csproj", "{02BB9820-AA69-4581-9A20-6E0B3A08534D}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HyperLinkExample", "SampleAppHyperLinkCustomAction\HyperLinkExample\HyperLinkExample.csproj", "{AEBA50E8-F52B-47C7-AF9C-13C9FD5DFBC2}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleDesignerControl", "SampleDesignerControl\SampleDesignerControl\SampleDesignerControl.csproj", "{4988BD65-C990-43F2-89C7-2F5327E9D3E5}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleDesignerControlWPF", "SampleDesignerControl\SampleDesignerControlWPF\SampleDesignerControlWPF.csproj", "{19497534-1C33-4D8E-8F43-F36DEA443EFC}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleReportViewer", "Sample-Report-Viewer\Sample-Report-Viewer\SampleReportViewer.csproj", "{57E9CF37-94B6-4101-BBFC-A713077143B8}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{9E457B53-9B98-48CE-AEF0-101051735725}" ProjectSection(SolutionItems) = preProject .editorconfig = .editorconfig EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {A542F20D-0395-4969-975F-3DA1033BD433}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A542F20D-0395-4969-975F-3DA1033BD433}.Debug|Any CPU.Build.0 = Debug|Any CPU {A542F20D-0395-4969-975F-3DA1033BD433}.Release|Any CPU.ActiveCfg = Release|Any CPU {A542F20D-0395-4969-975F-3DA1033BD433}.Release|Any CPU.Build.0 = Release|Any CPU {02BB9820-AA69-4581-9A20-6E0B3A08534D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {02BB9820-AA69-4581-9A20-6E0B3A08534D}.Debug|Any CPU.Build.0 = Debug|Any CPU {02BB9820-AA69-4581-9A20-6E0B3A08534D}.Release|Any CPU.ActiveCfg = Release|Any CPU {02BB9820-AA69-4581-9A20-6E0B3A08534D}.Release|Any CPU.Build.0 = Release|Any CPU {AEBA50E8-F52B-47C7-AF9C-13C9FD5DFBC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AEBA50E8-F52B-47C7-AF9C-13C9FD5DFBC2}.Debug|Any CPU.Build.0 = Debug|Any CPU {AEBA50E8-F52B-47C7-AF9C-13C9FD5DFBC2}.Release|Any CPU.ActiveCfg = Release|Any CPU {AEBA50E8-F52B-47C7-AF9C-13C9FD5DFBC2}.Release|Any CPU.Build.0 = Release|Any CPU {4988BD65-C990-43F2-89C7-2F5327E9D3E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4988BD65-C990-43F2-89C7-2F5327E9D3E5}.Debug|Any CPU.Build.0 = Debug|Any CPU {4988BD65-C990-43F2-89C7-2F5327E9D3E5}.Release|Any CPU.ActiveCfg = Release|Any CPU {4988BD65-C990-43F2-89C7-2F5327E9D3E5}.Release|Any CPU.Build.0 = Release|Any CPU {19497534-1C33-4D8E-8F43-F36DEA443EFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {19497534-1C33-4D8E-8F43-F36DEA443EFC}.Debug|Any CPU.Build.0 = Debug|Any CPU {19497534-1C33-4D8E-8F43-F36DEA443EFC}.Release|Any CPU.ActiveCfg = Release|Any CPU {19497534-1C33-4D8E-8F43-F36DEA443EFC}.Release|Any CPU.Build.0 = Release|Any CPU {57E9CF37-94B6-4101-BBFC-A713077143B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {57E9CF37-94B6-4101-BBFC-A713077143B8}.Debug|Any CPU.Build.0 = Debug|Any CPU {57E9CF37-94B6-4101-BBFC-A713077143B8}.Release|Any CPU.ActiveCfg = Release|Any CPU {57E9CF37-94B6-4101-BBFC-A713077143B8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: Examples/JsonExamples/JsonReport.rdl ================================================ 11in 8.5in Json file=C:\Users\peter\source\repos\My-FyiReporting\RdlCreator.Tests\NestedJsonData.json 7.5in .25in .25in .25in .25in DS1 columns=EmployeeID,FirstName,LastName,ContactInfo_Phone,ContactInfo_Email EmployeeID System.Text.Json.JsonElement FirstName System.Text.Json.JsonElement LastName System.Text.Json.JsonElement ContactInfo_Phone System.Text.Json.JsonElement ContactInfo_Email System.Text.Json.JsonElement .5in true true DataQuery returned no rows! 70.2pt 1.125in 1in 148.5pt 214.1pt
12pt EmployeeID FirstName LastName Phone Email true
12pt =Fields!EmployeeID.Value false =Fields!FirstName.Value false =Fields!LastName.Value false =Fields!ContactInfo_Phone.Value false =Fields!ContactInfo_Email.Value false
36pt 14pt 1pt 10pt 12pt 3in =Globals!PageNumber + ' of ' + Globals!TotalPages true true
================================================ FILE: Examples/RdlEngineConfig.xml ================================================ SQL SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1 SQL ODBC SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1 SQL true OLEDB SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1 SQL Oracle Oracle.DataAccess.dll Oracle.DataAccess.Client.OracleConnection select OWNER || '.' || TABLE_NAME from ALL_TABLES WHERE TABLESPACE_NAME NOT IN ('SYSTEM', 'SYSAUX') SQL MySQL.NET MySql.Data.dll MySql.Data.MySqlClient.MySqlConnection show tables SQL true Firebird.NET FirebirdSql.Data.Firebird.dll FirebirdSql.Data.Firebird.FbConnection SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$RELATION_NAME NOT LIKE 'RDB$%' ORDER BY 1 SQL Firebird.NET 2.0 FirebirdSql.Data.FirebirdClient.dll FirebirdSql.Data.FirebirdClient.FbConnection SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG = 0 ORDER BY 1 SQL SQLite System.Data.SQLite.DLL System.Data.SQLite.SQLiteConnection SELECT name FROM sqlite_master WHERE type = "table" SQL iAnywhere.NET iAnywhere.Data.AsaClient.dll iAnywhere.Data.AsaClient.AsaConnection select table_name from systable where table_type = 'BASE' and table_name not like 'SYS%' and table_name not like 'ix_%' and table_name not like 'ml_%' and table_name not like 'ul_%' and table_name not like 'rl_%' and table_name not like 'rs_%' and table_name not like 'migrate_%' and table_name not like 'spt_%' and table_name not like 'jdbc_%' and table_name not in ('DUMMY', 'RowGenerator', 'EXCLUDEOBJECT') SQL XML DataProviders.dll fyiReporting.Data.XmlConnection File WebService DataProviders.dll fyiReporting.Data.WebServiceConnection WebService WebLog DataProviders.dll fyiReporting.Data.LogConnection File Text DataProviders.dll fyiReporting.Data.TxtConnection File iTunes DataProviders.dll fyiReporting.Data.iTunesConnection File FileDirectory DataProviders.dll fyiReporting.Data.FileDirConnection File OracleSp OracleSp.dll fyiReporting.OracleSp.OracleSpConnection select OWNER || '.' || TABLE_NAME from ALL_TABLES WHERE TABLESPACE_NAME NOT IN ('SYSTEM', 'SYSAUX') SQL PostgreSQL Npgsql.dll Npgsql.NpgsqlConnection SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE 'pg_%' ORDER BY 1 SQL ICSharpCode.SharpZipLib.dll ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream Finish true BarCode EAN-13 RdlCri.dll fyiReporting.CRI.BarCodeEAN13 BarCode Bookland RdlCri.dll fyiReporting.CRI.BarCodeBookland ================================================ FILE: Examples/Readme.txt ================================================ northwindEF.db is a sqlite 3 sample database. ================================================ FILE: Examples/Sample-Report-Viewer/Sample-Report-Viewer/App.config ================================================ ================================================ FILE: Examples/Sample-Report-Viewer/Sample-Report-Viewer/Form1.cs ================================================ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Drawing.Printing; using Microsoft.Data.Sqlite; namespace SampleApp2_SetData { public class Form1 : Form { private Majorsilence.Reporting.RdlViewer.RdlViewer rdlViewer1; private Majorsilence.Reporting.RdlViewer.ViewerToolstrip reportStrip; public Form1() { InitializeComponent(); } private void InitializeViewer() { this.rdlViewer1 = new Majorsilence.Reporting.RdlViewer.RdlViewer(); this.rdlViewer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.rdlViewer1.Location = new System.Drawing.Point(40, 69); this.rdlViewer1.Name = "rdlViewer1"; this.rdlViewer1.Size = new System.Drawing.Size(731, 381); } private void InitializeComponent() { InitializeViewer(); reportStrip = new Majorsilence.Reporting.RdlViewer.ViewerToolstrip(rdlViewer1); //reportStrip.Location = new Point(0, 0); this.Controls.Add(reportStrip); this.SuspendLayout(); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(852, 462); this.Controls.Add(this.rdlViewer1); this.Name = "Form1"; this.Text = "Form1"; this.ResumeLayout(false); } } } ================================================ FILE: Examples/Sample-Report-Viewer/Sample-Report-Viewer/Form1.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ================================================ FILE: Examples/Sample-Report-Viewer/Sample-Report-Viewer/GlobalSuppressions.cs ================================================ // This file is used by Code Analysis to maintain SuppressMessage // attributes that are applied to this project. // Project-level suppressions either have no target or are given // a specific target and scoped to a namespace, type, member, etc. using System.Diagnostics.CodeAnalysis; #if !DRAWINGCOMPAT [assembly: SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "System.Drawing usage is intentional")] #endif ================================================ FILE: Examples/Sample-Report-Viewer/Sample-Report-Viewer/Program.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace SampleApp2_SetData { static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } ================================================ FILE: Examples/Sample-Report-Viewer/Sample-Report-Viewer/Properties/Resources.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace SampleApp2_SetData.Properties { using System; /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Resources() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SampleApp2_SetData.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } } } ================================================ FILE: Examples/Sample-Report-Viewer/Sample-Report-Viewer/Properties/Resources.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ================================================ FILE: Examples/Sample-Report-Viewer/Sample-Report-Viewer/Properties/Settings.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace SampleApp2_SetData.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.9.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); public static Settings Default { get { return defaultInstance; } } } } ================================================ FILE: Examples/Sample-Report-Viewer/Sample-Report-Viewer/Properties/Settings.settings ================================================  ================================================ FILE: Examples/Sample-Report-Viewer/Sample-Report-Viewer/SampleApp2-TestReport.rdl ================================================ 11in 8.5in SQLite Data Source=C:\Path\Does\Not\Exist\northwindEF.db;Version=3;Pooling=True;Max Pool Size=100; 7.5in .25in .25in .25in .25in DS1 SELECT CategoryID, CategoryName, Description FROM Categories CategoryID System.Int64 CategoryName System.String Description System.String .5in .1in .1in 6in .25in Test Data Set Report true true DataQuery returned no rows! 1.25in 1.5in 1.375in
12pt CategoryID CategoryName Description true
12pt =Fields!CategoryID.Value false =Fields!CategoryName.Value true =Fields!Description.Value true
36pt 14pt 1pt 10pt 12pt 3in =Globals!PageNumber + ' of ' + Globals!TotalPages true true
================================================ FILE: Examples/Sample-Report-Viewer/Sample-Report-Viewer/SampleReportViewer.csproj ================================================  net8.0-windows WinExe SampleApp2_SetData false true true PreserveNewest PreserveNewest ================================================ FILE: Examples/Sample-Report-Viewer/SampleApp2-SetData.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Express 2012 for Windows Desktop Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleApp2-SetData", "SampleApp2-SetData\SampleApp2-SetData.csproj", "{8711F55E-AC2F-496C-B316-3A5AA9FD0824}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataProviders", "..\..\DataProviders\DataProviders.csproj", "{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RdlCri", "..\..\RdlCri\RdlCri.csproj", "{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RdlEngine", "..\..\RdlEngine\RdlEngine.csproj", "{C97E91F4-B310-44E2-9B6C-96775395722D}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RdlViewer", "..\..\RdlViewer\RdlViewer.csproj", "{D99145B1-CB6C-41F5-BA86-723325145FB5}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|Any CPU.Build.0 = Debug|Any CPU {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|x64.ActiveCfg = Debug|Any CPU {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|x86.ActiveCfg = Debug|x86 {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|x86.Build.0 = Debug|x86 {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|Any CPU.ActiveCfg = Release|Any CPU {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|Any CPU.Build.0 = Release|Any CPU {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|x64.ActiveCfg = Release|Any CPU {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|x86.ActiveCfg = Release|Any CPU {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.Build.0 = Debug|Any CPU {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x64.ActiveCfg = Debug|x64 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x64.Build.0 = Debug|x64 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x86.ActiveCfg = Debug|x86 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x86.Build.0 = Debug|x86 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.ActiveCfg = Release|Any CPU {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.Build.0 = Release|Any CPU {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x64.ActiveCfg = Release|x64 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x64.Build.0 = Release|x64 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x86.ActiveCfg = Release|x86 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x86.Build.0 = Release|x86 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.Build.0 = Debug|Any CPU {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x64.ActiveCfg = Debug|x64 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x64.Build.0 = Debug|x64 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x86.ActiveCfg = Debug|x86 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x86.Build.0 = Debug|x86 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.ActiveCfg = Release|Any CPU {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.Build.0 = Release|Any CPU {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x64.ActiveCfg = Release|x64 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x64.Build.0 = Release|x64 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x86.ActiveCfg = Release|x86 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x86.Build.0 = Release|x86 {C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.Build.0 = Debug|Any CPU {C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.ActiveCfg = Debug|x64 {C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.Build.0 = Debug|x64 {C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.ActiveCfg = Debug|x86 {C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.Build.0 = Debug|x86 {C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.ActiveCfg = Release|Any CPU {C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.Build.0 = Release|Any CPU {C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.ActiveCfg = Release|x64 {C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.Build.0 = Release|x64 {C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.ActiveCfg = Release|x86 {C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.Build.0 = Release|x86 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.Build.0 = Debug|Any CPU {D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x64.ActiveCfg = Debug|x64 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x64.Build.0 = Debug|x64 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x86.ActiveCfg = Debug|x86 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x86.Build.0 = Debug|x86 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.ActiveCfg = Release|Any CPU {D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.Build.0 = Release|Any CPU {D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x64.ActiveCfg = Release|x64 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x64.Build.0 = Release|x64 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x86.ActiveCfg = Release|x86 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: Examples/SampleApp/SampleReportApp/Form1.Designer.vb ================================================  _ Partial Class Form1 Inherits System.Windows.Forms.Form 'Form overrides dispose to clean up the component list. _ Protected Overrides Sub Dispose(ByVal disposing As Boolean) Try If disposing AndAlso components IsNot Nothing Then components.Dispose() End If Finally MyBase.Dispose(disposing) End Try End Sub 'Required by the Windows Form Designer Private components As System.ComponentModel.IContainer 'NOTE: The following procedure is required by the Windows Form Designer 'It can be modified using the Windows Form Designer. 'Do not modify it using the code editor. _ Private Sub InitializeComponent() Me.RdlViewer1 = New Majorsilence.Reporting.RdlViewer.RdlViewer() Me.Label1 = New System.Windows.Forms.Label() Me.TextBox1 = New System.Windows.Forms.TextBox() Me.ButtonSelectReport = New System.Windows.Forms.Button() Me.ButtonReloadReport = New System.Windows.Forms.Button() Me.OpenFileDialog1 = New System.Windows.Forms.OpenFileDialog() Me.SuspendLayout() ' 'RdlViewer1 ' Me.RdlViewer1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.RdlViewer1.Cursor = System.Windows.Forms.Cursors.Default Me.RdlViewer1.Folder = Nothing Me.RdlViewer1.HighlightAll = False Me.RdlViewer1.HighlightAllColor = System.Drawing.Color.Fuchsia Me.RdlViewer1.HighlightCaseSensitive = False Me.RdlViewer1.HighlightItemColor = System.Drawing.Color.Aqua Me.RdlViewer1.HighlightPageItem = Nothing Me.RdlViewer1.HighlightText = Nothing Me.RdlViewer1.Location = New System.Drawing.Point(15, 86) Me.RdlViewer1.Name = "RdlViewer1" Me.RdlViewer1.PageCurrent = 1 Me.RdlViewer1.Parameters = "" Me.RdlViewer1.ReportName = Nothing Me.RdlViewer1.ScrollMode = Majorsilence.Reporting.RdlViewer.ScrollModeEnum.Continuous Me.RdlViewer1.SelectTool = False Me.RdlViewer1.ShowFindPanel = False Me.RdlViewer1.ShowParameterPanel = True Me.RdlViewer1.ShowWaitDialog = True Me.RdlViewer1.Size = New System.Drawing.Size(642, 295) Me.RdlViewer1.TabIndex = 0 Me.RdlViewer1.UseTrueMargins = True Me.RdlViewer1.Zoom = 0.7681401! Me.RdlViewer1.ZoomMode = Majorsilence.Reporting.RdlViewer.ZoomEnum.FitWidth ' 'Label1 ' Me.Label1.AutoSize = True Me.Label1.Location = New System.Drawing.Point(12, 13) Me.Label1.Name = "Label1" Me.Label1.Size = New System.Drawing.Size(110, 13) Me.Label1.TabIndex = 1 Me.Label1.Text = "Set Connection String" ' 'TextBox1 ' Me.TextBox1.Location = New System.Drawing.Point(157, 10) Me.TextBox1.Name = "TextBox1" Me.TextBox1.Size = New System.Drawing.Size(470, 20) Me.TextBox1.TabIndex = 2 ' 'ButtonSelectReport ' Me.ButtonSelectReport.Location = New System.Drawing.Point(12, 47) Me.ButtonSelectReport.Name = "ButtonSelectReport" Me.ButtonSelectReport.Size = New System.Drawing.Size(141, 23) Me.ButtonSelectReport.TabIndex = 3 Me.ButtonSelectReport.Text = "Select Report" Me.ButtonSelectReport.UseVisualStyleBackColor = True ' 'ButtonReloadReport ' Me.ButtonReloadReport.Location = New System.Drawing.Point(176, 47) Me.ButtonReloadReport.Name = "ButtonReloadReport" Me.ButtonReloadReport.Size = New System.Drawing.Size(141, 23) Me.ButtonReloadReport.TabIndex = 4 Me.ButtonReloadReport.Text = "Reload Report" Me.ButtonReloadReport.UseVisualStyleBackColor = True ' 'OpenFileDialog1 ' Me.OpenFileDialog1.FileName = "OpenFileDialog1" ' 'Form1 ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(669, 393) Me.Controls.Add(Me.ButtonReloadReport) Me.Controls.Add(Me.ButtonSelectReport) Me.Controls.Add(Me.TextBox1) Me.Controls.Add(Me.Label1) Me.Controls.Add(Me.RdlViewer1) Me.Name = "Form1" Me.Text = "Sample Report App" Me.ResumeLayout(False) Me.PerformLayout() End Sub Friend WithEvents RdlViewer1 As Majorsilence.Reporting.RdlViewer.RdlViewer Friend WithEvents Label1 As System.Windows.Forms.Label Friend WithEvents TextBox1 As System.Windows.Forms.TextBox Friend WithEvents ButtonSelectReport As System.Windows.Forms.Button Friend WithEvents ButtonReloadReport As System.Windows.Forms.Button Friend WithEvents OpenFileDialog1 As System.Windows.Forms.OpenFileDialog End Class ================================================ FILE: Examples/SampleApp/SampleReportApp/Form1.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 17, 17 ================================================ FILE: Examples/SampleApp/SampleReportApp/Form1.vb ================================================ Public Class Form1 Private file As String Private Sub ButtonSelectReport_Click(sender As Object, e As EventArgs) Handles ButtonSelectReport.Click If OpenFileDialog1.ShowDialog = System.Windows.Forms.DialogResult.OK Then file = OpenFileDialog1.FileName End If End Sub Private Async Sub ButtonReloadReport_Click(sender As Object, e As EventArgs) Handles ButtonReloadReport.Click Await RdlViewer1.SetSourceFile(New Uri(file)) RdlViewer1.Parameters = "ConnectionString=" & TextBox1.Text Await RdlViewer1.Rebuild() End Sub Private Sub RdlViewer1_PageNavigation(sender As Object, e As Majorsilence.Reporting.RdlViewer.PageNavigationEventArgs) Handles RdlViewer1.PageNavigation MessageBox.Show(e.NewPage) End Sub End Class ================================================ FILE: Examples/SampleApp/SampleReportApp/GlobalSuppressions.vb ================================================ ' This file is used by Code Analysis to maintain SuppressMessage ' attributes that are applied to this project. ' Project-level suppressions either have no target or are given ' a specific target and scoped to a namespace, type, member, etc. Imports System.Diagnostics.CodeAnalysis ================================================ FILE: Examples/SampleApp/SampleReportApp/My Project/Application.Designer.vb ================================================ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. ' Runtime Version:4.0.30319.42000 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. ' '------------------------------------------------------------------------------ Option Strict On Option Explicit On Namespace My 'NOTE: This file is auto-generated; do not modify it directly. To make changes, ' or if you encounter build errors in this file, go to the Project Designer ' (go to Project Properties or double-click the My Project node in ' Solution Explorer), and make changes on the Application tab. ' Partial Friend Class MyApplication _ Public Sub New() MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) Me.IsSingleInstance = false Me.EnableVisualStyles = true Me.SaveMySettingsOnExit = true Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses End Sub _ Protected Overrides Sub OnCreateMainForm() Me.MainForm = Global.SampleReportApp.Form1 End Sub _ Protected Overrides Function OnInitialize(ByVal commandLineArgs As System.Collections.ObjectModel.ReadOnlyCollection(Of String)) As Boolean Me.MinimumSplashScreenDisplayTime = 0 Return MyBase.OnInitialize(commandLineArgs) End Function End Class End Namespace ================================================ FILE: Examples/SampleApp/SampleReportApp/My Project/Application.myapp ================================================  true Form1 false 0 true 0 0 true ================================================ FILE: Examples/SampleApp/SampleReportApp/My Project/AssemblyInfo.vb ================================================ Imports System Imports System.Reflection Imports System.Runtime.InteropServices ' General Information about an assembly is controlled through the following ' set of attributes. Change these attribute values to modify the information ' associated with an assembly. ' Review the values of the assembly attributes 'The following GUID is for the ID of the typelib if this project is exposed to COM ' Version information for an assembly consists of the following four values: ' ' Major Version ' Minor Version ' Build Number ' Revision ' ' You can specify all the values or you can default the Build and Revision Numbers ' by using the '*' as shown below: ' ================================================ FILE: Examples/SampleApp/SampleReportApp/My Project/Resources.Designer.vb ================================================ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. ' Runtime Version:4.0.30319.42000 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. ' '------------------------------------------------------------------------------ Option Strict On Option Explicit On Imports System Namespace My.Resources 'This class was auto-generated by the StronglyTypedResourceBuilder 'class via a tool like ResGen or Visual Studio. 'To add or remove a member, edit your .ResX file then rerun ResGen 'with the /str option, or rebuild your VS project. ''' ''' A strongly-typed resource class, for looking up localized strings, etc. ''' _ Friend Module Resources Private resourceMan As Global.System.Resources.ResourceManager Private resourceCulture As Global.System.Globalization.CultureInfo ''' ''' Returns the cached ResourceManager instance used by this class. ''' _ Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager Get If Object.ReferenceEquals(resourceMan, Nothing) Then Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SampleReportApp.Resources", GetType(Resources).Assembly) resourceMan = temp End If Return resourceMan End Get End Property ''' ''' Overrides the current thread's CurrentUICulture property for all ''' resource lookups using this strongly typed resource class. ''' _ Friend Property Culture() As Global.System.Globalization.CultureInfo Get Return resourceCulture End Get Set resourceCulture = value End Set End Property End Module End Namespace ================================================ FILE: Examples/SampleApp/SampleReportApp/My Project/Resources.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ================================================ FILE: Examples/SampleApp/SampleReportApp/My Project/Settings.Designer.vb ================================================ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. ' Runtime Version:4.0.30319.42000 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. ' '------------------------------------------------------------------------------ Option Strict On Option Explicit On Namespace My _ Partial Friend NotInheritable Class MySettings Inherits Global.System.Configuration.ApplicationSettingsBase Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) #Region "My.Settings Auto-Save Functionality" #If _MyType = "WindowsForms" Then Private Shared addedHandler As Boolean Private Shared addedHandlerLockObject As New Object _ Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs) If My.Application.SaveMySettingsOnExit Then My.Settings.Save() End If End Sub #End If #End Region Public Shared ReadOnly Property [Default]() As MySettings Get #If _MyType = "WindowsForms" Then If Not addedHandler Then SyncLock addedHandlerLockObject If Not addedHandler Then AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings addedHandler = True End If End SyncLock End If #End If Return defaultInstance End Get End Property End Class End Namespace Namespace My _ Friend Module MySettingsProperty _ Friend ReadOnly Property Settings() As Global.SampleReportApp.My.MySettings Get Return Global.SampleReportApp.My.MySettings.Default End Get End Property End Module End Namespace ================================================ FILE: Examples/SampleApp/SampleReportApp/My Project/Settings.settings ================================================  ================================================ FILE: Examples/SampleApp/SampleReportApp/SampleReportApp.vbproj ================================================  net8.0-windows WinExe SampleReportApp.My.MyApplication WindowsForms false true true True Application.myapp True True True Resources.resx True Settings.settings True MyApplicationCodeGenerator Application.Designer.vb PreserveNewest ================================================ FILE: Examples/SampleApp/SampleReportApp/app.config ================================================
================================================ FILE: Examples/SampleApp/SampleReportApp.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0.31101.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SampleReportApp", "SampleReportApp\SampleReportApp.vbproj", "{A542F20D-0395-4969-975F-3DA1033BD433}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {A542F20D-0395-4969-975F-3DA1033BD433}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A542F20D-0395-4969-975F-3DA1033BD433}.Debug|Any CPU.Build.0 = Debug|Any CPU {A542F20D-0395-4969-975F-3DA1033BD433}.Debug|x64.ActiveCfg = Debug|Any CPU {A542F20D-0395-4969-975F-3DA1033BD433}.Debug|x86.ActiveCfg = Debug|x86 {A542F20D-0395-4969-975F-3DA1033BD433}.Debug|x86.Build.0 = Debug|x86 {A542F20D-0395-4969-975F-3DA1033BD433}.Release|Any CPU.ActiveCfg = Release|Any CPU {A542F20D-0395-4969-975F-3DA1033BD433}.Release|Any CPU.Build.0 = Release|Any CPU {A542F20D-0395-4969-975F-3DA1033BD433}.Release|x64.ActiveCfg = Release|Any CPU {A542F20D-0395-4969-975F-3DA1033BD433}.Release|x86.ActiveCfg = Release|x86 {A542F20D-0395-4969-975F-3DA1033BD433}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: Examples/SampleApp2-SetData/SampleApp2-SetData/App.config ================================================ ================================================ FILE: Examples/SampleApp2-SetData/SampleApp2-SetData/Form1.Designer.cs ================================================ namespace SampleApp2_SetData { partial class Form1 { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { SuspendLayout(); // // Form1 // AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; ClientSize = new System.Drawing.Size(994, 533); Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); Name = "Form1"; Text = "Form1"; Load += Form1_Load; ResumeLayout(false); } #endregion } } ================================================ FILE: Examples/SampleApp2-SetData/SampleApp2-SetData/Form1.cs ================================================ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Microsoft.Data.Sqlite; namespace SampleApp2_SetData { public partial class Form1 : Form { private Majorsilence.Reporting.RdlViewer.RdlViewer rdlViewerSourceRdlNoLoad; private Majorsilence.Reporting.RdlViewer.RdlViewer rdlViewerSetSource; public Form1() { InitializeComponent(); var split = new SplitContainer(); split.Dock = DockStyle.Fill; this.Controls.Add(split); rdlViewerSourceRdlNoLoad = new Majorsilence.Reporting.RdlViewer.RdlViewer(); rdlViewerSourceRdlNoLoad.Dock = DockStyle.Fill; split.Panel1.Controls.Add(rdlViewerSourceRdlNoLoad); rdlViewerSetSource = new Majorsilence.Reporting.RdlViewer.RdlViewer(); rdlViewerSetSource.Dock = DockStyle.Fill; split.Panel2.Controls.Add(rdlViewerSetSource); // 50% left, 50% right split.SplitterDistance = split.Width / 2; } private async void Form1_Load(object sender, EventArgs e) { // TODO: You must change this connection string to match where your database is string sqlFile = System.IO.Path.Combine(AppContext.BaseDirectory, @"..\", @"..\", @"..\", @"..\", @"..\", "northwindEF.db"); string connectionString = $"Data Source={sqlFile}"; using SqliteConnection cn = new SqliteConnection(connectionString); using SqliteCommand cmd = new SqliteCommand(); cmd.CommandType = CommandType.Text; cmd.CommandText = "SELECT CategoryID, CategoryName, Description FROM Categories;"; cmd.Connection = cn; DataTable dt = await GetTable(cmd); string filepath = System.IO.Path.Combine(AppContext.BaseDirectory, "SampleApp2-TestReport.rdl"); await ExampleViaSourceRdlNoLoad(filepath, dt); await ExampleViaSetSourceFile(filepath, dt); } private async Task ExampleViaSourceRdlNoLoad(string filepath, DataTable dt) { rdlViewerSourceRdlNoLoad.SourceRdlNoLoad = await System.IO.File.ReadAllTextAsync(filepath); rdlViewerSourceRdlNoLoad.Parameters = ""; var rpt = await rdlViewerSourceRdlNoLoad.Report(); await rpt.DataSets["Data"].SetData(dt); await rdlViewerSourceRdlNoLoad.Rebuild(); } private async Task ExampleViaSetSourceFile(string filepath, DataTable dt) { await rdlViewerSetSource.SetSourceFile(new Uri(filepath)); var rpt = await rdlViewerSetSource.Report(); await rpt.DataSets["Data"].SetData(dt); await rdlViewerSetSource.Rebuild(); } private async Task GetTable(SqliteCommand cmd) { System.Data.ConnectionState original = cmd.Connection.State; if (cmd.Connection.State == ConnectionState.Closed) { await cmd.Connection.OpenAsync(); } DataTable dt = new DataTable(); await using var dr = await cmd.ExecuteReaderAsync(); dt.Load(dr); dr.Close(); if (original == ConnectionState.Closed) { cmd.Connection.Close(); } return dt; } } } ================================================ FILE: Examples/SampleApp2-SetData/SampleApp2-SetData/Form1.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ================================================ FILE: Examples/SampleApp2-SetData/SampleApp2-SetData/GlobalSuppressions.cs ================================================ // This file is used by Code Analysis to maintain SuppressMessage // attributes that are applied to this project. // Project-level suppressions either have no target or are given // a specific target and scoped to a namespace, type, member, etc. using System.Diagnostics.CodeAnalysis; #if !DRAWINGCOMPAT [assembly: SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "System.Drawing usage is intentional")] #endif ================================================ FILE: Examples/SampleApp2-SetData/SampleApp2-SetData/Program.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace SampleApp2_SetData { static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } ================================================ FILE: Examples/SampleApp2-SetData/SampleApp2-SetData/Properties/Resources.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace SampleApp2_SetData.Properties { using System; /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Resources() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SampleApp2_SetData.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } } } ================================================ FILE: Examples/SampleApp2-SetData/SampleApp2-SetData/Properties/Resources.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ================================================ FILE: Examples/SampleApp2-SetData/SampleApp2-SetData/Properties/Settings.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace SampleApp2_SetData.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.9.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); public static Settings Default { get { return defaultInstance; } } } } ================================================ FILE: Examples/SampleApp2-SetData/SampleApp2-SetData/Properties/Settings.settings ================================================  ================================================ FILE: Examples/SampleApp2-SetData/SampleApp2-SetData/SampleApp2-SetData.csproj ================================================  net8.0-windows WinExe SampleApp2_SetData false true true PreserveNewest PreserveNewest ================================================ FILE: Examples/SampleApp2-SetData/SampleApp2-SetData/SampleApp2-TestReport.rdl ================================================ 11in 8.5in Microsoft.Data.Sqlite Data Source=C:\Path\Does\Not\Exist\northwindEF.db 7.5in .25in .25in .25in .25in DS1 SELECT CategoryID, CategoryName, Description FROM Categories CategoryID System.Int64 CategoryName System.String Description System.String .5in .1in .1in 6in .25in Test Data Set Report true true DataQuery returned no rows! 1.25in 1.5in 1.375in
12pt CategoryID CategoryName Description true
12pt =Fields!CategoryID.Value false =Fields!CategoryName.Value true =Fields!Description.Value true
36pt 14pt 1pt 10pt 12pt 3in =Globals!PageNumber + ' of ' + Globals!TotalPages true true
================================================ FILE: Examples/SampleApp2-SetData/SampleApp2-SetData.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0.31101.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleApp2-SetData", "SampleApp2-SetData\SampleApp2-SetData.csproj", "{8711F55E-AC2F-496C-B316-3A5AA9FD0824}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|Any CPU.Build.0 = Debug|Any CPU {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|x64.ActiveCfg = Debug|x64 {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|x64.Build.0 = Debug|x64 {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|x86.ActiveCfg = Debug|x86 {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|x86.Build.0 = Debug|x86 {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|Any CPU.ActiveCfg = Release|Any CPU {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|Any CPU.Build.0 = Release|Any CPU {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|x64.ActiveCfg = Release|Any CPU {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|x86.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: Examples/SampleAppHyperLinkCustomAction/HyperLinkExample/App.config ================================================ ================================================ FILE: Examples/SampleAppHyperLinkCustomAction/HyperLinkExample/Form1.Designer.cs ================================================ namespace HyperLinkExample { partial class Form1 { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.rdlViewer1 = new Majorsilence.Reporting.RdlViewer.RdlViewer(); this.ButtonReloadReport = new System.Windows.Forms.Button(); this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); this.SuspendLayout(); // // rdlViewer1 // this.rdlViewer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.rdlViewer1.Cursor = System.Windows.Forms.Cursors.Default; this.rdlViewer1.Folder = null; this.rdlViewer1.HighlightAll = false; this.rdlViewer1.HighlightAllColor = System.Drawing.Color.Fuchsia; this.rdlViewer1.HighlightCaseSensitive = false; this.rdlViewer1.HighlightItemColor = System.Drawing.Color.Aqua; this.rdlViewer1.HighlightPageItem = null; this.rdlViewer1.HighlightText = null; this.rdlViewer1.Location = new System.Drawing.Point(58, 77); this.rdlViewer1.Name = "rdlViewer1"; this.rdlViewer1.PageCurrent = 1; this.rdlViewer1.Parameters = ""; this.rdlViewer1.ReportName = null; this.rdlViewer1.ScrollMode = Majorsilence.Reporting.RdlViewer.ScrollModeEnum.Continuous; this.rdlViewer1.SelectTool = false; this.rdlViewer1.ShowFindPanel = false; this.rdlViewer1.ShowParameterPanel = true; this.rdlViewer1.ShowWaitDialog = true; this.rdlViewer1.Size = new System.Drawing.Size(558, 323); this.rdlViewer1.TabIndex = 0; this.rdlViewer1.UseTrueMargins = true; this.rdlViewer1.Zoom = 0.664902F; this.rdlViewer1.ZoomMode = Majorsilence.Reporting.RdlViewer.ZoomEnum.FitWidth; this.rdlViewer1.Hyperlink += new Majorsilence.Reporting.RdlViewer.RdlViewer.HyperlinkEventHandler(this.rdlViewer1_Hyperlink); // // ButtonReloadReport // this.ButtonReloadReport.Location = new System.Drawing.Point(222, 33); this.ButtonReloadReport.Name = "ButtonReloadReport"; this.ButtonReloadReport.Size = new System.Drawing.Size(141, 23); this.ButtonReloadReport.TabIndex = 6; this.ButtonReloadReport.Text = "Load Report"; this.ButtonReloadReport.UseVisualStyleBackColor = true; this.ButtonReloadReport.Click += new System.EventHandler(this.ButtonReloadReport_Click); // // openFileDialog1 // this.openFileDialog1.FileName = "openFileDialog1"; // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(672, 412); this.Controls.Add(this.ButtonReloadReport); this.Controls.Add(this.rdlViewer1); this.Name = "Form1"; this.Text = "Form1"; this.ResumeLayout(false); } #endregion private Majorsilence.Reporting.RdlViewer.RdlViewer rdlViewer1; internal System.Windows.Forms.Button ButtonReloadReport; private System.Windows.Forms.OpenFileDialog openFileDialog1; } } ================================================ FILE: Examples/SampleAppHyperLinkCustomAction/HyperLinkExample/Form1.cs ================================================ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace HyperLinkExample { public partial class Form1 : Form { private string file = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"..\", @"..\", @"..\", @"..\", @"..\", @"SqliteExamples\SimpleTest1.rdl"); public Form1() { InitializeComponent(); } private async void ButtonReloadReport_Click(object sender, EventArgs e) { await LoadReport(); } private async Task LoadReport() { await rdlViewer1.SetSourceFile(new Uri(file)); await rdlViewer1.Rebuild(); } private void rdlViewer1_Hyperlink(object source, Majorsilence.Reporting.RdlViewer.HyperlinkEventArgs e) { // report LastName field as HyperLink action var url = new Uri(e.Hyperlink); if (url.Scheme == "lastname" ) { e.Cancel = true; MessageBox.Show(url.ToString()); } } } } ================================================ FILE: Examples/SampleAppHyperLinkCustomAction/HyperLinkExample/Form1.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 17, 17 ================================================ FILE: Examples/SampleAppHyperLinkCustomAction/HyperLinkExample/GlobalSuppressions.cs ================================================ // This file is used by Code Analysis to maintain SuppressMessage // attributes that are applied to this project. // Project-level suppressions either have no target or are given // a specific target and scoped to a namespace, type, member, etc. using System.Diagnostics.CodeAnalysis; #if !DRAWINGCOMPAT [assembly: SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "System.Drawing usage is intentional")] #endif ================================================ FILE: Examples/SampleAppHyperLinkCustomAction/HyperLinkExample/HyperLinkExample.csproj ================================================  net8.0-windows WinExe false true true PreserveNewest ================================================ FILE: Examples/SampleAppHyperLinkCustomAction/HyperLinkExample/Program.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace HyperLinkExample { static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } ================================================ FILE: Examples/SampleAppHyperLinkCustomAction/HyperLinkExample/Properties/Resources.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace HyperLinkExample.Properties { using System; /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Resources() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HyperLinkExample.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } } } ================================================ FILE: Examples/SampleAppHyperLinkCustomAction/HyperLinkExample/Properties/Resources.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ================================================ FILE: Examples/SampleAppHyperLinkCustomAction/HyperLinkExample/Properties/Settings.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace HyperLinkExample.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.9.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); public static Settings Default { get { return defaultInstance; } } } } ================================================ FILE: Examples/SampleAppHyperLinkCustomAction/HyperLinkExample/Properties/Settings.settings ================================================  ================================================ FILE: Examples/SampleAppHyperLinkCustomAction/SampleReportApp.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.9.34723.18 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DataProviders", "..\..\DataProviders\DataProviders.csproj", "{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RdlCri", "..\..\RdlCri\RdlCri.csproj", "{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RdlEngine", "..\..\RdlEngine\RdlEngine.csproj", "{C97E91F4-B310-44E2-9B6C-96775395722D}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RdlViewer", "..\..\RdlViewer\RdlViewer.csproj", "{D99145B1-CB6C-41F5-BA86-723325145FB5}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HyperLinkExample", "HyperLinkExample\HyperLinkExample.csproj", "{1612FA9D-48BD-4866-B8CF-F871D3A61380}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.Build.0 = Debug|Any CPU {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.ActiveCfg = Release|Any CPU {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.Build.0 = Release|Any CPU {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.Build.0 = Debug|Any CPU {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.ActiveCfg = Release|Any CPU {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.Build.0 = Release|Any CPU {C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.Build.0 = Debug|Any CPU {C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.ActiveCfg = Release|Any CPU {C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.Build.0 = Release|Any CPU {D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.Build.0 = Debug|Any CPU {D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.ActiveCfg = Release|Any CPU {D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.Build.0 = Release|Any CPU {1612FA9D-48BD-4866-B8CF-F871D3A61380}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1612FA9D-48BD-4866-B8CF-F871D3A61380}.Debug|Any CPU.Build.0 = Debug|Any CPU {1612FA9D-48BD-4866-B8CF-F871D3A61380}.Release|Any CPU.ActiveCfg = Release|Any CPU {1612FA9D-48BD-4866-B8CF-F871D3A61380}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: Examples/SampleDesignerControl/SampleDesignerControl/App.config ================================================ ================================================ FILE: Examples/SampleDesignerControl/SampleDesignerControl/GlobalSuppressions.cs ================================================ // This file is used by Code Analysis to maintain SuppressMessage // attributes that are applied to this project. // Project-level suppressions either have no target or are given // a specific target and scoped to a namespace, type, member, etc. using System.Diagnostics.CodeAnalysis; #if !DRAWINGCOMPAT [assembly: SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "System.Drawing usage is intentional")] #endif ================================================ FILE: Examples/SampleDesignerControl/SampleDesignerControl/Program.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace SampleApp2_SetData { static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Form frm = new Form(); var ctl = new Majorsilence.Reporting.RdlDesign.RdlUserControl(); ctl.OpenFile(@"C:\Users\peter\source\repos\My-FyiReporting\Examples\Examples\FileDirectoryTest.rdl"); ctl.Dock = DockStyle.Fill; frm.Controls.Add(ctl); Application.Run(frm); } } } ================================================ FILE: Examples/SampleDesignerControl/SampleDesignerControl/Properties/Resources.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace SampleApp2_SetData.Properties { using System; /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Resources() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SampleApp2_SetData.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } } } ================================================ FILE: Examples/SampleDesignerControl/SampleDesignerControl/Properties/Resources.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ================================================ FILE: Examples/SampleDesignerControl/SampleDesignerControl/Properties/Settings.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace SampleApp2_SetData.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.9.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); public static Settings Default { get { return defaultInstance; } } } } ================================================ FILE: Examples/SampleDesignerControl/SampleDesignerControl/Properties/Settings.settings ================================================  ================================================ FILE: Examples/SampleDesignerControl/SampleDesignerControl/SampleApp2-TestReport.rdl ================================================ 11in 8.5in Microsoft.Data.Sqlite Data Source=C:\Path\Does\Not\Exist\northwindEF.db 7.5in .25in .25in .25in .25in DS1 SELECT CategoryID, CategoryName, Description FROM Categories CategoryID System.Int64 CategoryName System.String Description System.String .5in .1in .1in 6in .25in Test Data Set Report true true DataQuery returned no rows! 1.25in 1.5in 1.375in
12pt CategoryID CategoryName Description true
12pt =Fields!CategoryID.Value false =Fields!CategoryName.Value true =Fields!Description.Value true
36pt 14pt 1pt 10pt 12pt 3in =Globals!PageNumber + ' of ' + Globals!TotalPages true true
================================================ FILE: Examples/SampleDesignerControl/SampleDesignerControl/SampleDesignerControl.csproj ================================================  net8.0-windows WinExe SampleApp2_SetData SampleApp2-SetData false true true PreserveNewest PreserveNewest ================================================ FILE: Examples/SampleDesignerControl/SampleDesignerControl.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Express 2012 for Windows Desktop Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleDesignerControl", "SampleDesignerControl\SampleDesignerControl.csproj", "{8711F55E-AC2F-496C-B316-3A5AA9FD0824}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataProviders", "..\..\DataProviders\DataProviders.csproj", "{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RdlCri", "..\..\RdlCri\RdlCri.csproj", "{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RdlEngine", "..\..\RdlEngine\RdlEngine.csproj", "{C97E91F4-B310-44E2-9B6C-96775395722D}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReportDesigner", "..\..\RdlDesign\ReportDesigner.csproj", "{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RdlViewer", "..\..\RdlViewer\RdlViewer.csproj", "{D99145B1-CB6C-41F5-BA86-723325145FB5}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleDesignerControlWPF", "SampleDesignerControlWPF\SampleDesignerControlWPF.csproj", "{24171317-5C8C-4583-AF20-8C67EF9032EE}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|Any CPU.Build.0 = Debug|Any CPU {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|x64.ActiveCfg = Debug|Any CPU {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|x86.ActiveCfg = Debug|x86 {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|x86.Build.0 = Debug|x86 {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|Any CPU.ActiveCfg = Release|Any CPU {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|Any CPU.Build.0 = Release|Any CPU {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|x64.ActiveCfg = Release|Any CPU {8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|x86.ActiveCfg = Release|Any CPU {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.Build.0 = Debug|Any CPU {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x64.ActiveCfg = Debug|x64 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x64.Build.0 = Debug|x64 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x86.ActiveCfg = Debug|x86 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x86.Build.0 = Debug|x86 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.ActiveCfg = Release|Any CPU {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.Build.0 = Release|Any CPU {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x64.ActiveCfg = Release|x64 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x64.Build.0 = Release|x64 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x86.ActiveCfg = Release|x86 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x86.Build.0 = Release|x86 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.Build.0 = Debug|Any CPU {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x64.ActiveCfg = Debug|x64 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x64.Build.0 = Debug|x64 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x86.ActiveCfg = Debug|x86 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x86.Build.0 = Debug|x86 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.ActiveCfg = Release|Any CPU {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.Build.0 = Release|Any CPU {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x64.ActiveCfg = Release|x64 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x64.Build.0 = Release|x64 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x86.ActiveCfg = Release|x86 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x86.Build.0 = Release|x86 {C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.Build.0 = Debug|Any CPU {C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.ActiveCfg = Debug|x64 {C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.Build.0 = Debug|x64 {C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.ActiveCfg = Debug|x86 {C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.Build.0 = Debug|x86 {C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.ActiveCfg = Release|Any CPU {C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.Build.0 = Release|Any CPU {C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.ActiveCfg = Release|x64 {C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.Build.0 = Release|x64 {C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.ActiveCfg = Release|x86 {C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.Build.0 = Release|x86 {3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Debug|Any CPU.Build.0 = Debug|Any CPU {3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Debug|x64.ActiveCfg = Debug|x64 {3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Debug|x64.Build.0 = Debug|x64 {3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Debug|x86.ActiveCfg = Debug|x86 {3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Debug|x86.Build.0 = Debug|x86 {3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Release|Any CPU.ActiveCfg = Release|Any CPU {3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Release|Any CPU.Build.0 = Release|Any CPU {3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Release|x64.ActiveCfg = Release|x64 {3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Release|x64.Build.0 = Release|x64 {3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Release|x86.ActiveCfg = Release|x86 {3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Release|x86.Build.0 = Release|x86 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.Build.0 = Debug|Any CPU {D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x64.ActiveCfg = Debug|x64 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x64.Build.0 = Debug|x64 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x86.ActiveCfg = Debug|x86 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x86.Build.0 = Debug|x86 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.ActiveCfg = Release|Any CPU {D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.Build.0 = Release|Any CPU {D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x64.ActiveCfg = Release|x64 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x64.Build.0 = Release|x64 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x86.ActiveCfg = Release|x86 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x86.Build.0 = Release|x86 {24171317-5C8C-4583-AF20-8C67EF9032EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {24171317-5C8C-4583-AF20-8C67EF9032EE}.Debug|Any CPU.Build.0 = Debug|Any CPU {24171317-5C8C-4583-AF20-8C67EF9032EE}.Debug|x64.ActiveCfg = Debug|Any CPU {24171317-5C8C-4583-AF20-8C67EF9032EE}.Debug|x86.ActiveCfg = Debug|Any CPU {24171317-5C8C-4583-AF20-8C67EF9032EE}.Release|Any CPU.ActiveCfg = Release|Any CPU {24171317-5C8C-4583-AF20-8C67EF9032EE}.Release|Any CPU.Build.0 = Release|Any CPU {24171317-5C8C-4583-AF20-8C67EF9032EE}.Release|x64.ActiveCfg = Release|Any CPU {24171317-5C8C-4583-AF20-8C67EF9032EE}.Release|x86.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: Examples/SampleDesignerControl/SampleDesignerControlWPF/App.config ================================================ ================================================ FILE: Examples/SampleDesignerControl/SampleDesignerControlWPF/App.xaml ================================================  ================================================ FILE: Examples/SampleDesignerControl/SampleDesignerControlWPF/App.xaml.cs ================================================ using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Threading.Tasks; using System.Windows; namespace SampleDesignerControlWPF { /// /// Interaction logic for App.xaml /// public partial class App : Application { } } ================================================ FILE: Examples/SampleDesignerControl/SampleDesignerControlWPF/GlobalSuppressions.cs ================================================ // This file is used by Code Analysis to maintain SuppressMessage // attributes that are applied to this project. // Project-level suppressions either have no target or are given // a specific target and scoped to a namespace, type, member, etc. using System.Diagnostics.CodeAnalysis; #if !DRAWINGCOMPAT [assembly: SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "System.Drawing usage is intentional")] #endif ================================================ FILE: Examples/SampleDesignerControl/SampleDesignerControlWPF/MainWindow.xaml ================================================  ================================================ FILE: Examples/SampleDesignerControl/SampleDesignerControlWPF/MainWindow.xaml.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace SampleDesignerControlWPF { /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Window_Loaded_1(object sender, RoutedEventArgs e) { System.Windows.Forms.Application.EnableVisualStyles(); reportDesigner.OpenFile(@"C:\Users\Peter\Projects\My-FyiReporting\Examples\Examples\FileDirectoryTest.rdl"); } } } ================================================ FILE: Examples/SampleDesignerControl/SampleDesignerControlWPF/Properties/Resources.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace SampleDesignerControlWPF.Properties { using System; /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Resources() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SampleDesignerControlWPF.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } } } ================================================ FILE: Examples/SampleDesignerControl/SampleDesignerControlWPF/Properties/Resources.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ================================================ FILE: Examples/SampleDesignerControl/SampleDesignerControlWPF/Properties/Settings.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace SampleDesignerControlWPF.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.9.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); public static Settings Default { get { return defaultInstance; } } } } ================================================ FILE: Examples/SampleDesignerControl/SampleDesignerControlWPF/Properties/Settings.settings ================================================  ================================================ FILE: Examples/SampleDesignerControl/SampleDesignerControlWPF/SampleDesignerControlWPF.csproj ================================================  net8.0-windows WinExe false true true true PreserveNewest ================================================ FILE: Examples/SqliteExamples/SimpleTest1.rdl ================================================ 279.4mm 431.8mm Microsoft.Data.Sqlite Data Source=C:\Users\peter\source\repos\My-FyiReporting\Examples\SqliteExamples\sqlitetestdb2.db 7.5in .25in .25in .25in .25in DS1 SELECT EmployeeID, LastName, FirstName, Title, TitleOfCourtesy, BirthDate, HireDate, Address, City, Region, PostalCode, Country, HomePhone, Extension, Photo, Notes, PhotoPath FROM Employees EmployeeID System.Int64 LastName System.String FirstName System.String Title System.String TitleOfCourtesy System.String BirthDate System.DateTime HireDate System.DateTime Address System.String City System.String Region System.String PostalCode System.String Country System.String HomePhone System.String Extension System.String Photo System.Byte[] Notes System.String PhotoPath System.String .5in .1in .1in 6in .25in Simple Test true true DataQuery returned no rows! 1.25in 1in 1.125in 1in 1.875in 1.125in 1in 1in 1in 1in 1.25in 1in 1.125in 1.125in 1in 1in 1.125in
12pt EmployeeID LastName FirstName Title TitleOfCourtesy BirthDate HireDate Address City Region PostalCode Country HomePhone Extension Photo Notes PhotoPath true
12pt =Fields!EmployeeID.Value false =Fields!LastName.Value true ="lastname:" & {LastName} =Fields!FirstName.Value true =Fields!Title.Value true =Fields!TitleOfCourtesy.Value true =Fields!BirthDate.Value false =Fields!HireDate.Value false =Fields!Address.Value true =Fields!City.Value true =Fields!Region.Value true =Fields!PostalCode.Value true =Fields!Country.Value true =Fields!HomePhone.Value true =Fields!Extension.Value true =Fields!Photo.Value false =Fields!Notes.Value true =Fields!PhotoPath.Value true
12pt 1in Hello World 1 122.5pt 94.15pt
242.0pt 1 14pt 1pt 10pt 12pt 3in =Globals!PageNumber + ' of ' + Globals!TotalPages true true Report AttributeNormal
================================================ FILE: Examples/SqliteExamples/SimpleTest2.rdl ================================================ 11in 8.5in Microsoft.Data.Sqlite Data Source=C:\Users\Peter\Projects\My-FyiReporting\Examples\northwindEF.db 7.5in .25in .25in .25in .25in DS1 SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued, DiscontinuedDate FROM Products ProductID System.Int64 ProductName System.String SupplierID System.Int64 CategoryID System.Int64 QuantityPerUnit System.String UnitPrice System.Decimal UnitsInStock System.Int16 UnitsOnOrder System.Int16 ReorderLevel System.Int16 Discontinued System.Boolean DiscontinuedDate System.DateTime .5in .02in .1in 6in .25in Simple Test 2 .3in 0.0in 1.125in .2in ProductID .3in 1.125in 1.375in .2in ProductName .3in 2.500in 1.25in .2in SupplierID .3in 3.750in 1.25in .2in CategoryID .3in 5.000in 1.875in .2in QuantityPerUnit .3in 6.875in 1.125in .2in UnitPrice .3in 8.000in 1.5in .2in UnitsInStock .3in 9.500in 1.5in .2in UnitsOnOrder .3in 11.000in 1.5in .2in ReorderLevel .3in 12.500in 1.5in .2in Discontinued .3in 14.000in 2in .2in DiscontinuedDate true true 25pt Data 24pt Query returned no rows! .1in 0.0in 1.125in .25in =Fields!ProductID.Value false .1in 1.125in 1.375in .25in =Fields!ProductName.Value true .1in 2.500in 1.25in .25in =Fields!SupplierID.Value false .1in 3.750in 1.25in .25in =Fields!CategoryID.Value false .1in 5.000in 1.875in .25in =Fields!QuantityPerUnit.Value true .1in 6.875in 1.125in .25in =Fields!UnitPrice.Value false .1in 8.000in 1.5in .25in =Fields!UnitsInStock.Value false .1in 9.500in 1.5in .25in =Fields!UnitsOnOrder.Value false .1in 11.000in 1.5in .25in =Fields!ReorderLevel.Value false .1in 12.500in 1.5in .25in =Fields!Discontinued.Value false .1in 14.000in 2in .25in =Fields!DiscontinuedDate.Value false 16.000in 14pt 1pt 10pt 12pt 3in =Globals!PageNumber + ' of ' + Globals!TotalPages true true ================================================ FILE: Examples/SqliteExamples/SimpleTest3WithParameters.rdl ================================================ 11in 8.5in Microsoft.Data.Sqlite Data Source=C:\Users\Peter\Projects\My-FyiReporting\Examples\northwindEF.db 7.5in .25in .25in .25in .25in String False False String False Hello World False DS1 SELECT CustomerID, CompanyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country, Phone, Fax FROM Customers CustomerID System.String CompanyName System.String ContactName System.String ContactTitle System.String Address System.String City System.String Region System.String PostalCode System.String Country System.String Phone System.String Fax System.String .5in .02in .1in 6in .25in Simple Parameter Test 3 .3in 0.0in 1.25in .2in CustomerID .3in 1.25in 1.375in .2in CompanyName .3in 2.625in 1.375in .2in ContactName .3in 4.000in 1.5in .2in ContactTitle .3in 5.500in 1in .2in Address .3in 6.500in 1in .2in City .3in 7.500in 1in .2in Region .3in 8.500in 1.25in .2in PostalCode .3in 9.750in 1in .2in Country .3in 10.750in 1in .2in Phone .3in 11.750in 1in .2in Fax true true 25pt Data 24pt Query returned no rows! .1in 0.0in 1.25in .25in =Fields!CustomerID.Value true .1in 1.25in 1.375in .25in =Fields!CompanyName.Value true .1in 2.625in 1.375in .25in =Fields!ContactName.Value true .1in 4.000in 1.5in .25in =Fields!ContactTitle.Value true .1in 5.500in 1in .25in =Fields!Address.Value true .1in 6.500in 1in .25in =Fields!City.Value true .1in 7.500in 1in .25in =Fields!Region.Value true .1in 8.500in 1.25in .25in =Fields!PostalCode.Value true .1in 9.750in 1in .25in =Fields!Country.Value true .1in 10.750in 1in .25in =Fields!Phone.Value true .1in 11.750in 1in .25in =Fields!Fax.Value true 12.750in 14pt 1pt 10pt 12pt 3in =Globals!PageNumber + ' of ' + Globals!TotalPages true true ================================================ FILE: Examples/SqliteExamples/SimpleTestConnectionString.rdl ================================================ 11in 8.5in 7.5in .25in .25in .25in .25in DS1 SELECT EmployeeID, LastName, FirstName, Title, TitleOfCourtesy, BirthDate, HireDate, Address, City, Region, PostalCode, Country, HomePhone, Extension, Photo, Notes, PhotoPath FROM Employees EmployeeID System.Int64 LastName System.String FirstName System.String Title System.String TitleOfCourtesy System.String BirthDate System.DateTime HireDate System.DateTime Address System.String City System.String Region System.String PostalCode System.String Country System.String HomePhone System.String Extension System.String Photo System.Byte[] Notes System.String PhotoPath System.String .5in .1in .1in 6in .25in Simple Test true true DataQuery returned no rows! 1.25in 1in 1.125in 1in 1.875in 1.125in 1in 1in 1in 1in 1.25in 1in 1.125in 1.125in 1in 1in 1.125in
12pt EmployeeID LastName FirstName Title TitleOfCourtesy BirthDate HireDate Address City Region PostalCode Country HomePhone Extension Photo Notes PhotoPath true
12pt =Fields!EmployeeID.Value false =Fields!LastName.Value true =Fields!FirstName.Value true =Fields!Title.Value true =Fields!TitleOfCourtesy.Value true =Fields!BirthDate.Value false =Fields!HireDate.Value false =Fields!Address.Value true =Fields!City.Value true =Fields!Region.Value true =Fields!PostalCode.Value true =Fields!Country.Value true =Fields!HomePhone.Value true =Fields!Extension.Value true =Fields!Photo.Value false =Fields!Notes.Value true =Fields!PhotoPath.Value true
36pt 14pt 1pt 10pt 12pt 3in =Globals!PageNumber + ' of ' + Globals!TotalPages true true Microsoft.Data.Sqlite ={?ConnectionString} false String false false false
================================================ FILE: Examples/SqliteExamples/barcode.rdl ================================================ 279.4mm 431.8mm Microsoft.Data.Sqlite Data Source=C:\Users\peter\source\repos\My-FyiReporting\Examples\SqliteExamples\sqlitetestdb2.db 7.5in .25in .25in .25in .25in DS1 SELECT EmployeeID, LastName, FirstName, Title, TitleOfCourtesy, BirthDate, HireDate, Address, City, Region, PostalCode, Country, HomePhone, Extension, Photo, Notes, PhotoPath FROM Employees EmployeeID System.Int64 LastName System.String FirstName System.String Title System.String TitleOfCourtesy System.String BirthDate System.DateTime HireDate System.DateTime Address System.String City System.String Region System.String PostalCode System.String Country System.String HomePhone System.String Extension System.String Photo System.Byte[] Notes System.String PhotoPath System.String 41.4pt .1in .1in 6in .25in Simple Test 28.25pt 103.12pt 462.70pt 4.80pt image/png Database =Convert.FromBase64String({?Logo}) true true DataQuery returned no rows! 150.4pt 1in 1.125in 1in 1.875in 1.125in 1in 1in 1in 1in 1.25in 1in 1.125in 1.125in 1in 1in 1.125in
12pt EmployeeID LastName FirstName Title TitleOfCourtesy BirthDate HireDate Address City Region PostalCode Country HomePhone Extension Photo Notes PhotoPath true
12pt ={?BarcodeType} 30.91mm 60.91mm Code =Fields!EmployeeID.Value + Fields!LastName.Value 1.13pt 0.75pt Embedded =Fields!LastName.Value true ="lastname:" & {LastName} =Fields!FirstName.Value true =Fields!Title.Value true =Fields!TitleOfCourtesy.Value true =Fields!BirthDate.Value false =Fields!HireDate.Value false =Fields!Address.Value true =Fields!City.Value true =Fields!Region.Value true =Fields!PostalCode.Value true =Fields!Country.Value true =Fields!HomePhone.Value true =Fields!Extension.Value true =Fields!Photo.Value false =Fields!Notes.Value true =Fields!PhotoPath.Value true
242.0pt 1 14pt 1pt 10pt 12pt 3in =Globals!PageNumber + ' of ' + Globals!TotalPages true true Report AttributeNormal String QrCode false false false QrCde AztecCode DataMatrix Pdf417 String true true false
================================================ FILE: Examples/SqliteExamples/chart.rdl ================================================ 279.4mm 431.8mm Microsoft.Data.Sqlite Data Source=C:\Users\peter\source\repos\My-FyiReporting\Examples\SqliteExamples\sqlitetestdb2.db 7.5in .25in .25in .25in .25in DS1 SELECT EmployeeID, LastName, FirstName, Title, TitleOfCourtesy, BirthDate, HireDate, Address, City, Region, PostalCode, Country, HomePhone, Extension, Photo, Notes, PhotoPath FROM Employees EmployeeID System.Int64 LastName System.String FirstName System.String Title System.String TitleOfCourtesy System.String BirthDate System.DateTime HireDate System.DateTime Address System.String City System.String Region System.String PostalCode System.String Country System.String HomePhone System.String Extension System.String Photo System.Byte[] Notes System.String PhotoPath System.String .5in .1in .1in 6in .25in Chart Test true true 385.47pt 604.52pt Data Query returned no rows! Column Plain =Fields!Country.Value true Inside true true <Caption>Country</Caption> =Fields!Region.Value =Count(Fields!City.Value) False true Inside true true <Caption>City</Caption> <Style> <WritingMode>tb-rl</WritingMode> </Style> true RightCenter <Style> <FontWeight>Bold</FontWeight> <FontSize>14pt</FontSize> <TextAlign>Center</TextAlign> <BackgroundColor>Aqua</BackgroundColor> </Style> <Caption>Country Region Chart</Caption> 521.9pt 6.3pt False EarthTones 10 DataQuery returned no rows! 1in 1in 1in 1in 1in 1in 1in
12 pt EmployeeID LastName FirstName Title TitleOfCourtesy Country Region true
12 pt =Fields!EmployeeID.Value true =Fields!LastName.Value true =Fields!FirstName.Value true =Fields!Title.Value true =Fields!TitleOfCourtesy.Value true =Fields!Country.Value true =Fields!Region.Value true
0.0pt7.3pt
424.5pt 1 14pt 1pt 10pt 12pt 3in =Globals!PageNumber + ' of ' + Globals!TotalPages true true Report AttributeNormal
================================================ FILE: Examples/SqliteExamples/functions.rdl ================================================ 279.4mm 431.8mm Microsoft.Data.Sqlite Data Source=C:\Users\peter\source\repos\My-FyiReporting\Examples\SqliteExamples\sqlitetestdb2.db 7.5in .25in .25in .25in .25in DS1 SELECT EmployeeID, LastName, FirstName, Title, TitleOfCourtesy, BirthDate, HireDate, Address, City, Region, PostalCode, Country, HomePhone, Extension, Photo, Notes, PhotoPath FROM Employees EmployeeID System.Int64 LastName System.String FirstName System.String Title System.String TitleOfCourtesy System.String BirthDate System.DateTime HireDate System.DateTime Address System.String City System.String Region System.String PostalCode System.String Country System.String HomePhone System.String Extension System.String Photo System.Byte[] Notes System.String PhotoPath System.String .5in .1in .1in 6in .25in Simple Test true true DataQuery returned no rows! 1.25in 1in 1.125in 1in 1.875in 1.125in 1in 1in 1in 1in
12pt EmployeeID LastName FirstName Title TitleOfCourtesy BirthDate HireDate Address City Region true
12pt =Fields!EmployeeID.Value false =Trim(Fields!LastName.Value) true ="lastname:" & {LastName} =Fields!FirstName.Value true =Fields!Title.Value true =Fields!TitleOfCourtesy.Value true =Fields!BirthDate.Value false =Fields!HireDate.Value false =Fields!Address.Value true =Fields!City.Value true =Fields!Region.Value true
12pt 1in Hello World 1 851.8pt 1.6pt
242.0pt 1 14pt 1pt 10pt 12pt 3in =Globals!PageNumber + ' of ' + Globals!TotalPages true true Report AttributeNormal
================================================ FILE: Examples/config.xml ================================================ true 8080 Examples tempreports 0 100 html text/html htm text/html mht message/rfc822 mhtml message/rfc822 xml application/xml pdf application/pdf xhtml application/xhtml+xml gif image/gif jpeg image/jpeg jpg image/jpeg jpe image/jpeg png image/png txt text/plain rtf text/richtext tiff image/tiff tif image/tiff rdl application/rdl ================================================ FILE: Examples/designerstate.xml ================================================ 5 https://github.com/majorsilence/My-FyiReporting/wiki/_pages usa_map, world_map true true true true right New Open Save Space Cut Copy Paste Undo Space Textbox Chart Table List Image Matrix Subreport Rectangle Line Space Edit Newline Bold Italic Underline Space Align Space Font FontSize Space ForeColor BackColor Space Print Space Zoom SelectTool Space PDF HTML Excel XML MHT CSV RTF TIF 16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215 ================================================ FILE: Examples/mostly-empty.rdl ================================================ .25in .25in .25in .25in .5in Test Header .1in .1in 6in .25in false true true Text Area 1 .1in .1in 6in .25in false Lorem ipsum. 1in 1in 6in 4in false 10in 7.5in 14pt 0 1pt 10pt 3in 12pt false true true ================================================ FILE: Examples/readerstate.xml ================================================ ================================================ FILE: Examples/usa_map.xml ================================================ 32,4,30,9,32,16,32,24,30,32,30,36,39,42,40,50,53,52,61,55,71,55,82,54,92,58,100,58,100,52,109,14,54,2,53,7,53,12,54,17,50,22,46,27,45,21,49,15,48,12,32,4 WA,Washington 8,99,8,91,8,86,31,39,39,42,39,50,51,51,58,55,81,55,100,58,105,65,99,76,93,83,95,87,86,119,8,99 OR,Oregon 7,99,55,112,43,156,92,231,96,237,96,244,92,247,91,253,87,257,88,263,84,266,55,261,54,260,53,251,46,242,43,241,43,237,38,234,30,227,20,221,21,212,17,210,10,191,11,186,13,183,9,171,13,171,12,168,12,164,9,164,5,161,2,149,3,139,1,127,2,118,7,111,7,99 CA,California 110,12,120,16,116,31,119,38,123,45,127,53,131,56,127,63,125,71,127,72,132,71,134,78,134,84,138,87,139,93,154,92,156,90,159,94,153,132,87,119,96,87,94,84,105,66,100,58,100,52,110,12 ID,Idaho 120,17,178,27,241,34,235,94,198,91,161,87,159,94,155,90,153,92,144,92,139,92,138,87,134,84,132,70,128,71,125,70,127,63,131,55,126,53,119,39,116,30,120,17 MN,Montana 236,95,231,156,152,147,153,132,159,93,161,87,236,95 WY,Wyoming 241,34,311,37,311,50,314,58,314,68,315,76,317,78,317,83,272,83,237,81,241,34 ND,North Dakota 237,81,275,83,316,84,313,90,318,93,318,121,317,125,317,128,317,136,308,132,302,131,301,133,294,129,272,128,244,126,238,127,233,125,237,81 SD,South Dakota 233,125,237,127,246,126,270,127,293,129,301,133,304,132,316,136,319,142,321,145,322,151,323,157,325,167,330,176,253,174,253,158,230,156,233,125 NE,Nebraska 253,174,329,176,336,178,334,181,336,186,339,189,339,221,339,222,291,221,249,220,253,174 KS,Kansas 238,220,339,222,340,233,341,241,342,273,342,274,335,271,332,270,331,272,326,270,323,271,319,272,315,271,311,270,309,272,308,270,305,271,302,268,300,271,296,267,292,267,287,266,282,262,278,262,274,259,274,230,238,227,238,220 OK,Oklahoma 238,227,231,296,186,292,185,296,188,298,191,301,198,309,207,318,208,323,209,329,214,335,219,339,224,342,228,342,231,338,234,332,238,332,239,330,242,332,247,332,252,334,259,341,265,353,273,366,275,367,276,371,276,376,278,377,282,385,285,386,288,387,293,391,299,391,304,394,307,392,305,385,302,379,304,373,301,370,305,370,306,367,304,364,308,364,309,360,312,358,313,354,315,356,317,354,319,354,326,350,333,346,334,343,337,341,336,335,339,334,339,339,344,337,350,335,354,330,354,326,353,320,355,315,352,306,352,302,347,297,348,276,347,275,344,275,341,273,336,271,332,270,330,271,326,269,319,272,311,269,309,272,308,269,304,271,302,268,300,271,296,267,289,266,284,264,281,261,277,261,274,258,273,230,238,227 TX,Texas 165,212,237,220,238,227,230,296,186,292,184,296,171,294,165,294,164,300,153,299,165,212 NM,New Mexico 106,202,103,214,102,217,96,214,95,222,94,230,92,231,95,237,96,244,92,247,91,252,87,256,88,263,84,265,83,269,129,296,153,298,165,213,106,202 AR,Arizona 54,111,42,156,92,231,94,230,96,214,102,216,106,202,120,126,54,111 NV,Nevada 120,125,153,132,151,146,174,150,166,211,163,213,106,202,120,125 UT,Utah 325,167,341,166,372,165,375,168,375,175,378,181,384,185,385,190,387,190,392,192,391,197,390,201,400,209,402,216,404,218,406,220,406,226,403,226,402,231,400,235,393,236,395,230,393,228,340,229,338,222,338,189,335,186,334,181,336,178,329,175,325,167 MO,Missouri 57,321,54,323,48,329,46,329,45,331,51,337,50,338,48,337,46,337,42,338,43,341,46,344,50,344,52,343,52,346,49,348,47,348,46,350,44,353,45,355,47,356,46,359,47,360,50,358,50,360,50,364,53,362,55,364,59,363,58,365,57,368,54,371,52,373,49,374,47,376,45,377,50,375,52,375,52,376,54,374,56,373,57,370,60,369,63,365,64,362,64,360,66,356,68,355,68,358,69,360,71,358,72,356,71,354,75,354,80,356,86,355,88,356,91,356,93,358,98,362,102,361,104,361,103,363,106,365,106,363,107,361,109,364,108,360,103,358,94,351,92,354,89,353,84,352,75,323,62,323,57,321 AK,Alaska 165,377,164,379,163,380,164,381,164,383,166,384,168,383,171,382,170,379,165,377 HI,Hawaii 155,370,159,370,161,372,163,373,160,374,157,373,155,370 HI,Hawaii 148,367,151,367,152,369,148,367 HI,Hawaii 141,363,139,364,142,365,141,363 HI,Hawaii 136,365,136,365,137,364,136,365 HI,Hawaii 348,283,384,283,386,287,388,293,384,299,382,304,380,301,381,306,381,309,380,313,384,313,399,312,404,312,404,315,404,318,407,322,406,327,407,328,409,326,410,330,407,332,408,334,411,337,415,340,412,342,407,339,404,336,401,335,403,338,401,338,402,340,401,341,398,339,396,339,392,342,391,339,389,341,386,337,382,335,381,332,379,334,378,332,374,333,375,335,372,337,363,334,359,333,359,330,357,333,351,334,354,330,354,325,352,320,354,315,352,306,352,302,347,296,348,283 LA,Louisiana 394,251,395,252,392,255,391,260,387,262,387,264,385,268,385,271,383,275,385,279,383,282,386,287,388,293,384,298,381,303,379,300,381,306,380,312,389,312,398,312,403,312,404,318,406,322,405,326,407,327,409,324,411,322,415,321,416,320,419,321,423,321,422,314,421,249,394,251 MS,Mississippi 339,228,393,227,395,230,392,236,400,235,400,237,398,239,399,241,396,245,397,248,394,251,394,251,391,254,391,259,387,262,386,263,384,267,385,271,382,274,384,278,382,282,347,282,348,275,346,275,343,274,341,274,341,240,339,228 AR,Arkansas 317,122,344,121,371,121,375,119,376,122,376,125,377,130,379,133,382,133,383,136,385,138,388,142,388,144,386,146,386,149,383,151,380,152,379,155,381,158,379,163,376,164,375,167,372,164,324,166,321,145,317,136,317,122 IA,Iowa 311,37,311,50,314,58,313,68,314,75,316,78,316,83,313,89,318,92,318,121,344,120,371,121,374,119,374,114,368,109,363,106,359,103,358,97,357,91,357,89,356,88,358,84,362,80,362,71,374,61,378,55,385,53,388,50,383,48,376,48,375,47,371,50,369,50,367,49,365,48,363,48,362,45,359,47,356,42,349,42,347,44,344,42,340,42,339,41,336,40,336,34,333,31,332,31,331,36,330,37,311,37 MI,Minnesota 362,70,364,70,367,71,371,69,377,66,377,68,377,72,380,71,383,72,385,75,388,77,395,77,399,79,405,80,407,82,410,83,410,87,410,89,412,90,413,92,413,95,411,97,410,100,412,100,413,97,414,96,416,94,417,91,419,90,419,94,417,97,416,101,414,103,414,107,414,114,413,118,413,121,412,124,415,127,414,132,408,133,396,134,385,135,383,136,382,133,379,132,377,130,376,125,376,122,374,118,373,113,367,108,359,102,356,91,357,89,355,87,357,83,362,80,362,70 WI,Wisconsin 383,136,385,135,405,133,414,132,415,137,418,142,420,146,420,158,421,160,421,172,421,174,422,185,423,190,422,193,421,197,419,201,418,205,418,206,418,209,419,211,416,211,414,212,414,215,415,217,412,217,408,215,404,218,401,216,400,208,390,200,392,192,386,190,384,189,384,185,378,180,375,175,374,167,376,164,379,163,381,157,378,155,380,152,382,151,386,148,386,146,388,144,388,141,383,136 IL,Illinois 383,72,384,74,387,77,395,76,398,78,405,79,406,81,409,82,409,88,412,89,413,91,417,84,419,81,420,82,421,81,423,80,423,81,423,83,426,81,426,78,432,77,434,75,437,75,440,76,442,78,443,75,444,75,447,75,451,74,450,73,448,71,447,67,445,69,439,69,438,64,433,66,427,66,422,71,419,70,418,69,416,70,414,70,409,65,405,65,404,64,403,66,402,63,404,62,408,57,405,56,399,61,398,63,392,67,389,67,383,72 MI,Michigan 427,143,430,140,430,136,432,133,431,124,429,118,427,113,427,108,427,105,428,104,429,97,430,96,430,93,432,92,435,89,436,90,435,93,435,95,437,94,438,91,437,88,438,86,441,85,440,82,441,79,442,78,444,80,446,81,449,81,450,83,453,83,454,84,457,84,459,86,460,87,459,87,457,89,461,92,460,99,459,101,458,103,456,105,455,108,456,110,459,110,462,106,462,106,465,103,467,103,471,110,472,115,473,119,473,123,470,124,469,128,467,131,466,134,465,137,465,139,463,141,457,141,450,142,449,141,427,143 MI,Michigan 419,146,423,145,426,143,436,142,449,141,450,142,451,146,451,155,452,164,453,172,454,182,453,185,454,186,453,187,451,187,448,188,447,190,448,191,446,194,444,196,443,198,442,199,440,199,438,197,437,199,436,202,436,203,433,202,431,201,429,204,426,203,424,203,423,204,420,204,418,204,419,201,420,196,423,190,421,174,420,159,420,156,420,148,419,146 IN,Indiana 406,226,406,219,404,218,407,214,412,217,415,217,413,215,413,212,416,210,418,211,418,208,417,204,422,204,424,203,425,203,428,204,431,201,435,203,435,201,437,197,439,198,439,198,442,198,443,196,445,194,447,191,446,190,447,188,451,187,453,187,454,185,453,184,454,181,459,181,461,184,461,185,465,185,466,186,469,186,471,186,473,186,477,184,480,186,482,189,482,192,487,199,490,201,490,202,485,207,485,207,481,213,479,214,478,215,472,218,469,219,460,220,442,221,426,223,420,223,420,225,413,226,406,226 KY,Kentucky 402,226,413,226,420,225,419,222,426,222,442,220,457,220,470,219,474,217,485,217,497,214,497,218,495,219,494,222,491,222,487,226,485,226,482,231,479,230,476,234,473,235,470,237,471,239,470,239,467,240,467,244,451,246,439,247,428,248,393,251,396,248,395,245,399,241,398,239,400,237,400,235,402,231,402,226 TN,Tennessee 421,248,440,247,451,246,459,272,465,286,464,287,464,292,462,293,463,296,464,298,465,303,466,306,450,308,439,309,433,310,432,312,435,314,436,319,434,319,433,321,430,322,431,319,429,317,428,314,427,316,426,319,426,321,425,320,422,320,422,313,421,294,421,248 AL,Alabama 435,319,434,314,432,312,433,309,441,308,450,307,466,306,469,310,473,310,487,309,503,308,504,311,505,310,506,304,508,304,509,305,512,304,513,307,513,309,512,310,514,310,516,312,517,314,517,317,517,319,519,320,521,324,523,327,526,330,527,332,529,334,530,336,530,341,534,346,537,352,540,356,543,362,543,375,542,378,541,377,541,379,541,382,541,384,542,385,541,387,540,388,538,391,536,392,537,389,539,386,537,387,535,387,531,387,528,381,524,378,520,377,519,375,518,372,514,368,514,364,513,363,512,363,512,365,508,362,505,356,506,352,506,350,504,348,503,352,502,351,501,345,503,340,501,334,499,331,496,330,491,326,482,318,477,319,477,322,475,322,471,325,467,326,464,326,462,323,459,320,459,318,456,319,454,318,450,316,448,317,445,317,443,317,440,317,439,316,438,318,435,319 FL,Florida 451,245,467,244,476,243,482,243,482,244,481,247,483,248,487,250,487,252,493,258,495,258,496,260,498,262,501,263,503,267,506,268,507,269,508,270,508,273,513,278,514,282,515,282,515,285,513,286,514,289,513,290,514,291,513,293,512,295,512,297,511,298,512,300,512,301,512,304,509,305,507,304,505,303,505,309,504,310,502,308,484,308,475,309,468,309,465,305,464,298,462,292,464,291,464,286,465,285,459,272,451,245 GA,Georgia 467,243,467,240,469,239,471,239,470,237,472,235,475,234,479,230,482,231,485,225,486,226,491,222,493,222,494,219,496,218,497,214,512,213,525,211,541,208,565,204,567,204,568,205,569,208,567,208,565,208,565,210,563,211,561,210,561,212,561,213,558,211,558,214,559,215,560,214,562,213,565,212,567,213,568,215,568,213,570,211,571,210,573,212,574,214,575,216,575,218,575,220,572,222,573,220,573,218,571,215,571,215,569,218,568,220,566,221,561,221,559,222,562,223,562,225,562,227,565,227,567,227,569,226,568,227,566,230,564,232,563,232,559,234,554,236,549,244,549,247,545,248,541,249,525,238,522,238,521,240,514,240,514,241,513,240,508,236,506,236,497,237,491,238,487,239,482,243,467,243 NC,North Carolina 541,249,541,250,537,256,536,257,536,259,534,260,534,260,535,262,534,264,531,266,529,269,528,270,524,272,525,273,524,275,520,275,517,276,518,277,517,280,515,281,514,281,513,277,508,273,507,269,505,268,503,266,501,263,497,262,495,259,494,258,487,252,487,250,481,246,482,242,487,238,492,237,504,236,507,236,508,236,514,240,514,239,521,240,521,238,525,237,541,249 SC,South Carolina 474,217,485,216,497,214,511,212,517,212,538,208,553,205,565,203,566,203,566,200,565,199,563,197,561,197,560,199,559,199,556,196,554,196,549,195,554,194,555,193,553,190,556,192,559,191,558,188,557,185,557,183,555,180,551,180,547,178,543,177,544,174,545,170,541,169,540,165,536,165,535,167,532,166,529,165,529,168,528,171,526,174,523,176,522,177,522,181,521,183,517,186,516,189,512,192,511,195,511,196,511,199,507,200,504,201,502,203,499,204,496,205,492,204,490,201,490,201,488,203,484,207,480,213,479,214,474,217 VA,Virgina 450,142,457,141,462,141,464,139,468,140,470,141,471,143,473,142,475,143,479,141,482,139,483,140,490,135,496,131,498,137,499,143,500,148,501,151,500,153,501,156,500,157,499,161,499,163,499,167,496,170,493,172,491,174,489,177,487,181,485,184,485,186,484,187,482,188,480,186,476,183,473,185,466,185,465,185,461,184,461,183,458,180,453,180,452,165,451,154,451,145,450,142 OH,Ohio 482,188,484,186,485,183,488,178,492,173,492,172,495,170,499,167,499,160,499,157,500,156,501,154,502,157,503,160,502,164,503,165,511,164,514,163,515,166,516,169,520,166,524,164,526,164,528,162,530,162,532,162,534,163,536,165,535,167,529,165,529,168,526,173,524,175,522,177,522,180,519,184,517,186,516,188,512,192,511,195,510,198,504,201,502,202,496,204,492,203,490,201,487,199,482,192,482,188 WV,West Virgina 495,131,505,125,505,126,506,128,524,125,542,122,554,119,558,121,560,125,563,127,563,129,562,131,561,133,561,135,561,138,561,139,568,145,562,152,559,152,556,155,545,156,532,159,520,161,514,162,511,164,503,164,502,164,502,159,501,154,500,152,501,151,498,137,495,131 PA,Pennsylvania 505,125,506,124,513,115,512,113,510,110,511,107,517,105,527,105,528,104,533,104,535,102,540,98,539,94,539,90,538,90,540,85,549,73,567,68,568,79,570,89,572,90,575,102,575,113,578,126,577,127,577,129,576,130,578,131,580,130,583,129,586,128,588,127,589,126,591,124,591,126,593,125,595,124,595,126,593,128,590,129,586,131,583,133,580,134,578,135,577,136,574,135,575,133,574,131,570,129,563,127,560,124,557,120,553,118,541,122,506,127,505,125 NY,New York 563,126,569,128,574,131,574,133,574,134,574,137,573,139,575,140,575,146,577,148,574,155,572,161,570,163,569,161,566,161,563,160,560,157,561,152,567,144,561,138,561,132,563,129,563,126 NJ,New Jersey 513,162,529,159,545,156,555,155,558,155,559,158,560,163,561,168,563,173,568,172,570,174,569,176,569,179,568,179,567,182,566,185,564,189,564,193,562,186,564,183,565,180,563,182,561,178,559,176,557,177,555,174,556,172,554,169,555,165,553,162,555,160,554,158,553,161,550,163,549,164,551,166,552,170,552,173,552,175,553,177,555,180,550,180,546,177,542,177,545,169,541,168,539,165,535,164,533,162,532,161,528,161,526,164,523,163,520,166,515,169,513,162 MD,Maryland 557,154,559,152,561,151,560,156,563,160,564,163,566,166,567,166,568,167,569,168,569,170,569,171,569,171,567,171,562,172,561,168,559,158,557,154 DE,Delaware 563,127,574,131,574,134,573,136,573,138,575,140,574,145,576,148,574,153,572,160,570,163,569,161,565,160,563,159,560,157,562,152,568,144,561,138,561,131,563,127 NJ,New Jersey 575,113,580,112,587,111,593,109,594,111,594,114,595,115,595,119,590,121,585,123,582,125,577,128,576,126,578,125,575,113 CT,Connecticut 593,109,594,111,593,114,594,115,594,118,595,119,597,119,598,118,599,116,599,113,600,112,601,114,602,115,602,113,601,112,600,110,597,108,593,109 RI,Rhode Island 575,103,580,102,583,101,588,100,594,98,596,97,598,94,601,94,601,95,603,96,602,98,602,99,601,102,602,103,605,103,606,106,607,107,608,108,610,109,613,108,613,106,612,104,610,104,611,103,614,103,614,105,615,107,615,109,613,110,612,110,611,111,608,112,607,111,605,112,604,114,602,112,600,110,596,108,592,108,586,110,581,111,575,112,575,103 MA,Massachusetts 567,68,576,65,585,64,585,67,586,71,586,73,583,75,582,85,582,92,582,100,575,103,572,90,569,88,568,78,567,68 VT,Vermont 585,64,586,61,586,59,589,59,596,85,599,88,601,91,601,94,597,93,596,96,588,100,582,100,583,85,582,75,586,73,586,71,584,67,585,64 NH,New Hampshire 589,59,590,57,592,55,592,52,593,49,593,42,593,34,598,22,600,20,601,22,602,23,604,23,608,19,609,20,615,22,620,37,620,41,621,43,624,43,627,48,630,50,631,52,633,53,631,55,628,58,626,59,624,63,622,61,621,64,618,63,618,65,617,65,615,63,615,66,615,70,614,72,612,73,611,73,611,74,608,75,608,75,607,78,607,76,604,77,603,79,603,80,604,82,603,83,603,84,602,85,601,87,602,89,601,90,596,85,589,59 ME,Maine 174,150,230,156,253,158,253,173,248,220,237,220,166,212,174,150 CO,Colorado 364,69,374,61,377,55,384,53,388,50,392,47,393,43,396,41,397,44,398,41,399,38,399,42,403,39,403,36,403,33,407,35,420,36,423,39,426,46,430,47,435,46,438,46,437,49,437,51,442,55,442,56,440,57,441,61,444,61,445,62,444,63,444,65,444,69,439,68,438,64,433,65,427,65,422,70,418,68,416,69,413,69,409,64,405,65,404,63,402,62,404,61,408,56,404,55,401,59,400,60,398,63,392,66,389,67,383,72,380,70,377,72,376,66,367,71,364,69 Azure 409,100,410,96,413,95,412,91,419,81,420,82,422,80,423,83,426,80,426,78,432,77,433,75,437,75,440,76,441,78,440,81,440,84,438,86,437,88,438,91,437,94,434,95,435,91,436,90,435,89,432,92,429,93,429,96,429,97,427,104,427,105,427,113,430,124,432,132,429,136,430,139,427,142,426,143,423,144,419,145,415,137,414,132,415,126,411,124,413,120,414,114,414,103,416,100,418,95,418,90,416,90,415,94,413,96,409,100 Azure 447,66,449,66,450,69,461,70,475,69,476,70,482,70,484,69,492,78,492,78,494,78,494,81,498,85,498,86,495,85,495,88,497,89,496,90,494,91,491,91,488,89,487,91,482,86,481,83,481,82,477,82,477,84,480,87,482,90,482,94,479,96,479,99,479,104,480,112,473,118,471,110,466,103,465,102,459,109,456,109,454,108,456,105,459,99,461,92,456,89,460,86,457,83,454,83,452,82,450,82,448,80,446,80,442,77,443,75,446,75,451,74,447,70,447,66 Azure 465,139,464,137,467,130,469,128,470,124,472,123,474,124,474,126,474,127,472,128,470,130,468,133,471,134,473,133,475,134,480,129,482,129,485,123,488,122,497,121,500,121,498,119,500,117,504,115,508,114,511,113,512,115,504,125,495,131,483,139,482,139,474,142,473,141,471,142,470,140,465,139 Azure 509,110,504,110,503,108,504,104,507,100,517,96,523,94,525,94,528,94,530,92,534,88,537,85,539,85,537,89,539,90,538,94,540,98,533,104,527,103,527,105,517,104,510,107,509,110 Azure Washington 39,30 Oregon 34,75 Idaho 104,97 Montana 162,54 California 17,197 Nevada 63,152 Utah 129,165 Arizona 107,246 New Mexico 168,254 Colorado 187,180 Wyoming 172,119 North Dakota 242,59 South Dakota 244,102 Nebraska 258,143 Kansas 272,193 Texas 267,301 Oklahoma 282,239 Minnesota 316,54 Iowa 337,139 Wisconsin 365,99 MI 399,68 Michigan 428,112 Illinois 382,167 Indiana 420,170 Kentucky 425,204 Ohio 462,156 Tennessee 409,230 Mississippi 378,296 Louisiana 352,317 Alabama 420,277 Florida 505,344 Georgia 464,287 South 489,240 Carolina 493,249 North Carolina 485,224 Virginia 512,194 West 491,172 Virgina 484,180 Pennsylvania 499,138 New York 516,106 VT 567,71 NH 581,83 Maine 593,46 Mass 612,91 RI 600,114 CT 577,111 New 576,139 Jersey 576,147 Delaware 571,162 Maryland 571,173 Missouri 344,205 Arkansas 342,242 Alaska 54,333 Hawaii 127,371 ================================================ FILE: Examples/world_map.xml ================================================ 736,139,736,138,737,138,738,139,739,138,740,138,741,138,741,139,742,139,743,139,744,140,744,139,745,139,746,139,747,139,748,139,748,138,749,138,750,138,750,137,751,136,751,135,752,135,753,135,754,136,753,136,753,137,754,137,754,139,754,140,755,140,756,140,757,140,757,139,758,139,759,139,759,138,761,138,761,139,760,139,761,139,763,138,764,138,764,139,763,139,763,140,763,139,763,140,762,140,761,140,759,140,757,140,756,140,756,141,755,141,754,141,753,142,753,143,754,143,754,144,754,145,754,146,753,146,753,147,752,147,753,147,753,148,752,148,752,149,751,149,749,148,749,149,750,149,750,150,750,151,749,151,748,151,748,152,748,153,747,153,747,154,748,155,747,156,746,156,746,155,745,155,744,155,743,156,742,156,743,156,741,157,740,157,739,158,738,159,739,159,738,160,739,161,738,161,736,162,735,162,734,162,732,162,730,162,728,162,727,162,725,162,722,161,723,160,725,158,725,157,725,156,724,156,722,156,722,155,722,154,722,153,721,151,722,150,721,150,721,149,721,148,722,148,722,147,723,146,723,145,723,144,724,144,725,144,726,144,726,145,727,145,729,144,729,143,730,143,731,142,732,142,733,142,733,141,734,140,734,139,735,139,736,139 Afghanistan, AFG, Asia 598,124,598,123,599,123,600,123,600,124,601,124,601,125,601,126,601,127,602,127,602,128,603,128,603,129,602,129,601,130,601,131,600,131,601,131,600,131,599,131,600,131,599,130,598,130,597,129,598,130,598,129,597,129,598,128,598,127,598,128,598,127,598,126,598,125,598,124,597,124,598,124 Albania, ALB, Europe 536,154,536,153,535,152,535,151,535,150,534,149,535,148,534,147,534,146,533,145,534,145,535,145,536,144,537,143,538,143,539,143,540,143,540,142,541,142,542,141,543,141,545,141,546,141,547,141,548,140,549,140,550,140,551,140,553,140,555,140,555,141,556,141,557,140,558,140,559,139,559,140,560,140,561,140,561,139,562,139,562,140,563,140,564,140,565,140,565,141,564,141,565,141,564,143,565,143,565,144,564,144,565,145,564,146,564,147,563,147,563,148,562,148,562,149,563,150,563,151,564,151,564,152,565,153,567,154,567,156,568,160,567,160,568,161,569,162,569,164,569,166,569,167,569,168,569,169,569,170,569,171,568,171,568,172,570,174,570,176,570,177,571,177,572,177,574,178,575,180,571,183,566,185,562,188,557,192,552,193,549,194,549,193,549,192,549,191,548,191,547,190,546,190,545,190,544,189,543,188,543,187,539,185,535,182,530,179,525,175,524,175,519,172,513,169,513,167,513,164,514,164,515,163,517,162,518,162,520,162,520,161,521,161,523,161,524,160,525,159,526,159,527,158,529,158,529,157,528,157,528,156,528,155,529,155,531,155,531,154,533,154,535,154,536,154 Algeria, DZA, NorthAfrica 545,123,544,123,545,123 Andorra, AND, Europe 576,266,576,265,577,264,578,264,579,264,579,265,578,265,577,266,577,268,576,268,576,267,576,266 Angola, AGO, Sub Saharan Africa 579,268,580,268,581,268,583,268,585,268,587,268,589,268,589,269,590,269,590,270,590,271,590,272,591,272,591,273,591,274,592,274,592,275,593,275,594,275,595,274,596,274,598,274,598,273,598,272,598,271,600,271,601,271,601,272,603,272,605,272,605,273,605,274,605,275,605,276,605,277,605,278,605,279,606,280,606,282,606,283,606,284,607,284,608,284,609,284,610,283,611,284,611,283,612,285,611,286,611,287,612,287,612,288,611,289,612,289,612,290,609,290,607,290,605,290,605,294,606,299,606,300,609,303,610,303,608,304,604,305,603,304,602,304,602,305,601,304,600,304,599,304,598,304,596,304,595,303,591,303,586,303,582,303,581,303,580,302,580,301,578,302,577,302,576,302,575,302,575,301,575,299,575,298,576,297,576,296,577,294,576,293,577,292,577,291,577,290,578,290,578,289,579,288,580,288,580,287,581,286,581,285,581,284,581,283,581,282,580,282,580,281,579,280,579,279,578,278,579,277,579,278,579,277,580,277,580,276,579,274,578,272,578,271,577,271,577,270,576,269,578,269,578,268,579,268 Angola, AGO, Sub Saharan Africa 1032,453,1033,453,1032,453 Antarctica, ATA, Antarctica 341,448,342,447,343,447,343,448,342,448,341,448 Antarctica, ATA, Antarctica 365,444,365,443,364,443,365,442,366,442,366,443,367,443,368,443,367,443,367,444,366,444,365,444 Antarctica, ATA, Antarctica 332,454,332,453,331,453,332,453,332,452,333,452,334,451,335,451,336,451,335,452,336,452,335,452,335,453,334,453,334,454,333,454,332,454 Antarctica, ATA, Antarctica 376,434,375,434,374,434,373,434,374,434,375,434,376,434 Antarctica, ATA, Antarctica 402,432,403,432,404,432,404,433,403,433,403,432,402,432 Antarctica, ATA, Antarctica 347,445,347,444,348,444,349,444,349,443,350,443,350,444,349,444,350,444,351,444,350,444,350,445,349,445,348,445,347,445 Antarctica, ATA, Antarctica 363,437,364,437,365,436,366,436,367,437,366,437,365,437,364,437,363,437 Antarctica, ATA, Antarctica 268,457,268,458,267,458,267,457,268,457 Antarctica, ATA, Antarctica 352,444,352,443,353,443,353,444,352,444 Antarctica, ATA, Antarctica 315,461,314,460,313,460,312,460,311,460,312,460,313,460,314,459,315,459,315,460,316,460,316,461,315,461 Antarctica, ATA, Antarctica 356,439,357,438,358,438,359,438,360,439,359,439,358,439,357,439,356,439 Antarctica, ATA, Antarctica 102,476,102,477,101,477,100,477,99,477,98,477,99,477,101,477,102,476 Antarctica, ATA, Antarctica 401,484,400,484,397,484,395,483,397,483,399,483,401,483,402,483,401,484 Antarctica, ATA, Antarctica 1048,470,1048,471,1048,470 Antarctica, ATA, Antarctica 225,470,226,470,227,470,227,471,226,471,225,471,225,470 Antarctica, ATA, Antarctica 540,458,539,458,540,458,540,459,541,459,542,460,543,460,544,461,545,460,546,460,547,461,548,461,549,461,550,461,552,461,554,460,555,461,556,461,557,461,558,461,559,461,558,461,559,461,560,460,561,460,562,460,563,460,564,460,566,460,566,461,567,461,567,460,569,460,570,460,571,460,572,460,573,461,574,461,575,461,576,461,577,461,578,460,579,460,580,459,581,459,582,459,583,459,584,459,585,459,585,460,586,460,589,460,590,460,592,460,593,460,595,460,596,460,597,461,598,460,600,460,601,461,603,461,604,461,603,461,602,461,603,461,605,461,607,461,609,461,609,462,611,462,613,461,614,461,615,461,616,461,617,461,618,461,618,460,619,460,621,460,622,461,622,460,623,460,625,460,626,460,627,460,627,459,628,459,629,458,630,458,631,458,632,458,633,458,634,458,635,458,636,459,637,459,638,459,639,459,639,458,638,458,639,457,641,457,642,457,643,458,645,458,646,459,647,459,648,459,649,460,650,460,651,459,652,460,653,460,654,461,655,460,656,460,658,459,657,459,658,459,657,458,658,458,658,457,659,457,660,457,661,457,663,456,664,456,665,456,666,456,667,455,668,455,669,454,671,454,672,454,674,453,675,453,675,454,676,454,677,453,678,452,680,453,681,453,680,453,681,454,682,454,683,454,684,454,685,453,684,453,686,453,687,453,686,453,685,453,685,452,684,452,685,452,686,452,687,452,688,452,689,452,688,453,689,452,690,452,691,452,690,452,691,452,691,451,690,451,689,450,690,450,691,450,692,450,693,449,694,449,696,449,697,449,698,449,700,448,701,449,702,449,703,449,705,449,706,449,707,450,708,450,709,450,710,450,711,451,710,451,709,451,709,452,710,452,711,452,712,452,713,452,714,452,715,452,716,453,715,453,716,453,717,453,718,453,719,453,720,453,722,453,723,453,724,453,725,453,726,454,727,454,728,454,729,453,730,453,732,454,734,454,735,454,736,454,739,454,741,454,743,454,745,454,747,454,748,454,749,455,750,455,750,456,751,456,752,456,754,457,756,456,757,456,759,456,760,456,759,457,760,457,761,457,763,457,763,458,764,459,762,459,761,459,761,460,762,460,763,460,764,459,766,458,767,458,766,459,767,459,768,459,769,459,771,458,772,458,773,458,773,457,773,456,774,456,776,455,779,455,781,454,783,454,784,453,785,453,786,452,787,451,785,451,784,450,784,449,785,448,786,448,787,449,788,449,789,450,790,450,791,450,793,450,794,450,795,450,797,450,798,449,800,449,802,449,804,449,805,449,806,451,808,451,810,451,812,451,815,450,816,450,817,450,819,450,820,450,822,450,824,450,825,450,825,449,826,449,826,447,827,446,829,446,831,447,834,448,835,448,836,448,837,448,838,448,839,448,840,448,841,447,842,447,843,447,844,447,845,448,846,448,847,448,848,447,848,446,849,446,850,447,852,447,853,447,854,447,855,448,855,449,853,448,852,448,853,449,854,449,856,449,857,449,859,450,861,450,862,450,863,450,864,450,865,451,866,451,867,451,868,450,869,450,870,450,871,450,872,450,871,450,871,449,872,449,874,448,875,448,876,448,877,448,878,448,879,448,880,448,881,449,882,449,883,449,883,450,884,450,885,450,887,450,889,450,890,450,890,451,892,451,893,451,894,451,895,451,897,451,898,451,900,451,901,451,902,451,903,450,904,450,903,450,902,449,902,448,903,448,904,448,905,449,906,450,907,450,908,451,909,451,910,450,911,450,910,450,909,450,910,449,911,449,912,449,914,449,916,449,917,449,918,450,919,450,920,450,921,450,922,450,922,451,923,451,924,452,926,451,927,452,928,451,928,450,929,450,929,449,929,448,930,448,931,449,932,449,933,449,935,449,936,449,937,449,938,449,940,449,941,449,943,449,943,448,944,447,944,446,945,446,946,446,946,447,946,448,945,448,944,449,945,449,947,449,948,449,949,449,951,449,952,450,956,450,958,450,959,450,961,451,964,451,965,451,966,451,967,451,968,451,969,451,970,452,971,452,972,452,973,452,974,451,976,452,977,452,976,453,975,453,976,453,977,454,978,454,979,454,981,454,982,455,984,455,983,456,984,456,985,456,986,456,987,456,988,456,989,456,990,456,991,456,993,456,994,456,996,456,998,456,1000,456,1002,456,1003,456,1003,457,1004,458,1004,457,1006,457,1009,458,1010,458,1010,457,1011,458,1013,458,1014,458,1016,458,1017,459,1019,459,1020,460,1020,461,1022,461,1023,462,1023,461,1024,462,1025,462,1026,462,1026,463,1028,463,1030,463,1032,463,1033,463,1035,463,1037,462,1038,462,1038,463,1039,463,1040,463,1042,463,1042,464,1044,464,1045,464,1047,465,1048,465,1049,465,1050,465,1051,466,1050,467,1049,467,1049,468,1048,469,1047,470,1046,470,1045,470,1044,471,1042,471,1041,472,1040,472,1039,473,1038,473,1036,473,1034,473,1035,474,1036,474,1034,474,1032,475,1031,475,1030,476,1031,477,1033,477,1032,477,1030,477,1028,477,1027,478,1028,479,1030,479,1029,479,1027,479,1028,480,1027,481,1028,481,1027,481,1026,481,1027,481,1029,482,1030,483,1031,484,1033,484,1035,484,1037,484,1038,484,1036,483,1037,483,1038,482,1039,482,1040,482,1041,482,1042,482,1044,483,1046,483,1047,483,1048,483,1049,483,1050,483,1051,483,1056,483,1060,484,1063,484,1065,484,1069,484,1072,485,1075,485,1079,485,1080,485,1080,495,0,495,0,485,3,486,6,486,11,486,14,486,18,486,19,486,24,486,28,486,31,486,34,486,39,486,41,486,45,486,46,486,47,485,49,485,52,485,55,485,58,484,61,484,64,484,64,483,63,482,64,482,67,482,71,482,75,482,76,482,78,482,80,482,81,482,84,482,85,482,87,481,88,481,89,481,89,480,91,480,93,479,95,479,98,480,102,480,101,479,100,478,104,477,111,476,114,476,118,476,127,475,134,475,136,475,138,475,139,475,141,474,143,474,145,473,148,473,150,473,154,473,158,472,162,472,163,471,167,471,169,471,172,472,176,472,178,472,179,472,180,472,181,472,183,473,185,473,187,473,188,473,190,473,192,473,193,473,195,473,197,472,198,473,197,473,198,473,199,473,200,473,202,473,203,474,204,473,205,473,206,473,208,473,209,473,210,474,212,475,215,475,217,476,218,476,218,475,217,474,218,473,220,473,223,473,225,473,225,474,224,474,223,475,224,475,225,475,226,475,228,475,231,475,233,476,235,476,236,475,235,475,234,474,234,473,233,472,234,472,235,472,236,472,237,472,237,471,236,471,235,471,233,471,231,471,230,471,230,470,229,470,230,469,231,469,231,468,230,468,229,468,230,468,232,468,233,467,234,467,236,467,237,467,239,466,240,467,239,467,240,467,241,467,242,467,243,467,244,467,245,467,244,467,245,466,246,467,245,467,246,467,247,467,248,467,249,467,250,466,250,467,252,467,251,468,252,468,251,468,252,468,253,469,254,469,255,469,256,469,257,468,258,469,260,469,261,469,262,469,264,468,265,468,267,468,269,468,270,468,271,468,273,468,275,468,276,468,278,468,280,468,281,469,282,469,284,469,286,469,288,469,291,469,293,469,294,470,296,469,298,470,299,470,301,469,303,470,305,471,306,471,306,470,305,470,304,470,303,469,305,469,306,469,307,469,306,468,305,468,306,468,308,468,309,468,310,468,310,469,310,468,311,468,311,469,312,470,312,469,313,469,314,469,316,469,318,469,318,470,319,470,320,470,321,471,322,471,321,470,323,470,324,470,322,470,322,469,323,469,323,468,322,468,322,467,321,467,320,467,319,467,318,467,316,467,315,466,314,466,313,465,314,465,315,465,316,465,317,464,319,464,320,464,318,463,317,463,315,463,314,463,313,463,314,463,314,462,316,463,317,462,316,462,316,461,316,460,317,460,318,460,319,460,320,460,321,460,322,460,322,459,321,459,322,459,323,459,324,459,324,458,323,458,324,458,325,458,325,457,326,457,328,457,329,457,329,458,330,459,331,459,331,460,332,460,332,461,333,460,334,460,334,459,333,459,334,459,335,458,334,458,335,458,337,458,337,457,338,457,338,456,339,456,338,455,339,455,338,455,339,454,340,454,340,453,339,453,338,453,337,453,336,453,337,453,337,452,338,452,338,451,339,451,339,452,340,453,341,452,341,451,343,451,343,450,342,450,342,449,343,449,344,449,344,448,345,448,345,449,346,449,346,448,347,448,346,448,347,448,347,447,348,447,349,447,348,447,347,447,347,446,348,446,350,446,351,446,350,446,351,445,352,445,352,444,352,445,353,445,354,444,355,444,356,444,357,443,358,442,359,442,360,442,361,442,362,442,363,441,364,441,365,441,366,441,367,441,368,440,368,441,369,441,368,441,367,441,366,441,366,442,365,442,364,442,363,443,363,444,363,445,362,446,361,447,360,448,359,449,358,450,357,451,357,452,357,453,357,454,357,455,357,456,358,457,358,458,359,459,358,459,358,460,357,461,357,462,358,463,358,464,359,465,358,466,359,466,358,467,359,467,360,467,359,468,358,468,359,469,360,469,362,470,361,471,359,471,358,471,357,471,357,472,358,473,356,473,357,473,358,474,357,474,355,475,354,475,355,476,358,476,361,477,363,477,365,478,368,478,371,479,373,480,375,480,377,480,379,481,381,481,382,481,386,482,387,482,389,482,388,482,387,482,387,483,389,483,390,484,392,483,396,484,397,484,399,484,402,485,405,485,406,485,409,485,411,484,412,484,414,483,417,484,421,484,423,484,427,484,431,484,434,484,433,484,435,483,438,483,441,482,444,482,445,482,446,481,447,481,449,481,450,480,452,480,453,480,454,479,456,479,457,479,458,479,459,478,460,478,459,477,461,477,463,476,464,476,465,476,466,476,467,475,468,475,469,474,470,473,472,473,473,473,474,473,475,473,476,473,477,472,478,472,479,471,480,470,481,470,482,469,483,469,483,468,484,468,486,468,487,468,488,468,489,468,490,468,491,468,492,467,493,467,494,467,496,467,497,466,498,466,499,467,500,467,501,467,501,466,500,466,501,466,502,466,503,465,504,464,505,464,506,464,507,464,508,463,509,463,510,463,511,462,512,462,513,462,514,462,515,463,516,463,517,462,518,462,519,462,520,462,521,462,523,462,524,462,525,462,526,462,527,462,528,461,529,461,530,461,531,461,532,461,533,461,534,461,535,461,535,460,536,460,537,460,537,459,536,458,537,458,538,458,539,458,540,458 Antarctica, ATA, Antarctica 354,198,354,197,354,198,354,197,354,198 Antigua and Barbuda, ATG, Caribbean 354,200,354,199,354,200,354,199,355,199,354,199,354,200 Antigua and Barbuda, ATG, Caribbean 334,414,334,412,334,410,334,408,335,409,335,410,335,409,334,410,335,410,335,411,336,412,337,412,339,413,340,414,342,415,344,414,344,415,343,415,342,415,341,415,340,415,340,416,338,415,335,415,334,415,334,414 Argentina, ARG, Latin America 345,415,346,415,347,415,348,415,347,415,346,415,345,415 Argentina, ARG, Latin America 340,317,341,316,342,316,342,317,343,317,345,317,346,317,346,318,346,319,347,319,347,318,348,317,351,316,351,317,352,317,353,318,353,319,354,319,355,320,356,321,356,322,358,322,359,323,361,323,361,324,362,324,363,325,364,325,365,325,366,326,367,326,367,327,366,328,365,329,365,330,365,331,364,331,365,331,364,331,364,332,365,332,366,332,367,333,368,333,369,333,370,333,371,333,371,332,372,333,373,333,373,332,373,331,374,331,375,331,375,330,376,329,376,328,376,327,376,328,376,327,377,327,378,327,378,328,379,329,378,330,378,331,378,332,377,332,377,333,376,333,375,333,375,334,374,334,373,334,373,335,372,335,372,336,371,336,371,337,370,337,370,338,369,339,368,340,367,341,366,342,366,343,366,344,366,345,365,345,366,345,365,346,365,347,365,348,365,349,365,350,364,350,364,351,364,352,364,353,364,354,365,354,366,355,368,356,368,357,367,358,368,359,369,360,369,359,369,360,370,361,369,361,369,362,368,363,367,364,367,365,366,366,364,366,362,367,360,367,358,367,356,367,354,367,353,367,352,367,353,367,353,368,352,368,353,368,353,369,353,368,353,369,353,370,352,371,352,372,353,372,352,372,353,373,353,372,353,373,352,373,351,374,349,374,348,374,347,374,345,373,344,373,344,374,345,375,344,376,345,376,344,376,344,377,345,377,346,377,346,378,347,378,347,377,348,377,349,378,349,379,348,379,347,379,347,378,346,378,345,379,344,379,346,379,347,379,346,380,345,380,344,380,344,381,344,382,344,383,344,384,343,384,344,384,343,384,342,385,343,385,343,386,342,385,342,386,341,385,340,386,339,386,338,387,337,388,337,389,337,390,338,391,339,392,342,392,342,393,342,394,342,395,341,395,340,395,341,396,339,396,338,397,337,397,337,398,336,398,336,399,337,398,336,400,335,401,334,401,334,400,334,401,333,401,333,402,332,402,332,403,332,404,333,405,332,405,331,405,332,405,332,406,332,405,333,405,333,406,334,407,334,408,334,407,332,407,331,407,330,406,327,406,324,406,323,406,323,405,322,405,323,404,322,404,323,404,323,403,322,403,323,402,322,402,322,403,321,402,320,403,320,402,320,401,319,401,319,400,319,399,319,398,320,398,321,397,322,397,322,396,323,396,323,395,322,394,323,393,322,393,323,393,323,392,324,392,324,391,324,390,324,389,325,388,324,388,324,387,325,387,326,386,325,386,325,385,323,385,324,385,325,385,326,385,326,384,324,384,324,383,324,382,325,382,324,382,324,381,324,380,323,380,323,379,323,378,323,377,324,377,324,375,324,374,324,373,324,372,325,371,324,371,325,370,324,370,324,369,325,369,325,368,325,367,326,367,327,367,327,366,326,364,326,363,326,362,326,361,326,360,327,360,327,359,328,359,328,358,328,357,328,356,329,355,329,354,329,353,330,353,330,352,330,351,330,350,329,350,330,349,329,349,329,348,329,347,328,347,329,347,329,346,328,346,328,345,328,344,329,344,329,343,329,342,330,342,330,341,330,340,329,339,329,338,330,338,330,336,331,336,331,335,332,335,332,334,332,333,333,333,333,332,334,332,335,332,335,331,334,330,334,329,334,328,334,327,334,326,334,325,334,324,335,324,337,323,338,321,338,320,338,319,338,318,339,318,339,317,340,317 Argentina, ARG, Latin America 670,127,671,127,672,127,673,127,674,127,675,127,676,127,676,128,676,129,677,130,678,130,677,130,676,130,676,131,677,131,678,131,678,132,679,132,679,133,679,134,678,134,678,133,677,133,678,133,677,133,677,132,676,132,675,132,675,131,674,131,673,131,672,130,670,130,671,130,670,129,671,128,670,128,670,127 Armenia, ARM, Asia 879,329,878,328,878,327,879,327,878,327,879,328,879,329 Australia, AUS, Australia 985,372,984,372,983,372,984,372,984,371,985,372 Australia, AUS, Australia 993,322,993,321,993,322 Australia, AUS, Australia 950,293,949,293,949,292,950,291,950,292,950,293 Australia, AUS, Australia 760,410,759,409,760,410,760,409,760,410,761,410,760,410 Australia, AUS, Australia 999,328,998,328,998,327,999,327,999,326,999,325,1000,326,999,327,999,328 Australia, AUS, Australia 971,371,971,370,971,369,972,369,972,371,971,371 Australia, AUS, Australia 984,371,983,371,983,370,984,370,984,371,985,371,984,371 Australia, AUS, Australia 931,286,930,286,930,285,931,284,931,285,931,286 Australia, AUS, Australia 932,286,931,285,931,284,931,285,931,284,932,285,932,284,933,285,933,284,933,285,933,284,934,284,934,285,933,286,932,286 Australia, AUS, Australia 952,359,951,358,951,359,950,359,950,358,949,358,950,358,951,357,952,357,952,358,953,358,954,358,953,358,952,358,952,359 Australia, AUS, Australia 957,301,957,300,958,300,959,300,958,300,958,301,957,301 Australia, AUS, Australia 974,375,973,373,974,373,974,372,974,373,975,373,977,373,977,374,978,374,979,374,980,374,982,373,982,374,982,373,983,373,984,373,984,374,985,374,984,375,984,376,984,377,985,377,984,377,985,377,984,377,984,376,984,377,983,378,984,377,983,378,983,379,983,380,984,380,983,380,982,380,983,379,983,380,983,379,982,379,982,380,982,379,981,379,982,379,981,380,980,380,981,380,980,381,981,381,980,381,981,381,980,381,979,381,978,381,977,381,978,381,978,380,978,381,978,380,977,380,976,379,975,378,975,377,976,378,976,377,975,377,975,376,974,376,974,375 Australia, AUS, Australia 939,285,939,286,940,286,939,286,940,286,941,286,942,286,942,287,942,286,943,287,944,286,944,287,945,287,946,287,945,287,946,287,946,286,947,286,947,287,947,286,947,287,948,287,947,287,948,287,947,288,948,288,949,287,948,287,949,286,949,287,950,287,950,288,950,289,949,289,949,290,949,289,949,290,948,290,947,290,947,291,947,292,948,292,948,291,948,292,947,292,947,293,947,294,946,295,946,296,947,296,948,297,949,297,949,298,950,298,952,299,953,299,954,300,954,301,956,301,957,301,957,302,957,303,958,303,959,303,959,304,960,304,961,303,962,303,962,302,963,300,964,299,964,298,964,297,964,296,964,295,964,294,964,293,964,292,964,291,965,290,964,290,964,289,965,289,965,288,964,288,965,287,965,286,965,287,966,287,965,286,966,284,966,283,967,283,968,283,967,284,968,283,968,284,968,285,968,286,969,286,969,287,969,288,970,288,970,289,970,290,970,291,970,292,971,293,971,294,972,294,972,293,973,293,973,294,974,294,975,295,976,295,975,296,976,296,975,297,976,298,976,299,976,300,976,301,977,301,977,302,978,303,978,304,978,305,978,306,979,306,978,306,978,307,979,308,980,308,981,308,981,309,982,309,982,310,983,310,984,310,984,311,985,311,986,311,986,312,985,312,986,313,987,313,987,314,987,315,988,315,988,316,988,317,989,318,988,318,989,318,990,318,989,318,989,317,990,317,990,318,991,318,992,318,992,319,992,320,992,321,993,321,993,322,994,322,994,323,994,322,994,323,995,323,994,323,994,322,995,323,996,324,996,325,997,325,997,326,998,326,998,327,998,328,999,328,999,329,999,330,999,331,999,332,999,333,1000,334,1000,335,1000,336,1000,337,1000,338,1000,339,999,340,999,341,999,342,999,343,999,344,998,344,998,345,998,346,997,346,997,347,997,348,996,348,996,349,995,349,994,350,994,351,993,351,993,352,994,351,993,352,993,353,993,352,993,353,992,353,992,354,992,355,992,356,991,356,991,357,990,358,990,359,990,360,989,361,989,362,990,362,989,362,989,363,988,364,987,364,985,364,984,364,983,364,981,365,980,366,980,367,980,366,979,367,978,367,979,367,979,368,978,368,979,368,978,367,977,367,977,366,977,367,977,366,976,367,976,366,976,365,975,365,975,366,974,366,973,365,974,366,975,365,974,364,973,365,974,365,973,365,972,366,971,367,970,367,969,367,969,366,968,366,967,366,966,366,965,365,964,365,964,366,963,365,962,365,961,364,960,363,959,362,959,361,959,360,958,359,958,358,956,357,958,358,958,359,959,359,958,359,957,358,957,357,957,358,958,357,957,357,958,357,957,357,957,356,956,357,957,357,956,357,955,357,954,357,954,358,954,357,955,357,955,356,955,355,955,354,954,353,954,354,953,354,953,355,953,356,952,356,951,356,950,356,950,355,951,355,952,355,952,354,952,353,952,352,953,351,953,350,954,350,953,350,953,349,953,348,953,349,952,349,952,350,952,351,951,352,950,352,949,352,949,353,948,353,948,354,947,354,947,355,948,355,947,355,948,355,947,356,947,355,946,355,945,355,946,354,945,354,946,354,946,353,945,353,945,352,944,351,944,350,943,350,942,350,942,349,942,348,941,348,941,347,940,347,941,347,940,347,939,347,938,347,938,346,937,346,937,347,936,347,935,346,933,345,932,345,931,345,929,345,927,345,926,346,925,346,923,347,922,347,920,347,919,347,918,347,917,347,916,348,915,348,914,349,913,349,912,350,911,351,911,352,910,352,909,353,909,352,908,352,907,352,906,352,906,353,906,352,905,352,904,352,903,352,901,352,900,352,899,352,898,353,898,354,897,354,896,354,895,355,894,355,894,356,894,355,893,356,894,356,893,356,892,356,891,356,890,356,889,356,889,355,888,355,887,355,886,354,885,353,885,354,885,353,884,352,884,351,885,351,884,351,885,351,886,351,886,350,887,350,886,350,887,349,886,349,887,348,886,348,887,349,886,348,887,348,887,347,887,345,886,344,885,343,885,342,885,341,884,341,884,340,884,339,884,338,883,337,883,336,882,335,882,334,882,332,881,331,880,330,879,330,879,329,880,330,880,329,880,330,880,329,880,330,881,330,881,329,880,329,880,328,880,327,881,328,881,329,881,328,881,329,882,330,882,329,882,328,882,329,882,328,882,327,881,326,880,325,880,324,880,323,880,321,881,321,881,320,881,319,880,319,881,318,881,317,881,316,882,316,882,317,882,318,882,317,882,318,883,318,883,317,883,316,883,317,884,316,885,315,886,315,887,314,888,314,888,313,890,312,890,313,891,312,891,313,892,313,892,312,893,312,894,312,895,311,896,311,897,310,898,311,899,310,900,310,902,310,903,309,904,308,904,307,905,307,905,306,906,306,906,305,907,305,906,304,906,305,906,304,906,303,906,302,907,301,908,301,908,300,909,300,908,300,909,300,909,301,909,302,910,302,910,303,910,302,910,301,911,302,911,301,910,300,911,300,910,300,911,300,910,299,911,299,911,300,911,299,912,299,912,300,913,300,914,300,913,299,913,300,913,299,913,298,914,298,913,298,913,297,914,297,913,296,914,296,914,297,915,297,915,296,914,297,914,296,915,296,914,296,915,296,915,295,915,296,916,296,915,295,915,294,916,294,916,293,917,293,916,294,917,294,916,294,917,294,918,294,917,294,918,294,918,293,917,293,917,292,918,293,918,292,918,293,918,292,918,293,919,293,918,293,919,292,919,293,920,293,920,292,921,292,922,292,922,293,923,294,924,294,924,295,924,296,924,297,924,296,924,297,924,296,924,295,925,295,925,296,925,295,927,295,927,296,927,295,928,296,929,296,928,295,929,295,928,295,928,294,929,294,928,294,928,293,929,293,929,292,929,291,930,291,930,290,930,291,930,290,930,289,931,289,931,288,931,289,932,289,931,289,931,288,932,288,932,287,933,288,932,287,933,287,934,287,935,287,936,287,937,287,937,288,937,287,938,287,937,287,937,286,938,285,937,285,936,285,935,285,935,284,936,284,936,285,936,284,936,285,936,284,937,284,937,285,938,285,939,285 Australia, AUS, Australia 590,104,590,105,590,106,591,106,591,107,590,107,589,107,589,108,590,108,589,108,589,109,588,110,587,110,588,111,586,110,586,111,585,111,584,111,583,111,582,111,581,111,580,111,578,111,577,110,576,110,576,109,575,110,574,109,574,110,573,110,572,110,571,110,571,109,570,110,569,110,569,109,568,109,568,108,569,108,570,108,570,109,571,108,572,108,573,108,574,108,575,108,576,108,576,107,577,107,577,108,578,107,578,108,579,108,579,107,578,107,579,107,578,106,580,105,581,105,581,104,582,104,582,105,583,105,584,105,584,104,584,103,585,103,585,104,586,104,587,104,588,104,589,104,590,104 Austria, AUT, Europe 674,132,674,131,675,131,675,132,676,132,677,132,677,133,678,133,677,133,678,133,678,134,677,134,676,133,675,133,674,132 Azerbaijan, AZE, Asia 679,125,680,125,681,126,681,127,682,127,683,127,683,126,684,126,685,126,685,125,686,126,687,127,687,128,688,128,688,129,689,129,690,129,691,129,691,130,690,130,690,129,689,129,688,130,688,131,687,132,688,132,688,133,687,132,687,133,687,134,687,133,686,133,686,134,686,135,685,135,684,134,684,133,685,132,683,131,683,132,682,132,681,133,680,133,679,134,679,133,679,132,678,132,678,131,677,131,676,131,676,130,677,130,678,130,677,130,676,129,676,128,676,127,675,127,675,126,676,126,677,126,677,127,678,127,679,127,680,127,679,126,678,126,679,126,678,126,679,126,678,126,678,125,679,125 Azerbaijan, AZE, Asia 317,184,317,183,318,183,317,183,317,182,318,182,318,183,317,184 Bahamas, The, BHS, Caribbean 308,173,307,172,308,172,308,171,307,171,307,170,306,170,307,170,308,171,308,172,308,173 Bahamas, The, BHS, Caribbean 307,179,306,179,307,179,306,179,306,178,307,178,306,178,307,178,307,179 Bahamas, The, BHS, Caribbean 313,178,313,177,312,177,312,176,313,177,313,178,314,178,313,178 Bahamas, The, BHS, Caribbean 305,178,305,177,304,177,305,176,305,177,305,176,305,175,306,175,306,176,306,177,305,178 Bahamas, The, BHS, Caribbean 311,177,311,176,311,175,310,174,309,174,310,174,311,175,311,176,311,177 Bahamas, The, BHS, Caribbean 303,171,304,170,305,170,306,170,306,171,305,171,303,171 Bahamas, The, BHS, Caribbean 315,182,315,181,314,181,314,180,314,179,314,181,315,181,315,182 Bahamas, The, BHS, Caribbean 691,173,691,172,691,173 Bahrain, BHR, Asia 811,185,811,184,812,183,811,183,811,182,812,182,812,183,812,184,811,185 Bangladesh, BGD, Asia 807,172,806,171,807,171,807,172,808,173,808,172,808,173,808,172,809,172,809,173,809,174,809,175,810,175,811,175,812,175,813,175,814,175,816,175,817,175,817,176,816,176,816,177,815,177,815,178,815,177,815,178,814,178,814,179,813,179,813,180,814,181,814,182,815,181,815,180,815,179,816,179,816,180,816,179,816,180,816,179,816,180,817,181,817,182,817,184,817,185,817,186,818,187,817,187,817,186,816,186,816,187,816,188,816,187,815,186,816,186,815,186,815,185,815,184,815,183,814,182,813,182,813,183,813,182,813,183,812,183,812,182,811,181,811,180,812,180,811,180,810,180,811,180,811,181,811,182,811,183,811,184,810,185,810,184,810,185,809,185,810,184,809,185,809,184,809,183,810,183,809,183,809,184,809,185,808,185,809,185,808,185,808,184,808,185,808,184,808,185,807,185,807,186,807,185,807,184,806,183,806,182,806,181,806,180,805,180,805,179,806,179,806,178,805,178,804,177,804,176,805,175,806,175,807,175,806,175,806,174,805,174,804,173,804,172,805,172,805,171,806,171,806,172,807,172 Bangladesh, BGD, Asia 361,211,361,211 Barbados, BRB, Caribbean 550,96,550,97,551,97,552,97,552,96,552,97,552,96,553,96,554,96,555,96,555,97,556,97,557,97,557,98,558,98,558,99,559,99,559,100,558,100,557,100,557,101,557,102,556,102,555,102,555,101,554,101,554,100,554,101,553,101,552,101,552,100,551,99,551,100,551,99,550,99,549,99,549,98,548,98,547,98,547,97,548,97,550,96 Belgium, BEL, Europe 274,196,274,195,275,195,274,195,275,195,274,196,275,195,275,196,275,197,275,198,275,199,275,200,274,201,274,202,273,202,273,203,272,203,272,202,272,201,272,200,272,199,272,198,272,197,272,196,273,197,273,196,274,196 Belize, BLZ, Latin America 547,215,547,214,548,214,548,213,549,214,549,215,550,215,550,216,551,217,551,218,551,219,550,219,550,220,551,220,550,221,549,221,550,221,549,222,549,223,548,223,548,225,548,226,548,227,548,228,548,229,548,230,548,231,546,232,545,232,544,232,545,232,545,231,544,230,544,229,544,225,544,224,544,223,544,222,544,221,542,219,542,218,542,217,543,217,544,216,545,216,546,216,546,215,547,215 Benin, BEN, Sub Saharan Africa 345,154,345,153,345,154 Bermuda, BMU, North America 806,169,806,168,807,168,807,167,808,167,808,166,809,166,811,166,812,166,813,167,813,166,814,166,814,167,815,167,814,167,814,168,815,168,816,168,816,169,816,170,815,170,814,170,813,170,812,170,811,170,810,170,809,170,808,170,807,170,806,170,806,169 Bhutan, BTN, Asia 333,299,332,299,331,297,332,297,332,296,331,295,332,295,332,294,333,294,332,294,333,293,333,292,332,292,332,291,333,291,333,289,333,288,333,287,332,285,331,283,332,283,333,284,334,284,335,283,335,282,336,282,336,283,336,282,338,281,339,281,340,280,341,280,342,280,343,280,344,280,343,281,344,281,343,282,343,283,344,283,343,284,344,284,343,285,344,285,344,286,345,286,344,286,345,287,346,287,346,288,348,288,350,289,350,288,351,289,351,290,351,289,352,290,353,290,353,291,354,291,355,291,356,291,357,292,358,292,358,293,358,294,358,295,358,296,359,297,359,299,361,299,363,299,364,299,365,299,364,300,364,301,364,302,365,303,366,303,367,305,366,307,366,308,365,310,366,310,365,311,365,310,362,309,360,308,358,309,354,309,354,311,353,312,353,314,352,317,351,317,351,316,348,317,347,318,347,319,346,319,346,318,346,317,345,317,343,317,342,317,342,316,341,316,340,317,339,317,339,318,338,318,338,319,337,319,336,319,336,318,336,317,335,316,335,315,335,314,334,313,334,312,333,312,333,311,334,311,334,310,333,310,334,309,333,308,333,307,332,307,332,306,332,305,332,304,331,304,331,303,331,302,331,301,332,301,332,300,333,300,333,299 Bolivia, BOL, Latin America 592,122,593,122,592,121,591,121,591,120,590,120,590,119,589,118,588,118,588,117,587,116,587,115,588,115,589,115,590,115,591,115,592,115,593,115,594,115,595,115,596,115,596,116,597,116,598,116,597,116,597,117,597,118,598,118,598,119,597,118,597,119,598,119,598,120,597,120,596,120,597,120,597,121,596,121,596,120,596,121,595,121,595,122,595,123,594,123,594,122,593,122,592,122 Bosnia and Herzegovina, BIH, Europe 602,305,604,305,609,304,610,305,610,306,611,305,613,304,613,305,614,304,615,304,615,305,616,305,616,306,617,307,617,308,618,309,619,309,618,309,619,310,620,311,621,311,621,312,622,312,623,312,623,313,623,314,624,315,625,315,627,316,627,317,628,317,627,317,626,317,626,318,625,318,624,319,623,319,623,320,622,320,622,321,621,321,620,321,620,322,620,323,619,324,617,325,617,326,616,327,616,328,615,328,614,328,613,328,612,328,612,327,611,327,610,327,610,326,609,326,608,327,608,328,607,329,606,330,605,331,604,331,603,331,602,331,601,331,601,330,602,330,602,329,602,328,602,327,601,327,602,327,601,327,601,326,600,325,599,321,599,317,602,316,602,312,602,308,602,305 Botswana, BWA, Sub Saharan Africa 386,253,387,252,387,253,386,253 Brazil, BRA, Latin America 394,334,394,333,394,334 Brazil, BRA, Latin America 388,250,388,249,389,250,388,250 Brazil, BRA, Latin America 390,251,389,250,388,250,390,249,391,250,390,250,390,251 Brazil, BRA, Latin America 387,251,386,251,387,251,388,251,387,251 Brazil, BRA, Latin America 385,252,386,252,386,251,385,252 Brazil, BRA, Latin America 384,255,384,254,385,254,385,253,385,252,386,252,386,253,386,254,384,255 Brazil, BRA, Latin America 389,249,389,249 Brazil, BRA, Latin America 390,251,391,250,391,251,390,251 Brazil, BRA, Latin America 388,256,388,255,387,255,387,254,388,254,387,254,387,253,387,252,388,253,388,252,387,252,388,251,389,251,391,251,392,251,394,251,394,252,394,253,394,254,393,254,393,255,392,255,391,255,391,256,390,256,390,255,390,256,389,256,388,256,389,256,388,256 Brazil, BRA, Latin America 357,235,358,235,359,235,360,235,359,236,359,237,360,237,360,238,361,238,361,239,360,240,360,241,360,242,360,243,360,244,360,245,361,245,360,245,361,245,362,246,362,247,363,247,364,247,364,246,365,246,366,246,366,245,367,245,368,245,368,244,368,245,369,245,370,245,372,245,372,244,371,244,371,243,372,243,373,243,374,243,375,243,375,244,376,244,377,244,378,244,378,243,379,244,379,243,380,244,381,244,382,243,382,242,382,241,383,240,384,239,384,238,385,238,385,237,386,238,386,239,386,241,387,242,387,243,387,244,388,244,388,245,389,245,390,245,390,246,390,247,389,247,390,247,389,248,388,248,388,249,387,250,386,251,385,252,384,253,384,254,384,255,383,255,381,255,383,255,383,256,383,255,384,255,385,254,387,253,386,253,387,253,387,254,387,255,388,256,387,256,386,256,385,255,385,256,385,257,385,258,385,257,385,256,386,256,387,257,386,257,387,258,386,257,387,257,387,256,388,256,389,256,390,256,390,257,390,256,391,256,392,256,391,256,391,257,391,258,392,257,392,256,393,256,393,255,394,255,395,255,394,255,394,254,395,254,395,253,396,253,396,252,396,253,397,253,397,252,397,253,397,252,397,253,397,252,398,252,398,253,399,253,400,253,399,253,400,253,400,254,400,253,400,254,401,254,401,253,401,254,402,254,402,255,403,255,403,254,403,255,403,254,403,255,403,254,404,255,403,255,403,256,404,256,404,255,405,255,405,256,406,256,406,257,405,257,406,257,405,258,406,257,406,258,406,259,405,259,405,260,406,260,405,260,406,260,406,259,406,258,407,258,407,259,408,258,409,258,410,258,411,258,412,259,413,259,414,259,413,259,414,259,415,259,416,259,416,260,416,259,417,259,418,259,420,259,420,260,421,260,422,261,423,261,424,262,425,263,426,264,427,264,428,265,429,265,429,266,430,266,431,266,432,266,433,266,434,267,434,268,434,269,435,271,435,273,435,274,435,275,435,276,434,277,434,278,433,278,432,280,432,279,432,280,432,279,432,280,431,281,430,282,429,283,428,283,428,284,428,285,427,285,428,284,427,284,427,285,427,286,426,287,426,288,425,289,424,290,424,289,423,288,423,289,423,290,423,291,422,291,423,292,422,292,423,292,422,292,423,292,423,293,422,293,423,293,423,292,423,293,422,294,422,296,423,297,423,298,423,299,422,300,422,302,422,303,422,304,421,304,421,305,420,307,420,308,420,309,419,310,419,311,418,311,419,311,419,312,418,313,417,313,417,314,416,315,417,316,416,317,414,317,414,318,414,319,413,319,412,319,410,319,409,320,407,320,408,320,409,320,408,319,407,319,407,320,407,319,407,320,406,319,407,319,406,319,406,320,405,320,406,320,405,320,406,320,405,321,404,321,403,321,403,322,402,322,401,322,401,323,401,322,400,322,400,323,399,323,399,324,398,324,397,325,396,325,396,326,395,326,396,326,395,326,395,327,395,326,395,327,395,326,394,326,394,327,393,327,394,327,394,328,393,328,394,328,394,329,393,329,394,330,393,331,394,331,394,332,394,333,394,334,394,335,393,336,392,337,391,338,390,339,390,340,389,341,388,342,387,343,386,345,385,346,384,346,383,347,383,346,384,346,385,346,385,345,386,345,386,344,387,344,387,343,387,342,388,342,388,341,387,341,388,341,387,341,387,342,386,342,386,341,386,342,386,343,386,342,385,342,385,343,385,344,384,344,384,345,383,345,383,346,383,347,383,348,382,349,382,350,381,351,379,352,379,351,379,350,380,349,380,348,379,348,378,347,378,346,377,346,376,346,376,345,375,345,374,344,373,343,372,343,372,344,371,344,371,343,372,343,371,343,371,342,370,341,369,341,368,341,367,341,368,340,369,339,370,338,370,337,371,337,371,336,372,336,372,335,373,335,373,334,374,334,375,334,375,333,376,333,377,333,377,332,378,332,378,331,378,330,379,329,378,328,378,327,377,327,376,327,376,328,376,327,376,326,376,325,377,324,377,323,376,322,375,322,374,323,373,322,373,321,373,320,373,319,372,318,372,317,371,317,370,317,369,317,368,317,367,317,366,317,366,316,366,315,366,314,366,313,366,312,365,312,365,311,366,310,365,310,366,308,366,307,367,305,366,303,365,303,364,302,364,301,364,300,365,299,364,299,363,299,361,299,359,299,359,297,358,296,358,295,358,294,358,293,358,292,357,292,356,291,355,291,354,291,353,291,353,290,352,290,351,289,351,290,351,289,350,288,350,289,348,288,346,288,346,287,345,287,344,286,345,286,344,286,344,285,343,285,344,284,343,284,344,283,343,283,343,282,344,281,343,281,344,280,343,280,342,280,341,280,340,280,339,281,338,281,336,282,336,283,336,282,335,282,335,283,334,284,333,284,332,283,331,283,330,283,329,283,329,284,328,284,328,283,328,284,328,282,328,280,328,279,327,279,327,280,326,280,325,281,323,281,323,280,323,279,322,279,320,279,321,278,321,277,320,277,320,276,319,276,319,275,318,274,317,273,318,273,318,272,318,271,319,270,320,270,320,269,321,267,321,266,322,266,322,265,323,265,324,264,325,264,326,264,327,264,327,263,328,263,329,263,329,264,330,263,330,261,330,259,331,257,331,255,331,254,331,253,331,252,330,251,329,251,329,249,330,249,330,248,331,249,331,248,332,249,332,248,332,247,331,247,330,247,330,245,331,245,335,245,335,244,335,245,336,245,337,244,338,245,338,246,338,247,339,247,341,248,342,248,343,248,343,249,343,248,344,248,344,247,345,247,346,246,347,246,347,245,348,245,349,244,349,243,347,243,348,243,347,242,347,241,347,240,346,239,345,238,346,238,347,238,347,239,348,239,349,239,350,239,351,240,351,239,351,238,352,238,353,238,354,238,355,238,355,237,356,237,357,237,357,236,358,236,358,235,357,235 Brazil, BRA, Latin America 885,236,885,237,886,238,885,237,885,236 Brunei, BRN, Asia 885,236,884,236,884,237,884,238,883,238,882,238,882,237,883,236,884,236,885,235,884,236,885,236 Brunei, BRN, Asia 621,118,622,118,623,119,623,118,623,119,624,119,625,119,625,120,624,120,624,121,623,121,623,122,622,123,623,123,623,124,624,124,624,125,623,124,623,125,622,125,621,124,620,125,619,125,618,125,619,125,618,125,618,126,617,126,616,127,615,127,614,126,613,126,612,126,611,126,609,126,609,127,608,126,609,125,608,125,608,124,607,124,607,123,607,122,608,122,608,121,609,121,608,121,608,120,607,120,607,119,607,118,608,118,609,118,608,118,608,119,609,119,610,119,611,119,613,119,615,119,616,120,617,119,618,119,619,118,620,118,621,118 Bulgaria, BGR, Europe 531,210,531,209,531,208,532,208,533,208,534,207,536,206,537,205,538,205,539,205,540,206,540,207,541,208,541,209,542,209,542,210,543,210,543,211,543,210,542,210,542,211,543,211,544,213,545,213,545,212,546,212,546,213,547,215,546,215,546,216,545,216,544,216,543,217,542,217,542,218,541,218,541,217,539,217,538,217,538,218,537,218,533,217,531,217,531,218,531,219,531,220,531,221,531,222,531,221,530,221,528,221,527,221,527,222,526,222,526,221,525,221,525,220,524,220,523,220,523,219,523,218,523,217,524,217,524,216,524,215,523,215,524,215,525,214,526,214,526,213,526,214,526,213,526,212,527,212,526,211,527,211,527,210,528,210,529,211,530,211,530,209,530,210,531,210 Burkina Faso, BFA, Sub Saharan Africa 628,264,628,263,627,262,627,261,627,260,627,259,626,259,627,259,627,258,628,259,629,259,629,258,629,257,629,258,630,258,631,258,631,257,631,258,631,259,631,258,631,259,632,259,632,260,631,261,631,262,630,262,630,263,629,264,628,264 Burundi, BDI, Sub Saharan Africa 624,82,625,82,626,82,626,83,627,82,628,83,629,83,630,83,631,83,631,84,632,84,632,85,633,85,632,85,633,85,632,85,632,86,633,86,633,87,633,88,634,88,635,88,635,89,636,89,637,89,637,90,638,90,637,90,638,90,637,91,636,91,635,91,634,91,633,91,634,92,634,93,634,94,635,94,634,94,633,94,632,94,632,95,631,95,632,95,631,95,631,96,631,97,631,96,630,96,629,96,628,96,627,96,626,96,625,96,624,96,623,96,622,96,621,96,621,95,620,95,619,95,618,95,617,95,616,95,615,95,614,95,613,95,612,95,612,96,611,96,610,96,610,95,610,94,609,94,610,93,611,92,611,91,610,90,610,89,611,89,612,89,613,89,614,88,614,89,614,88,615,88,616,88,617,88,616,88,616,87,617,87,617,86,618,86,618,85,619,85,620,85,619,85,619,84,619,83,620,83,621,83,622,83,623,83,623,82,624,82 Byelarus, BLR, Europe 852,220,851,220,851,219,852,219,852,220 Cambodia, KHM, Asia 858,207,859,207,860,207,860,208,860,207,861,207,862,207,862,206,862,207,862,208,862,209,862,210,862,211,862,212,862,213,862,214,861,214,860,214,860,215,859,215,859,216,858,215,857,216,857,217,858,217,858,218,857,218,857,217,856,218,855,218,854,219,853,219,852,219,851,219,851,218,851,219,850,219,850,218,851,218,850,217,850,218,849,218,849,217,849,216,848,216,849,216,848,215,849,215,848,215,848,216,848,215,848,214,848,213,847,213,847,212,847,211,847,210,847,209,848,209,848,208,849,208,850,207,851,207,852,207,853,207,854,207,855,207,855,208,855,207,855,208,856,208,857,208,857,209,858,209,858,208,857,207,858,207 Cambodia, KHM, Asia 582,211,583,211,583,212,584,212,584,213,584,212,584,213,584,214,585,214,585,215,585,216,585,217,585,218,585,219,586,220,587,221,586,221,585,221,584,221,583,221,582,221,581,222,583,223,584,224,585,225,586,227,586,228,585,229,585,230,584,230,584,231,584,232,583,232,583,233,583,234,583,235,584,235,584,236,584,237,585,237,585,238,585,239,587,241,588,242,588,243,588,244,588,245,588,246,588,245,587,245,586,245,585,245,585,244,585,245,584,244,583,244,581,244,579,244,578,244,577,244,576,244,574,244,572,244,570,244,569,244,569,243,569,242,569,241,569,240,568,240,569,240,568,240,568,239,569,239,568,239,569,238,568,238,568,239,568,238,568,239,567,239,567,238,567,239,567,238,566,238,566,237,565,236,566,237,565,237,565,236,566,235,566,234,566,233,567,233,567,232,568,232,568,231,569,231,569,230,570,229,570,230,571,230,571,229,572,230,573,230,573,231,574,231,574,230,575,229,575,228,576,228,576,227,576,225,577,225,578,225,578,224,578,223,578,222,579,222,579,221,579,220,580,220,580,218,581,217,582,217,583,216,583,215,583,214,584,214,583,214,583,213,582,213,582,211 Cameroon, CMR, Sub Saharan Africa 306,61,305,61,304,60,305,60,307,60,307,61,306,61 Canada, CAN, North America 355,81,355,80,355,81 Canada, CAN, North America 309,60,308,60,307,60,307,59,308,59,309,60,310,60,309,60,310,60,309,60 Canada, CAN, North America 300,83,301,82,300,83,299,83,300,82,301,82,301,81,301,82,302,81,303,81,303,82,302,82,302,83,303,82,303,81,302,81,302,82,302,83,302,82,301,83,300,83 Canada, CAN, North America 299,82,300,81,301,81,300,82,299,82 Canada, CAN, North America 303,82,303,81,304,81,303,82 Canada, CAN, North America 165,103,165,104,164,104,164,103,163,103,163,104,162,103,163,103,162,103,162,102,162,103,161,103,162,103,162,102,161,103,161,102,160,102,161,102,161,101,160,101,159,101,158,101,158,100,157,100,156,100,156,99,157,99,156,99,157,99,155,99,154,98,156,98,157,98,158,99,159,99,161,99,162,99,163,99,163,100,164,100,164,101,165,101,165,102,165,101,165,102,166,102,168,103,168,104,169,104,169,105,169,104,169,105,170,105,169,105,169,106,168,106,168,105,166,105,164,104,165,103 Canada, CAN, North America 282,59,281,60,280,59,280,60,279,60,278,60,278,59,279,59,281,58,280,58,280,57,281,56,281,55,281,54,281,53,282,53,283,53,284,53,284,54,284,55,285,55,286,54,287,54,287,55,289,55,290,56,292,56,293,56,294,57,294,58,295,58,294,58,294,59,295,58,297,59,297,58,298,59,297,59,298,59,299,59,298,59,297,60,296,60,295,60,294,60,293,59,293,60,292,59,290,59,290,58,291,58,290,58,289,58,288,58,289,59,288,59,287,60,286,60,286,61,284,61,283,61,283,60,283,59,282,59 Canada, CAN, North America 285,54,285,53,284,53,284,52,285,53,286,54,285,54 Canada, CAN, North America 289,54,289,53,289,54,288,53,287,53,286,52,287,52,288,52,288,53,289,53,290,53,290,54,289,54 Canada, CAN, North America 160,99,160,98,161,98,161,99,160,99 Canada, CAN, North America 365,86,366,86,365,86 Canada, CAN, North America 319,47,317,47,316,47,315,47,315,46,316,46,317,46,319,46,319,47 Canada, CAN, North America 278,6,275,6,271,6,268,6,267,6,271,6,269,6,269,5,268,5,269,6,267,5,267,6,266,6,267,6,265,6,264,6,264,5,265,5,266,5,270,5,271,5,272,5,271,5,272,5,273,5,272,5,274,4,275,4,277,4,278,4,278,5,279,5,278,5,279,5,278,4,279,4,281,4,282,4,283,5,282,5,283,4,284,5,285,5,286,5,285,5,285,4,280,4,279,4,283,4,283,3,282,3,284,3,286,3,285,3,286,3,287,3,288,3,289,4,290,4,291,4,290,4,294,4,293,4,292,4,290,4,291,4,292,4,297,4,299,5,301,5,302,5,300,5,300,4,298,4,297,4,295,4,292,3,291,3,292,3,294,3,292,3,293,2,295,3,297,3,298,3,297,3,295,2,298,2,299,2,300,3,300,2,303,3,304,2,302,2,300,2,299,2,298,2,301,2,302,2,303,2,304,2,305,2,306,2,308,2,309,2,310,3,312,3,311,3,313,3,311,2,312,2,310,2,307,2,308,1,310,1,311,1,316,1,318,2,321,2,322,2,321,2,319,2,321,1,325,1,324,1,325,2,327,2,325,1,326,1,328,1,330,1,331,1,332,1,333,1,333,2,334,1,335,2,336,2,338,2,341,2,340,2,339,2,334,3,339,2,342,2,343,2,344,2,343,2,344,2,345,2,346,2,347,2,349,2,348,2,349,2,350,3,349,3,351,3,350,3,352,3,353,3,355,3,356,3,356,4,355,4,354,4,353,4,348,5,347,5,346,5,344,5,343,5,341,5,342,5,343,5,342,6,341,6,336,6,335,6,332,5,334,6,333,6,335,6,338,6,339,6,340,6,333,7,329,7,331,7,329,7,331,7,341,6,345,6,346,6,343,7,342,7,340,7,338,8,337,8,333,8,333,9,332,9,331,9,329,9,328,9,327,9,328,9,330,10,329,10,327,10,325,10,324,10,323,10,322,10,324,10,322,10,323,10,327,10,328,10,327,11,325,11,326,11,327,11,326,11,323,12,321,11,320,11,317,11,315,11,319,11,320,11,320,12,319,12,318,12,316,12,315,12,314,12,315,12,314,12,312,12,311,12,308,12,311,12,312,12,311,13,309,12,308,12,307,12,308,13,306,12,305,12,306,13,308,13,311,13,313,13,316,13,315,13,316,13,315,13,313,13,312,13,311,13,308,13,307,13,304,13,303,13,306,13,305,14,306,14,310,13,312,14,311,14,310,14,312,14,315,14,315,15,316,15,313,15,311,15,314,15,314,16,313,16,310,16,309,16,313,16,312,17,311,16,310,17,309,17,306,17,305,17,304,17,305,17,306,17,305,17,306,17,305,17,306,18,305,18,303,19,303,18,302,19,301,19,300,19,297,19,296,18,294,17,294,18,295,18,296,18,296,19,294,19,293,19,294,19,296,19,299,19,298,19,299,19,300,19,302,19,301,20,303,20,304,20,304,19,305,19,306,20,306,21,305,21,304,21,303,21,302,21,302,22,300,22,296,22,297,22,296,22,297,21,296,21,295,21,294,21,293,21,294,21,293,21,294,20,293,21,292,20,291,20,292,20,292,21,293,21,291,21,290,21,289,20,290,21,288,21,287,21,286,21,285,21,284,21,285,21,286,22,283,22,280,21,281,21,280,21,281,21,280,21,279,21,278,21,277,21,276,21,274,21,274,20,273,20,274,20,274,21,273,21,274,21,273,21,272,21,271,21,270,21,271,21,271,20,274,19,277,19,279,19,278,19,279,18,278,18,277,19,276,18,277,18,276,18,275,18,275,17,278,17,280,17,282,17,282,18,283,18,285,18,285,19,286,19,286,18,288,18,289,18,291,17,292,17,292,16,293,16,292,16,291,16,291,17,290,17,288,18,285,18,286,17,285,18,284,18,284,17,283,17,285,17,284,17,283,17,284,17,285,17,286,17,287,17,286,17,284,17,283,17,282,17,283,17,284,16,285,16,287,16,286,16,285,16,284,16,285,16,286,16,287,16,286,16,285,16,285,15,286,15,285,15,283,16,281,16,282,16,282,15,281,16,280,16,279,16,278,16,277,16,278,16,277,16,277,15,278,15,279,15,278,15,280,14,284,14,289,14,292,15,293,15,292,14,293,14,290,14,294,14,295,14,294,14,295,14,295,13,294,14,293,14,292,14,291,14,287,14,285,13,286,13,287,13,288,13,289,13,288,13,287,13,288,13,287,13,286,13,286,12,285,12,284,12,283,11,280,11,281,11,283,11,284,11,280,11,280,10,281,9,288,10,289,10,292,11,293,11,294,11,295,12,294,12,295,12,298,12,300,12,300,11,297,12,295,11,293,10,290,10,299,9,305,9,304,9,300,9,305,8,310,8,309,8,305,8,303,8,303,7,304,7,309,6,306,6,304,7,303,7,301,7,302,7,301,8,302,8,301,8,296,9,291,9,290,9,293,8,294,8,290,8,289,8,290,8,289,8,288,8,288,9,287,9,282,9,283,9,282,9,281,9,280,9,279,9,280,9,282,8,285,7,286,7,292,7,290,7,284,7,283,7,281,8,278,9,277,9,272,8,271,8,273,8,275,7,279,7,282,7,285,7,282,7,280,7,271,7,269,7,268,7,269,7,273,7,271,7,270,7,273,6,276,6,278,6 Canada, CAN, North America 279,47,279,46,280,46,280,47,279,47 Canada, CAN, North America 309,49,308,49,308,48,308,47,309,46,310,46,311,46,312,45,312,46,314,46,314,47,314,48,313,48,311,49,309,49 Canada, CAN, North America 159,102,159,101,160,102,159,102 Canada, CAN, North America 226,45,225,45,224,45,225,45,226,45 Canada, CAN, North America 315,46,314,45,313,45,314,44,315,45,315,46 Canada, CAN, North America 234,45,232,44,233,44,234,44,234,45 Canada, CAN, North America 268,13,262,13,261,13,262,13,266,12,264,12,262,12,263,12,262,12,261,12,260,12,259,12,260,12,259,12,259,13,258,13,257,13,257,12,258,12,256,12,255,13,254,13,254,12,253,12,252,12,256,12,257,11,256,11,257,11,256,11,254,12,252,12,250,11,251,11,250,11,249,10,250,10,252,10,256,11,255,10,256,10,257,10,256,10,255,10,254,10,253,10,252,10,253,10,252,10,250,10,249,9,250,9,251,9,253,9,251,9,252,9,251,9,255,9,258,9,256,9,255,9,256,8,257,8,254,8,255,8,254,8,253,8,254,8,253,8,254,8,254,7,255,7,256,7,256,8,258,7,256,7,260,7,259,7,258,7,256,7,257,6,259,7,259,6,260,6,263,7,264,7,266,8,267,8,268,9,267,9,269,9,270,9,271,9,272,9,272,10,274,10,275,10,274,10,273,10,274,10,273,9,274,9,276,9,277,10,276,10,275,10,276,10,278,10,278,11,277,11,278,11,279,11,278,11,278,12,277,12,278,12,279,12,280,12,281,12,282,12,283,12,284,12,285,13,280,13,280,14,279,14,279,13,279,14,278,14,277,14,277,15,276,14,275,14,276,14,276,13,275,14,275,15,276,15,275,15,274,15,273,15,274,15,273,16,272,16,271,15,270,15,269,15,270,15,271,16,270,16,269,16,267,16,269,16,268,16,269,16,268,16,265,16,264,16,263,16,262,16,262,15,261,15,260,15,259,15,259,14,258,14,259,14,260,14,258,14,257,14,259,13,260,13,264,13,268,13 Canada, CAN, North America 142,91,141,91,142,91,142,90,141,91,141,90,142,91,142,90,141,90,140,89,141,89,140,89,140,88,142,88,141,89,142,89,142,88,143,88,143,89,142,89,142,90,142,89,142,90,143,90,143,89,143,90,143,89,143,88,144,88,145,88,144,88,144,89,144,90,144,91,143,91,142,91 Canada, CAN, North America 238,44,238,43,239,44,238,44 Canada, CAN, North America 148,89,147,89,148,89,147,89,148,88,149,89,148,89 Canada, CAN, North America 302,44,301,44,302,44,302,43,303,43,304,43,303,43,304,42,305,42,305,43,304,43,303,44,302,44 Canada, CAN, North America 269,43,268,43,268,42,269,42,269,43 Canada, CAN, North America 309,43,308,43,307,43,307,42,308,42,309,42,310,42,309,43 Canada, CAN, North America 251,42,250,42,251,42 Canada, CAN, North America 236,42,235,42,236,42,237,42,236,42 Canada, CAN, North America 151,91,150,90,149,90,150,90,149,90,149,89,150,90,151,90,151,91 Canada, CAN, North America 252,43,252,42,253,42,252,42,251,42,252,42,253,42,253,43,252,43 Canada, CAN, North America 137,44,136,44,135,44,133,44,132,44,132,43,132,44,132,43,133,43,132,43,133,43,133,42,134,43,134,42,135,42,136,42,136,41,137,41,136,41,137,41,137,42,138,42,137,42,136,43,135,43,136,44,137,44 Canada, CAN, North America 303,42,304,42,304,41,305,41,305,42,305,41,306,41,306,42,305,42,303,42 Canada, CAN, North America 300,42,299,42,298,42,297,41,298,41,299,41,300,41,301,41,302,41,301,41,301,42,300,42,299,42,300,42 Canada, CAN, North America 250,45,248,45,247,45,246,45,245,44,244,44,243,44,242,44,241,43,243,43,244,43,244,42,245,42,244,42,245,41,246,41,247,41,247,42,248,41,248,42,249,42,251,43,252,43,252,44,253,44,254,44,253,44,252,44,252,45,251,45,250,45 Canada, CAN, North America 152,90,152,89,153,89,153,90,152,90 Canada, CAN, North America 150,91,149,90,148,90,150,90,150,91 Canada, CAN, North America 270,21,269,21,268,20,269,20,270,20,270,21 Canada, CAN, North America 353,109,354,108,355,108,354,108,354,109,353,109 Canada, CAN, North America 153,93,153,92,154,92,153,92,154,92,153,92,153,93,153,92,153,93,152,92,153,91,152,91,153,91,152,92,152,91,153,91,154,91,154,92,154,93,153,93 Canada, CAN, North America 297,92,296,92,295,92,294,92,293,91,294,91,295,91,296,91,297,92 Canada, CAN, North America 153,93,152,93,152,92,153,93 Canada, CAN, North America 146,94,145,93,143,92,144,92,143,92,142,92,143,92,142,91,143,91,144,91,145,91,144,91,144,92,144,91,145,91,145,92,144,92,145,92,144,92,144,93,145,93,146,93,145,93,146,94 Canada, CAN, North America 154,93,154,92,155,93,154,93 Canada, CAN, North America 239,39,238,39,237,39,238,39,237,38,238,39,239,39,238,39,239,39 Canada, CAN, North America 156,95,156,94,157,94,157,93,158,93,158,94,157,94,156,95 Canada, CAN, North America 223,32,222,31,221,31,220,30,218,30,220,29,221,29,222,29,223,29,224,29,226,30,226,31,224,32,223,32 Canada, CAN, North America 228,22,226,22,226,21,227,21,226,21,225,21,227,20,228,21,227,21,228,21,229,21,230,21,228,22 Canada, CAN, North America 356,114,355,113,355,112,356,112,356,111,357,110,358,110,358,109,358,110,358,109,358,110,359,110,358,110,358,111,358,112,357,112,356,113,357,113,357,112,357,113,356,113,357,113,356,113,357,113,357,114,357,113,358,113,357,113,357,112,358,112,359,112,358,112,359,112,360,112,360,113,359,113,358,114,357,114,356,114 Canada, CAN, North America 301,95,301,94,302,94,302,95,301,95 Canada, CAN, North America 155,95,155,94,156,94,155,95 Canada, CAN, North America 243,11,242,11,241,11,242,11,241,11,239,11,239,10,240,10,242,10,243,10,243,11,244,11,243,11 Canada, CAN, North America 351,113,351,112,350,112,351,112,350,112,351,112,350,112,349,112,348,112,348,111,347,111,346,111,346,110,348,109,347,110,348,110,348,111,349,111,350,111,351,111,352,111,354,111,353,111,352,111,352,112,352,113,351,113 Canada, CAN, North America 230,22,228,22,226,22,228,22,232,22,230,22 Canada, CAN, North America 156,96,155,96,155,95,156,95,156,96 Canada, CAN, North America 178,23,178,22,178,23,177,22,178,22,177,22,178,22,177,22,176,22,177,23,176,23,177,23,176,23,174,22,173,22,173,23,172,23,171,23,172,22,171,22,170,22,171,22,172,22,172,21,173,21,175,21,176,21,176,20,178,20,181,19,182,19,184,18,187,19,188,19,188,18,189,19,190,18,189,18,188,18,189,18,190,18,192,18,193,18,193,19,192,19,190,19,191,19,192,20,191,20,190,20,192,20,191,21,189,21,188,21,189,21,188,21,189,21,188,22,187,22,185,21,186,21,185,21,186,21,186,20,185,20,184,20,185,21,184,21,183,21,184,21,184,22,183,22,182,22,181,22,181,21,180,22,181,22,180,22,181,22,180,22,181,22,180,22,181,22,181,23,180,23,181,23,180,23,179,23,178,23 Canada, CAN, North America 301,23,300,23,301,23,303,22,302,23,303,23,302,23,301,23 Canada, CAN, North America 202,22,204,23,203,23,205,23,205,24,206,24,207,24,208,24,209,24,212,24,213,24,212,24,213,24,213,23,210,23,211,23,210,23,209,23,211,22,212,22,211,22,212,22,211,22,210,22,209,22,208,22,208,21,210,21,211,20,212,20,213,20,214,20,213,20,214,20,214,21,213,21,214,21,215,21,215,22,214,22,216,22,217,22,217,23,215,23,216,23,218,23,219,23,219,24,219,23,220,23,219,23,220,22,221,22,222,23,223,23,223,24,222,24,223,24,222,24,223,24,222,25,221,25,222,25,221,25,219,26,218,26,217,26,216,25,215,26,216,26,214,26,214,25,213,25,212,26,211,26,207,26,208,26,206,27,205,27,203,27,201,27,199,27,197,27,196,27,196,26,197,26,200,26,201,26,204,26,205,25,206,25,207,25,206,25,205,25,204,25,202,25,203,25,202,25,201,25,200,25,198,25,200,24,198,24,197,24,197,25,196,25,197,25,196,25,195,26,194,26,194,25,193,25,193,26,192,26,191,25,190,25,189,25,187,25,186,25,188,24,191,24,193,24,194,24,195,23,194,23,190,24,188,24,189,23,192,23,193,23,195,23,190,23,189,23,190,23,190,22,189,22,190,22,194,22,195,22,194,22,192,22,192,21,193,21,194,21,195,21,197,21,197,22,198,22,200,22,201,22,202,22 Canada, CAN, North America 373,96,373,97,371,96,371,97,372,97,371,98,371,99,370,99,370,100,369,100,369,101,369,102,370,101,371,100,371,101,371,100,372,100,372,101,373,100,373,101,371,101,371,102,372,101,372,102,371,102,372,102,373,102,374,102,373,102,373,103,374,102,373,102,374,103,374,102,374,103,373,103,374,103,373,103,374,103,374,102,375,103,374,103,375,103,375,102,375,103,376,102,376,103,376,102,377,102,378,102,379,103,378,103,378,104,377,104,378,104,377,104,378,104,378,105,378,104,378,105,378,104,378,105,379,104,378,105,377,105,378,105,379,105,378,105,379,105,380,105,380,104,381,105,380,105,379,105,379,106,378,106,378,107,379,106,378,107,378,108,378,107,378,108,379,108,379,107,380,106,381,106,381,107,380,107,380,108,381,108,381,107,382,108,381,108,382,108,381,109,381,110,380,111,380,110,379,110,379,111,379,110,379,109,377,110,377,109,378,109,378,108,378,107,377,107,377,108,376,108,375,108,374,109,374,110,373,110,372,110,372,109,373,109,374,109,374,108,375,108,375,107,375,108,374,108,375,107,374,108,373,108,373,107,373,108,372,108,371,108,373,107,372,108,372,107,371,107,371,108,370,108,369,108,368,108,367,108,366,108,365,107,364,108,365,107,364,107,364,108,362,108,362,107,361,107,363,106,364,105,365,105,364,105,362,105,363,104,363,105,364,104,364,103,365,103,365,104,366,104,365,104,365,103,366,103,365,103,366,103,365,103,365,102,366,102,366,101,367,100,367,99,368,99,367,98,368,98,369,98,368,97,369,98,369,97,369,96,371,96,372,96,373,96,372,96,373,96 Canada, CAN, North America 345,65,344,65,345,65 Canada, CAN, North America 300,66,299,65,299,64,299,63,300,63,301,63,302,64,301,65,300,66 Canada, CAN, North America 345,66,344,66,343,66,344,65,345,66,346,66,345,66 Canada, CAN, North America 346,70,345,69,346,69,346,70 Canada, CAN, North America 328,63,327,63,327,62,326,62,328,62,328,63,329,63,328,63 Canada, CAN, North America 334,70,335,69,336,69,336,70,335,70,334,70 Canada, CAN, North America 288,64,288,63,289,62,290,62,291,62,292,62,293,62,294,62,293,63,292,63,290,64,289,64,288,64 Canada, CAN, North America 317,63,316,62,317,62,317,63,318,63,317,63 Canada, CAN, North America 346,63,345,63,346,63 Canada, CAN, North America 230,23,229,23,230,23,231,23,233,23,234,23,232,23,231,23,230,23 Canada, CAN, North America 248,17,249,17,246,16,247,16,246,16,247,16,249,16,248,16,246,16,245,16,245,15,244,15,245,15,244,14,245,14,244,14,246,14,248,14,251,15,252,15,254,15,255,15,253,16,254,16,255,16,254,17,253,17,251,17,249,17,248,17 Canada, CAN, North America 302,32,301,32,300,32,299,31,298,31,297,31,297,30,297,29,298,29,301,30,305,29,308,30,309,31,310,31,311,31,311,32,308,32,306,32,305,32,302,32 Canada, CAN, North America 269,19,268,19,266,18,267,18,269,18,270,18,271,19,270,19,269,19 Canada, CAN, North America 240,29,241,29,242,29,243,29,245,29,246,29,247,29,248,29,249,29,249,30,248,30,247,30,246,30,247,30,248,30,246,31,244,31,244,32,245,32,246,31,248,32,247,32,248,32,248,33,249,32,250,32,250,33,251,33,249,34,250,34,249,34,250,34,250,35,249,35,250,35,249,35,248,35,247,36,246,36,245,36,244,35,245,35,244,35,245,36,243,37,243,36,242,36,241,36,240,35,239,35,238,34,237,34,236,34,236,33,235,34,234,33,232,32,231,32,232,32,232,31,233,31,234,31,234,32,235,32,236,32,237,32,238,32,239,32,238,32,238,31,239,31,238,31,238,32,239,32,239,31,238,31,239,31,240,31,239,31,238,30,238,31,237,31,236,31,235,30,236,30,237,30,238,30,237,30,236,29,237,29,239,29,240,29,239,29,240,29 Canada, CAN, North America 244,29,241,29,242,29,246,28,247,28,246,29,245,29,244,29 Canada, CAN, North America 227,25,225,25,226,24,227,24,228,24,228,25,229,25,228,25,227,25 Canada, CAN, North America 257,35,255,34,254,35,254,34,254,33,253,32,252,32,253,32,252,32,253,31,252,31,253,31,253,30,252,30,253,30,252,30,253,30,252,30,252,29,253,29,254,29,256,30,256,29,255,29,254,29,255,29,254,29,254,28,257,28,258,28,259,28,261,28,262,28,263,29,264,28,267,29,269,29,268,29,268,30,267,30,266,31,265,31,264,32,263,32,260,32,259,32,257,32,258,32,258,33,259,33,258,34,257,34,257,35 Canada, CAN, North America 205,16,204,16,204,15,202,15,200,16,200,15,203,15,205,15,208,14,211,15,212,15,211,16,207,16,206,15,206,16,205,16 Canada, CAN, North America 203,19,202,18,201,18,200,18,200,17,202,17,206,16,207,16,210,16,211,16,210,17,209,17,207,17,208,17,209,17,209,18,208,18,207,18,206,18,203,19 Canada, CAN, North America 235,21,234,21,237,20,239,20,236,21,235,21 Canada, CAN, North America 197,17,196,17,194,17,195,17,196,16,197,16,196,16,199,17,198,17,197,17 Canada, CAN, North America 164,33,165,33,164,33,165,32,164,32,166,32,165,31,166,31,165,31,166,30,167,30,168,29,167,29,166,28,165,28,166,28,165,28,165,27,171,27,173,27,175,27,176,27,177,27,181,28,180,28,181,28,182,28,182,29,183,28,185,28,187,28,189,28,192,29,193,30,194,30,192,30,189,31,188,31,187,32,183,32,182,33,180,34,179,34,178,35,178,36,177,36,175,36,174,36,173,37,172,37,171,37,170,37,169,37,169,36,167,35,165,35,163,35,162,35,162,34,163,34,162,34,163,34,164,33 Canada, CAN, North America 289,32,288,32,284,31,285,30,286,31,286,30,287,30,288,30,288,31,289,31,289,30,288,30,290,30,291,29,294,29,295,29,296,30,296,31,298,31,298,32,299,32,298,33,297,33,296,33,295,34,296,34,297,33,298,33,297,33,297,34,298,34,297,34,296,34,297,34,297,35,298,34,299,34,300,34,299,34,299,33,300,33,301,33,300,34,301,34,301,33,302,33,302,34,303,34,302,34,302,35,303,35,304,35,303,35,303,34,304,34,304,35,305,35,306,35,305,35,306,35,305,35,304,35,304,34,303,34,304,33,304,34,306,34,307,34,309,34,308,34,307,34,304,33,307,32,308,32,309,32,310,32,309,33,311,33,312,33,314,33,315,34,314,34,312,34,311,34,311,35,310,35,311,34,312,34,313,34,314,34,313,34,313,35,312,35,311,35,312,35,313,35,314,34,315,34,317,34,317,35,316,35,314,35,315,35,315,36,314,36,313,36,314,36,315,35,316,35,316,36,315,36,314,36,315,36,314,37,315,37,316,36,315,36,316,36,317,35,317,36,317,35,318,35,318,36,317,36,317,37,318,37,318,36,319,36,318,37,319,37,318,37,319,37,319,36,320,37,319,37,319,38,320,37,321,37,321,36,322,36,325,36,326,37,325,37,324,37,323,37,323,38,322,38,323,38,322,38,322,39,323,38,326,38,326,37,327,37,328,37,328,38,327,38,326,39,325,39,324,39,324,40,324,39,325,39,326,39,326,40,325,40,326,40,326,39,327,39,330,38,329,39,328,39,329,39,328,39,329,39,330,39,330,38,331,38,335,39,334,39,333,40,332,40,329,40,330,40,330,41,329,41,328,41,329,41,330,41,330,40,331,40,332,40,333,40,334,40,333,40,331,41,330,41,329,42,330,42,330,41,331,41,332,41,333,41,334,40,335,40,334,40,335,40,336,40,338,41,336,41,335,41,335,42,334,42,332,42,330,42,329,42,330,42,332,42,333,42,334,42,336,42,338,42,339,42,339,43,340,43,339,43,338,43,337,43,335,43,332,42,332,43,335,43,334,43,333,43,332,43,333,43,332,44,333,44,333,43,334,43,336,43,335,44,335,43,334,44,335,44,336,44,334,44,336,44,334,44,333,44,332,44,331,44,332,44,331,44,333,44,334,44,335,44,335,45,333,45,334,45,335,45,336,45,337,45,338,45,339,45,340,45,338,45,336,45,336,46,337,46,338,45,338,46,337,46,338,46,339,46,339,47,340,46,341,46,340,46,341,46,340,47,339,47,340,47,341,47,342,46,341,47,342,47,341,48,342,47,343,47,343,48,344,48,343,47,344,47,344,46,345,47,344,47,344,48,344,47,345,47,346,47,346,48,347,47,347,48,346,48,348,48,348,49,345,48,347,49,346,49,345,49,348,49,347,49,346,49,345,49,346,49,349,49,348,49,348,50,348,49,349,49,350,49,351,49,350,49,350,50,349,50,348,50,349,50,350,50,349,50,351,50,351,51,351,50,352,50,353,50,352,50,353,50,353,49,353,50,354,50,353,50,354,50,355,50,354,50,355,50,356,50,356,51,355,51,354,51,353,50,353,51,354,51,355,51,354,51,355,51,354,52,353,52,353,51,352,51,351,51,352,51,353,52,352,52,351,52,351,51,351,52,352,52,353,52,353,53,351,52,350,52,351,52,352,53,353,53,352,53,351,53,352,53,351,53,352,53,352,54,351,54,352,54,351,54,351,53,351,54,350,54,349,53,349,54,350,54,349,54,350,54,349,54,349,55,349,56,349,55,348,56,348,55,349,55,348,55,347,55,346,55,347,54,346,55,345,55,345,54,346,54,345,54,344,54,345,54,344,54,345,53,344,53,344,54,343,53,344,53,345,52,345,53,345,52,346,52,345,52,344,52,343,53,342,53,342,52,343,52,343,51,342,52,341,52,340,52,340,51,339,51,338,51,339,51,338,51,337,51,336,51,338,51,337,51,338,52,337,52,337,51,336,51,336,52,338,52,338,53,337,53,336,53,335,53,336,52,335,52,334,52,335,52,335,53,335,52,335,53,334,52,335,52,335,53,334,53,335,53,336,53,336,54,335,54,336,54,337,53,338,54,337,54,338,54,337,54,338,54,337,54,338,55,339,55,338,55,339,55,339,56,340,56,339,56,339,55,340,55,340,56,341,56,340,56,341,56,342,56,342,57,342,56,343,56,342,56,343,56,343,57,342,57,343,57,344,57,344,58,343,58,344,58,343,58,344,58,345,58,345,59,345,58,346,59,345,59,346,59,346,60,346,61,345,60,344,59,344,60,345,60,344,60,345,60,345,61,344,61,345,61,344,61,345,61,345,62,346,62,345,62,344,62,344,61,344,62,345,62,345,63,344,63,344,62,343,62,344,62,343,62,344,62,343,62,344,62,343,62,342,62,342,61,342,62,342,61,342,62,341,62,341,61,341,62,340,61,339,61,339,60,339,61,340,61,340,62,339,61,338,61,339,61,338,61,339,60,338,60,338,61,337,60,336,60,336,59,336,60,335,60,335,59,335,60,334,60,334,59,333,59,333,60,335,61,336,61,337,61,336,61,336,62,336,61,337,61,337,62,338,62,339,62,339,63,339,62,339,63,340,63,341,63,340,63,341,64,340,64,341,63,341,64,342,64,341,64,342,65,341,65,340,65,339,64,338,64,337,64,336,64,334,64,333,64,333,63,332,63,331,63,331,62,330,62,329,62,328,62,327,62,326,62,327,62,327,61,326,62,326,61,327,61,326,61,325,61,324,61,325,61,324,61,325,61,324,61,324,60,323,60,324,60,325,60,326,60,325,60,325,59,325,60,324,59,323,59,324,59,324,60,324,59,323,60,323,59,322,59,323,59,322,59,322,58,321,58,322,59,321,59,321,58,320,58,319,58,319,57,320,57,319,57,320,57,319,57,320,57,319,57,320,57,319,57,318,57,318,58,317,57,318,57,317,57,317,56,317,57,317,56,317,57,316,57,315,56,316,56,315,56,316,57,315,57,314,57,313,57,312,57,313,57,312,57,311,57,310,57,311,58,310,58,309,58,310,58,309,58,308,58,307,58,307,57,307,58,306,57,305,57,306,57,305,57,305,56,307,55,308,55,307,55,307,54,308,54,307,54,308,54,309,54,312,55,313,55,313,56,314,56,313,56,314,55,313,55,312,55,313,54,313,55,314,55,314,54,315,54,316,55,316,54,317,54,318,54,319,54,318,53,317,53,316,52,317,52,319,51,320,51,320,50,324,51,325,51,326,51,326,52,326,53,327,52,328,52,329,52,330,52,331,52,332,51,331,51,330,51,331,51,332,51,331,51,330,51,328,50,327,50,326,49,326,50,325,50,325,51,321,50,320,50,321,50,321,49,322,49,323,49,322,49,322,48,322,47,321,47,322,47,321,47,321,46,320,46,319,46,320,46,320,45,319,46,318,46,318,45,318,44,317,44,318,45,317,45,316,45,315,44,316,44,315,44,316,44,315,44,314,44,315,44,314,44,315,43,315,44,316,43,315,43,314,44,313,43,313,44,310,44,309,44,310,44,310,43,311,43,312,43,313,43,312,43,311,42,310,42,311,42,310,41,310,42,309,42,308,42,308,41,309,41,308,41,307,41,306,40,305,40,304,40,304,39,303,39,302,39,303,39,302,38,302,39,301,39,302,40,302,39,303,40,304,41,303,41,300,41,299,41,299,40,299,41,298,40,296,40,294,40,296,40,297,41,295,41,294,41,294,40,290,40,291,40,294,41,293,41,292,41,291,41,290,40,289,41,287,41,285,40,283,40,282,40,283,40,284,41,282,40,281,40,280,40,280,39,281,39,280,39,280,40,279,40,279,39,278,39,279,39,279,40,276,40,277,40,276,40,275,40,275,39,276,40,275,39,274,39,273,39,272,39,272,38,271,38,272,38,271,37,272,37,273,37,274,37,274,38,275,38,277,38,278,37,276,37,271,37,270,36,269,36,270,36,269,36,270,35,269,35,270,34,271,34,270,34,270,33,271,33,271,32,272,32,271,32,272,32,271,32,271,31,272,31,273,31,272,31,273,31,273,30,274,30,276,30,277,29,281,29,284,29,285,29,285,30,284,30,282,30,280,32,279,32,279,33,280,33,281,33,280,34,281,35,283,36,285,36,285,37,284,37,283,37,282,37,281,37,279,38,280,38,283,37,284,37,285,37,284,37,285,37,285,38,285,37,286,37,285,37,285,36,286,36,286,35,285,35,285,36,284,35,283,35,281,35,281,34,282,34,283,34,285,34,287,34,287,35,287,34,286,34,285,34,285,33,284,33,283,33,282,33,282,32,283,32,282,32,283,32,284,32,284,31,283,31,284,31,285,31,287,31,289,32 Canada, CAN, North America 259,18,252,18,251,18,251,17,253,17,254,17,255,17,258,17,259,17,260,17,260,18,259,18 Canada, CAN, North America 184,24,183,24,181,24,183,23,184,23,185,23,185,22,187,22,187,23,186,23,185,24,184,24 Canada, CAN, North America 353,103,350,103,349,102,348,102,346,101,347,101,349,101,351,101,353,102,354,103,355,103,354,103,353,103 Canada, CAN, North America 199,20,195,20,196,20,197,20,198,20,199,20 Canada, CAN, North America 167,102,166,101,167,102 Canada, CAN, North America 240,17,238,17,237,17,237,16,236,16,234,16,233,16,232,16,231,16,232,15,231,15,228,16,226,16,225,15,224,15,225,15,226,15,229,15,227,15,228,15,229,14,230,14,229,14,228,14,227,14,228,14,227,14,226,14,225,14,224,14,225,14,225,13,223,13,224,13,228,12,231,13,232,13,232,14,231,14,232,14,232,13,234,13,235,13,236,14,238,14,239,14,240,14,239,15,241,15,240,15,240,16,241,16,243,16,243,17,242,17,241,17,240,17 Canada, CAN, North America 263,21,265,20,266,21,268,21,267,21,265,21,267,21,272,22,271,22,269,22,268,22,269,22,266,22,265,22,267,22,268,22,269,22,266,23,267,23,266,23,267,23,268,23,269,23,270,22,270,23,271,23,272,23,272,24,271,24,272,24,273,24,273,23,274,24,275,24,276,24,277,24,278,24,279,24,280,24,281,24,282,24,284,24,286,23,287,23,288,23,290,23,292,23,293,23,296,23,296,24,299,24,300,24,299,24,298,24,299,24,300,24,301,24,301,25,300,25,298,25,299,26,300,25,301,26,302,26,301,26,300,26,299,26,298,26,299,26,299,27,296,27,294,27,293,27,292,27,291,27,290,27,290,26,289,26,290,26,289,27,288,27,286,27,285,27,285,26,284,27,283,27,283,26,283,27,281,27,280,27,279,27,280,27,279,27,278,27,277,27,278,27,277,27,276,27,274,27,274,26,275,26,274,26,273,26,273,27,273,26,272,26,272,27,270,27,269,27,268,27,267,26,266,26,267,26,266,26,266,27,266,26,265,26,266,26,265,27,264,26,265,26,264,26,263,26,263,25,262,25,263,24,262,24,263,24,263,23,262,22,260,22,260,21,259,22,258,22,257,22,256,22,254,22,253,22,254,22,255,22,255,21,252,21,251,21,252,21,253,21,252,21,250,21,250,20,249,20,250,20,251,20,249,20,250,20,249,20,250,19,252,19,256,20,257,20,258,20,259,20,260,20,260,21,259,21,260,21,263,21 Canada, CAN, North America 379,106,378,106,379,106 Canada, CAN, North America 240,26,239,25,238,25,239,25,238,25,239,25,238,25,237,24,238,24,240,24,239,24,240,24,236,24,232,24,231,24,232,24,231,23,232,23,233,23,232,23,233,23,234,23,235,23,236,23,235,23,236,23,235,23,235,22,235,23,234,22,235,22,233,22,233,21,234,21,233,21,234,21,235,21,236,22,237,22,238,22,237,22,238,22,239,23,240,23,241,23,240,23,239,22,240,22,241,22,240,22,239,22,238,22,239,22,239,21,237,21,238,21,239,21,241,21,242,21,243,21,242,21,243,21,243,20,244,20,244,21,246,21,247,21,246,21,247,21,246,22,247,22,247,23,246,23,247,23,247,24,248,24,247,24,246,24,245,24,246,24,245,24,246,24,245,24,245,25,246,25,247,25,246,25,245,25,246,25,243,26,243,25,241,26,241,25,242,25,241,25,241,26,240,26 Canada, CAN, North America 249,32,248,32,248,31,249,31,250,31,250,32,249,32 Canada, CAN, North America 225,19,223,19,224,19,223,19,223,18,222,18,223,18,222,18,221,17,223,17,224,18,225,18,224,18,226,19,225,19 Canada, CAN, North America 233,17,232,17,234,17,236,17,237,17,233,17 Canada, CAN, North America 257,27,254,26,253,26,252,26,251,26,251,25,251,26,250,26,251,26,251,25,250,26,250,25,251,25,252,24,251,24,252,24,253,24,255,24,256,24,257,24,258,24,259,25,259,26,259,27,257,27 Canada, CAN, North America 196,33,197,33,199,32,199,33,198,33,199,32,200,32,200,31,202,32,206,32,206,33,205,33,204,33,204,34,204,33,205,34,204,34,205,34,205,33,206,33,205,33,206,33,206,34,206,33,207,33,206,33,207,33,208,33,209,33,210,33,209,33,210,33,209,33,209,32,210,33,210,32,209,32,208,32,207,32,207,31,208,31,210,32,211,32,210,32,211,32,213,32,213,33,212,33,213,33,214,33,214,34,214,35,215,35,216,36,216,35,217,35,218,35,217,35,218,35,217,35,217,34,216,34,216,33,215,33,216,33,215,33,215,32,215,31,216,31,215,31,215,30,217,31,218,31,219,31,220,31,221,31,222,31,222,32,223,32,224,32,223,32,224,33,225,34,224,34,225,35,226,35,226,36,227,36,226,36,226,37,226,38,227,38,229,39,230,39,231,39,230,39,230,38,230,39,231,39,233,39,234,40,235,40,236,40,237,40,236,40,237,41,236,42,236,41,235,41,235,42,234,41,233,41,232,41,231,41,232,41,232,42,231,42,230,42,230,41,229,41,229,42,230,42,231,42,230,43,231,42,232,42,233,42,234,42,233,42,233,43,234,43,234,44,232,44,231,44,230,44,229,44,227,44,226,44,225,44,224,44,225,43,224,43,223,43,222,43,221,43,220,43,221,43,221,42,220,42,219,42,219,43,218,43,217,44,215,44,214,44,213,44,209,45,208,45,207,45,205,45,206,45,205,45,201,45,200,45,199,45,199,44,198,44,199,44,198,44,199,43,198,43,197,43,195,43,194,43,192,43,190,42,189,42,188,41,187,41,188,40,190,40,194,40,197,40,198,40,200,40,202,40,203,40,204,40,205,40,205,39,204,39,203,39,202,39,201,39,200,39,198,38,197,39,196,38,195,39,191,39,190,39,189,39,187,39,186,39,186,38,185,38,184,38,186,37,189,37,191,36,192,36,191,36,193,36,194,36,193,36,188,36,187,36,186,36,185,36,186,36,186,35,185,36,184,36,183,36,182,36,182,35,183,35,183,34,184,34,185,34,185,33,184,33,185,32,186,32,187,32,192,31,196,30,197,31,198,31,197,32,198,32,197,32,196,32,197,32,196,33 Canada, CAN, North America 312,117,311,117,310,118,309,120,306,120,303,120,302,120,302,121,303,122,302,122,299,123,296,124,295,124,292,125,291,125,290,125,290,124,291,123,292,123,292,122,292,121,293,120,293,119,292,117,292,114,291,114,289,113,289,112,288,112,287,112,287,111,286,111,285,111,285,110,283,109,280,108,277,107,274,106,273,106,271,107,271,106,270,106,270,107,270,106,269,106,268,106,267,106,266,106,265,106,264,106,263,105,263,106,262,106,262,105,261,105,262,105,260,105,259,105,258,105,257,104,256,104,255,104,255,103,254,102,254,103,254,104,248,104,238,104,228,104,218,104,209,104,199,104,189,104,179,104,171,104,171,103,170,103,170,104,170,103,171,103,171,102,171,103,170,103,170,102,170,101,170,102,169,102,168,102,167,102,167,101,168,101,168,102,169,101,168,102,168,101,168,100,168,101,167,101,166,101,165,101,165,100,165,101,165,100,166,100,165,100,166,99,165,99,165,100,165,99,164,100,164,99,165,99,165,98,165,99,164,99,163,99,163,98,163,99,162,99,161,99,162,99,161,99,162,98,163,98,163,97,163,98,162,98,163,98,162,98,161,99,161,98,160,98,161,98,160,98,160,97,160,98,159,98,158,98,159,98,158,98,157,98,157,97,156,97,157,97,158,97,158,96,158,97,157,97,157,96,156,97,156,96,157,96,158,95,159,96,160,95,159,96,157,95,157,96,156,96,157,96,156,96,156,95,157,94,158,94,159,94,159,93,158,93,159,92,158,92,159,92,158,93,156,94,156,93,156,94,156,93,156,94,155,93,156,93,155,93,155,94,154,94,155,93,155,92,154,92,154,91,153,91,153,90,154,90,155,90,156,91,155,90,154,90,153,90,153,89,154,89,153,89,154,88,153,88,153,89,152,89,152,90,151,90,150,89,149,89,149,88,150,88,151,88,150,88,149,88,149,87,148,87,149,87,148,87,148,86,149,86,149,87,150,87,149,86,150,86,150,85,150,86,150,85,150,84,149,85,149,86,149,85,150,85,149,84,149,83,150,83,149,83,149,82,148,82,147,81,146,81,145,81,144,81,144,80,143,80,143,79,142,79,143,79,142,78,140,76,139,75,138,75,138,74,137,74,136,74,136,73,135,73,134,72,135,72,134,72,133,71,130,72,131,72,130,72,130,73,129,73,127,74,127,73,126,72,124,71,123,71,122,71,122,70,122,69,120,69,120,70,118,70,117,70,116,60,116,50,117,42,118,42,120,42,122,42,123,42,124,43,125,43,128,44,129,44,130,44,131,44,133,44,134,44,133,44,134,44,135,44,136,44,137,44,136,44,136,43,137,43,138,43,138,42,140,42,141,42,142,42,143,41,142,41,142,42,142,41,143,41,144,41,145,41,146,41,146,40,147,40,146,40,147,40,148,40,149,40,150,40,151,40,149,41,148,41,147,42,146,42,143,42,142,43,143,43,142,43,141,43,141,44,141,43,140,43,140,44,139,44,140,44,141,44,140,44,139,44,140,44,141,44,142,44,141,44,141,43,142,43,143,43,144,43,144,42,145,42,144,42,145,42,145,43,145,42,146,42,145,43,146,42,146,43,146,42,147,42,146,42,146,43,147,42,147,43,146,43,147,43,147,42,148,42,147,42,148,41,150,41,152,41,153,41,152,41,153,41,155,41,155,40,154,40,155,40,157,40,156,40,155,40,155,39,156,39,155,39,156,39,158,40,159,40,159,41,162,42,163,43,163,42,164,42,163,42,164,42,163,42,163,41,164,41,165,41,165,42,165,41,164,41,165,41,166,41,165,40,165,41,165,40,164,41,164,40,165,40,166,40,165,40,166,40,166,41,167,41,167,42,166,42,167,42,168,42,167,42,168,42,169,42,170,42,170,41,171,41,173,41,174,41,177,42,179,42,180,42,183,43,184,43,187,44,189,44,190,44,191,44,192,44,191,44,192,44,193,44,195,44,196,44,196,45,197,45,198,45,197,46,195,46,194,46,194,47,193,47,194,47,196,47,197,47,199,47,202,47,203,47,204,47,205,47,206,47,207,47,208,47,209,47,209,46,210,47,209,47,210,47,211,47,210,47,211,47,212,47,213,48,212,48,213,48,214,48,215,49,216,49,215,49,214,49,215,50,216,50,216,51,216,50,217,51,218,51,217,51,216,50,216,49,217,50,216,49,217,49,217,50,216,50,217,50,218,50,218,49,217,49,218,49,217,49,216,48,217,48,216,48,216,47,215,47,216,47,217,47,216,47,216,46,216,47,217,46,218,46,219,46,220,46,220,45,221,45,222,45,223,45,221,45,220,45,220,46,219,45,218,45,218,46,216,45,216,46,217,46,216,46,215,46,214,46,215,46,214,46,213,46,214,45,215,45,218,44,219,44,220,44,221,44,222,44,223,44,223,45,224,45,223,45,224,45,224,46,225,45,225,46,226,46,225,46,226,46,228,46,229,46,232,47,233,47,234,47,235,47,237,47,238,47,240,47,242,47,243,47,244,47,243,47,243,46,244,46,245,47,246,47,246,48,247,48,248,47,247,47,247,46,246,46,246,47,245,47,244,46,245,46,243,45,244,45,245,46,245,45,246,45,245,45,246,45,247,45,248,45,248,46,249,46,250,46,249,46,250,46,249,46,250,46,251,46,252,46,251,46,251,47,251,48,251,47,250,48,251,48,250,48,251,48,251,49,252,48,252,49,253,48,253,49,252,49,253,49,254,49,253,50,252,50,252,49,251,49,251,50,251,49,250,49,250,50,251,50,252,50,252,51,253,50,252,50,251,50,253,50,254,50,253,49,254,49,253,49,254,49,253,48,254,48,253,48,252,47,253,47,253,46,254,46,255,46,257,46,257,45,259,45,258,45,258,44,259,44,258,44,258,43,258,44,257,44,256,44,256,43,257,43,257,42,258,42,259,42,258,43,259,42,258,42,257,42,256,42,256,41,255,42,252,41,251,41,250,40,250,39,251,39,252,39,251,39,250,38,250,37,251,37,251,36,252,36,253,37,253,36,252,36,253,35,254,35,255,35,256,35,254,35,255,35,256,35,256,36,257,35,258,35,258,36,260,36,261,36,261,37,261,38,260,38,261,38,262,38,261,38,262,38,263,39,264,39,263,40,264,40,264,39,264,40,265,40,263,40,262,40,263,40,264,40,263,41,262,41,261,41,262,41,262,42,263,42,264,42,265,42,266,42,265,42,266,42,267,42,268,42,267,42,268,42,267,42,267,43,266,43,267,42,266,43,268,43,267,43,267,44,268,44,268,45,269,45,269,46,269,45,270,45,270,44,270,45,270,44,270,43,272,43,273,43,275,44,276,44,276,46,275,46,275,45,274,46,275,46,274,46,274,47,275,47,275,48,276,48,277,49,278,49,279,49,278,48,279,49,279,48,280,48,280,47,281,47,281,46,281,47,282,46,282,45,283,44,284,44,285,44,284,44,285,44,284,44,285,44,285,43,286,44,286,43,284,43,285,43,284,43,283,43,283,42,283,41,284,41,283,41,284,41,285,41,286,41,287,41,288,41,289,41,290,41,291,41,293,42,292,42,291,42,292,42,290,42,291,42,293,42,292,42,293,43,294,43,295,43,296,43,295,43,295,44,294,44,295,44,296,44,296,45,295,45,294,45,293,45,292,45,292,46,293,46,292,46,293,46,294,46,293,46,293,47,294,47,295,48,296,48,295,49,295,50,294,50,293,50,292,50,292,51,290,51,289,51,288,51,287,51,287,50,288,50,288,51,288,50,287,50,286,50,287,50,286,50,285,49,286,50,284,50,285,50,286,50,285,50,286,50,285,50,286,50,287,50,286,50,287,50,287,51,288,51,288,52,287,52,286,52,286,51,286,52,285,52,284,52,284,51,283,51,282,51,281,51,280,51,279,51,280,51,279,51,280,52,282,52,281,52,282,52,281,53,280,53,279,54,278,54,277,55,276,55,275,54,274,54,272,53,271,53,270,53,269,53,268,53,269,53,268,53,266,53,265,53,266,53,269,53,270,53,271,54,272,54,272,55,276,55,278,55,279,55,278,56,277,56,277,57,276,57,275,58,276,58,275,58,274,58,273,58,273,59,272,58,272,59,272,58,272,59,271,58,271,59,270,58,269,58,270,58,270,59,269,59,269,58,269,59,270,59,269,59,269,60,268,60,268,59,267,60,268,60,268,59,268,60,267,60,265,59,264,59,263,59,262,59,261,59,259,58,258,58,259,58,259,59,258,59,259,59,260,59,259,59,262,59,263,59,263,60,262,60,263,60,264,59,265,60,267,60,267,61,268,61,267,62,266,62,265,62,263,62,262,62,263,63,264,63,263,63,262,63,261,63,262,64,261,64,260,64,261,64,260,64,260,65,259,64,260,65,259,65,260,65,259,65,260,65,259,65,260,65,258,66,258,67,257,67,258,67,257,68,256,68,256,69,255,69,256,69,255,69,256,69,255,70,255,71,255,72,256,72,255,73,255,74,256,74,257,74,257,75,256,76,257,75,257,74,258,74,259,74,260,74,260,75,261,76,261,77,262,78,262,79,261,80,262,79,263,79,262,80,263,80,263,79,265,79,267,79,268,79,270,80,273,80,275,81,276,81,277,82,277,83,278,83,280,83,281,83,282,84,283,84,284,84,284,85,283,85,284,85,286,85,287,85,288,85,289,85,288,85,290,85,291,85,292,85,293,85,292,85,293,85,293,86,292,88,293,88,293,89,293,90,293,91,293,92,294,92,295,93,295,94,294,94,295,94,297,94,297,95,298,95,298,96,298,97,297,97,298,97,298,96,299,97,302,98,301,98,301,97,300,97,300,96,301,96,302,96,303,97,303,96,303,95,302,95,303,95,303,94,304,94,304,93,303,93,303,92,303,91,303,90,302,90,303,90,302,90,303,90,302,90,302,89,303,89,302,89,303,89,302,89,303,89,302,88,301,88,301,87,300,87,301,86,302,86,303,86,304,85,306,85,307,84,308,84,308,83,309,82,310,82,310,80,310,79,309,78,309,77,308,76,306,76,305,75,304,75,305,75,304,75,304,74,305,74,305,73,306,73,306,72,306,71,307,72,307,71,308,71,307,71,308,71,308,70,307,70,306,69,307,69,306,69,307,68,306,68,307,68,306,68,305,68,306,67,306,66,307,66,306,66,307,66,306,66,306,65,305,64,305,63,306,63,307,63,310,63,312,64,313,64,314,64,315,64,316,64,315,64,316,64,318,63,319,63,321,64,322,64,322,65,321,65,322,65,323,65,324,65,323,66,324,66,324,65,324,66,325,66,324,66,325,66,324,66,325,67,324,67,325,67,326,67,327,67,328,67,329,67,329,68,330,68,331,68,330,68,331,67,331,68,330,68,331,69,330,69,330,70,331,70,330,70,330,71,328,70,329,71,330,71,331,71,331,72,330,72,331,72,330,72,330,73,331,72,331,73,332,73,331,73,331,74,330,74,330,73,330,74,329,74,330,74,330,75,331,74,332,74,333,74,334,74,334,75,335,75,334,76,333,77,332,77,331,77,333,77,334,76,335,76,335,75,336,75,336,76,335,76,336,76,336,75,336,76,337,76,336,76,336,77,337,76,338,75,339,75,340,75,340,74,341,74,341,75,342,75,341,75,342,75,341,75,342,75,341,74,342,74,342,73,342,74,342,73,343,73,344,73,343,73,342,73,343,73,343,72,344,72,345,72,343,72,343,71,344,71,344,70,345,70,345,69,346,70,345,70,346,70,345,70,345,71,346,70,346,71,347,71,347,70,347,71,348,72,347,72,348,72,347,72,348,72,348,73,349,72,349,73,348,73,347,73,348,73,348,74,348,73,350,73,349,73,350,73,350,74,351,74,350,74,351,74,350,74,351,74,351,75,350,75,349,75,349,76,350,75,351,75,352,75,352,76,351,76,352,76,350,76,349,77,350,76,351,76,352,76,353,76,352,77,352,76,352,77,353,77,354,78,353,78,352,78,353,78,354,78,354,79,353,79,354,79,355,79,354,79,355,79,355,80,354,80,355,81,354,81,354,80,353,81,352,80,353,80,352,80,353,81,354,81,355,81,354,81,353,81,354,81,355,82,354,82,355,82,354,82,353,82,354,82,355,82,356,82,355,82,355,83,356,83,357,83,358,83,358,84,358,83,359,83,358,83,358,84,359,84,358,84,359,84,358,84,358,85,357,85,357,86,359,85,360,85,361,85,360,86,361,85,362,85,361,86,362,85,363,85,362,86,363,85,363,86,364,86,365,86,366,86,366,87,367,87,366,87,365,88,364,88,363,88,361,88,361,89,363,88,364,88,363,88,363,89,360,89,359,89,359,90,358,89,357,89,358,89,358,90,359,90,358,90,358,91,359,90,359,91,358,91,359,91,360,90,361,90,362,89,363,89,365,88,366,88,365,88,364,88,365,88,367,88,368,89,367,90,368,90,367,90,368,90,368,89,369,89,370,89,369,89,370,90,371,90,372,90,371,90,372,90,371,90,372,90,372,91,371,92,372,92,371,92,372,92,372,93,371,93,372,93,371,93,372,93,373,93,372,93,372,94,373,94,372,94,372,95,372,94,372,95,370,95,370,96,369,96,368,96,367,96,366,96,365,97,364,97,363,97,364,97,363,97,363,98,363,97,362,97,363,98,362,98,361,99,360,99,360,100,359,100,357,100,356,100,355,100,354,100,353,100,352,100,351,100,349,100,348,100,347,100,346,100,345,100,344,100,342,100,341,100,340,100,339,100,339,101,338,101,338,102,337,103,335,103,334,103,333,104,334,104,333,104,332,104,332,105,331,106,330,106,329,106,328,105,327,105,327,106,328,105,328,106,329,106,330,106,330,107,329,108,328,108,328,109,327,109,326,110,327,110,328,110,328,109,329,109,329,108,331,107,332,106,334,105,336,104,338,104,340,103,342,103,343,103,345,103,347,104,346,104,347,105,345,105,345,106,344,106,343,106,342,106,341,106,340,106,339,106,339,107,340,106,342,107,343,107,342,108,343,108,344,107,345,107,345,108,345,109,343,109,344,109,345,109,345,110,345,111,346,111,346,112,346,111,346,112,347,112,348,112,347,112,348,113,349,113,350,113,349,113,350,113,351,113,352,113,351,114,352,113,352,114,352,113,354,113,354,114,355,114,355,113,356,114,355,114,356,114,357,115,356,115,355,115,354,115,355,115,354,115,353,115,353,116,352,116,351,116,350,116,350,117,349,117,349,116,349,117,349,116,349,117,348,117,348,116,347,117,346,117,347,117,346,118,347,118,346,118,345,118,346,118,345,119,344,119,344,120,344,119,343,119,344,119,343,120,342,120,342,119,342,120,342,119,341,119,341,118,341,117,342,117,341,117,342,116,342,117,343,117,343,116,342,116,344,116,345,115,346,115,346,114,346,115,347,115,346,115,347,115,347,116,347,115,348,115,349,115,349,114,348,114,347,114,346,114,345,114,345,115,345,114,345,115,345,114,346,113,347,113,346,113,347,113,346,113,345,112,345,113,346,113,345,114,344,114,343,114,342,115,341,115,341,114,342,114,341,114,341,115,340,115,339,115,338,115,337,115,337,114,336,113,336,111,336,109,335,109,335,108,334,108,334,109,333,109,332,109,332,108,331,109,329,110,329,111,329,112,329,113,328,113,327,114,328,114,327,114,327,115,327,114,326,114,326,115,325,115,324,115,321,115,320,115,319,115,318,115,315,115,314,116,313,116,312,117 Canada, CAN, North America 464,200,464,199,463,199,464,199,465,199,464,200 Cape Verde, CPV, Sub Saharan Africa 469,206,468,205,469,205,469,206 Cape Verde, CPV, Sub Saharan Africa 466,206,466,205,467,205,467,206,466,206 Cape Verde, CPV, Sub Saharan Africa 471,203,471,202,471,203 Cape Verde, CPV, Sub Saharan Africa 608,218,609,218,609,219,611,221,610,222,610,223,610,224,610,223,610,224,612,224,612,225,612,226,613,226,614,226,615,227,615,228,616,228,618,230,619,231,618,231,619,232,620,233,621,233,621,234,621,235,622,235,621,235,620,235,619,235,618,235,617,235,616,234,616,235,615,235,615,236,614,236,613,235,612,236,611,236,610,237,609,237,609,236,608,236,608,237,607,237,607,238,606,238,605,238,604,238,603,237,603,238,602,237,601,237,601,236,600,236,599,235,598,235,597,235,597,236,596,237,595,237,595,238,595,239,595,240,594,240,593,240,592,240,592,239,592,240,591,240,590,240,589,240,589,241,589,242,588,244,588,243,588,242,587,241,585,239,585,238,585,237,584,237,584,236,584,235,583,235,583,234,583,233,583,232,584,232,584,231,584,230,585,230,585,229,586,228,587,228,588,228,589,227,590,228,591,227,592,227,593,227,594,226,595,226,596,226,597,225,597,224,596,224,597,223,598,224,599,223,600,223,601,223,602,223,601,222,602,222,602,221,603,221,604,221,604,220,605,220,605,219,606,218,607,217,608,218 Central African Republic, CAF, Sub Saharan Africa 585,181,588,180,595,183,604,188,611,192,611,194,611,203,610,203,609,203,608,204,608,205,608,206,607,207,607,208,606,209,606,210,606,211,605,211,605,212,605,213,606,213,606,212,607,213,607,214,607,216,608,216,608,217,608,218,607,217,606,218,605,219,605,220,604,220,604,221,603,221,602,221,602,222,601,222,602,223,601,223,600,223,599,223,598,224,597,223,596,224,597,224,597,225,596,226,595,226,594,226,593,227,592,227,591,227,590,228,589,227,588,228,587,228,586,228,586,227,585,225,584,224,583,223,581,222,582,221,583,221,584,221,585,221,586,221,587,221,586,220,585,219,585,218,585,217,585,216,585,215,585,214,584,214,584,213,584,212,584,213,584,212,583,212,583,211,582,211,581,211,581,210,580,209,580,207,581,207,580,207,581,206,581,205,583,203,586,200,586,198,586,195,587,191,587,189,586,188,585,186,585,185,585,181 Chad, TCD, Sub Saharan Africa 316,394,317,394,318,394,316,394 Chile, CHL, Latin America 318,382,317,382,318,382 Chile, CHL, Latin America 314,405,314,404,314,405,314,404,314,405 Chile, CHL, Latin America 330,416,330,415,331,415,332,415,330,416 Chile, CHL, Latin America 313,397,313,396,312,396,313,396,314,396,313,397 Chile, CHL, Latin America 315,389,314,389,315,389,315,388,314,388,315,388,315,389 Chile, CHL, Latin America 315,398,314,398,315,398 Chile, CHL, Latin America 338,416,337,416,336,416,335,416,335,415,334,415,337,415,338,415,338,416 Chile, CHL, Latin America 328,416,327,416,327,415,326,415,327,415,328,415,327,416,329,416,328,416 Chile, CHL, Latin America 334,408,334,410,334,412,334,414,334,415,333,415,332,415,331,415,330,415,329,415,330,415,329,415,328,415,327,415,328,414,327,415,326,415,327,414,326,414,326,415,326,414,325,414,325,415,325,414,324,414,323,414,324,414,323,414,324,414,325,414,324,414,325,414,326,414,325,414,326,414,327,414,327,413,328,414,327,414,328,414,327,414,328,414,329,414,328,414,328,413,327,413,329,414,329,413,330,413,330,414,330,413,331,414,332,414,331,414,331,415,332,414,330,413,329,413,329,412,331,411,330,411,329,411,328,411,328,410,328,409,328,410,329,410,329,409,328,409,329,409,330,409,331,408,332,408,332,409,333,408,334,408 Chile, CHL, Latin America 317,403,316,403,316,402,315,402,316,402,317,403 Chile, CHL, Latin America 314,397,314,396,313,396,313,395,314,396,314,397 Chile, CHL, Latin America 324,414,324,413,323,413,323,412,324,412,325,412,324,412,324,413,324,412,324,413,325,413,324,413,324,414 Chile, CHL, Latin America 315,404,315,403,315,404,315,403,316,403,316,404,315,404 Chile, CHL, Latin America 317,386,316,386,316,385,317,385,318,385,317,385,317,386 Chile, CHL, Latin America 317,406,317,405,318,405,317,406,318,406,317,406 Chile, CHL, Latin America 328,413,327,413,327,412,328,412,327,412,328,411,328,412,328,413,327,412,328,412,328,413 Chile, CHL, Latin America 317,408,317,407,316,407,317,407,318,407,318,408,317,408 Chile, CHL, Latin America 318,381,317,380,316,380,317,379,317,378,317,377,317,376,318,376,317,376,318,376,319,376,319,377,319,378,318,378,319,378,318,378,319,379,318,379,319,380,318,380,318,381 Chile, CHL, Latin America 320,385,319,385,320,385,319,385,319,384,320,384,321,384,321,385,320,385 Chile, CHL, Latin America 319,388,318,388,318,387,319,387,318,387,319,387,319,388 Chile, CHL, Latin America 314,405,315,404,315,405,315,404,316,404,316,405,315,404,315,405,314,405 Chile, CHL, Latin America 316,397,315,396,314,396,315,396,315,395,316,396,315,396,316,396,316,397 Chile, CHL, Latin America 315,407,314,407,315,407,314,406,315,406,315,405,315,406,315,407 Chile, CHL, Latin America 314,400,313,400,313,399,314,400 Chile, CHL, Latin America 321,413,320,413,321,413,321,412,322,412,321,412,320,412,320,413,320,412,319,412,319,411,320,411,321,412,321,411,320,411,319,411,320,411,321,411,320,411,321,411,321,412,321,411,321,412,322,412,322,411,321,411,322,411,322,412,323,412,322,412,323,412,323,413,322,413,322,412,322,413,321,413 Chile, CHL, Latin America 314,398,314,397,313,398,313,397,314,397,314,398 Chile, CHL, Latin America 318,407,317,406,318,407 Chile, CHL, Latin America 318,386,317,386,318,385,318,386 Chile, CHL, Latin America 335,418,335,417,334,417,333,417,333,416,332,416,331,416,332,416,331,416,332,417,331,417,330,416,331,416,330,416,329,416,330,416,331,416,332,415,333,415,334,415,334,416,335,416,334,416,333,416,332,416,334,416,335,416,334,416,333,416,334,417,334,416,334,417,335,417,336,417,335,417,336,418,335,418 Chile, CHL, Latin America 315,401,315,400,315,401,315,400,316,400,315,400,315,399,316,399,315,399,314,399,315,399,314,399,314,400,315,399,315,400,314,400,315,400,314,400,314,399,313,399,313,398,314,399,314,398,314,399,314,398,315,399,315,398,315,397,315,398,315,397,314,397,315,397,314,397,315,397,314,397,315,397,316,397,316,398,316,399,316,400,316,401,315,401 Chile, CHL, Latin America 314,402,314,401,313,402,313,401,314,401,313,401,314,401,313,401,314,401,315,401,314,401,315,401,314,401,314,402 Chile, CHL, Latin America 317,385,316,385,317,385,316,385,316,384,317,384,318,384,318,385,317,385 Chile, CHL, Latin America 316,388,316,387,317,387,317,388,316,388 Chile, CHL, Latin America 315,403,315,402,315,403 Chile, CHL, Latin America 314,396,314,395,315,395,315,396,314,396 Chile, CHL, Latin America 318,409,318,408,317,408,318,408,318,409 Chile, CHL, Latin America 315,395,314,395,314,394,314,395,314,394,315,394,315,395 Chile, CHL, Latin America 326,414,325,413,326,413,325,413,324,413,325,413,325,412,325,413,325,412,326,413,327,413,326,413,326,414 Chile, CHL, Latin America 314,403,313,403,313,402,314,402,313,402,314,402,314,403 Chile, CHL, Latin America 320,411,319,410,318,410,317,410,316,409,315,409,316,409,317,409,318,409,318,410,319,410,320,410,319,410,320,411 Chile, CHL, Latin America 328,306,329,305,330,305,330,304,330,303,331,303,331,304,332,304,332,305,332,306,332,307,333,307,333,308,334,309,333,310,334,310,334,311,333,311,333,312,334,312,334,313,335,314,335,315,335,316,336,317,336,318,336,319,337,319,338,319,338,320,338,321,337,323,335,324,334,324,334,325,334,326,334,327,334,328,334,329,334,330,335,331,335,332,334,332,333,332,333,333,332,333,332,334,332,335,331,335,331,336,330,336,330,338,329,338,329,339,330,340,330,341,330,342,329,342,329,343,329,344,328,344,328,345,328,346,329,346,329,347,328,347,329,347,329,348,329,349,330,349,329,350,330,350,330,351,330,352,330,353,329,353,329,354,329,355,328,356,328,357,328,358,328,359,327,359,327,360,326,360,326,361,326,362,326,363,326,364,327,366,327,367,326,367,325,367,325,368,325,369,324,369,324,370,325,370,324,371,325,371,324,372,324,373,324,374,324,375,324,377,323,377,323,378,323,379,323,380,324,380,324,381,324,382,325,382,324,382,324,383,324,384,326,384,326,385,325,385,324,385,323,385,325,385,325,386,326,386,325,387,324,387,324,388,325,388,324,389,324,390,324,391,324,392,323,392,323,393,322,393,323,393,322,394,323,395,323,396,322,396,322,397,321,397,320,398,319,398,319,399,319,400,319,401,320,401,320,402,320,403,321,402,322,403,322,402,323,402,322,403,323,403,323,404,322,404,323,404,322,405,323,405,323,406,324,406,327,406,330,406,331,407,332,407,334,407,334,408,334,407,333,407,332,407,331,407,331,408,330,408,329,408,328,409,328,408,328,409,327,409,327,410,327,411,327,412,326,412,324,412,323,412,322,411,322,410,323,410,323,411,323,410,324,410,324,411,323,411,324,411,324,410,325,410,326,410,326,409,325,409,324,409,323,410,322,410,323,410,322,410,322,411,321,411,320,410,321,410,322,410,321,410,321,409,322,409,321,409,322,409,323,409,324,408,324,409,325,408,323,408,322,408,321,408,321,409,321,408,321,409,320,409,321,409,321,410,320,410,319,410,319,409,320,409,319,409,320,409,320,408,320,409,319,408,320,408,319,408,319,409,318,409,319,408,318,408,319,408,318,408,319,408,319,407,318,407,319,407,320,407,321,407,320,407,321,407,321,406,321,407,322,407,322,408,321,408,322,408,322,407,322,406,321,405,320,405,321,405,321,406,322,406,321,406,320,406,320,405,320,406,321,406,320,406,321,406,320,406,320,407,320,406,319,405,320,407,319,407,319,406,319,407,319,406,318,406,318,405,319,405,318,405,318,404,317,404,317,403,317,404,317,403,318,403,318,402,319,402,319,403,319,402,318,402,319,402,318,402,318,403,317,403,317,402,318,402,317,402,317,401,316,402,316,401,315,401,316,401,317,401,318,401,317,401,318,401,317,401,316,400,317,400,318,401,317,400,318,400,317,400,316,400,317,400,317,399,318,399,318,400,318,399,317,399,317,398,318,399,318,398,317,398,318,398,317,398,318,398,317,398,317,399,316,399,316,398,316,397,317,397,316,397,316,396,317,396,318,396,317,396,318,396,317,396,317,395,316,395,316,394,316,395,317,395,317,394,318,395,319,395,320,395,319,395,319,394,320,395,320,394,319,394,318,394,319,393,318,393,318,394,317,394,316,394,315,394,316,393,316,394,316,393,316,394,317,394,317,393,316,393,317,392,317,393,317,392,318,392,317,392,318,392,317,391,316,391,315,391,314,390,315,390,314,390,313,390,313,391,312,391,313,390,314,390,314,389,314,390,314,389,315,389,315,388,316,388,316,389,316,388,317,388,317,389,317,388,318,389,317,389,316,389,317,389,318,390,318,389,317,389,318,389,318,390,319,389,318,389,319,389,319,388,320,388,320,387,319,387,319,388,319,387,320,387,320,386,320,387,321,387,320,387,320,386,319,386,320,386,319,386,319,385,320,385,321,385,321,384,322,384,321,384,321,383,320,383,320,382,321,382,320,382,321,381,320,381,320,380,321,380,321,379,321,378,322,378,321,378,321,377,322,377,322,378,322,377,322,376,322,377,321,377,321,376,322,376,322,375,323,375,322,375,322,376,321,376,321,375,320,375,320,376,319,376,318,376,319,375,318,375,318,374,318,373,318,372,318,371,319,371,318,370,319,370,320,369,320,368,319,367,319,366,319,365,319,364,318,364,318,363,319,363,318,363,319,362,320,362,320,361,320,360,320,361,321,361,321,360,321,358,322,358,322,357,322,356,323,356,323,355,323,354,324,354,323,353,324,353,324,352,325,351,324,351,324,350,325,350,325,349,325,348,325,347,325,346,325,345,325,344,324,343,324,342,325,341,325,340,326,340,326,339,325,339,326,339,325,338,325,337,326,337,326,336,326,335,326,333,326,334,327,333,327,332,327,331,327,330,328,329,327,329,328,328,327,328,328,327,328,326,328,325,328,324,328,323,328,322,328,321,328,320,329,319,329,318,329,316,329,315,329,314,329,313,329,312,329,311,329,310,329,309,329,307,329,306,328,306 Chile, CHL, Latin America 905,156,904,156,903,155,904,155,905,156 China, CHN, Asia 906,161,906,160,906,161,905,160,906,160,906,161 China, CHN, Asia 868,196,867,196,867,195,866,195,866,194,865,194,865,193,866,193,865,193,866,192,867,191,868,191,869,190,869,191,870,191,870,190,871,190,871,191,871,190,872,190,872,191,872,190,872,191,873,192,872,192,871,193,871,194,871,195,871,194,870,195,869,195,869,196,868,196 China, CHN, Asia 897,101,897,100,898,99,897,99,898,98,899,97,899,96,900,96,900,95,901,95,902,95,902,94,901,94,902,93,901,93,900,93,900,92,901,91,902,91,904,91,906,90,908,90,909,90,911,90,912,90,913,91,914,91,915,91,916,91,917,92,916,92,917,92,918,92,917,93,918,93,919,93,918,94,919,94,918,94,919,94,919,95,920,96,920,97,921,98,922,99,921,99,922,99,921,100,922,100,922,101,923,101,923,102,924,102,925,102,926,102,927,102,928,102,928,103,929,103,930,104,931,104,932,104,931,105,932,105,932,106,931,106,932,106,932,107,933,107,934,107,934,108,936,107,937,107,938,107,938,106,939,106,940,106,942,105,943,105,943,106,944,106,943,106,943,107,944,107,944,108,943,108,942,108,942,109,942,110,942,111,941,111,941,112,940,113,940,114,939,114,939,115,938,115,936,115,935,115,935,114,935,115,934,115,934,116,933,116,932,116,933,116,933,118,933,120,933,121,933,122,932,122,931,122,931,123,930,122,929,122,929,123,928,123,927,124,926,124,925,124,924,124,924,125,924,126,923,126,922,126,921,126,921,125,920,125,919,126,918,128,917,128,916,128,917,128,916,128,916,129,915,129,914,129,913,130,912,131,911,131,910,131,909,131,908,132,907,132,906,133,905,133,905,134,905,133,905,134,904,133,904,134,905,134,903,134,904,134,903,133,904,133,905,133,904,133,905,133,905,132,904,132,903,132,904,132,904,131,905,131,905,130,906,129,906,128,905,128,904,128,903,128,902,128,903,128,902,129,901,129,901,130,900,130,898,131,897,132,896,133,895,133,894,133,893,133,893,134,892,134,892,135,893,136,894,136,895,136,896,136,897,137,896,138,896,139,898,139,899,139,899,138,900,138,900,137,901,137,902,137,903,137,903,138,904,138,905,138,904,138,905,138,906,138,908,138,907,138,907,139,907,140,907,139,907,140,906,140,906,139,906,140,905,139,905,140,904,140,903,140,903,141,902,141,902,142,901,142,902,142,901,142,900,142,901,142,900,142,900,143,900,142,900,143,899,143,899,144,898,144,898,145,897,145,897,146,898,146,898,147,899,147,900,148,901,149,901,150,902,151,902,152,902,153,903,153,904,153,904,154,905,155,904,155,903,155,902,155,902,154,901,154,900,155,899,154,898,153,899,154,898,154,899,154,899,155,900,155,901,155,901,154,902,155,903,156,904,157,905,157,905,158,904,158,902,159,901,159,901,160,900,160,901,160,902,160,901,160,902,160,903,160,904,160,905,161,906,161,905,161,905,162,904,162,905,162,905,163,905,162,905,163,904,163,905,163,905,164,904,164,903,164,904,164,904,165,904,166,904,165,904,166,903,166,903,165,903,166,902,166,902,167,902,166,901,166,902,167,901,167,902,167,901,168,902,168,901,168,901,169,900,169,901,169,900,169,900,170,900,171,899,171,900,170,899,170,899,171,899,170,898,170,898,171,899,171,898,171,899,172,899,171,899,172,898,172,898,173,897,172,897,173,898,173,898,172,899,173,898,173,898,174,897,174,897,175,897,174,897,175,898,175,897,175,896,175,897,175,896,175,896,176,897,175,896,176,895,176,896,176,895,176,896,176,895,177,895,176,895,177,894,177,893,177,894,177,894,178,894,177,894,178,893,178,893,179,893,178,892,179,891,179,891,180,891,179,891,180,890,180,889,180,889,181,890,181,889,181,889,182,888,182,887,182,886,182,886,183,886,182,885,182,884,182,884,183,884,182,883,182,883,183,882,183,881,183,881,182,880,182,880,181,880,182,880,181,881,181,880,181,880,182,879,182,880,182,880,183,880,184,879,183,880,184,879,184,878,184,879,185,878,185,877,185,876,185,875,185,875,186,874,186,873,186,872,186,871,187,871,186,872,186,871,187,871,186,871,187,870,186,871,187,870,187,870,188,871,188,870,189,871,189,871,190,870,190,869,190,869,189,870,189,869,189,869,188,868,188,869,187,869,186,868,186,869,186,868,186,868,185,868,186,867,186,866,186,866,185,866,186,866,185,865,185,865,186,865,185,864,185,864,186,863,186,863,185,863,186,862,186,861,185,860,184,860,185,860,184,859,184,859,183,860,183,860,182,859,182,858,182,857,182,857,181,856,181,855,180,855,181,854,181,854,182,853,182,852,182,852,183,851,183,850,182,850,183,850,182,849,182,849,183,848,183,848,182,847,182,847,183,846,183,845,183,844,184,845,185,845,186,845,187,844,187,843,187,843,186,843,185,842,185,842,186,841,186,840,186,840,185,839,185,839,184,838,184,837,184,837,183,838,183,837,182,838,182,838,181,837,181,836,181,836,180,836,179,836,178,835,178,834,178,832,179,833,178,832,178,832,177,833,177,832,177,832,176,833,176,833,175,834,175,834,174,835,174,835,173,836,173,835,173,835,172,836,172,835,172,836,171,836,170,836,169,836,168,835,168,835,167,835,168,834,168,834,167,834,166,833,165,832,165,832,166,831,166,831,165,830,166,830,165,829,165,828,165,829,165,829,164,829,163,828,164,828,163,829,163,828,163,828,162,826,163,825,163,824,163,823,163,822,163,822,164,821,164,820,164,819,165,818,166,817,166,818,166,818,167,817,167,816,167,815,167,814,167,815,167,814,167,814,166,813,166,813,167,812,166,811,166,809,166,808,166,808,167,807,167,807,168,806,168,806,169,806,168,806,167,806,166,805,166,804,167,803,167,802,167,801,167,800,167,800,166,799,166,799,167,798,166,798,167,797,167,797,166,797,165,796,166,795,166,795,165,794,165,792,164,792,163,791,163,790,163,790,162,789,162,788,161,787,161,786,160,786,159,784,159,784,160,784,159,784,160,783,160,781,159,780,159,780,158,779,158,778,158,777,157,777,156,776,157,776,156,776,157,776,156,776,155,776,154,775,154,775,153,776,153,777,153,778,153,778,152,778,151,777,151,776,151,776,150,777,150,777,149,776,149,777,148,778,148,778,147,779,147,780,147,780,146,780,145,781,144,780,144,779,144,778,143,776,143,775,143,774,144,773,144,772,144,770,144,769,143,768,143,768,142,767,142,768,142,768,141,767,141,767,140,766,140,765,139,764,140,764,139,763,139,764,139,765,139,765,138,764,138,764,137,764,136,764,135,763,135,763,134,762,135,761,135,761,134,760,133,760,132,761,132,761,131,761,130,762,130,763,130,764,129,764,130,764,129,765,129,766,129,767,129,766,129,767,130,768,129,769,129,769,128,770,128,770,127,771,127,772,128,774,127,775,127,775,126,776,126,777,125,778,125,779,125,779,124,780,124,780,123,780,122,781,122,781,121,782,121,782,120,781,119,781,118,781,117,781,116,780,116,779,116,780,115,782,115,784,115,785,114,785,115,786,115,787,115,787,114,786,114,787,113,787,112,788,111,788,110,789,110,789,109,790,109,792,110,793,110,794,110,795,109,796,109,797,109,797,108,796,108,796,107,797,105,798,105,799,105,800,104,800,103,801,103,802,103,803,103,803,104,804,104,804,105,803,105,805,105,805,106,806,106,807,107,808,106,809,107,810,107,811,107,811,108,811,109,812,110,813,110,813,111,812,112,813,112,812,113,812,114,812,115,813,115,814,115,815,115,816,115,817,115,819,115,820,116,822,116,822,117,823,117,824,117,825,118,826,118,826,119,827,120,827,121,829,122,831,122,835,123,838,123,840,123,840,122,842,122,845,123,846,124,847,124,848,124,850,125,851,125,852,125,853,125,853,126,854,126,855,126,855,125,856,125,858,124,860,124,861,124,861,123,862,123,865,123,866,123,867,123,868,123,869,123,870,123,870,122,871,122,872,121,874,120,875,119,874,118,874,117,874,116,875,115,877,115,877,116,879,116,880,116,881,116,882,116,883,115,883,114,884,114,887,114,888,113,889,112,890,111,891,111,892,111,893,111,894,110,895,110,896,110,897,110,898,111,899,111,899,110,899,109,898,109,897,108,898,108,897,108,896,107,895,107,893,106,893,107,892,107,892,108,891,107,890,107,889,107,888,107,887,107,886,107,886,106,887,106,887,105,888,104,890,101,891,102,893,102,895,101,896,101,897,101 China, CHN, Asia 326,215,325,215,324,216,323,217,322,217,322,218,321,219,321,221,320,222,319,223,320,223,321,223,322,225,322,226,322,227,322,228,323,228,323,229,324,230,325,229,326,230,327,229,328,229,329,230,331,232,332,232,333,232,334,232,335,232,336,232,337,232,337,233,337,234,336,234,336,235,336,237,336,238,336,239,337,239,337,240,338,240,337,241,336,242,337,242,337,243,338,243,338,244,338,245,339,245,339,247,338,247,338,246,338,245,337,244,336,245,335,245,335,244,335,245,331,245,330,245,330,247,331,247,332,247,332,248,332,249,331,248,331,249,330,248,330,249,329,249,329,251,330,251,331,252,331,253,331,254,331,255,331,257,330,259,330,261,330,263,329,262,328,262,327,262,329,259,329,258,329,259,329,258,328,258,329,258,328,258,327,257,326,257,326,258,325,258,325,257,325,258,325,257,324,257,324,258,323,258,322,258,321,258,320,258,320,257,320,256,319,256,319,255,318,254,317,254,317,253,316,252,315,252,315,251,314,251,313,251,313,250,312,250,311,249,311,250,311,249,310,249,310,250,309,250,308,249,307,249,307,248,306,248,304,247,303,246,302,246,303,245,304,245,304,244,304,245,303,244,304,243,305,243,306,243,306,242,307,242,306,242,307,242,306,242,306,241,307,241,307,240,308,240,308,239,308,238,307,239,307,238,308,238,307,238,307,237,308,237,308,236,307,236,307,234,308,234,308,233,307,232,307,231,307,230,307,231,307,230,306,230,307,230,306,229,306,228,306,227,307,227,307,228,308,227,307,227,308,227,308,226,307,226,307,225,307,224,308,225,309,226,309,227,309,226,309,225,310,224,311,224,311,223,312,222,313,222,313,221,312,221,313,221,313,220,313,219,314,218,315,217,316,218,317,218,317,217,317,216,318,217,319,217,320,216,322,215,323,215,323,214,324,214,324,213,324,214,324,213,325,213,324,213,325,213,326,214,326,215 Colombia, COL, Latin America 673,288,673,287,672,287,673,287,673,288 Comoros, COM, Sub Saharan Africa 670,286,669,286,669,285,670,285,670,286 Comoros, COM, Sub Saharan Africa 595,240,595,241,595,242,595,243,594,243,594,244,594,246,593,248,593,249,593,250,593,251,593,252,592,253,591,254,590,254,589,256,588,257,588,259,588,260,587,262,586,263,585,263,585,264,584,265,583,265,583,264,583,263,581,264,581,265,580,265,579,265,579,264,578,264,577,264,576,265,576,266,575,265,575,264,574,263,573,262,574,261,575,262,575,261,575,260,574,259,574,258,574,257,575,258,575,257,576,258,577,257,577,256,578,256,578,257,579,257,579,258,580,258,581,257,581,258,582,258,582,257,582,256,583,256,583,255,583,254,583,252,582,252,582,251,581,251,581,250,581,249,582,249,583,248,583,247,582,247,582,246,581,246,580,247,579,247,579,246,579,245,579,244,581,244,583,244,584,244,585,245,585,244,585,245,586,245,587,245,588,245,588,246,588,245,588,244,589,242,589,241,589,240,590,240,591,240,592,240,592,239,592,240,593,240,594,240,595,240 Congo, COG, Sub Saharan Africa 282,217,283,217,284,217,285,218,285,217,286,218,287,218,288,218,289,218,289,219,290,220,291,221,291,222,292,222,291,222,291,223,291,224,291,225,290,225,291,226,290,225,290,224,289,224,290,225,289,225,288,225,289,224,288,223,287,222,286,222,285,222,286,221,285,221,285,220,284,220,284,221,285,221,284,222,284,221,283,221,282,220,282,219,283,219,283,218,282,218,282,217 Costa Rica, CRI, Latin America 583,116,583,115,584,115,584,116,583,116 Croatia, HRV, Europe 583,117,582,116,583,116,582,115,583,115,583,116,583,117 Croatia, HRV, Europe 592,122,593,122,594,122,594,123,595,123,594,123,593,122,592,122,591,121,592,122,593,122,592,122 Croatia, HRV, Europe 589,111,590,112,591,112,591,113,592,113,593,113,594,113,595,113,596,113,596,114,597,114,596,114,597,114,596,114,597,114,597,115,598,115,597,115,597,116,596,116,596,115,595,115,594,115,593,115,592,115,591,115,590,115,589,115,588,115,587,115,587,116,588,117,588,118,589,118,590,119,590,120,591,120,591,121,592,121,593,122,592,122,592,121,591,121,590,120,589,120,588,120,587,120,587,119,586,119,585,118,586,118,585,117,584,117,584,116,584,115,583,115,582,114,582,115,582,116,582,115,582,116,581,116,580,115,580,114,581,114,582,114,583,114,583,113,583,114,584,114,585,114,586,114,585,114,586,114,585,114,586,114,586,113,585,113,586,113,587,113,587,112,586,112,587,112,588,112,588,111,589,111 Croatia, HRV, Europe 291,186,290,186,291,186,290,185,291,185,292,185,292,186,291,186 Cuba, CUB, Caribbean 285,185,286,184,287,184,286,184,287,183,287,182,288,182,289,182,290,182,290,181,290,182,290,181,291,182,291,181,292,181,293,181,295,181,296,181,297,181,298,181,298,182,299,182,300,182,301,182,301,183,302,183,303,183,303,184,303,183,304,184,305,184,306,185,307,185,307,186,307,185,308,186,307,186,308,186,309,186,309,187,309,186,310,186,310,187,309,187,310,187,311,187,312,187,313,187,312,188,313,188,312,188,313,188,313,189,314,188,315,189,316,189,316,190,317,190,315,190,314,191,314,190,314,191,313,191,312,191,311,191,310,191,309,191,308,191,307,191,306,191,307,190,308,190,308,189,308,188,306,188,305,188,304,187,304,186,303,186,302,186,300,185,299,185,298,184,296,184,295,184,294,184,293,183,294,183,295,183,294,182,292,182,291,182,291,183,290,183,290,184,289,184,288,184,287,184,288,184,288,185,287,185,286,185,285,185 Cuba, CUB, Caribbean 639,147,638,147,637,146,636,146,636,145,637,145,638,145,638,144,640,145,640,144,642,144,643,144,643,143,643,144,642,144,641,145,642,146,641,146,640,146,639,146,639,147 Cyprus, CYP, Asia 576,100,577,100,577,99,578,99,579,99,580,99,580,98,581,98,582,98,583,98,582,98,583,97,583,98,584,98,585,98,584,97,585,97,585,98,586,98,587,98,588,99,588,98,589,99,588,99,589,100,590,100,591,100,590,99,591,99,592,100,593,100,592,100,593,100,593,101,594,100,594,101,595,101,596,101,596,102,595,102,595,103,594,103,593,103,593,104,592,104,591,104,590,104,590,105,590,104,589,104,588,104,587,104,586,104,585,104,585,103,584,103,584,104,584,105,583,105,582,105,582,104,581,104,580,104,580,103,579,103,578,102,578,103,577,102,577,101,576,100 Czech Republic, CZE, Europe 569,86,568,85,569,85,570,86,569,86 Denmark, DNK, Europe 572,86,571,86,572,86,572,85,572,86 Denmark, DNK, Europe 574,87,573,86,572,86,573,86,574,86,575,86,575,87,574,87 Denmark, DNK, Europe 565,80,566,80,565,80 Denmark, DNK, Europe 571,84,572,84,572,85,571,85,570,85,569,85,569,84,570,84,571,84 Denmark, DNK, Europe 585,85,584,85,585,85 Denmark, DNK, Europe 575,83,574,83,575,83,575,84,575,83,576,83,575,83,576,84,576,83,575,83,576,82,577,82,577,83,577,84,576,84,577,84,577,85,576,85,576,86,575,85,575,86,576,86,575,86,575,87,575,86,575,85,574,85,575,85,573,85,573,84,573,85,573,84,572,84,573,84,572,83,573,83,574,83,573,83,574,83,575,83 Denmark, DNK, Europe 568,86,566,86,565,86,566,85,565,85,566,85,565,84,564,84,564,83,565,83,564,82,564,83,564,82,564,81,564,80,564,81,565,81,566,81,566,80,567,80,567,81,568,81,567,81,567,80,568,79,568,80,568,79,569,79,568,79,567,79,567,80,567,79,566,80,565,80,565,81,564,80,565,79,566,79,567,79,568,79,569,78,571,78,571,77,571,78,571,79,571,80,570,79,569,79,570,80,571,80,570,80,569,81,570,80,571,80,571,81,570,81,571,81,572,81,572,82,571,82,570,82,570,83,569,83,570,83,569,83,568,83,569,84,568,84,569,85,568,85,569,86,568,86 Denmark, DNK, Europe 665,217,665,216,665,215,667,213,668,213,669,213,669,212,670,213,670,214,670,215,669,215,668,215,667,216,668,216,667,216,668,216,669,216,668,217,668,218,668,217,667,217,666,218,665,218,665,217 Djibouti, DJI, Sub Saharan Africa 355,205,355,204,356,204,356,205,355,205 Dominica, DMA, Caribbean 324,193,325,193,324,193,324,192,324,191,325,191,326,191,327,191,328,191,329,192,330,191,330,192,330,193,332,192,332,193,331,193,332,193,333,193,334,194,334,195,335,195,334,195,334,196,333,196,333,195,332,195,331,195,330,195,329,195,329,196,328,196,328,195,327,195,327,196,326,196,326,197,325,198,325,197,324,197,325,197,324,196,324,195,324,194,324,193 Dominican Republic, DOM, Caribbean 266,254,265,254,265,253,266,253,266,252,265,251,265,250,266,250,266,251,267,252,267,253,266,254 Ecuador, ECU, Latin America 265,252,265,251,265,252 Ecuador, ECU, Latin America 268,252,267,252,267,251,268,251,268,252 Ecuador, ECU, Latin America 268,253,268,252,269,252,268,253 Ecuador, ECU, Latin America 271,253,272,253,271,253 Ecuador, ECU, Latin America 299,260,299,259,299,258,300,259,299,259,299,260 Ecuador, ECU, Latin America 304,247,306,248,307,248,307,249,308,249,309,250,310,250,310,249,311,249,311,250,311,249,312,250,313,250,313,251,314,251,313,251,313,252,314,252,314,253,313,253,313,255,311,257,310,258,307,259,306,260,305,261,304,261,304,262,304,263,303,264,304,264,303,264,303,265,302,266,301,265,301,264,300,264,299,263,298,264,298,263,298,262,299,263,299,262,299,261,298,261,299,260,300,260,300,259,300,258,300,257,300,258,299,258,300,258,299,258,300,257,299,258,299,259,297,258,297,257,296,257,297,257,297,256,297,255,297,254,297,253,298,253,298,252,299,252,298,252,298,251,299,251,299,250,299,249,299,248,300,248,301,248,302,247,303,247,303,246,304,247 Ecuador, ECU, Latin America 642,157,643,158,643,159,644,160,644,161,644,162,644,163,644,164,643,164,643,165,643,166,643,167,642,167,641,167,641,166,640,166,640,165,639,165,639,164,639,163,638,163,638,162,638,161,637,161,637,162,637,163,637,164,638,164,638,165,639,165,639,166,640,166,640,167,640,168,641,168,641,169,641,170,642,170,641,170,641,171,642,171,643,173,643,174,644,175,644,176,645,176,645,177,646,178,647,178,647,179,646,179,646,181,645,182,644,182,644,184,642,184,642,185,641,185,639,184,638,184,636,184,634,185,634,184,633,185,631,184,629,185,627,184,626,185,624,184,622,185,620,185,618,185,616,185,615,184,615,183,614,179,614,175,614,171,615,167,614,163,614,162,614,161,614,160,614,159,615,158,614,157,614,156,615,156,617,156,619,156,620,156,621,156,622,156,622,157,623,157,624,157,625,157,626,158,627,158,628,158,629,157,630,157,630,156,631,156,632,156,631,156,632,156,633,156,632,156,633,156,634,156,635,156,636,156,636,157,636,156,635,156,635,157,636,157,637,157,638,157,639,157,638,157,639,157,640,157,641,157,642,157 Egypt, EGY, NorthAfrica 271,207,272,208,272,207,273,208,274,208,274,209,275,209,276,209,276,210,276,211,275,211,274,211,273,211,274,211,273,211,272,210,271,210,270,210,269,209,270,208,271,208,271,207 El Salvador, SLV, Latin America 570,244,572,244,574,244,574,246,574,247,572,247,570,247,569,247,568,247,568,246,569,246,568,246,569,245,569,244,569,243,569,244,570,244 Equatorial Guinea, GNQ, Sub Saharan Africa 661,204,659,204,659,203,660,204,660,203,659,203,660,203,660,204,660,203,661,204 Eritrea, ERI, Sub Saharan Africa 665,209,666,209,666,210,667,210,667,211,668,211,668,212,669,212,669,213,668,213,667,213,666,213,666,212,665,212,665,211,664,211,664,210,663,210,663,209,662,209,662,208,661,208,661,207,660,207,659,207,658,207,657,207,656,207,655,207,654,207,654,206,653,206,653,207,652,208,652,207,651,207,651,208,650,208,649,208,649,207,649,206,649,205,649,204,650,204,650,203,650,202,650,201,651,200,650,200,651,199,650,199,651,199,652,199,652,198,653,198,654,198,655,198,655,197,655,196,655,197,656,198,656,199,657,200,657,201,657,202,657,203,658,203,658,204,659,205,659,204,660,205,660,206,661,206,661,205,661,206,662,206,663,207,664,207,664,208,664,209,665,209 Eritrea, ERI, Sub Saharan Africa 606,77,605,77,606,76,605,76,605,75,605,76,605,75,606,75,605,75,606,75,607,75,608,75,609,75,608,75,608,76,607,76,606,76,606,77 Estonia, EST, Europe 607,74,606,74,607,73,608,73,608,74,609,74,608,74,607,74 Estonia, EST, Europe 624,72,624,73,623,73,623,74,622,74,622,75,622,76,623,76,622,76,623,76,623,77,622,77,622,78,621,78,620,78,619,78,618,78,618,77,617,77,616,77,616,76,615,76,615,77,615,76,614,76,614,77,614,76,614,77,613,77,612,77,613,76,613,75,612,75,612,76,611,76,611,75,610,75,610,74,611,74,610,74,610,73,610,74,610,73,611,73,612,73,612,72,613,72,614,72,616,72,617,72,617,71,617,72,618,72,619,72,620,72,623,72,624,72 Estonia, EST, Europe 667,213,665,215,665,216,665,217,665,218,666,218,667,217,668,217,668,218,668,217,667,219,668,219,668,220,669,221,669,222,670,222,672,223,676,225,681,226,683,226,679,231,674,236,671,236,670,236,669,236,668,237,668,238,667,238,666,238,665,238,665,239,663,239,662,238,661,238,659,239,658,240,657,240,656,240,655,240,654,240,653,239,650,237,649,237,648,237,647,237,647,236,647,235,647,234,646,234,645,234,645,233,644,233,644,232,644,231,644,230,643,230,642,229,642,228,640,227,639,227,638,227,639,226,639,225,640,225,641,225,642,225,642,224,642,222,642,220,643,220,642,219,643,218,644,218,645,217,644,217,645,216,645,215,646,214,647,213,648,212,648,211,648,210,649,210,649,209,649,208,650,208,651,208,651,207,652,207,652,208,653,207,653,206,654,206,654,207,655,207,656,207,657,207,658,207,659,207,660,207,661,207,661,208,662,208,662,209,663,209,663,210,664,210,664,211,665,211,665,212,666,212,666,213,667,213 Ethiopia, ETH, Sub Saharan Africa 361,408,360,407,361,407,361,406,362,406,363,406,363,405,362,405,363,405,362,405,363,405,363,404,364,405,364,404,364,405,365,405,364,405,365,405,364,405,365,405,366,405,365,405,366,405,366,406,365,406,364,406,363,406,364,406,364,407,363,407,364,407,363,407,362,406,362,407,361,407,362,408,361,408 Falkland Islands (Islas Malvinas), FLK, Latin America 431,415,430,414,429,414,428,414,428,413,427,413,428,413,427,413,428,413,427,413,426,413,427,413,426,413,427,413,426,413,425,413,427,413,428,413,429,413,428,413,429,413,430,413,429,413,430,413,429,413,430,413,430,414,430,413,430,414,430,413,431,413,431,414,432,414,432,415,431,415,432,415,431,415 Falkland Islands (Islas Malvinas), FLK, Latin America 358,407,357,407,356,407,357,407,357,406,358,406,359,406,358,406,359,405,359,406,359,405,358,405,359,405,360,405,359,405,360,405,361,405,362,405,361,405,360,406,359,406,359,407,358,407 Falkland Islands (Islas Malvinas), FLK, Latin America 519,65,519,64,518,64,519,64,519,65 Faroe Islands, FRO, Europe 520,64,519,64,518,64,519,64,520,64,519,64,520,64 Faroe Islands, FRO, Europe 1074,308,1073,308,1074,308,1075,307,1075,308,1074,307,1074,308 Fiji, FJI, Asia 1074,305,1073,305,1071,305,1071,304,1072,304,1072,303,1073,303,1074,302,1074,303,1075,303,1075,304,1076,305,1075,305,1074,305 Fiji, FJI, Asia 1076,302,1075,301,1075,300,1075,301,1075,300,1076,301,1076,300,1078,300,1078,299,1079,299,1079,300,1078,300,1078,301,1079,300,1079,301,1078,301,1077,301,1078,301,1077,301,1076,301,1076,302 Fiji, FJI, Asia 599,70,598,70,599,70,599,69,599,70,599,69,600,70,599,70,600,70,599,70,600,70,599,70 Finland, FIN, Europe 607,71,607,70,608,70,607,70,607,71 Finland, FIN, Europe 624,40,624,41,625,41,627,41,627,42,626,43,625,44,626,44,625,45,626,46,628,46,629,47,630,47,629,48,628,49,627,49,627,50,628,50,628,51,629,52,630,53,630,54,630,53,629,54,628,55,629,55,628,55,628,56,629,56,630,56,630,57,629,57,630,57,631,58,630,59,631,60,632,60,632,61,633,61,634,62,633,63,631,64,630,65,629,66,627,67,626,67,625,68,623,69,622,69,623,69,622,69,621,69,620,69,619,69,620,69,619,69,618,69,617,69,618,69,618,70,617,69,617,70,616,70,617,69,616,70,615,70,614,70,613,70,613,71,613,70,612,71,613,70,612,70,611,71,610,71,610,70,610,71,609,71,608,71,609,71,610,70,609,70,609,71,609,70,608,70,609,70,609,69,607,70,607,69,606,69,605,69,604,69,604,68,603,68,604,68,603,67,604,67,604,66,605,66,604,66,604,65,603,65,604,64,603,63,603,64,603,63,603,62,604,62,604,61,605,61,604,61,605,61,606,61,607,61,607,60,606,60,607,60,606,60,607,60,607,59,608,59,608,60,608,59,609,59,608,59,609,59,610,59,610,58,611,58,611,57,612,57,613,56,614,56,615,56,616,56,615,56,616,56,616,55,615,55,615,54,616,54,615,54,614,54,613,53,612,53,612,52,611,52,610,51,611,51,611,50,612,50,611,50,611,49,610,49,611,49,611,48,610,48,610,47,609,46,608,45,606,45,605,45,603,44,602,44,602,43,601,43,602,43,603,43,605,43,607,44,609,44,609,45,611,44,612,44,614,44,614,45,615,45,615,44,616,44,617,43,617,42,617,41,619,41,620,41,621,41,622,40,623,40,624,40 Finland, FIN, Europe 567,126,566,126,566,125,565,125,566,124,565,124,566,124,565,123,566,123,565,123,566,123,567,123,567,122,568,122,567,122,568,122,568,121,568,122,568,123,568,124,568,125,568,126,567,126,568,126,567,126 France, FRA, Europe 548,98,549,98,549,99,550,99,551,99,551,100,551,99,552,100,552,101,553,101,554,101,554,100,554,101,555,101,555,102,556,102,557,102,558,102,559,102,559,103,560,103,561,103,562,103,563,103,564,104,563,104,563,105,562,106,562,107,562,108,561,108,560,108,561,108,560,108,561,108,561,109,560,109,559,110,558,110,558,111,558,112,557,112,558,112,557,112,558,112,558,111,559,111,560,111,560,112,561,113,560,113,560,114,561,114,561,115,560,115,559,115,560,115,560,116,561,116,560,117,560,118,561,118,563,118,562,119,561,120,560,120,560,121,559,121,560,121,559,121,558,121,557,121,556,121,556,120,555,120,554,120,553,120,552,120,551,120,550,121,549,121,549,122,548,122,549,122,549,123,548,123,547,123,546,123,545,123,544,123,544,122,542,122,541,122,540,122,539,122,538,122,537,122,536,121,535,121,534,120,535,120,535,119,536,118,536,117,536,116,536,117,536,116,536,115,536,114,537,114,537,115,538,115,538,116,538,115,538,116,538,115,537,115,537,114,536,113,537,113,536,113,536,112,535,111,534,111,534,110,533,110,533,109,534,109,533,109,534,109,533,109,532,109,532,108,531,108,530,108,530,107,530,108,529,107,530,107,529,107,528,107,527,107,526,107,526,106,525,106,526,106,527,106,526,106,527,106,527,105,526,106,526,105,527,105,525,105,526,105,527,104,527,105,527,104,528,104,528,105,528,104,528,105,528,104,529,104,530,104,531,104,531,105,532,105,533,104,533,105,534,105,533,105,534,104,534,105,535,105,535,104,535,103,534,102,534,101,535,101,536,101,536,102,538,102,539,103,540,102,541,102,540,102,540,101,541,101,543,101,544,100,544,99,544,98,545,98,547,97,547,98,548,98 France, FRA, Europe 377,241,377,240,378,240,377,240,377,239,376,238,377,238,376,238,376,236,376,235,377,235,377,234,378,233,379,234,381,234,382,235,382,236,383,236,382,236,383,236,384,237,383,238,384,237,384,238,385,238,384,238,384,239,383,240,382,241,382,242,382,243,381,244,380,244,379,243,379,244,378,243,378,244,377,244,376,244,376,243,377,242,377,241 French Guiana, GUF, Latin America 92,304,91,304,91,303,92,304 French Polynesia, PYF, Pacific 574,244,576,244,577,244,578,244,579,244,579,245,579,246,579,247,580,247,581,246,582,246,582,247,583,247,583,248,582,249,581,249,581,250,581,251,582,251,582,252,583,252,583,254,583,255,583,256,582,256,582,257,582,258,581,258,581,257,580,258,579,258,579,257,578,257,578,256,577,256,577,257,576,258,575,257,575,258,574,257,574,258,574,259,575,260,575,261,575,262,574,261,573,262,572,261,571,261,571,260,570,259,569,258,570,258,569,258,568,257,567,256,568,256,568,257,568,256,567,256,567,255,566,254,567,255,567,256,568,255,568,256,568,255,567,255,568,255,567,255,567,254,566,254,566,253,566,252,566,253,567,253,567,252,568,251,567,250,568,249,568,250,569,250,570,250,569,250,568,250,568,249,567,249,568,248,568,249,568,248,569,247,570,247,572,247,574,247,574,246,574,244 Gabon, GAB, Sub Saharan Africa 490,210,493,210,493,209,494,209,495,209,495,210,496,210,496,209,496,210,498,210,497,211,496,211,496,210,495,210,494,210,493,210,492,210,492,211,489,211,489,210,490,210,490,211,491,211,491,210,493,210,492,210,491,210,490,210 Gambia, The, GMB, Sub Saharan Africa 643,156,643,157,642,157,642,156,643,156 Gaza Strip, ISR, Asia 660,120,661,120,662,120,663,120,664,120,664,121,665,121,666,121,667,121,668,121,669,121,669,122,670,122,671,122,671,123,672,123,672,122,673,122,674,122,674,123,674,122,675,122,675,123,676,123,677,123,676,124,677,124,678,124,678,125,678,124,678,125,679,125,678,125,678,126,679,126,678,126,679,126,678,126,679,126,680,127,679,127,678,127,677,127,677,126,676,126,675,126,675,127,674,127,673,127,672,127,671,127,670,127,669,127,668,126,667,126,665,126,664,126,665,125,664,124,664,123,664,122,663,122,662,121,661,121,660,121,660,120 Georgia, GEO, Asia 582,89,581,89,582,89,581,88,582,89 Germany, DEU, Europe 580,88,579,88,579,87,580,87,579,87,580,86,580,87,581,87,580,87,581,87,581,88,581,87,580,88 Germany, DEU, Europe 568,86,569,86,570,86,569,86,570,86,570,87,569,87,570,87,571,87,571,88,572,88,572,87,573,87,573,88,572,88,572,89,573,88,573,89,574,89,574,88,576,88,577,88,577,87,578,87,577,87,577,88,578,87,579,87,579,88,580,88,581,88,581,89,582,89,583,90,583,91,582,92,583,93,583,94,584,94,584,95,583,95,584,96,585,97,584,97,584,98,583,98,583,97,582,98,583,98,582,98,581,98,580,98,580,99,579,99,578,99,577,99,577,100,576,100,577,101,577,102,578,103,578,102,579,103,580,103,580,104,581,104,581,105,580,105,578,106,579,107,578,107,579,107,579,108,578,108,578,107,577,108,577,107,576,107,576,108,575,108,574,108,573,108,572,108,571,108,570,109,570,108,569,108,568,108,567,108,566,108,566,107,565,107,565,108,564,108,563,108,562,108,563,108,562,108,562,107,562,106,563,105,563,104,564,104,563,103,562,103,561,103,560,103,559,103,559,102,559,101,558,101,558,100,559,100,559,99,558,99,558,98,557,98,558,98,557,98,557,97,558,97,558,96,558,95,557,95,558,95,559,95,560,95,560,94,561,94,561,93,560,93,561,93,561,92,561,91,561,90,561,89,562,89,563,89,564,89,564,90,565,90,565,89,566,89,567,89,568,89,568,90,569,90,568,90,568,89,566,89,566,88,567,88,566,88,565,88,565,87,566,87,565,87,566,87,567,87,566,87,566,86,565,86,566,86,568,86 Germany, DEU, Europe 531,217,533,217,537,218,538,218,538,217,539,217,540,217,540,218,539,218,539,219,540,219,540,220,541,220,540,221,541,221,541,222,540,221,540,222,541,222,540,222,541,222,541,223,541,224,541,225,542,225,542,226,541,226,541,227,541,228,541,229,541,230,542,231,542,232,543,232,542,233,541,233,541,232,540,232,541,232,541,233,540,233,540,234,538,234,537,235,536,235,535,235,535,236,534,236,533,236,532,236,530,235,531,235,531,234,531,233,530,233,530,232,530,231,530,230,530,229,531,227,531,226,532,226,532,224,532,223,531,223,532,223,531,223,531,222,531,221,531,220,531,219,531,218,531,217 Ghana, GHA, Sub Saharan Africa 602,136,601,136,601,135,601,136,601,135,601,136,602,136 Greece, GRC, Europe 614,146,614,145,613,145,612,145,611,145,610,145,610,144,611,144,611,143,611,144,612,144,613,144,614,144,615,144,616,145,617,144,617,145,618,145,617,145,616,146,615,146,614,146 Greece, GRC, Europe 614,137,614,137 Greece, GRC, Europe 602,138,601,137,602,137,602,138 Greece, GRC, Europe 618,136,617,136,617,135,618,135,618,136 Greece, GRC, Europe 620,138,620,137,619,137,620,137,621,137,620,138 Greece, GRC, Europe 600,132,599,132,598,131,599,131,599,132,600,132 Greece, GRC, Europe 616,140,616,139,616,140 Greece, GRC, Europe 619,134,618,133,617,133,618,133,618,132,619,132,619,133,619,134 Greece, GRC, Europe 623,143,623,142,624,141,624,142,623,142,623,143 Greece, GRC, Europe 613,137,613,136,613,137,612,136,612,135,611,135,610,135,609,134,608,134,609,134,609,133,610,134,611,134,612,135,612,136,613,136,613,137 Greece, GRC, Europe 616,131,615,131,615,130,616,131,616,130,616,131 Greece, GRC, Europe 613,129,613,128,614,128,614,129,613,129 Greece, GRC, Europe 618,125,619,125,619,126,619,127,618,127,618,128,616,128,615,128,615,127,614,128,613,128,612,128,611,128,611,129,612,129,611,129,612,130,613,130,612,130,611,129,611,130,612,130,611,131,611,130,610,130,609,130,610,130,611,131,610,131,609,130,608,129,607,129,607,130,608,131,608,132,609,132,610,133,609,133,608,132,608,133,609,133,608,134,607,134,608,134,609,134,609,135,610,135,609,135,610,135,611,135,611,136,612,136,611,136,612,137,612,138,611,137,610,137,610,136,609,137,608,137,609,137,609,138,610,138,609,138,610,138,609,138,609,139,609,138,608,138,608,139,609,139,609,140,609,141,608,141,608,140,607,140,607,141,606,140,606,139,605,140,604,139,605,139,604,138,603,138,603,137,603,136,604,136,605,136,605,135,606,136,608,136,608,137,608,136,609,136,608,136,608,135,607,135,607,136,607,135,606,135,605,135,605,136,604,135,604,136,604,135,603,135,603,136,603,135,602,134,603,134,603,133,602,133,602,134,602,133,601,133,600,132,600,131,601,131,600,131,601,131,601,130,602,129,603,129,603,128,602,128,603,128,604,128,605,128,605,127,606,127,607,127,608,127,608,126,609,127,609,126,611,126,612,126,613,126,614,126,615,127,616,127,617,126,618,126,618,125 Greece, GRC, Europe 480,10,479,10,480,10,481,10,482,10,480,10 Greenland, GRL, North America 476,28,475,28,474,28,474,27,475,27,477,27,478,27,478,28,479,28,476,28 Greenland, GRL, North America 484,23,483,22,482,21,483,21,482,21,483,21,482,20,483,20,483,21,484,21,483,21,483,22,484,22,484,23 Greenland, GRL, North America 487,26,486,25,483,26,483,25,484,24,484,25,485,25,485,24,486,24,486,25,485,25,486,25,487,25,488,25,487,25,487,26 Greenland, GRL, North America 479,26,478,26,477,26,478,26,478,25,479,25,480,25,480,26,479,26,480,26,479,26 Greenland, GRL, North America 485,14,485,13,486,13,487,13,486,13,486,14,485,14 Greenland, GRL, North America 395,68,396,68,397,68,396,68,395,68 Greenland, GRL, North America 399,68,400,68,401,68,399,68 Greenland, GRL, North America 403,70,403,69,404,69,404,70,403,70 Greenland, GRL, North America 409,71,408,71,408,70,407,70,410,70,410,71,409,70,409,71 Greenland, GRL, North America 408,71,407,71,408,71,409,71,408,71 Greenland, GRL, North America 419,57,418,57,418,56,417,56,418,56,418,57,419,57 Greenland, GRL, North America 426,54,426,53,427,53,428,53,427,53,428,53,427,54,426,54,427,54,426,54 Greenland, GRL, North America 413,62,412,62,414,62,413,62 Greenland, GRL, North America 324,19,323,19,323,18,322,18,323,18,325,18,324,19 Greenland, GRL, North America 481,17,479,17,478,17,479,17,480,17,482,17,481,17 Greenland, GRL, North America 485,18,485,17,486,17,487,17,486,17,485,18 Greenland, GRL, North America 481,14,480,14,481,14,482,14,481,14,482,14,481,14,482,14,481,14 Greenland, GRL, North America 381,37,380,37,380,36,381,36,382,36,383,37,382,37,381,37 Greenland, GRL, North America 404,4,403,4,399,3,398,3,396,3,397,3,399,2,401,3,405,3,406,3,406,4,405,4,404,4,405,4,404,4 Greenland, GRL, North America 379,37,378,37,379,37 Greenland, GRL, North America 326,18,327,18,329,18,326,18 Greenland, GRL, North America 416,61,415,61,414,60,415,60,416,61 Greenland, GRL, North America 384,5,380,4,379,4,380,4,382,4,385,4,386,5,384,5 Greenland, GRL, North America 466,31,463,31,462,31,464,31,464,30,466,30,469,31,470,31,468,31,465,31,469,31,470,31,471,31,470,31,466,31 Greenland, GRL, North America 455,39,456,39,455,39,456,39,457,38,458,38,461,38,462,37,462,38,463,38,464,38,464,39,461,39,458,39,455,39 Greenland, GRL, North America 378,43,377,42,378,42,379,42,378,42,376,42,375,42,375,41,376,41,375,41,377,41,375,40,377,40,380,40,381,41,382,41,383,41,384,41,383,41,384,42,383,42,381,42,378,43 Greenland, GRL, North America 474,32,473,32,472,32,471,32,469,32,466,32,470,31,473,32,474,32,473,32,474,32 Greenland, GRL, North America 380,36,379,36,381,36,380,36 Greenland, GRL, North America 386,42,385,41,386,41,385,41,386,41,387,41,387,42,386,42 Greenland, GRL, North America 473,34,472,34,471,34,470,34,468,33,467,33,466,33,466,32,467,32,468,32,469,32,470,32,471,32,473,33,474,33,473,33,472,33,471,33,472,33,473,34 Greenland, GRL, North America 441,1,439,1,441,1,442,1,441,1,434,2,433,2,434,2,435,2,438,2,439,2,440,2,441,2,444,2,445,2,445,1,449,1,451,1,454,1,460,1,464,1,465,1,465,2,464,2,463,2,468,2,467,2,468,2,467,2,468,2,470,2,472,2,473,2,476,3,475,3,473,3,472,4,470,4,468,4,466,4,464,4,455,4,452,4,448,4,447,4,448,4,449,4,450,4,443,5,441,5,440,5,441,5,440,5,440,6,441,6,442,5,445,5,450,5,451,5,454,4,464,5,463,5,462,5,458,6,457,6,458,6,461,6,465,5,467,5,467,4,469,4,472,4,473,4,473,5,474,5,473,6,472,7,471,7,470,7,471,7,468,8,466,8,467,8,466,9,468,8,469,8,470,8,471,8,471,7,475,6,477,6,480,5,479,6,481,6,483,6,484,6,486,6,485,6,486,6,487,6,486,6,486,5,488,5,487,5,489,5,495,5,501,5,503,6,502,6,500,6,500,7,499,7,498,7,499,7,497,7,496,7,494,7,495,7,496,8,495,8,492,8,491,8,486,8,485,8,484,9,483,9,481,8,479,8,478,9,476,9,477,9,479,9,480,9,483,9,485,9,487,9,491,9,490,9,489,9,490,9,489,9,490,9,490,10,489,10,488,10,484,10,481,10,480,10,479,10,478,10,478,11,477,11,478,11,479,11,478,11,479,11,480,11,479,11,482,10,483,10,485,10,486,10,487,10,486,11,485,11,484,11,482,11,481,11,481,12,480,12,481,12,480,13,481,13,482,13,481,13,480,13,479,13,480,14,479,14,477,14,476,14,477,14,475,15,477,15,476,15,475,16,476,16,475,16,474,16,475,16,474,17,475,17,474,17,473,17,475,17,474,18,475,18,476,18,475,17,476,17,477,16,478,17,479,17,481,17,482,17,483,18,482,18,481,18,480,17,479,17,478,17,477,18,478,18,479,18,478,18,476,18,479,18,477,18,480,18,481,18,481,19,482,19,483,18,484,18,484,19,485,19,485,20,484,20,483,20,482,20,480,20,477,20,476,20,477,20,478,20,477,20,476,20,474,20,476,20,477,20,476,20,475,21,474,21,474,20,473,20,472,20,473,20,472,20,471,20,472,21,473,21,472,21,473,21,474,21,473,21,474,21,473,21,474,21,473,21,472,21,475,21,474,22,475,22,476,22,477,22,478,22,476,22,477,22,478,22,480,22,481,22,480,22,478,23,474,23,474,22,474,23,480,23,481,23,481,24,481,25,480,25,479,25,480,25,479,24,478,25,477,25,476,24,474,24,473,24,474,24,475,24,473,24,472,24,475,24,478,25,477,25,476,25,474,26,474,25,472,25,473,25,474,25,473,25,474,26,476,25,478,25,477,26,478,26,477,27,476,27,479,26,479,27,480,27,481,26,482,27,481,27,483,27,481,28,479,28,478,27,475,27,474,27,473,27,474,27,473,28,472,28,473,28,472,28,473,28,472,28,474,29,473,29,474,29,474,30,474,29,474,28,475,28,476,29,479,29,478,29,478,30,477,30,475,30,473,31,472,31,469,30,468,30,467,30,468,29,469,29,470,30,471,30,473,30,471,30,470,30,468,29,467,29,466,29,466,30,465,30,465,29,464,29,463,29,462,29,463,29,464,29,464,30,465,30,464,30,463,30,462,31,461,31,460,30,460,31,459,30,458,30,457,30,458,30,460,31,459,31,458,31,456,31,457,31,457,32,458,32,458,31,459,31,460,31,462,31,464,31,465,31,464,32,462,32,461,32,459,32,457,32,459,32,460,32,459,32,461,32,460,33,461,32,463,32,464,32,465,32,465,33,466,33,465,33,462,33,464,33,463,34,465,33,466,33,468,34,469,34,470,34,470,35,470,34,472,35,471,35,470,36,471,36,472,35,472,36,473,35,474,35,473,36,472,36,472,37,473,37,472,36,473,36,474,36,474,37,475,37,474,37,473,37,474,37,474,38,475,38,474,38,475,38,474,38,475,38,474,38,475,38,474,39,475,39,474,39,473,39,474,39,473,39,472,39,472,38,472,39,471,39,469,39,467,39,467,38,467,37,465,37,466,36,465,37,464,37,463,36,461,36,460,36,459,36,458,35,456,34,455,35,454,34,453,34,454,34,454,35,456,35,455,35,458,35,457,36,455,36,456,36,455,36,454,36,457,36,458,36,459,36,460,36,462,36,463,36,463,37,462,37,463,37,460,38,457,38,456,37,457,38,456,38,455,38,454,38,455,38,456,38,455,39,452,39,453,39,455,39,454,39,455,39,459,39,460,39,459,40,458,40,457,40,456,40,455,40,454,40,455,40,456,40,457,40,457,41,458,41,458,40,459,40,461,40,462,40,464,39,463,39,464,39,463,40,464,40,464,39,467,40,470,40,473,40,472,41,471,41,470,41,471,41,470,41,469,41,470,41,469,41,468,41,469,42,468,42,469,42,468,42,467,42,466,42,465,42,466,42,466,43,465,43,466,43,465,43,464,43,465,43,464,43,463,43,463,44,462,44,463,44,462,44,461,44,460,45,459,45,459,44,458,45,457,45,458,45,457,45,456,45,457,45,456,45,455,45,454,45,455,45,454,45,453,45,453,46,453,45,452,45,452,46,451,46,450,46,450,45,449,46,448,46,447,46,448,46,447,46,445,46,444,46,443,46,443,45,442,45,443,45,443,46,442,46,443,46,444,46,443,46,443,47,442,47,441,47,440,47,440,48,439,48,440,48,439,48,440,48,439,48,439,49,438,49,439,49,438,49,438,50,437,50,438,50,437,50,438,50,437,50,437,51,437,50,437,51,436,51,436,50,436,51,435,51,436,51,435,51,435,52,435,51,435,52,434,51,434,52,433,52,432,51,432,52,433,52,432,52,433,52,432,52,431,53,431,52,431,53,430,53,430,52,430,53,429,53,428,53,428,52,428,53,428,52,428,53,426,53,426,52,427,52,428,52,428,51,427,52,426,51,425,51,426,52,425,52,426,52,425,52,426,53,425,53,424,52,424,53,425,53,425,54,424,54,424,53,424,54,424,53,423,54,423,53,423,54,424,54,422,54,422,53,421,53,422,54,421,54,420,53,420,54,421,54,420,54,419,54,420,54,420,55,419,55,420,55,419,55,420,55,419,55,419,56,418,55,417,55,416,55,417,56,416,56,417,56,418,56,418,57,418,58,418,57,417,57,416,58,415,58,416,58,417,58,418,58,418,59,417,59,418,59,417,59,415,59,416,59,417,60,416,60,417,60,416,60,415,60,414,60,414,61,414,60,414,61,415,61,414,61,415,61,414,61,413,61,414,61,415,62,414,62,413,62,412,62,413,62,412,62,411,62,410,62,411,63,412,63,413,63,412,63,413,63,411,63,412,63,413,64,412,64,413,64,412,64,412,65,412,64,413,64,413,65,412,65,413,65,412,65,411,65,412,65,413,65,412,65,412,66,413,66,412,66,411,66,410,66,411,66,412,66,412,67,411,67,412,67,410,66,410,67,411,67,412,67,411,67,410,67,411,67,412,67,409,67,410,67,411,67,412,68,411,68,411,67,411,68,410,68,409,68,410,68,411,68,410,68,411,68,411,69,410,68,410,69,411,69,411,68,411,69,410,69,411,69,410,69,409,69,408,68,409,69,407,69,408,69,409,69,410,69,409,70,409,69,409,70,409,69,410,69,410,70,409,70,407,70,407,69,407,70,406,70,406,71,406,70,405,70,405,71,405,70,404,70,405,70,406,69,405,70,404,70,405,70,405,69,406,68,405,68,405,69,404,69,403,69,404,68,404,69,404,68,403,68,403,69,402,69,403,69,402,69,403,68,402,69,402,68,403,68,404,68,403,67,403,68,402,68,401,68,402,68,401,68,404,67,403,67,401,68,402,67,403,67,402,67,402,66,402,67,401,67,402,67,401,67,401,68,401,67,400,67,400,68,399,68,398,68,399,68,398,68,396,68,397,68,398,68,397,68,396,68,395,68,396,68,396,67,394,68,395,67,396,67,395,67,396,67,395,67,394,67,395,67,394,67,394,66,393,66,394,66,393,66,392,66,393,66,394,66,395,66,394,66,393,66,392,66,393,66,394,66,393,66,392,66,392,65,393,65,392,65,393,65,392,65,391,65,392,65,391,65,392,65,391,65,393,64,392,64,393,64,392,64,391,65,391,64,391,65,390,65,390,64,391,64,390,64,391,64,392,64,391,64,390,64,391,64,392,64,391,64,390,64,390,63,390,64,389,64,389,63,389,62,390,62,389,62,390,61,389,62,388,62,389,62,389,61,389,62,388,62,388,61,389,61,388,61,387,61,386,61,387,61,386,61,386,60,387,60,386,60,387,60,388,60,388,59,386,60,385,60,386,60,385,59,385,58,386,58,385,58,387,58,388,58,389,58,388,58,388,57,388,58,385,58,384,58,385,58,386,58,387,58,386,58,387,58,387,57,388,57,387,57,388,57,389,57,388,57,387,57,388,57,388,56,388,57,388,56,389,57,391,58,391,57,390,57,389,57,390,56,389,56,390,56,389,56,388,56,387,56,387,55,387,56,387,55,387,56,388,56,387,56,388,56,387,56,386,57,386,56,385,57,384,57,385,58,384,58,383,58,383,57,383,56,384,56,385,56,386,55,385,56,384,56,385,56,384,55,384,56,383,56,384,56,383,56,383,55,383,54,382,55,382,54,384,54,385,53,387,53,388,53,387,53,386,53,384,53,384,54,383,54,382,54,381,54,382,54,381,54,381,53,380,53,381,53,380,53,382,53,383,53,384,52,383,53,382,53,382,52,381,53,380,53,379,53,380,52,379,52,380,52,381,52,382,51,384,51,383,51,384,51,385,50,386,50,387,50,386,50,387,50,386,50,384,50,384,51,383,51,381,51,381,52,380,52,379,52,378,52,378,51,379,51,380,51,381,51,382,51,381,51,380,51,379,51,380,51,379,51,380,50,381,50,382,50,381,50,382,50,381,50,380,50,382,50,383,50,382,50,381,50,378,50,379,50,378,49,379,49,378,49,379,49,381,49,382,49,385,49,386,49,388,49,386,49,385,48,386,48,384,48,383,48,380,49,378,49,378,48,380,48,381,47,380,48,380,47,381,47,383,47,384,47,384,48,386,48,388,48,389,48,387,48,389,47,390,47,389,47,387,48,386,48,387,48,386,47,388,47,387,47,388,47,386,47,385,47,386,47,387,47,386,47,385,47,386,47,385,47,384,47,383,47,382,47,383,47,384,47,385,47,381,47,379,48,378,48,379,48,379,47,378,47,379,47,380,47,379,47,380,47,381,47,380,47,380,46,382,47,383,47,381,47,380,46,379,46,380,46,381,46,382,46,384,46,386,46,388,47,389,47,388,47,386,46,385,46,386,46,386,45,385,45,386,46,383,46,382,46,381,46,382,46,381,46,380,46,379,46,380,45,380,46,381,45,382,45,384,45,385,45,386,45,386,44,387,45,387,44,386,44,387,44,386,44,386,43,387,43,388,43,388,44,389,44,388,44,388,43,388,44,388,43,389,43,389,44,389,43,388,43,387,43,388,43,389,43,388,43,388,42,388,43,387,43,386,43,387,43,387,42,388,42,389,42,387,42,388,42,387,41,388,41,389,41,388,41,389,41,389,40,388,40,387,41,386,41,386,40,387,41,387,40,386,40,385,41,385,40,383,40,382,40,381,40,378,39,376,39,376,38,377,38,381,38,384,39,387,40,388,40,388,39,387,39,388,39,387,39,386,39,387,39,386,39,385,39,386,39,387,39,388,39,387,38,386,39,386,38,385,38,386,38,387,38,388,38,387,38,385,38,384,37,386,38,387,38,387,37,385,37,386,37,385,37,384,37,383,37,384,37,385,37,384,36,385,36,384,36,383,37,382,37,383,37,383,36,384,36,385,36,384,36,382,36,381,36,382,36,383,36,384,36,385,35,384,35,384,36,383,36,382,36,382,35,381,35,380,35,381,35,381,34,380,35,381,35,380,35,379,35,380,35,379,35,379,34,378,34,378,33,379,33,378,33,378,34,379,34,379,35,378,35,378,36,377,35,377,36,378,36,376,36,375,36,374,36,373,36,372,36,373,36,372,35,373,35,374,35,373,35,374,35,375,35,376,34,375,35,374,35,373,35,373,34,374,34,373,34,375,34,375,33,374,33,373,33,375,33,374,33,375,33,376,33,375,33,375,32,376,32,375,32,376,32,375,32,376,32,375,32,374,32,374,31,372,31,373,31,374,31,373,31,374,31,373,31,374,30,373,30,371,30,372,29,371,29,372,29,373,29,372,29,373,29,372,29,371,29,371,28,370,28,371,28,369,28,368,28,371,28,370,28,369,27,371,27,370,27,369,27,371,27,370,27,369,27,369,26,368,26,369,26,368,26,366,25,365,25,366,25,365,25,364,25,365,25,364,24,365,24,364,24,363,24,364,24,365,24,364,24,365,24,364,23,362,23,361,23,360,23,361,23,360,23,359,23,358,22,357,23,357,22,356,22,355,22,354,22,353,22,352,22,351,22,350,21,349,21,349,22,348,22,347,22,347,21,346,21,346,22,345,22,346,22,345,22,346,22,345,22,344,22,345,22,344,22,343,22,344,22,343,22,344,22,343,22,342,22,343,22,342,22,341,22,340,22,339,22,338,22,340,23,334,22,333,22,332,22,331,21,332,21,333,21,335,21,336,21,335,21,335,20,333,21,329,20,330,20,331,19,330,19,328,20,327,20,326,20,325,19,326,19,327,19,330,19,334,19,336,19,340,19,341,19,339,19,336,19,335,19,332,19,334,18,337,18,339,18,340,19,341,19,340,19,340,18,341,18,340,18,339,17,340,17,338,17,338,18,337,18,334,18,333,18,334,18,332,18,329,18,331,17,330,17,327,17,329,17,330,17,328,17,327,17,326,17,325,17,326,17,325,17,324,17,322,16,323,16,322,16,321,16,320,16,321,16,322,16,321,16,321,15,322,15,321,15,322,15,325,15,327,15,327,14,329,14,330,14,331,14,332,14,333,14,332,14,334,13,335,13,336,13,337,13,336,13,338,13,339,13,340,13,342,13,343,13,344,12,345,12,344,12,345,11,344,11,345,11,344,11,345,11,344,11,345,11,344,11,344,10,348,10,347,10,346,10,345,10,344,10,343,10,341,10,340,10,339,10,338,10,337,10,337,9,339,9,340,9,342,8,344,8,345,8,344,8,345,8,348,7,349,7,351,8,350,8,349,7,351,7,353,7,355,7,357,7,356,7,356,6,357,6,355,5,356,5,359,5,363,5,364,5,363,5,364,6,367,6,370,7,370,6,369,6,368,6,367,6,365,6,364,5,361,5,370,4,371,4,372,4,374,4,373,4,374,4,373,4,376,3,377,4,379,4,379,5,378,5,378,6,379,6,379,5,380,5,381,5,380,4,381,4,383,5,385,5,389,5,389,6,390,6,391,6,389,5,388,5,387,5,386,5,387,5,390,5,391,5,388,4,387,4,386,3,387,3,391,3,393,3,396,4,397,4,400,4,402,4,402,5,404,5,406,5,407,5,406,5,405,5,406,5,405,5,405,4,406,4,405,4,406,4,407,4,413,4,412,4,411,4,410,4,408,3,406,3,404,2,402,2,403,2,410,2,413,2,414,3,415,3,414,3,415,3,414,2,416,2,418,3,419,3,420,3,419,3,420,3,420,2,419,2,414,2,405,2,402,2,400,2,399,2,399,1,400,1,402,1,404,2,405,2,406,2,409,2,408,2,404,1,403,1,404,1,405,1,406,1,410,1,408,1,411,1,414,1,415,1,418,2,421,2,422,2,423,2,424,2,423,2,422,2,423,1,427,1,423,1,424,1,427,1,424,1,423,1,423,0,426,0,425,0,426,0,427,0,430,0,429,0,430,0,429,0,431,0,434,0,435,0,436,0,437,0,438,0,437,0,438,0,440,0,441,0,443,0,449,0,452,0,454,0,453,0,454,0,455,0,454,0,455,0,457,0,461,0,462,1,461,1,458,1,451,1,448,1,447,1,443,1,441,1 Greenland, GRL, North America 354,215,354,214,354,215,354,214,355,214,354,214,354,215,354,214,354,215 Grenada, GRD, Caribbean 354,203,354,202,354,201,355,202,354,203 Guadeloupe, GLP, Caribbean 355,202,355,201,356,202,355,202 Guadeloupe, GLP, Caribbean 265,199,266,199,267,199,267,198,267,197,268,197,269,197,270,197,271,197,272,197,272,198,272,199,272,200,272,201,272,202,272,203,273,203,274,203,275,203,275,204,273,204,272,205,272,206,272,207,271,207,271,208,270,208,269,209,268,209,267,209,266,209,265,208,264,208,263,207,263,206,263,205,263,204,264,203,264,202,265,202,266,202,267,202,268,202,268,201,267,200,266,200,266,199,265,199 Guatemala, GTM, Latin America 565,241,565,240,566,239,566,240,565,241 Guinea, GIN, Sub Saharan Africa 498,213,500,213,501,213,502,213,502,214,503,213,504,213,505,213,505,214,506,215,506,214,507,214,508,215,508,214,509,214,510,214,511,214,512,213,511,213,512,213,513,213,513,214,513,216,514,216,514,217,513,218,514,218,514,217,515,217,515,219,516,219,516,220,515,220,515,221,515,222,516,222,516,223,516,224,516,225,517,225,516,225,515,225,515,226,516,226,515,226,515,228,514,228,514,227,513,227,513,228,513,229,512,229,512,228,511,228,511,227,511,226,511,225,510,225,509,225,508,225,508,226,508,225,507,226,508,225,508,224,508,223,507,223,508,223,507,222,506,221,504,221,503,221,502,221,502,222,501,222,501,223,500,223,500,222,499,223,499,222,498,222,499,221,498,221,497,220,498,220,497,220,496,220,496,219,496,218,495,219,495,218,496,218,495,218,495,217,495,218,495,217,495,218,494,218,495,217,495,216,496,216,497,215,497,216,498,215,498,214,499,213,498,213 Guinea, GIN, Sub Saharan Africa 489,213,490,213,491,213,492,213,493,213,494,212,498,212,498,213,499,213,498,214,498,215,497,216,497,215,496,216,495,216,495,217,494,218,494,217,494,218,494,217,493,217,493,216,494,216,493,216,494,216,494,215,494,216,493,215,493,216,493,215,493,216,493,215,494,215,495,215,494,215,495,215,494,215,493,215,492,215,492,214,492,215,491,215,490,215,490,214,491,214,490,214,489,213 Guinea-Bissau, GNB, Sub Saharan Africa 360,226,360,225,361,226,360,225,362,226,363,227,364,228,364,229,364,230,364,231,363,231,364,231,364,230,365,230,366,230,367,231,367,232,367,231,367,232,368,232,368,233,368,234,367,235,368,235,367,235,366,235,366,236,366,237,366,238,365,238,365,239,366,239,366,240,367,240,366,240,367,240,368,240,368,241,368,242,368,243,369,244,370,244,370,245,369,245,368,245,368,244,368,245,367,245,366,245,366,246,365,246,364,246,364,247,363,247,362,247,362,246,361,245,360,245,361,245,360,245,360,244,360,243,360,242,360,241,360,240,361,239,361,238,360,238,360,237,359,237,359,236,360,235,359,235,358,235,357,235,355,233,356,232,356,231,356,230,357,230,358,230,359,229,358,229,358,228,357,228,358,228,358,227,359,227,359,226,360,226 Guyana, GUY, Latin America 321,194,320,194,321,194 Haiti, HTI, Caribbean 324,191,324,192,324,193,325,193,324,193,324,194,324,195,324,196,323,196,322,196,321,196,319,196,318,196,317,196,316,196,316,195,317,195,318,195,319,195,318,195,319,195,321,195,322,195,323,194,322,194,321,193,321,192,319,192,319,191,320,191,321,191,322,191,323,191,324,191,324,192,324,191 Haiti, HTI, Caribbean 275,203,276,203,277,203,278,203,279,203,280,203,281,203,282,203,281,202,282,202,282,203,283,203,284,203,285,203,286,203,287,203,287,204,288,204,287,204,288,205,287,204,288,204,288,205,289,205,288,204,289,205,290,205,290,206,289,205,289,206,289,205,289,206,288,206,287,206,287,207,287,206,286,207,285,206,284,206,284,207,284,208,283,208,282,209,281,208,281,209,280,209,279,209,279,210,279,211,278,211,278,212,278,211,277,211,278,211,277,211,277,210,276,210,276,209,275,209,274,209,274,208,273,208,272,207,272,208,271,207,272,207,272,206,272,205,273,204,275,204,275,203 Honduras, HND, Latin America 882,183,883,183,883,184,881,184,881,183,882,183 Hong Kong, Asia 606,105,606,106,607,106,608,106,608,107,607,107,606,107,606,108,605,108,605,109,604,109,605,109,604,110,604,111,603,111,603,112,602,112,601,112,600,112,599,112,598,112,597,113,597,112,597,113,596,113,595,113,594,113,593,113,592,113,591,113,591,112,590,112,589,111,589,110,588,110,589,110,588,110,589,109,589,108,590,108,589,108,589,107,590,107,591,107,591,106,592,107,593,107,595,107,596,107,596,106,597,106,598,106,599,106,600,106,601,106,601,105,602,105,603,105,604,105,605,105,606,105 Hungary, HUN, Europe 475,53,476,53,475,53,474,53,475,53,475,54,476,54,475,54,476,54,476,55,476,54,477,54,477,53,478,53,478,54,479,54,479,53,478,52,479,52,480,53,481,53,481,52,482,52,483,52,484,52,484,53,485,53,485,54,485,53,485,52,486,52,487,53,487,52,488,52,489,52,490,52,489,52,490,52,490,51,491,51,492,51,492,52,493,52,494,52,495,51,496,51,494,52,495,52,494,52,495,52,496,52,496,53,495,53,496,53,497,53,496,54,497,54,498,54,499,54,498,54,498,55,499,55,497,55,499,55,498,55,499,55,499,56,498,56,497,55,498,55,498,56,497,56,498,56,497,56,496,56,497,56,497,57,496,57,495,57,496,57,495,57,495,58,494,58,493,57,493,58,492,58,491,58,490,59,489,59,488,59,489,59,487,59,486,59,486,60,486,59,486,60,485,60,483,60,481,60,480,60,479,60,478,60,478,59,478,60,478,59,479,59,478,59,477,59,476,59,475,59,474,59,473,59,471,59,472,59,471,59,471,58,472,58,472,59,474,58,473,58,474,58,473,58,474,58,474,57,475,57,474,57,474,58,473,58,473,57,474,57,473,57,474,57,475,57,474,57,473,57,472,57,473,56,472,56,473,56,472,56,471,56,470,56,469,56,468,56,467,56,468,56,470,56,470,55,470,56,471,55,471,56,472,56,472,55,474,55,473,55,472,55,473,55,474,54,473,54,472,54,473,54,472,54,471,54,470,54,469,54,468,54,467,54,466,54,467,54,468,54,467,54,468,54,467,53,469,53,469,54,470,53,469,53,470,53,469,53,468,53,470,53,468,53,468,52,469,52,470,52,471,52,471,53,471,52,472,53,472,52,471,52,472,52,471,52,472,51,471,52,471,51,471,52,470,52,470,51,471,51,472,51,473,51,473,52,474,52,475,52,474,52,475,52,476,53,475,53 Iceland, ISL, Europe 818,214,818,215,818,216,818,215,818,216,817,216,817,215,817,214,818,214 India, IND, Asia 821,230,821,229,820,229,821,229,821,230 India, IND, Asia 817,219,817,218,817,219 India, IND, Asia 773,144,774,144,775,143,776,143,778,143,779,144,780,144,781,144,780,145,780,146,780,147,779,147,778,147,778,148,777,148,776,149,777,149,777,150,776,150,776,151,777,151,778,151,778,152,778,153,777,153,776,153,775,153,775,154,776,154,776,155,776,156,776,157,776,156,776,157,777,156,777,157,778,158,779,158,780,158,780,159,781,159,783,160,782,160,781,161,781,162,780,162,780,163,780,164,781,165,781,164,782,165,783,165,783,166,784,166,785,167,786,167,787,167,788,167,788,168,789,168,790,168,791,168,792,168,793,168,794,169,793,169,794,169,794,170,795,170,796,170,797,170,797,171,798,171,800,171,801,171,802,171,803,171,804,171,804,170,803,169,804,169,804,168,804,167,805,166,806,166,806,167,806,168,806,169,806,170,807,170,808,170,809,170,810,170,811,170,812,170,813,170,814,170,815,170,816,170,816,169,816,168,815,168,814,168,814,167,815,167,816,167,817,167,818,167,818,166,817,166,818,166,819,165,820,164,821,164,822,164,822,163,823,163,824,163,825,163,826,163,828,162,828,163,829,163,828,163,828,164,829,163,829,164,829,165,828,165,829,165,830,165,830,166,831,165,831,166,832,166,831,166,832,166,832,167,831,167,830,168,831,169,830,169,830,168,829,168,829,169,828,169,827,169,827,170,826,170,825,171,825,170,825,171,825,172,825,173,824,174,823,174,823,175,824,175,823,176,823,177,822,178,822,179,820,178,820,179,820,178,819,179,820,179,820,180,820,181,819,181,819,182,819,183,819,184,818,185,818,184,818,185,818,184,817,185,817,184,817,182,817,181,816,180,816,179,816,180,816,179,816,180,816,179,815,179,815,180,815,181,814,182,814,181,813,180,813,179,814,179,814,178,815,178,815,177,815,178,815,177,816,177,816,176,817,176,817,175,816,175,814,175,813,175,812,175,811,175,810,175,809,175,809,174,809,173,809,172,808,172,808,173,808,172,808,173,807,172,807,171,806,171,807,172,806,172,806,171,805,171,805,172,804,172,804,173,805,174,806,174,806,175,807,175,806,175,805,175,804,176,804,177,805,178,806,178,806,179,805,179,805,180,806,180,806,181,806,182,806,183,807,184,807,185,806,185,807,185,807,186,806,186,806,185,806,186,806,185,806,184,806,185,805,185,805,184,806,184,805,184,805,185,805,186,805,185,805,186,805,185,805,186,804,186,804,185,804,186,804,185,804,184,803,184,803,183,803,184,804,184,804,185,803,185,803,186,801,186,800,186,800,187,800,188,801,188,800,189,799,190,799,191,798,190,798,191,799,191,798,191,797,191,796,192,796,191,795,191,795,192,796,191,796,192,795,192,796,192,795,192,794,193,793,194,792,195,792,196,791,196,790,197,789,197,789,198,788,198,787,199,786,200,787,200,786,201,785,202,784,201,783,202,782,203,783,203,782,203,782,202,782,203,781,203,780,203,780,205,780,206,780,207,780,208,780,209,780,210,780,209,780,210,780,209,780,210,781,210,780,211,780,212,780,213,780,214,779,214,779,216,779,217,779,216,779,218,779,220,778,220,777,220,777,221,776,222,777,223,778,223,777,223,776,223,775,223,774,224,774,225,773,226,772,226,771,226,770,225,769,224,769,223,769,224,769,223,768,222,768,221,769,221,769,222,769,221,768,221,768,220,767,219,767,218,767,216,766,216,766,215,765,215,766,215,765,215,765,214,764,213,764,212,764,211,763,210,764,210,764,209,763,210,763,209,763,208,763,207,762,207,762,206,761,205,761,204,760,203,760,202,759,201,760,201,759,200,759,199,759,198,759,197,758,196,759,196,758,196,758,195,759,195,758,195,758,194,759,194,758,194,759,194,758,194,758,193,758,194,758,193,759,193,758,193,758,192,758,191,757,191,758,190,758,189,758,188,758,187,757,187,758,187,757,187,757,186,758,186,757,186,758,186,759,185,757,186,757,185,758,185,757,185,757,184,758,184,757,184,757,183,756,184,756,185,755,185,756,185,756,186,756,187,755,187,754,188,753,188,752,188,750,188,750,187,749,186,748,185,747,185,746,184,747,183,747,184,748,184,748,183,749,183,750,183,750,182,751,182,751,181,751,182,750,182,749,182,747,182,745,181,745,180,745,179,746,179,745,179,744,180,744,179,745,179,746,179,746,178,747,178,748,178,749,178,750,178,751,177,751,178,752,178,752,177,753,177,752,177,753,176,752,175,752,174,751,173,750,173,750,172,750,171,749,171,748,170,748,169,750,168,750,167,751,166,751,167,752,167,753,167,754,167,755,167,755,166,756,165,756,164,757,164,758,163,759,162,760,161,760,160,761,160,761,159,762,158,763,157,764,157,763,157,763,156,763,155,764,155,764,154,765,154,766,154,765,153,764,153,763,153,764,152,763,152,762,152,763,152,763,151,762,151,762,150,761,149,762,149,762,148,761,148,762,148,761,148,761,147,762,146,763,146,764,146,765,147,766,147,767,147,768,147,768,146,769,146,770,146,770,147,770,146,771,146,771,145,772,145,773,144 India, IND, Asia 818,212,818,213,818,214,818,213,818,212,818,211,818,210,819,210,819,211,818,211,818,212 India, IND, Asia 952,276,953,275,953,273,954,273,955,273,956,273,957,273,956,274,956,275,955,276,954,276,953,276,952,276 Indonesia, IDN, Asia 932,255,932,254,931,253,932,253,933,253,933,254,932,255 Indonesia, IDN, Asia 837,256,836,256,835,254,835,253,836,253,836,254,837,254,837,255,837,256,837,255,837,256 Indonesia, IDN, Asia 868,254,868,253,869,254,868,254 Indonesia, IDN, Asia 840,259,839,258,840,258,840,259 Indonesia, IDN, Asia 885,277,885,276,884,276,883,276,883,275,884,275,885,275,886,275,887,276,886,276,885,277 Indonesia, IDN, Asia 839,258,838,257,839,257,839,258 Indonesia, IDN, Asia 863,260,862,260,862,259,862,258,863,258,864,258,864,259,864,260,863,260 Indonesia, IDN, Asia 909,263,908,263,909,262,909,263,909,262,909,263 Indonesia, IDN, Asia 918,258,917,258,917,257,917,256,918,257,917,257,918,258 Indonesia, IDN, Asia 929,275,928,274,929,274,929,275 Indonesia, IDN, Asia 917,275,917,274,917,273,918,274,919,273,920,274,919,274,918,274,917,274,917,275 Indonesia, IDN, Asia 948,256,947,256,946,256,946,255,947,255,948,256,949,256,950,256,949,256,948,256 Indonesia, IDN, Asia 908,283,909,282,910,282,910,283,909,283,908,283 Indonesia, IDN, Asia 905,282,905,282 Indonesia, IDN, Asia 913,257,912,256,913,256,913,255,915,256,914,256,913,257 Indonesia, IDN, Asia 901,281,900,281,899,280,898,280,897,280,896,279,897,279,898,279,899,279,899,278,900,279,901,279,901,280,902,280,902,281,901,281 Indonesia, IDN, Asia 913,278,914,278,915,277,915,276,917,276,918,276,919,276,920,275,921,276,921,275,921,276,921,277,919,277,918,277,917,278,916,278,915,279,914,279,914,280,913,280,913,281,912,281,911,282,910,282,910,281,911,281,910,281,910,280,911,279,912,278,913,278 Indonesia, IDN, Asia 909,276,909,275,910,275,909,276 Indonesia, IDN, Asia 908,268,908,267,908,268,908,267,907,268,907,267,908,266,908,265,908,264,909,264,909,265,908,266,909,266,909,267,908,267,908,268 Indonesia, IDN, Asia 859,260,859,259,857,259,857,258,857,257,856,257,855,257,855,256,856,256,856,255,857,255,856,256,857,256,857,255,858,255,858,256,858,257,859,258,860,258,860,259,859,259,860,260,859,260 Indonesia, IDN, Asia 841,260,840,259,841,260 Indonesia, IDN, Asia 889,277,888,277,887,277,888,277,888,276,888,275,889,275,890,276,889,277 Indonesia, IDN, Asia 932,262,931,261,929,261,929,260,928,260,928,261,926,261,926,260,926,261,925,261,924,260,924,261,923,261,923,260,924,260,924,259,926,259,927,259,928,259,930,259,931,260,931,261,932,261,932,262 Indonesia, IDN, Asia 912,276,911,276,912,275,912,276,912,275,912,276 Indonesia, IDN, Asia 910,276,909,276,910,276,910,275,910,276,910,275,911,275,911,276,910,276 Indonesia, IDN, Asia 956,276,955,276,955,275,956,275,956,276 Indonesia, IDN, Asia 913,276,913,275,915,275,915,276,913,276 Indonesia, IDN, Asia 924,275,923,275,924,275 Indonesia, IDN, Asia 891,278,890,278,890,277,890,276,891,276,892,276,893,276,893,277,894,276,893,276,893,275,894,275,894,276,895,275,896,276,895,276,896,276,896,275,897,276,897,277,896,277,895,277,895,276,894,277,893,277,892,278,891,278 Indonesia, IDN, Asia 907,267,907,266,907,267,907,266,907,267,906,267,906,266,907,266,906,265,907,265,908,264,908,265,907,266,907,267 Indonesia, IDN, Asia 903,277,902,277,901,277,900,277,899,277,899,276,900,276,900,275,901,275,902,275,902,276,903,276,904,276,905,276,906,276,907,276,908,276,908,275,909,275,908,276,907,277,906,277,905,277,904,277,903,277 Indonesia, IDN, Asia 853,253,852,252,853,252,853,253 Indonesia, IDN, Asia 829,243,828,243,827,243,827,242,828,242,828,243,828,242,829,243 Indonesia, IDN, Asia 854,252,854,251,853,251,853,250,853,251,854,251,855,251,854,251,854,252 Indonesia, IDN, Asia 921,252,921,251,921,252 Indonesia, IDN, Asia 835,252,834,252,835,252,835,251,835,252 Indonesia, IDN, Asia 847,248,846,247,846,246,847,247,847,248 Indonesia, IDN, Asia 920,239,919,238,920,238,920,237,920,238,920,239 Indonesia, IDN, Asia 923,253,922,253,922,252,921,252,922,251,922,252,922,251,922,252,923,252,922,252,922,253,923,253 Indonesia, IDN, Asia 905,267,905,266,906,266,906,267,905,267 Indonesia, IDN, Asia 861,269,861,268,862,269,863,269,864,270,864,269,865,270,865,271,866,271,867,271,868,271,869,271,870,271,871,271,872,270,873,270,873,271,874,271,874,270,875,271,876,271,877,271,877,272,878,272,877,272,878,272,878,273,879,274,880,274,881,274,882,273,882,274,883,274,883,276,883,277,883,276,882,276,881,276,880,276,879,275,878,276,877,276,876,276,875,275,875,276,874,275,873,275,872,275,871,275,869,274,868,274,867,274,866,274,866,273,866,274,865,274,863,274,862,273,860,273,859,273,859,272,859,271,858,272,858,271,857,271,856,271,855,271,856,271,856,270,857,270,857,269,858,268,858,269,858,268,859,269,860,269,861,269 Indonesia, IDN, Asia 901,270,901,269,901,268,901,269,901,270 Indonesia, IDN, Asia 924,262,924,261,923,262,924,261,925,261,924,261,924,262 Indonesia, IDN, Asia 930,257,929,257,929,256,930,256,931,256,931,257,931,256,930,257 Indonesia, IDN, Asia 916,256,917,256,919,256,918,256,917,256,916,256 Indonesia, IDN, Asia 933,275,933,274,933,275,933,274,933,273,934,273,934,272,935,272,934,272,934,273,935,273,934,274,934,275,933,275 Indonesia, IDN, Asia 920,262,918,261,918,260,920,260,921,260,921,261,921,262,920,262 Indonesia, IDN, Asia 846,267,846,266,847,267,846,267 Indonesia, IDN, Asia 942,271,942,270,942,269,943,270,943,271,942,271 Indonesia, IDN, Asia 938,268,937,268,938,268,937,267,938,267,938,268 Indonesia, IDN, Asia 909,255,909,254,909,255,908,255,908,254,909,254,909,255,910,254,910,255,909,255 Indonesia, IDN, Asia 922,256,922,255,923,255,924,255,924,256,923,256,922,256 Indonesia, IDN, Asia 938,268,939,267,939,266,939,267,938,268 Indonesia, IDN, Asia 888,263,888,262,888,261,888,260,888,261,888,262,888,263 Indonesia, IDN, Asia 943,270,943,269,942,269,942,268,943,268,942,268,943,268,943,267,944,267,943,267,944,267,944,268,943,268,944,269,943,270 Indonesia, IDN, Asia 924,244,925,243,926,243,925,244,924,244 Indonesia, IDN, Asia 886,241,886,240,886,239,887,238,887,237,888,238,888,237,889,237,889,238,889,237,890,238,890,237,890,238,891,237,892,238,893,239,892,239,893,239,893,240,892,240,892,239,892,240,891,240,892,240,892,241,891,241,892,241,892,242,893,242,892,242,893,242,892,242,893,242,894,244,893,244,893,245,894,245,894,246,895,246,896,247,897,247,896,248,895,248,894,248,893,247,894,248,893,248,892,250,892,251,892,252,892,253,891,253,890,254,890,255,889,255,888,256,889,256,889,257,888,257,889,257,889,258,888,258,889,258,889,259,888,260,888,259,888,260,887,261,886,262,885,262,884,263,883,263,883,261,882,261,883,260,882,261,882,260,882,261,881,261,880,261,880,260,879,260,879,259,879,260,878,260,877,261,876,260,876,261,875,261,875,260,875,259,874,260,874,259,873,259,873,260,872,260,872,259,872,260,871,260,871,259,870,260,870,259,870,258,870,257,870,256,869,256,870,256,870,255,870,254,869,254,869,253,868,253,867,253,868,253,868,252,867,252,867,251,867,250,866,250,866,249,866,248,866,247,867,247,867,246,867,247,866,247,867,246,868,245,867,245,868,245,868,244,868,245,869,245,869,246,870,247,871,248,872,248,872,247,873,247,874,247,874,248,874,247,875,248,875,247,876,247,876,246,877,246,879,246,878,246,879,246,880,247,881,247,881,246,882,246,883,246,884,245,884,244,884,243,885,243,885,242,885,241,885,242,886,241 Indonesia, IDN, Asia 847,247,846,246,845,246,846,246,847,246,847,247 Indonesia, IDN, Asia 908,248,910,248,911,248,912,247,913,247,913,246,914,246,914,245,915,245,915,246,914,248,913,249,911,249,910,250,909,250,909,249,908,249,907,249,906,249,905,249,904,249,903,249,902,249,901,249,900,250,900,251,900,252,900,253,901,253,901,254,901,255,902,255,903,255,904,254,904,253,905,253,906,253,907,253,908,253,908,252,909,252,910,252,910,253,910,254,909,254,909,253,908,253,908,254,907,254,907,255,906,255,905,256,904,256,903,256,904,256,904,257,905,257,905,258,906,258,906,259,906,260,907,260,906,260,906,261,907,261,906,261,907,262,907,263,908,263,908,264,907,264,906,264,906,265,905,265,904,264,904,263,904,262,903,262,903,261,902,261,902,260,903,260,903,259,902,259,903,259,902,258,901,259,900,259,900,260,901,260,901,261,901,262,901,264,901,265,900,265,900,266,901,267,900,267,899,267,899,268,898,267,898,266,898,265,898,264,898,263,898,262,898,261,897,261,896,261,896,260,896,259,896,258,897,258,897,257,897,256,898,256,897,256,897,255,897,254,898,253,899,253,898,253,899,252,899,253,899,252,899,251,898,251,899,250,899,251,899,250,899,249,900,249,900,248,901,248,902,248,902,247,903,247,904,247,905,247,906,247,907,247,907,248,908,248 Indonesia, IDN, Asia 932,252,932,251,931,251,931,252,931,251,930,251,931,251,930,251,931,251,932,251,933,251,934,251,933,252,933,251,932,252,932,251,931,251,932,251,932,252 Indonesia, IDN, Asia 844,245,844,244,845,244,845,245,844,245 Indonesia, IDN, Asia 833,249,832,248,832,247,831,247,831,246,832,246,833,247,833,248,833,249 Indonesia, IDN, Asia 963,258,963,260,963,262,963,264,963,266,963,268,963,269,962,270,962,271,963,271,963,273,963,275,963,277,963,278,962,278,961,277,961,276,960,275,959,275,960,275,960,274,960,275,959,275,958,275,957,275,957,274,957,275,956,275,956,274,957,273,956,273,956,272,955,272,956,272,957,272,956,272,955,271,956,271,957,271,956,271,956,270,956,271,955,270,955,269,954,269,954,268,955,268,954,268,955,268,954,268,954,267,953,267,953,266,953,267,953,266,952,266,951,266,951,265,951,266,951,265,950,265,949,265,948,264,947,264,946,264,945,264,944,263,943,263,944,263,944,262,943,262,943,263,943,262,942,262,943,262,942,263,942,262,941,262,941,261,941,262,941,261,940,261,941,261,941,260,941,259,941,260,940,260,940,261,940,262,939,263,938,263,938,262,938,261,938,260,938,261,937,260,936,259,935,259,936,259,935,259,936,259,937,259,938,259,939,258,940,258,941,258,941,259,941,258,941,257,941,258,941,257,940,257,939,257,938,257,937,257,936,257,935,256,936,256,935,256,935,255,934,255,933,255,934,255,933,255,932,255,933,254,933,253,934,253,935,253,936,252,937,252,938,252,939,252,940,253,941,253,942,253,942,255,942,256,942,257,943,259,943,258,944,259,944,260,944,261,946,261,946,260,947,260,947,259,948,258,949,258,949,257,950,257,951,257,951,256,952,255,953,255,954,255,955,256,956,256,957,257,958,257,959,258,960,258,960,257,960,258,961,258,962,258,963,258 Indonesia, IDN, Asia 864,240,864,239,863,238,864,238,865,239,864,239,864,240 Indonesia, IDN, Asia 917,240,916,240,916,239,917,239,917,240 Indonesia, IDN, Asia 849,248,848,248,847,248,847,247,847,248,848,247,849,248 Indonesia, IDN, Asia 849,248,848,248,848,247,847,247,848,247,849,247,849,248 Indonesia, IDN, Asia 853,248,853,247,852,247,853,247,854,247,853,248 Indonesia, IDN, Asia 948,254,947,254,947,253,946,253,946,252,947,253,948,254,949,254,948,254 Indonesia, IDN, Asia 924,246,923,247,922,247,922,248,923,248,923,247,924,247,924,246,925,246,926,246,926,247,924,248,925,249,926,249,926,250,925,250,925,249,924,249,923,249,923,250,923,251,924,252,925,253,924,253,923,252,922,251,923,250,922,249,922,248,922,247,922,246,922,245,923,244,924,244,923,245,924,245,923,246,924,246 Indonesia, IDN, Asia 825,234,826,234,827,234,828,235,829,235,830,235,831,235,832,235,833,236,833,237,834,237,834,238,835,238,835,239,836,239,837,240,838,241,839,241,839,242,840,243,839,242,840,242,840,243,840,242,840,243,841,244,842,244,842,245,842,244,843,244,844,245,844,246,845,245,845,246,846,246,846,247,847,248,848,248,849,249,848,249,847,250,849,249,850,249,851,250,851,251,850,251,849,251,850,251,850,252,850,253,851,253,851,254,851,253,852,254,853,254,853,255,853,256,853,257,853,256,854,257,854,256,854,257,854,258,853,258,854,258,853,258,853,259,854,258,854,257,854,258,854,257,855,258,856,258,857,259,858,260,857,261,857,262,857,263,857,264,857,265,857,266,857,267,857,268,856,268,856,267,856,268,856,267,855,267,855,268,854,267,853,267,854,268,853,268,852,267,852,266,851,266,851,265,850,265,849,265,849,264,848,264,848,263,846,262,846,261,845,261,844,260,844,259,843,259,843,258,842,257,842,256,841,255,841,254,841,253,840,253,840,252,839,251,838,250,837,250,837,249,837,248,836,247,836,246,836,245,835,245,834,244,833,244,832,243,832,242,832,241,831,241,830,240,830,239,829,239,828,238,827,238,826,237,826,236,825,235,825,234 Indonesia, IDN, Asia 705,171,706,170,707,170,708,170,707,170,705,171 Iran, IRN, Asia 674,132,675,133,676,133,677,134,678,134,679,134,680,133,681,133,682,132,683,132,683,131,685,132,684,133,684,134,685,135,686,135,686,136,687,137,687,138,688,138,690,138,690,139,692,140,693,140,695,141,697,140,699,140,701,140,702,140,700,140,701,140,702,140,701,140,702,139,701,138,702,139,703,138,704,138,704,137,705,136,706,136,707,136,708,136,709,136,708,136,709,136,710,136,711,136,712,136,712,137,713,137,714,137,715,138,715,137,716,138,716,137,717,138,718,138,718,139,719,139,720,139,721,141,723,141,723,142,723,143,723,144,723,145,723,146,722,147,722,148,721,148,721,149,721,150,722,150,721,151,722,153,722,154,722,155,722,156,724,156,725,156,725,157,725,158,723,160,722,161,724,162,724,163,724,164,726,165,727,165,727,166,728,166,728,167,728,168,728,169,729,169,730,169,729,169,729,170,729,171,728,171,727,171,726,171,726,172,725,172,725,173,724,175,723,175,721,175,721,174,721,175,720,174,720,175,720,174,719,174,718,174,717,174,716,174,715,174,714,174,713,173,713,174,713,173,711,173,711,172,711,171,711,170,710,170,710,169,709,169,708,169,706,170,705,170,704,171,703,171,702,170,701,170,700,170,699,169,698,169,697,168,698,168,697,168,696,167,694,167,693,166,693,165,693,164,692,164,692,163,691,163,692,162,691,162,690,161,690,160,689,160,688,160,687,160,686,159,687,159,686,159,687,159,686,159,686,160,685,160,685,161,685,160,684,160,684,159,684,158,683,157,683,156,683,155,682,154,682,153,681,153,680,152,679,152,678,152,678,151,677,150,676,149,676,148,676,147,677,147,676,146,677,146,677,145,678,145,677,144,678,144,678,143,679,143,677,143,676,143,676,142,676,143,676,142,675,141,675,140,674,140,674,139,673,138,673,137,672,137,673,136,673,135,672,135,672,134,672,133,672,132,673,132,673,131,674,132 Iran, IRN, Asia 667,139,668,138,668,139,669,138,669,139,670,139,671,139,672,139,672,140,673,139,674,139,674,140,675,140,675,141,676,142,676,143,676,142,676,143,677,143,679,143,678,143,678,144,677,144,678,145,677,145,677,146,676,146,677,147,676,147,676,148,676,149,677,150,678,151,678,152,679,152,680,152,681,153,682,153,682,154,683,155,683,156,683,157,684,158,684,159,684,160,685,160,685,161,684,160,683,160,682,160,681,160,681,161,680,162,679,163,677,162,676,162,674,163,672,162,670,162,670,160,670,159,669,159,668,158,667,158,663,156,660,154,657,154,657,153,657,152,656,151,656,150,660,148,663,147,663,146,663,145,663,144,664,144,664,143,663,142,663,141,664,141,665,141,667,139 Iraq, IRQ, Asia 674,163,676,162,677,162,679,163,677,164,676,164,674,163 Iraq-Saudi Arabia Neutral Zone, Asia 518,85,519,85,520,85,521,85,522,85,522,86,522,87,522,86,523,86,523,87,523,88,523,87,522,87,523,87,522,87,523,87,523,88,522,88,521,88,521,89,520,88,520,89,521,89,521,90,521,91,522,92,521,93,520,93,520,94,521,94,520,94,519,94,518,94,517,94,517,95,516,95,515,95,514,95,515,95,514,95,514,96,513,96,512,96,511,96,510,96,511,96,510,96,511,95,509,96,510,95,511,95,510,95,509,95,508,95,509,95,510,94,509,94,508,94,509,94,510,94,510,93,511,93,510,93,511,93,512,93,513,93,513,92,512,93,511,93,510,93,511,92,511,91,512,91,513,91,512,91,511,91,511,90,511,91,511,90,510,90,510,91,510,90,509,90,510,90,510,89,511,89,510,89,510,88,509,88,510,88,512,88,513,88,514,88,514,87,515,87,514,87,513,87,513,86,514,86,515,86,514,86,515,86,514,86,514,85,515,85,516,85,517,85,517,86,517,85,518,85,517,84,518,84,519,85,518,85 Ireland, IRL, Europe 525,88,526,88,526,87,526,88,527,88,526,88,525,88 Isle of Man, XIM, Europe 645,151,646,151,647,151,646,151,646,152,646,153,645,153,644,154,645,155,644,155,645,155,645,156,644,156,645,156,646,156,646,157,646,158,645,158,645,159,645,160,644,162,644,161,644,160,643,159,643,158,642,157,643,157,643,156,643,155,644,155,644,154,644,153,644,152,645,152,645,151 Israel, ISR, Asia 585,141,584,140,583,140,582,139,581,139,580,139,579,138,578,138,577,137,577,136,578,136,579,136,580,136,581,137,582,136,583,136,584,136,585,136,586,136,585,137,585,138,585,139,586,139,585,140,585,141 Italy, ITA, Europe 566,134,565,134,565,133,565,134,565,133,565,132,565,131,565,130,565,129,564,129,564,128,565,128,566,127,567,127,568,127,568,128,569,128,569,129,568,130,569,130,569,131,568,132,568,133,567,133,567,134,566,134 Italy, ITA, Europe 571,110,572,110,573,110,574,110,574,109,575,110,576,109,576,110,577,110,578,111,580,111,581,111,580,111,580,112,580,113,581,113,581,114,580,113,579,113,579,114,578,114,577,114,576,114,576,115,577,115,577,116,576,116,576,117,577,118,578,119,579,119,580,120,581,121,581,122,582,123,583,124,584,124,586,125,587,125,588,125,587,126,588,126,589,127,590,127,591,128,592,128,593,128,593,129,594,129,595,129,595,130,595,131,594,131,593,131,594,130,593,130,592,130,591,129,590,129,590,130,589,130,589,131,589,132,590,132,591,132,591,133,591,134,590,134,589,134,589,135,588,136,588,137,587,137,586,136,587,136,587,135,587,134,588,134,588,133,588,132,587,132,587,131,586,130,586,131,585,130,584,130,584,129,584,128,583,129,582,129,583,129,583,128,582,128,581,127,580,127,579,127,578,126,577,126,577,125,576,125,575,124,574,124,574,123,573,123,572,122,571,122,571,121,570,120,570,119,570,118,569,118,568,118,567,117,567,118,566,117,565,118,564,118,564,119,563,119,562,119,563,118,561,118,560,118,560,117,561,116,560,116,560,115,559,115,560,115,561,115,561,114,560,114,560,113,561,113,562,113,563,113,563,112,564,112,565,111,565,112,566,112,566,113,567,113,566,113,567,113,567,112,567,111,568,111,568,112,569,112,569,111,569,112,570,112,570,111,571,111,571,110 Italy, ITA, Europe 577,119,577,119 Italy, ITA, Europe 520,218,520,219,520,218,521,218,521,219,521,220,522,220,522,219,523,219,523,220,524,220,525,220,525,221,526,221,526,222,527,222,527,221,528,221,530,221,531,221,531,222,531,223,532,223,531,223,532,223,532,224,532,226,531,226,531,227,530,229,530,230,530,231,530,232,530,233,531,233,531,234,531,235,530,235,530,234,530,235,528,235,527,235,528,235,528,234,528,235,527,235,526,235,525,235,526,235,527,235,528,235,527,235,525,235,524,235,525,235,524,235,523,235,524,235,523,235,522,235,520,236,519,237,518,237,517,237,517,236,517,235,517,234,517,233,516,233,516,232,515,232,515,231,514,231,514,230,515,229,514,229,514,228,515,228,515,226,516,226,515,226,515,225,516,225,517,225,516,225,516,224,516,223,516,222,515,222,515,221,515,220,516,220,516,219,517,219,517,220,518,220,519,220,519,219,520,219,519,219,520,218 Ivory Coast, CIV, Sub Saharan Africa 308,197,307,197,306,197,306,196,305,196,304,196,305,195,306,195,308,195,309,195,310,196,311,197,310,197,309,197,308,197 Jamaica, JAM, Caribbean 512,38,514,37,515,37,516,37,515,37,516,37,515,38,514,38,513,38,512,38 Jan Mayen, SJM, Europe 947,150,946,150,946,149,945,149,945,148,946,147,946,146,945,146,945,147,944,147,944,146,943,146,942,146,942,147,941,147,942,147,941,147,940,147,939,148,939,147,939,148,939,147,939,148,939,147,938,148,937,148,937,147,936,148,936,149,935,149,935,148,934,149,934,148,934,149,934,148,934,149,933,149,933,148,932,149,932,148,932,147,933,147,932,147,933,147,934,147,935,146,936,146,937,145,938,144,937,144,938,144,939,144,940,144,941,144,942,144,943,144,944,144,945,143,945,144,946,144,947,144,947,143,948,143,948,144,948,143,947,143,948,142,949,141,950,140,950,139,950,138,951,138,952,138,951,138,951,139,950,139,951,139,951,140,950,140,951,140,952,140,953,139,955,138,956,138,956,137,957,137,958,136,958,135,959,134,959,133,960,133,960,132,960,131,959,131,959,130,960,130,959,129,960,128,960,127,961,128,960,127,961,127,961,128,962,128,963,128,963,127,962,127,962,126,963,126,964,126,964,127,964,129,965,130,965,131,965,132,966,132,965,132,966,132,965,132,965,133,965,132,965,133,965,134,964,134,964,135,964,136,964,135,963,135,963,136,963,135,963,136,962,136,962,137,963,138,962,140,961,141,961,142,962,143,961,144,961,145,960,145,959,146,959,145,959,144,960,144,959,144,958,144,959,144,958,144,959,145,958,145,957,145,957,146,956,147,956,146,956,145,955,145,955,146,954,146,955,146,954,147,953,147,952,147,951,147,952,146,951,146,950,146,950,145,949,146,949,147,950,147,950,148,949,148,948,148,948,149,947,150 Japan, JPN, Asia 928,148,928,147,927,147,928,147,927,147,928,147,928,146,928,147,928,148 Japan, JPN, Asia 944,148,944,147,945,147,944,147,944,148 Japan, JPN, Asia 928,166,927,166,927,165,928,165,929,165,928,166 Japan, JPN, Asia 931,152,931,151,930,151,930,152,931,152,930,153,930,152,929,152,929,153,929,152,928,152,929,151,929,152,930,152,929,151,928,151,929,151,928,151,928,150,929,150,929,151,929,150,930,150,931,150,931,149,932,149,933,149,932,149,933,150,934,150,934,149,935,150,934,150,934,151,935,151,936,151,935,151,935,152,936,152,935,152,936,152,935,152,935,153,934,153,935,153,934,153,934,155,934,156,933,156,933,157,932,157,931,158,932,157,932,156,931,156,932,156,932,155,931,155,931,156,931,157,930,157,930,156,931,156,930,155,930,154,931,153,931,152 Japan, JPN, Asia 960,126,959,126,960,126,960,125,960,124,959,124,959,123,960,122,961,122,961,121,960,121,961,121,961,120,962,121,963,121,964,121,964,120,964,119,964,118,965,117,965,116,964,115,964,114,965,114,966,114,966,115,968,116,969,117,970,118,971,118,972,118,973,119,974,119,974,118,975,117,976,118,975,118,975,119,976,121,975,120,975,121,976,121,976,120,977,120,977,121,976,121,975,121,974,122,974,121,974,122,973,122,972,122,971,122,970,123,970,124,969,124,969,125,968,124,966,123,965,123,964,123,963,123,962,124,962,123,961,123,960,123,960,124,961,124,962,124,963,125,962,125,961,125,961,126,960,126 Japan, JPN, Asia 938,152,937,152,938,152,937,152,937,151,937,150,936,150,937,150,937,149,938,149,938,148,939,148,939,149,940,149,940,148,941,148,941,147,942,147,942,148,942,147,942,148,943,148,943,149,944,149,943,149,944,149,943,150,942,150,942,151,941,150,940,150,939,151,938,152,939,152,938,152 Japan, JPN, Asia 954,137,955,137,954,137,954,136,955,136,955,137,954,137 Japan, JPN, Asia 929,154,930,154,929,154,930,154,929,153,930,153,930,154,929,154 Japan, JPN, Asia 931,160,931,159,931,160 Japan, JPN, Asia 932,159,933,158,932,159 Japan, JPN, Asia 926,153,925,153,925,152,926,152,926,153 Japan, JPN, Asia 923,172,922,172,923,172,923,171,923,170,923,171,924,171,924,170,924,171,923,171,923,172 Japan, JPN, Asia 645,155,644,154,645,153,646,153,646,152,647,152,648,153,649,153,650,153,650,154,651,153,652,153,652,152,653,152,654,151,655,151,656,150,656,151,657,152,657,153,657,154,656,155,655,155,654,155,653,155,652,156,651,156,651,157,652,158,653,158,654,159,653,159,652,160,651,161,650,161,649,162,648,162,648,163,647,163,646,163,645,163,644,162,645,162,644,162,645,160,645,159,645,158,646,158,646,157,646,156,645,156,644,156,645,156,645,155,644,155,645,155 Jordan, JOR, Asia 723,118,723,117,723,118,722,117,722,118,716,114,715,114,707,115,707,127,707,126,707,127,706,127,706,126,705,126,704,125,704,124,703,124,702,124,701,123,700,124,699,124,698,124,697,125,697,124,697,123,698,123,697,123,697,122,698,123,698,122,697,122,696,122,695,122,695,121,694,121,693,121,693,120,693,119,692,119,692,118,691,118,690,117,692,117,693,117,694,117,693,117,692,116,693,115,694,114,694,115,694,114,695,114,697,114,698,115,699,114,698,114,699,113,699,112,699,111,698,111,699,111,699,110,698,110,697,110,696,110,695,110,695,109,694,109,694,110,694,109,693,109,692,109,692,110,691,110,690,110,689,111,688,111,687,111,688,111,687,111,688,111,687,111,686,111,685,111,685,110,686,110,687,110,686,109,685,108,684,108,684,107,683,107,682,107,681,107,681,106,679,105,680,104,680,103,681,103,680,103,680,102,680,101,681,101,681,100,682,100,681,100,682,100,681,100,682,100,682,99,683,99,683,100,684,100,684,101,685,101,686,101,686,100,686,99,685,99,686,99,687,98,688,98,688,97,689,97,690,97,691,97,691,96,692,96,692,95,693,95,693,96,694,96,693,96,694,96,695,96,695,95,696,96,696,95,697,95,697,96,698,96,699,96,700,96,700,97,701,97,702,97,702,98,703,98,703,99,704,99,703,98,704,98,703,98,704,98,703,98,703,97,704,97,704,98,705,98,706,99,706,98,706,99,707,99,708,98,709,98,709,97,709,98,710,98,710,97,711,97,712,98,713,98,713,97,714,97,715,97,715,98,716,98,717,98,717,99,718,99,719,99,719,98,720,98,722,99,724,98,724,97,725,97,724,97,724,96,723,96,722,96,721,96,721,95,720,95,720,94,720,95,721,94,722,94,723,93,722,93,722,92,723,92,722,92,723,92,723,91,723,92,724,92,724,91,724,92,725,92,726,92,726,91,725,91,724,91,723,91,723,90,724,90,723,90,722,90,723,90,723,89,722,89,723,89,723,88,724,88,724,89,724,88,725,89,725,88,725,89,726,89,726,88,727,88,727,89,727,88,728,88,729,88,730,88,731,88,732,88,731,88,732,88,732,87,733,87,734,87,735,87,735,88,735,87,736,87,737,87,737,86,737,87,738,87,739,86,740,86,741,86,742,86,743,86,744,86,744,85,745,85,746,85,746,84,746,85,747,85,747,84,746,84,747,84,747,85,748,84,749,84,749,85,750,85,751,85,752,85,752,86,753,86,753,87,753,88,753,87,752,87,752,88,753,88,754,88,755,88,756,88,756,87,756,88,757,88,756,88,757,88,757,89,758,89,758,88,757,88,758,88,759,88,759,89,760,89,760,88,761,88,761,89,760,89,759,89,759,90,760,90,761,90,762,90,763,90,763,89,764,89,765,89,766,89,766,88,767,88,768,88,768,87,769,88,769,87,770,87,770,88,769,88,769,89,772,90,773,90,773,91,774,91,775,92,775,93,776,94,778,95,778,96,779,98,780,98,781,98,781,97,782,97,783,97,783,98,784,98,785,98,786,98,787,98,788,98,789,98,789,97,790,97,790,98,791,98,792,99,792,100,793,100,794,100,795,100,794,101,795,101,795,102,796,102,797,102,798,102,799,102,799,101,800,101,800,102,799,102,800,102,801,103,802,103,801,103,800,103,800,104,799,105,798,105,797,105,796,107,796,108,797,108,797,109,796,109,795,109,794,110,793,110,792,110,790,109,789,109,789,110,788,110,788,111,787,112,787,113,786,114,787,114,787,115,786,115,785,115,785,114,784,115,782,115,780,115,779,116,780,116,781,116,781,117,781,118,781,119,782,120,782,121,781,121,781,122,780,122,780,123,780,124,780,123,779,123,778,123,777,123,777,122,776,122,775,122,774,122,773,122,772,122,771,122,770,122,769,122,768,122,767,122,766,122,765,122,764,122,763,121,762,121,761,121,760,121,760,122,760,123,759,123,758,123,757,122,756,122,755,122,754,122,753,122,753,123,752,123,752,124,751,124,750,124,750,125,749,125,748,125,748,126,747,126,747,127,746,127,746,128,745,128,745,129,744,128,744,127,743,127,742,127,741,127,740,127,739,125,739,124,738,124,738,123,738,122,737,122,736,121,735,120,734,119,733,120,731,120,729,120,726,120,723,118 Kazakhstan, KAZ, Asia 642,254,641,254,641,252,641,251,641,250,642,250,642,249,642,248,643,248,643,247,644,247,644,246,645,245,644,245,645,245,644,245,644,244,644,243,644,242,643,242,643,241,643,240,643,239,642,239,642,238,641,238,643,237,645,237,646,237,647,237,648,237,649,237,650,237,653,239,654,240,655,240,656,240,657,240,658,240,659,239,661,238,662,238,663,239,665,239,664,241,662,242,662,251,663,253,664,255,664,256,663,256,663,257,662,257,662,256,663,256,662,256,662,257,662,256,662,257,662,258,661,258,660,258,660,259,660,260,659,261,659,260,659,261,659,262,659,263,658,262,658,263,659,263,658,264,657,264,657,265,657,264,653,261,652,261,653,260,652,260,648,257,647,256,644,255,642,254 Kenya, KEN, Sub Saharan Africa 746,400,746,399,746,398,746,397,747,396,747,397,746,397,747,397,746,397,747,397,746,398,747,398,748,398,748,397,748,398,747,398,748,398,749,398,750,398,751,398,751,399,750,399,751,399,750,399,749,399,750,399,751,399,750,399,750,400,749,400,749,399,748,399,749,399,748,400,748,399,747,399,747,400,746,400 Kerguelen, Antarctica 68,245,67,245,67,244,68,245,67,245,68,245 Kiribati, KIR, Asia 925,135,924,135,924,136,923,136,921,136,920,136,920,137,919,137,918,137,917,137,916,136,917,137,916,137,915,137,915,136,914,136,913,136,914,136,914,135,915,135,914,135,915,135,915,134,916,134,915,134,915,133,916,133,916,132,914,132,914,131,914,132,913,132,913,131,912,131,913,131,913,130,914,129,915,129,916,129,916,128,917,128,916,128,917,128,918,128,919,126,920,125,921,125,921,126,922,126,923,126,924,126,924,125,924,124,925,124,926,124,927,124,928,123,929,123,929,122,930,122,931,123,931,124,932,124,931,124,930,124,929,125,928,126,929,126,929,127,929,128,928,128,927,128,927,129,926,129,926,130,925,130,926,130,925,130,924,130,923,130,923,131,922,131,922,132,922,133,922,132,922,133,923,133,924,134,925,134,925,135 Korea, Peoples Republic of, PRK, Asia 925,146,926,145,926,146,925,146 Korea, Republic of, KOR, Asia 918,151,918,150,920,150,920,151,919,151,918,151 Korea, Republic of, KOR, Asia 920,137,920,136,921,136,923,136,924,136,924,135,925,135,926,136,927,137,927,138,927,139,928,139,928,140,928,141,928,142,928,143,928,142,928,143,928,144,927,145,926,145,925,145,925,146,924,146,925,146,924,146,924,145,924,146,923,146,922,146,923,146,922,146,922,147,922,146,922,147,921,147,921,146,921,147,922,146,921,146,921,147,920,147,919,147,919,148,919,147,918,147,918,146,919,147,919,146,919,147,919,146,918,146,919,146,919,145,918,145,919,145,918,145,919,144,920,144,919,144,920,143,919,143,920,143,920,142,919,142,919,141,919,140,919,141,919,140,918,140,919,141,918,141,918,140,919,140,918,140,919,140,919,139,919,140,919,139,919,140,920,140,921,140,920,140,920,139,920,138,919,138,920,138,919,138,919,137,920,138,920,137 Korea, Republic of, KOR, Asia 684,162,684,161,685,161,684,162 Kuwait, KWT, Asia 679,163,680,162,681,161,681,160,682,160,683,160,684,161,684,162,683,162,683,163,683,162,684,162,684,163,684,164,685,164,685,165,683,165,682,164,680,163,679,163 Kuwait, KWT, Asia 752,124,752,123,753,123,753,122,754,122,755,122,756,122,757,122,758,123,759,123,760,123,760,122,760,121,761,121,762,121,763,121,764,122,765,122,766,122,767,122,768,122,769,122,770,122,771,122,772,122,773,122,774,122,775,122,776,122,777,122,777,123,778,123,779,123,780,123,780,124,779,124,779,125,778,125,777,125,776,126,775,126,775,127,774,127,772,128,771,127,770,127,770,128,769,128,769,129,768,129,767,130,766,129,767,129,766,129,765,129,764,129,764,130,764,129,763,130,762,130,761,130,761,131,761,132,760,132,759,132,758,132,757,132,756,133,756,132,755,132,755,133,755,132,754,132,753,132,752,132,751,132,750,132,749,132,748,132,747,132,747,131,748,131,748,130,750,130,751,130,751,131,751,130,752,130,753,130,754,130,755,130,756,130,755,130,756,129,757,129,758,129,758,128,759,128,758,128,757,128,757,127,756,127,755,127,755,126,754,126,754,127,754,126,754,127,753,127,752,127,752,126,751,126,750,126,751,125,752,125,752,124,753,124,752,124 Kyrgyzstan, KGZ, Asia 843,186,843,187,844,187,845,187,845,186,845,185,844,184,845,183,846,183,846,184,847,184,847,185,848,186,848,185,848,186,848,187,849,187,849,188,850,188,851,189,851,188,852,188,853,188,853,189,854,189,854,190,854,191,853,191,853,192,853,191,852,192,852,191,852,192,852,191,852,192,851,192,851,193,852,193,853,194,854,194,855,194,855,195,855,196,856,196,856,197,857,197,857,198,858,198,858,199,859,199,859,200,859,201,860,201,860,202,861,202,862,202,862,203,861,203,861,204,862,204,863,205,862,205,862,206,862,207,861,207,860,207,860,208,860,207,859,207,858,207,857,207,858,208,858,209,857,209,857,208,856,208,855,208,855,207,856,207,856,206,856,205,856,204,856,203,856,202,855,202,854,202,854,201,854,200,854,199,854,198,853,198,853,197,852,197,852,196,851,196,851,195,850,195,849,195,849,196,849,197,848,196,848,197,847,197,846,196,845,196,845,197,844,197,843,198,842,198,842,197,843,197,843,196,843,195,843,194,844,193,843,193,843,192,842,192,841,192,841,191,841,190,841,189,840,189,840,190,840,189,841,188,841,187,842,187,843,186 Laos, LAO, Asia 612,77,613,77,614,77,614,76,614,77,614,76,615,76,615,77,615,76,616,76,616,77,617,77,618,77,618,78,619,78,620,78,621,78,622,78,623,79,623,80,622,80,623,80,624,80,624,81,624,82,623,82,623,83,622,83,621,83,620,83,619,83,618,83,617,82,616,82,615,82,614,81,613,81,613,82,612,82,611,82,611,81,610,81,609,81,609,82,608,81,607,81,606,81,605,82,604,82,603,82,602,82,603,81,602,81,603,80,604,80,604,79,604,78,605,78,607,77,607,78,608,78,609,78,609,79,610,80,611,80,613,79,613,78,612,77 Latvia, LVA, Europe 647,147,648,147,648,146,649,146,649,147,649,148,648,149,649,149,648,149,647,149,647,150,648,150,647,150,646,151,645,151,645,150,646,150,646,149,646,148,647,147 Lebanon, LBN, Asia 621,339,622,339,622,338,623,337,624,337,625,336,626,336,626,337,627,337,627,338,628,339,627,339,627,340,626,341,625,341,624,341,624,342,623,342,622,342,622,341,621,341,621,339 Lesotho, LSO, Sub Saharan Africa 509,225,510,225,511,225,511,226,511,227,511,228,512,228,512,229,513,229,513,228,513,227,514,227,514,228,514,229,515,229,514,230,514,231,515,231,515,232,516,232,516,233,517,233,517,234,517,235,517,236,517,237,516,237,515,237,514,236,513,236,511,235,511,234,510,233,509,233,508,232,507,232,507,231,506,230,505,230,505,229,506,229,506,228,507,228,507,227,508,227,508,226,509,226,509,225 Liberia, LBR, Sub Saharan Africa 568,160,569,159,570,158,570,156,570,155,571,155,572,154,574,153,574,151,575,151,576,152,577,152,579,152,580,152,581,152,582,152,583,153,585,153,586,154,586,155,586,156,587,156,588,157,590,157,591,157,592,157,593,158,594,158,595,159,596,160,597,160,598,160,599,159,600,158,600,157,599,156,599,155,600,154,601,153,602,152,604,152,605,152,606,152,607,152,609,153,609,154,611,154,613,155,613,154,614,155,615,155,615,156,614,156,614,157,615,158,614,159,614,160,614,161,614,162,614,163,615,167,614,171,614,175,614,179,615,183,615,184,615,189,615,191,613,191,612,190,611,192,604,188,595,183,588,180,585,181,582,183,580,181,575,180,574,178,572,177,571,177,570,177,570,176,570,174,568,172,568,171,569,171,569,170,569,169,569,168,569,167,569,166,569,164,569,162,568,161,567,160,568,160 Libya, LBY, NorthAfrica 568,109,568,109 Liechtenstein, LIE, Europe 608,87,606,87,604,88,601,87,599,87,600,87,601,86,600,86,600,87,600,86,599,86,599,87,598,87,599,87,599,86,601,86,602,85,603,84,603,83,603,84,602,85,601,86,602,86,603,86,603,85,603,84,603,83,603,82,604,82,605,82,606,81,607,81,608,81,609,82,609,81,610,81,611,81,611,82,612,82,613,82,613,81,614,81,615,82,616,82,617,82,618,83,619,83,619,84,619,85,620,85,619,85,618,85,618,86,617,86,617,87,616,87,616,88,617,88,616,88,615,88,614,88,614,89,614,88,613,89,612,89,611,89,610,89,610,88,609,88,609,87,608,87 Lithuania, LTU, Europe 557,102,557,101,557,100,558,100,558,101,559,101,559,102,558,102,557,102 Luxembourg, LUX, Europe 880,184,880,184 Macau, MAC, Asia 601,125,602,125,602,124,603,124,604,124,605,124,606,124,606,123,607,124,608,124,608,125,609,125,608,126,608,127,607,127,606,127,605,127,605,128,604,128,603,128,602,128,602,127,601,127,601,126,601,125 Macedonia, MKD, Europe 681,295,682,294,682,295,682,296,682,295,683,294,683,295,683,294,683,295,684,295,684,294,683,294,683,293,684,293,683,293,684,293,683,293,684,292,683,292,683,291,684,291,684,292,685,292,685,291,686,291,686,290,686,289,686,288,687,287,687,286,688,287,687,287,688,287,688,288,688,289,689,289,689,290,689,291,690,291,690,294,690,295,691,296,691,297,690,298,689,297,688,297,689,298,689,299,689,300,689,301,688,301,688,302,688,304,688,306,687,308,686,310,685,312,685,313,685,314,684,316,683,318,682,321,682,322,682,323,681,323,681,324,681,325,680,326,679,326,677,326,676,327,675,327,674,327,674,326,673,326,672,326,673,326,672,326,671,324,670,323,670,322,670,321,671,321,670,320,670,319,669,318,669,317,669,316,670,316,670,315,670,314,671,314,671,313,672,313,672,312,672,311,673,310,673,309,672,308,672,307,672,306,672,304,671,303,672,302,673,301,673,300,673,299,674,299,675,298,675,299,676,299,676,298,676,299,676,298,677,298,678,298,679,298,678,298,679,298,678,298,678,297,679,297,680,296,681,297,680,297,681,297,681,296,681,295,682,295,681,295 Madagascar, MDG, Sub Saharan Africa 641,280,641,279,642,279,643,280,643,281,643,282,644,283,643,284,644,284,644,285,643,285,643,286,643,287,643,288,643,289,643,291,644,291,645,292,647,294,647,295,647,296,647,297,647,299,646,299,645,299,645,300,645,301,645,302,645,301,644,301,644,300,643,300,643,299,642,298,643,298,643,297,643,296,643,295,643,294,642,294,641,294,640,294,639,293,639,292,639,293,638,292,638,291,639,290,638,290,639,289,638,289,639,288,640,288,640,287,640,288,640,287,639,287,639,286,639,285,640,284,639,283,640,283,641,282,640,282,640,281,639,281,640,280,639,280,639,279,638,279,639,279,640,279,641,279,641,280 Malawi, MWI, Sub Saharan Africa 891,229,891,228,891,229 Malaysia, MYS, Asia 839,232,838,231,839,231,839,232 Malaysia, MYS, Asia 840,231,840,230,841,231,842,231,842,232,843,232,843,233,842,233,843,233,843,234,843,233,844,233,845,233,846,232,847,232,847,233,849,234,849,235,850,236,850,238,850,239,850,240,850,242,850,243,851,243,851,244,852,244,852,245,852,246,851,246,852,246,851,246,850,246,850,247,850,246,849,246,848,245,847,244,846,244,845,243,844,242,843,242,844,242,844,241,843,241,843,240,842,239,842,238,841,238,841,237,841,236,841,237,841,236,841,235,841,234,841,233,840,232,840,231 Malaysia, MYS, Asia 885,236,885,237,886,238,885,237,885,236,886,236,886,235,886,234,887,234,887,233,888,233,888,232,888,231,889,230,890,230,890,229,890,230,890,231,891,230,891,231,892,231,893,231,893,232,892,232,893,232,893,233,892,233,893,233,894,232,894,233,893,233,894,233,895,233,895,234,896,234,897,234,897,235,896,235,895,236,895,235,894,236,895,237,893,238,892,237,892,238,891,237,890,238,890,237,890,238,889,237,889,238,889,237,888,237,888,238,887,237,887,238,886,239,886,240,886,241,885,242,885,241,885,242,885,243,884,243,884,244,884,245,883,246,882,246,881,246,881,247,880,247,879,246,878,246,879,246,877,246,876,246,876,247,875,247,875,248,874,247,874,248,874,247,873,247,872,247,872,248,871,248,870,247,869,246,869,245,868,245,868,244,868,245,869,245,870,245,871,245,871,246,872,246,873,246,873,247,874,246,873,246,873,245,873,246,873,245,873,244,874,244,873,244,873,243,874,243,874,242,875,242,876,242,878,241,879,241,879,240,880,239,881,239,881,238,881,237,882,237,882,238,883,238,884,238,884,237,884,236,885,236 Malaysia, MYS, Asia 760,233,760,233 Maldives, MDV, Pacific 760,238,760,238 Maldives, MDV, Pacific 758,233,758,233 Maldives, MDV, Pacific 760,237,760,237 Maldives, MDV, Pacific 760,235,760,235 Maldives, MDV, Pacific 758,240,758,240 Maldives, MDV, Pacific 760,233,760,233 Maldives, MDV, Pacific 760,233,760,233 Maldives, MDV, Pacific 758,233,758,233 Maldives, MDV, Pacific 758,238,758,238 Maldives, MDV, Pacific 760,234,760,234 Maldives, MDV, Pacific 759,235,759,235 Maldives, MDV, Pacific 759,232,759,232 Maldives, MDV, Pacific 759,232,759,232 Maldives, MDV, Pacific 759,232,759,232 Maldives, MDV, Pacific 759,232,759,232 Maldives, MDV, Pacific 759,232,759,232 Maldives, MDV, Pacific 759,232,759,232 Maldives, MDV, Pacific 759,231,759,231 Maldives, MDV, Pacific 758,231,758,231 Maldives, MDV, Pacific 759,231,759,231 Maldives, MDV, Pacific 760,238,760,238 Maldives, MDV, Pacific 759,231,759,231 Maldives, MDV, Pacific 759,231,759,230,759,231 Maldives, MDV, Pacific 760,238,760,238 Maldives, MDV, Pacific 759,230,759,230 Maldives, MDV, Pacific 758,242,758,242 Maldives, MDV, Pacific 759,230,759,230 Maldives, MDV, Pacific 759,230,759,230 Maldives, MDV, Pacific 758,230,758,230 Maldives, MDV, Pacific 759,230,759,230 Maldives, MDV, Pacific 759,230,759,230 Maldives, MDV, Pacific 758,239,758,238,758,239 Maldives, MDV, Pacific 758,229,758,229 Maldives, MDV, Pacific 758,229,758,229 Maldives, MDV, Pacific 758,233,758,233 Maldives, MDV, Pacific 760,233,760,233 Maldives, MDV, Pacific 760,239,760,239 Maldives, MDV, Pacific 759,243,759,243 Maldives, MDV, Pacific 760,238,760,238 Maldives, MDV, Pacific 760,239,760,239 Maldives, MDV, Pacific 760,239,760,239 Maldives, MDV, Pacific 760,243,760,243 Maldives, MDV, Pacific 760,243,760,243 Maldives, MDV, Pacific 760,239,760,239 Maldives, MDV, Pacific 758,240,758,240 Maldives, MDV, Pacific 758,233,758,233 Maldives, MDV, Pacific 758,244,758,244 Maldives, MDV, Pacific 758,244,758,244 Maldives, MDV, Pacific 759,244,759,244 Maldives, MDV, Pacific 758,242,758,242 Maldives, MDV, Pacific 758,233,758,233 Maldives, MDV, Pacific 761,240,761,240 Maldives, MDV, Pacific 760,240,760,240 Maldives, MDV, Pacific 759,244,759,244 Maldives, MDV, Pacific 759,245,759,245 Maldives, MDV, Pacific 759,253,759,253 Maldives, MDV, Pacific 760,241,760,241 Maldives, MDV, Pacific 759,253,759,253 Maldives, MDV, Pacific 759,253,759,252,759,253 Maldives, MDV, Pacific 760,242,760,242 Maldives, MDV, Pacific 760,244,760,244 Maldives, MDV, Pacific 760,244,760,244 Maldives, MDV, Pacific 760,244,760,244 Maldives, MDV, Pacific 760,245,760,245 Maldives, MDV, Pacific 760,244,760,244 Maldives, MDV, Pacific 760,242,760,242 Maldives, MDV, Pacific 759,245,759,245 Maldives, MDV, Pacific 760,245,760,245 Maldives, MDV, Pacific 758,249,758,249 Maldives, MDV, Pacific 760,249,760,249 Maldives, MDV, Pacific 759,252,759,252 Maldives, MDV, Pacific 760,245,760,245 Maldives, MDV, Pacific 758,239,758,239 Maldives, MDV, Pacific 758,250,758,250 Maldives, MDV, Pacific 760,245,760,245 Maldives, MDV, Pacific 759,245,759,245 Maldives, MDV, Pacific 760,245,760,245 Maldives, MDV, Pacific 759,250,759,250 Maldives, MDV, Pacific 759,252,759,252 Maldives, MDV, Pacific 759,252,759,252 Maldives, MDV, Pacific 758,241,758,241 Maldives, MDV, Pacific 760,242,760,242 Maldives, MDV, Pacific 760,251,760,251 Maldives, MDV, Pacific 760,249,760,249 Maldives, MDV, Pacific 760,242,760,242 Maldives, MDV, Pacific 758,249,758,249 Maldives, MDV, Pacific 760,250,760,250 Maldives, MDV, Pacific 759,242,759,242 Maldives, MDV, Pacific 759,248,759,248 Maldives, MDV, Pacific 759,248,759,248 Maldives, MDV, Pacific 760,242,760,242 Maldives, MDV, Pacific 760,248,760,248 Maldives, MDV, Pacific 760,242,760,242 Maldives, MDV, Pacific 759,250,759,250 Maldives, MDV, Pacific 759,250,759,250 Maldives, MDV, Pacific 761,237,761,237 Maldives, MDV, Pacific 758,240,758,240 Maldives, MDV, Pacific 760,236,760,236 Maldives, MDV, Pacific 759,235,759,235 Maldives, MDV, Pacific 761,237,761,237 Maldives, MDV, Pacific 760,235,760,235 Maldives, MDV, Pacific 760,237,760,237 Maldives, MDV, Pacific 759,235,759,235 Maldives, MDV, Pacific 758,236,758,236 Maldives, MDV, Pacific 759,242,759,242 Maldives, MDV, Pacific 760,237,760,237 Maldives, MDV, Pacific 759,234,760,234,759,234 Maldives, MDV, Pacific 760,237,760,237 Maldives, MDV, Pacific 760,234,760,234 Maldives, MDV, Pacific 760,234,760,234 Maldives, MDV, Pacific 520,176,525,175,530,179,535,182,539,185,543,187,543,188,544,189,545,190,546,190,547,190,548,191,549,191,549,192,549,193,549,194,552,193,552,195,552,200,552,201,552,202,551,202,552,203,551,203,551,204,550,204,549,204,543,205,542,206,541,205,541,206,540,205,540,206,539,205,538,205,537,205,536,206,534,207,533,208,532,208,531,208,531,209,531,210,530,210,530,209,530,211,529,211,528,210,527,210,527,211,526,211,527,212,526,212,526,213,526,214,526,213,526,214,525,214,524,215,523,215,524,215,524,216,524,217,523,217,523,218,523,219,522,219,522,220,521,220,521,219,521,218,520,218,520,219,520,218,519,219,520,219,519,219,519,220,518,220,517,220,517,219,516,219,516,220,516,219,515,219,515,217,514,217,514,218,513,218,514,217,514,216,513,216,513,214,513,213,512,213,511,213,512,213,511,214,510,214,509,214,508,214,508,215,507,214,506,214,506,215,505,214,505,213,505,212,505,211,505,210,504,210,504,211,504,210,503,210,503,209,504,209,503,208,504,208,503,208,503,207,503,206,504,206,504,205,504,204,505,204,506,204,507,205,507,204,509,204,510,204,511,204,511,203,512,204,511,204,517,204,522,204,523,204,523,202,523,201,522,196,522,191,521,186,520,181,520,176 Mali, MLI, Sub Saharan Africa 582,142,583,142,582,142 Malta, MLT, Pacific 583,143,582,143,583,143,582,143,583,143 Malta, MLT, Pacific 357,207,356,207,357,207,356,207,356,206,357,206,357,207 Martinique, MTQ, Caribbean 513,172,513,169,519,172,524,175,525,175,520,176,520,181,521,186,522,191,522,196,523,201,523,202,523,204,522,204,517,204,511,204,512,204,511,203,511,204,510,204,509,204,507,204,507,205,506,204,505,204,504,204,504,205,504,206,503,206,502,206,502,205,501,205,501,204,500,204,499,202,498,202,497,201,496,201,495,201,495,200,494,201,494,200,494,201,493,201,492,201,491,201,490,202,490,200,491,199,491,198,491,197,491,195,491,194,491,193,490,193,490,192,491,192,490,192,491,191,491,190,490,188,490,189,489,188,489,187,488,187,489,188,488,188,489,186,494,186,499,186,501,186,500,183,500,182,501,181,502,181,503,180,503,173,513,173,513,172 Mauritania, MRT, Sub Saharan Africa 712,312,711,312,712,312,712,311,713,311,713,312,712,312 Mauritius, MUS, Sub Saharan Africa 200,163,199,163,199,162,199,163,200,163 Mexico, MEX, Latin America 279,190,278,190,278,189,279,189,279,190 Mexico, MEX, Latin America 194,166,193,166,194,166,194,165,194,166 Mexico, MEX, Latin America 202,164,202,163,203,163,203,164,202,164 Mexico, MEX, Latin America 188,153,194,152,195,152,195,153,201,155,206,157,215,157,215,155,220,155,221,156,222,157,223,158,224,158,225,159,225,160,225,161,226,162,228,163,229,163,230,164,230,163,231,163,231,162,231,161,232,161,233,161,234,161,235,161,235,162,236,162,237,163,238,164,238,165,239,165,239,166,240,167,240,168,241,168,241,169,241,170,242,170,242,171,243,171,244,172,245,172,246,172,247,172,247,173,248,173,248,174,247,175,247,177,246,179,246,181,246,182,246,183,246,182,246,183,246,185,247,185,247,186,248,186,247,187,247,186,247,185,246,184,247,186,248,188,248,189,249,190,250,191,251,192,251,193,252,193,252,194,253,194,253,195,253,194,252,194,253,194,254,194,254,195,255,195,256,196,258,196,259,195,260,195,261,195,263,194,264,194,264,195,263,195,264,195,265,195,266,195,266,194,265,194,267,193,267,192,267,191,268,191,268,190,268,189,268,188,268,187,269,187,271,187,273,186,274,186,275,186,276,186,277,186,278,186,277,186,278,186,279,186,279,187,279,188,278,189,277,190,277,191,276,191,276,192,277,192,276,193,277,193,277,194,276,194,276,195,276,196,276,195,275,195,275,194,275,195,274,195,274,196,273,196,273,197,272,196,272,197,271,197,270,197,269,197,268,197,267,197,267,198,267,199,266,199,265,199,266,199,266,200,267,200,268,201,268,202,267,202,266,202,265,202,264,202,264,203,263,204,263,205,263,206,263,207,262,206,261,205,260,204,259,203,258,202,257,202,256,202,257,202,258,202,257,202,256,202,255,202,256,202,256,201,255,202,255,201,254,202,255,202,254,202,253,203,252,203,251,203,250,204,248,203,246,203,246,202,245,202,244,202,243,201,241,200,240,200,238,199,236,199,236,198,235,198,234,197,233,197,231,196,230,196,229,196,229,195,228,195,228,194,227,193,226,193,225,193,224,192,224,191,223,191,223,190,222,189,223,189,224,189,224,188,223,188,224,187,224,186,223,186,223,184,222,183,222,182,221,182,220,181,220,180,219,179,218,178,216,177,217,177,216,177,215,176,216,176,215,176,215,175,215,176,215,175,215,176,215,175,214,175,214,174,213,174,214,174,213,174,212,174,213,174,213,173,212,174,212,173,212,174,211,174,211,173,212,174,212,173,211,173,211,172,212,172,212,171,212,172,212,171,212,172,212,171,211,170,210,170,210,169,209,169,208,169,208,168,208,167,207,167,206,167,205,166,205,165,204,165,204,164,203,163,202,163,202,162,202,161,201,161,201,160,201,159,200,158,200,157,200,158,200,157,199,156,198,156,197,156,196,155,195,155,194,155,195,155,195,156,195,157,195,158,195,159,196,159,196,160,196,161,197,161,198,162,199,163,199,164,200,164,200,165,201,165,201,166,201,167,202,168,203,169,204,169,203,169,204,170,204,171,204,170,205,170,205,171,205,172,206,172,205,173,206,174,207,175,207,176,207,177,208,178,209,178,208,178,209,178,209,177,209,178,210,178,210,179,210,180,211,180,211,181,210,182,209,182,209,181,208,180,208,179,207,178,206,178,205,177,204,177,204,176,203,176,203,175,203,176,203,175,203,174,203,173,203,172,202,172,201,172,200,171,200,170,199,170,198,170,198,169,198,170,197,169,196,169,196,168,195,168,195,167,194,167,195,167,196,167,197,167,198,167,197,167,197,166,197,165,197,164,196,164,195,163,195,162,194,162,193,162,192,161,192,160,192,159,191,159,191,158,191,157,190,156,189,156,190,156,189,155,190,155,189,155,189,154,188,154,188,153 Mexico, MEX, Latin America 619,106,620,106,620,105,620,106,620,105,621,105,622,105,623,105,623,106,624,106,625,106,624,106,625,106,626,106,626,107,627,107,627,108,628,108,628,109,628,108,628,109,628,110,629,110,629,111,630,111,629,111,628,111,629,111,628,111,627,111,626,111,626,112,627,112,626,112,626,113,625,113,625,114,624,114,624,113,624,112,624,111,624,110,623,109,622,108,621,108,621,107,621,106,620,106,619,106 Moldova, MDA, Europe 562,119,562,119 Monaco, MCO, Europe 836,94,837,94,838,95,839,95,840,95,842,95,844,96,846,96,846,97,846,98,847,98,846,99,847,99,849,100,850,100,851,100,852,100,853,100,854,99,855,99,857,99,858,99,858,100,859,99,860,100,861,100,863,101,865,102,868,103,870,103,871,103,872,103,874,102,876,102,877,102,878,102,879,102,879,101,880,100,882,100,883,100,884,100,885,100,886,101,887,101,888,100,889,101,890,101,888,104,887,105,887,106,886,106,886,107,887,107,888,107,889,107,890,107,891,107,892,108,892,107,893,107,893,106,895,107,896,107,897,108,898,108,897,108,898,109,899,109,899,110,899,111,898,111,897,110,896,110,895,110,894,110,893,111,892,111,891,111,890,111,889,112,888,113,887,114,884,114,883,114,883,115,882,116,881,116,880,116,879,116,877,116,877,115,875,115,874,116,874,117,874,118,875,119,874,120,872,121,871,122,870,122,870,123,869,123,868,123,867,123,866,123,865,123,862,123,861,123,861,124,860,124,858,124,856,125,855,125,855,126,854,126,853,126,853,125,852,125,851,125,850,125,848,124,847,124,846,124,845,123,842,122,840,122,840,123,838,123,835,123,831,122,829,122,827,121,827,120,826,119,826,118,825,118,824,117,823,117,822,117,822,116,820,116,819,115,817,115,816,115,815,115,814,115,813,115,812,115,812,114,812,113,813,112,812,112,813,111,813,110,812,110,811,109,811,108,811,107,810,107,809,107,808,106,807,107,806,106,805,106,805,105,803,105,804,105,804,104,803,104,803,103,804,103,804,102,805,102,806,102,807,102,808,102,809,101,808,101,809,101,810,101,810,100,812,100,812,99,813,99,814,99,815,98,816,98,817,98,818,98,818,99,819,99,820,99,821,99,822,99,823,100,824,100,825,101,826,101,827,100,827,101,828,100,828,101,829,101,830,101,831,101,832,101,833,101,834,100,834,99,833,98,834,98,833,98,833,97,834,96,834,95,835,95,836,95,836,94 Mongolia, MNG, Asia 533,145,534,146,534,147,535,148,534,149,535,150,535,151,535,152,536,153,536,154,535,154,533,154,531,154,531,155,529,155,528,155,528,156,528,157,529,157,529,158,527,158,526,159,525,159,524,160,523,161,521,161,520,161,520,162,518,162,517,162,515,163,514,164,513,164,513,167,510,168,500,168,500,167,501,167,503,166,505,166,505,165,506,164,508,164,509,163,509,162,510,161,511,160,511,159,510,159,510,158,510,156,510,155,511,154,512,154,512,153,513,152,514,151,515,150,517,150,517,149,518,149,519,149,519,148,520,146,521,145,522,143,523,143,524,144,525,145,526,145,528,145,529,145,530,145,531,144,531,145,532,145,533,145 Morocco, MAR, NorthAfrica 644,285,646,285,647,285,648,285,648,286,649,286,650,286,650,285,651,285,651,286,652,286,653,285,653,284,654,284,655,285,656,284,657,284,658,283,659,283,660,283,660,282,661,282,661,283,661,284,661,285,661,286,661,287,661,288,661,289,661,290,661,289,661,290,661,291,661,292,661,293,662,293,662,294,661,294,662,294,662,295,661,295,662,295,661,295,662,296,661,296,662,296,661,297,661,298,660,299,659,299,659,300,657,301,656,302,655,302,654,302,653,303,652,303,651,304,650,305,650,304,650,305,649,306,649,307,648,307,647,308,646,309,645,309,644,310,643,309,644,310,644,311,643,311,644,311,644,312,643,312,644,312,643,312,644,312,644,313,645,313,645,314,645,315,646,317,645,318,646,318,646,317,646,318,646,319,646,320,646,321,646,322,646,323,645,324,643,325,641,326,640,326,639,326,639,327,638,327,638,328,637,328,637,329,638,329,638,331,636,331,636,330,636,329,635,328,636,327,635,327,636,326,636,324,635,323,635,322,635,321,634,321,634,320,633,318,634,318,637,314,637,315,637,314,637,313,637,312,638,311,639,311,639,310,638,310,638,309,638,310,638,309,638,308,638,307,638,306,639,306,638,305,639,305,638,305,638,304,639,304,639,303,638,303,639,303,638,302,638,301,638,300,637,300,636,300,635,300,635,299,634,299,633,299,632,299,631,299,631,297,631,296,630,296,630,295,632,295,634,294,636,294,639,293,640,294,641,294,642,294,643,294,643,295,643,296,643,297,643,298,642,298,643,299,643,300,644,300,644,301,645,301,645,302,645,301,645,300,645,299,646,299,647,299,647,297,647,296,647,295,647,294,645,292,644,291,643,291,643,289,643,288,643,287,643,286,643,285,644,285 Mozambique, MOZ, Sub Saharan Africa 835,216,835,215,835,216 Myanmar (Burma), MMR, Asia 821,194,820,194,821,194 Myanmar (Burma), MMR, Asia 834,214,834,213,834,212,835,213,834,214 Myanmar (Burma), MMR, Asia 821,193,821,192,820,192,821,192,821,193 Myanmar (Burma), MMR, Asia 823,203,823,202,824,202,823,202,823,203 Myanmar (Burma), MMR, Asia 821,193,821,194,820,192,821,193,821,192,821,191,820,191,821,191,820,191,820,190,819,190,819,191,818,190,819,190,818,190,819,189,819,190,818,190,818,189,818,190,817,189,817,188,816,187,816,186,817,186,817,187,818,187,817,186,817,185,818,184,818,185,818,184,818,185,819,184,819,183,819,182,819,181,820,181,820,180,820,179,819,179,820,178,820,179,820,178,822,179,822,178,823,177,823,176,824,175,823,175,823,174,824,174,825,173,825,172,825,171,825,170,825,171,826,170,827,170,827,169,828,169,829,169,829,168,830,168,830,169,831,169,830,168,831,167,832,167,832,166,831,166,832,166,832,165,833,165,834,166,834,167,834,168,835,168,835,167,835,168,836,168,836,169,836,170,836,171,835,172,836,172,835,172,835,173,836,173,835,173,835,174,834,174,834,175,833,175,833,176,832,176,832,177,833,177,832,177,832,178,833,178,832,179,834,178,835,178,836,178,836,179,836,180,836,181,837,181,838,181,838,182,837,182,838,183,837,183,837,184,838,184,839,184,839,185,840,185,840,186,841,186,842,186,842,185,843,185,843,186,842,187,841,187,841,188,840,189,839,189,839,190,838,190,838,189,838,190,837,190,837,191,836,191,835,191,834,191,834,192,833,192,833,193,833,194,833,195,832,195,832,196,833,197,833,198,834,198,835,199,835,200,835,201,836,202,836,201,836,202,835,202,835,203,835,204,835,205,835,204,835,205,834,205,834,206,835,207,836,208,837,209,837,210,837,211,837,212,838,213,838,214,838,215,838,216,837,218,836,218,836,219,835,221,835,220,835,219,835,218,836,218,836,217,835,217,836,217,836,216,836,215,835,215,836,215,835,215,836,215,836,214,835,214,836,214,835,214,836,214,836,213,835,213,836,213,835,213,836,212,835,212,835,211,835,210,834,209,834,208,834,209,834,210,834,209,834,208,833,206,833,207,834,207,833,206,833,205,833,204,833,203,832,202,832,201,833,201,832,201,831,200,831,199,830,198,830,199,830,200,829,201,828,201,828,200,828,201,829,201,828,201,828,202,828,201,828,202,827,202,827,203,826,203,825,203,826,202,825,203,825,202,825,203,824,203,824,202,824,203,823,203,824,202,823,203,824,202,824,201,823,202,822,203,822,202,822,201,823,201,823,200,823,199,823,198,823,197,823,196,822,196,823,196,822,195,822,194,822,193,822,192,822,193,821,193 Myanmar (Burma), MMR, Asia 583,320,583,319,583,318,582,317,581,316,581,315,580,314,579,312,579,311,579,310,578,309,577,308,577,307,576,306,575,305,575,304,575,302,576,302,577,302,578,302,580,301,580,302,581,303,582,303,586,303,591,303,595,303,596,304,598,304,599,304,600,304,601,304,602,305,602,304,603,304,604,305,608,304,610,303,612,303,614,303,615,303,615,304,614,304,613,305,613,304,611,305,610,306,610,305,609,304,604,305,602,305,602,308,602,312,602,316,599,317,599,321,600,325,600,329,599,333,599,336,598,336,598,337,597,337,596,337,595,337,594,337,593,337,592,337,592,336,591,336,592,336,592,335,591,335,590,335,590,336,589,336,588,336,587,335,587,334,586,334,585,332,585,331,585,330,585,331,585,330,584,330,584,329,584,328,584,327,584,326,584,325,583,324,583,323,583,321,583,320 Namibia, NAM, Sub Saharan Africa 782,160,783,160,784,160,784,159,784,160,784,159,786,159,786,160,787,161,788,161,789,162,790,162,790,163,791,163,792,163,792,164,794,165,795,165,795,166,796,166,797,165,797,166,797,167,798,167,798,166,799,167,799,166,800,166,800,167,801,167,802,167,803,167,804,167,804,168,804,169,803,169,804,170,804,171,803,171,802,171,801,171,800,171,798,171,797,171,797,170,796,170,795,170,794,170,794,169,793,169,794,169,793,168,792,168,791,168,790,168,789,168,788,168,788,167,787,167,786,167,785,167,784,166,783,166,783,165,782,165,781,164,781,165,780,164,780,163,780,162,781,162,781,161,782,160 Nepal, NPL, Asia 552,96,552,97,551,97,550,97,550,96,551,96,552,96 Netherlands, NLD, Europe 557,97,556,97,555,97,555,96,554,96,553,96,552,96,551,96,550,96,551,96,552,96,551,96,552,96,551,96,551,95,552,95,553,94,553,93,554,92,555,92,556,91,557,91,557,90,558,90,560,90,561,91,561,92,561,93,560,93,561,93,561,94,560,94,560,95,559,95,558,95,557,95,558,95,558,96,558,97,557,97,557,98,558,98,557,98,558,98,557,98,557,97 Netherlands, NLD, Europe 1044,315,1043,315,1044,315 New Caledonia, NCL, Asia 1042,314,1041,314,1041,313,1042,313,1042,314 New Caledonia, NCL, Asia 1040,318,1040,317,1040,318,1039,317,1038,317,1038,316,1037,316,1036,316,1036,315,1035,315,1034,314,1034,315,1034,314,1033,313,1032,312,1032,311,1031,311,1032,311,1031,311,1032,311,1033,311,1034,312,1035,313,1036,313,1036,314,1037,314,1037,315,1038,315,1039,316,1040,316,1040,317,1041,317,1040,318 New Caledonia, NCL, Asia 10,383,10,382,9,382,10,382,11,382,10,382,11,383,10,383 New Zealand, NZL, Australia 1038,403,1037,403,1038,403,1037,403,1038,403,1038,402,1038,403 New Zealand, NZL, Australia 1064,365,1064,364,1064,363,1064,362,1064,363,1063,362,1064,362,1064,361,1063,361,1063,362,1063,361,1062,360,1063,360,1062,360,1062,359,1063,359,1062,359,1063,359,1062,359,1061,358,1062,359,1062,360,1062,359,1060,358,1060,357,1060,356,1060,357,1059,357,1059,356,1059,357,1059,356,1059,355,1058,354,1059,354,1058,354,1059,354,1059,355,1059,356,1060,355,1060,356,1060,355,1061,356,1062,356,1062,357,1062,356,1063,356,1063,357,1063,358,1063,359,1064,359,1064,360,1064,361,1063,361,1064,361,1063,361,1064,361,1065,361,1065,362,1066,362,1066,361,1066,360,1066,361,1067,361,1067,362,1067,363,1068,363,1067,363,1068,364,1068,363,1068,364,1068,363,1068,364,1071,364,1071,365,1071,364,1072,364,1073,364,1074,363,1073,363,1074,363,1075,363,1075,364,1075,365,1074,365,1075,366,1074,367,1073,367,1073,368,1072,368,1071,368,1070,369,1070,370,1070,369,1071,369,1071,370,1070,371,1069,372,1068,373,1067,374,1066,375,1065,375,1064,375,1064,374,1064,375,1063,374,1064,374,1064,373,1065,373,1065,371,1066,371,1065,371,1064,370,1063,370,1063,369,1062,369,1061,369,1061,368,1062,367,1063,367,1064,365 New Zealand, NZL, Australia 1042,392,1043,392,1043,391,1044,391,1043,391,1044,391,1044,392,1043,392,1042,392,1043,392,1042,392 New Zealand, NZL, Australia 1048,382,1048,381,1049,381,1050,380,1050,381,1050,380,1051,380,1050,380,1051,380,1052,379,1052,380,1052,379,1053,379,1052,379,1053,379,1052,379,1053,379,1052,379,1053,378,1054,378,1053,378,1053,377,1054,377,1054,376,1055,376,1055,375,1056,375,1056,374,1056,373,1057,373,1057,372,1058,372,1057,372,1058,373,1059,373,1059,374,1060,374,1061,374,1061,373,1062,373,1061,373,1061,374,1062,374,1061,374,1062,374,1061,374,1062,373,1062,374,1062,373,1062,374,1061,374,1062,374,1062,375,1062,376,1062,375,1062,376,1061,377,1061,378,1060,378,1060,379,1059,379,1059,380,1058,380,1057,380,1056,380,1057,380,1058,380,1058,381,1057,381,1056,381,1055,380,1056,381,1057,381,1058,381,1058,382,1058,381,1058,382,1059,381,1059,382,1058,382,1057,382,1056,382,1054,381,1054,380,1053,380,1054,380,1053,380,1052,380,1054,380,1054,381,1056,382,1055,383,1055,382,1055,383,1054,383,1053,383,1052,383,1053,383,1054,383,1053,384,1053,385,1052,385,1051,385,1053,385,1052,386,1052,387,1051,388,1052,388,1051,388,1052,388,1051,388,1050,389,1049,390,1048,390,1047,390,1047,391,1046,390,1045,390,1044,390,1045,390,1044,390,1043,390,1043,389,1042,389,1040,389,1040,388,1040,389,1039,389,1040,388,1039,389,1039,388,1040,388,1041,388,1040,388,1040,387,1041,387,1040,387,1040,386,1041,387,1041,386,1041,387,1041,386,1040,386,1041,386,1041,385,1041,386,1041,385,1042,385,1043,385,1042,385,1043,384,1043,385,1043,384,1044,383,1045,383,1045,382,1046,383,1047,382,1048,381,1048,382 New Zealand, NZL, Australia 282,209,283,208,284,208,284,207,284,206,285,206,286,207,287,206,287,207,287,206,288,206,289,206,289,205,289,206,289,205,290,206,289,206,290,206,290,207,290,208,289,208,289,209,289,210,289,211,289,212,289,213,289,212,289,213,288,213,289,213,289,214,288,215,288,214,288,215,288,216,288,217,288,218,289,218,288,218,287,218,286,218,285,217,285,218,284,217,283,217,282,217,281,216,280,215,279,214,278,213,277,212,276,212,277,212,277,211,277,212,278,212,278,211,279,211,279,210,279,209,280,209,281,209,281,208,282,209 Nicaragua, NIC, Latin America 575,180,580,181,582,183,585,181,585,185,585,186,586,188,587,189,587,191,586,195,586,198,586,200,583,203,581,205,581,206,580,207,581,207,580,207,580,209,579,209,579,210,578,210,578,211,577,211,576,211,575,211,574,210,573,210,572,210,570,211,569,211,568,212,566,212,565,212,565,211,564,211,563,210,562,211,561,211,561,212,560,212,560,211,560,210,559,210,558,209,558,210,556,209,555,209,554,209,553,209,552,210,552,212,551,212,550,213,551,215,550,215,551,215,550,215,549,215,549,214,548,213,548,214,547,214,547,215,546,213,546,212,545,212,545,213,544,213,543,211,542,211,542,210,543,210,543,211,543,210,542,210,542,209,541,209,541,208,540,207,540,206,540,205,541,206,541,205,542,206,543,205,549,204,550,204,551,204,551,203,552,203,551,202,552,202,552,201,552,200,552,195,552,193,557,192,562,188,566,185,571,183,575,180 Niger, NER, Sub Saharan Africa 580,209,581,210,581,211,582,211,582,213,583,213,583,214,584,214,583,214,583,215,583,216,582,217,581,217,580,218,580,220,579,220,579,221,579,222,578,222,578,223,578,224,578,225,577,225,576,225,576,227,576,228,575,228,575,229,574,230,574,231,573,231,573,230,572,230,571,229,571,230,570,230,570,229,569,230,569,231,568,231,568,232,567,232,567,233,566,233,566,234,566,235,565,236,564,236,565,237,564,237,563,237,562,237,562,236,562,237,561,237,561,236,561,237,560,236,560,237,561,237,560,237,560,236,560,237,560,238,559,238,559,237,559,238,558,238,558,237,558,238,558,237,558,238,557,238,557,237,556,237,556,236,556,235,556,234,555,234,556,234,555,234,556,233,555,234,555,233,554,232,553,232,553,231,552,231,550,231,551,231,550,231,548,231,548,230,548,229,548,228,548,227,548,226,548,225,548,223,549,223,549,222,550,221,549,221,550,221,551,220,550,220,550,219,551,219,551,218,551,217,550,216,550,215,551,215,550,215,551,215,550,213,551,212,552,212,552,210,553,209,554,209,555,209,556,209,558,210,558,209,559,210,560,210,560,211,560,212,561,212,561,211,562,211,563,210,564,211,565,211,565,212,566,212,568,212,569,211,570,211,572,210,573,210,574,210,575,211,576,211,577,211,578,211,578,210,579,210,579,209,580,209 Nigeria, NGA, Sub Saharan Africa 974,211,973,210,974,210,974,211 Northern Mariana Islands, MNP, Pacific 586,44,586,43,587,43,588,43,587,43,586,44,586,43,586,44 Norway, NOR, Europe 599,40,598,40,599,40,600,40,599,40 Norway, NOR, Europe 608,40,607,40,607,39,608,39,609,40,608,40 Norway, NOR, Europe 564,60,564,59,566,59,564,60 Norway, NOR, Europe 591,43,590,43,591,43,590,43,591,43,590,43,591,43,591,42,590,42,591,42,592,42,591,42,592,42,591,42,592,42,591,42,592,42,593,42,592,42,593,42,594,42,593,42,594,42,593,43,594,43,593,43,592,43,591,43 Norway, NOR, Europe 580,46,582,46,581,46,580,46 Norway, NOR, Europe 597,41,596,41,596,40,597,40,598,41,598,40,598,41,598,40,599,41,598,41,597,41 Norway, NOR, Europe 601,40,602,40,601,40 Norway, NOR, Europe 616,38,616,37,615,37,616,37,617,37,616,37,617,37,618,37,617,37,618,38,618,37,617,38,616,38 Norway, NOR, Europe 606,39,605,39,606,39,607,39,607,38,607,39,608,39,608,38,608,39,609,38,610,38,609,38,610,38,609,38,609,39,608,39,609,39,608,39,607,39,606,39 Norway, NOR, Europe 609,40,609,39,608,39,609,39,610,39,609,40 Norway, NOR, Europe 564,60,565,60,566,60,565,60,566,60,567,60,566,60,564,60 Norway, NOR, Europe 611,39,610,39,611,39,610,38,611,38,612,38,612,39,611,39 Norway, NOR, Europe 564,61,563,60,564,60,564,61 Norway, NOR, Europe 576,55,576,54,577,54,576,55 Norway, NOR, Europe 582,46,583,46,583,45,584,45,585,45,584,46,583,46,584,46,583,46,582,46 Norway, NOR, Europe 584,46,585,46,585,45,586,45,585,45,586,45,586,44,587,44,586,44,587,44,587,45,588,45,588,44,589,44,589,45,588,45,587,45,586,46,586,45,586,46,586,45,584,46 Norway, NOR, Europe 556,69,555,69,557,68,557,69,556,69 Norway, NOR, Europe 594,42,593,42,594,42,595,42,594,42,594,41,595,41,596,41,595,41,596,41,597,41,596,41,596,42,594,42 Norway, NOR, Europe 585,45,584,45,585,44,584,44,585,44,584,44,583,45,583,44,584,44,585,44,585,43,585,44,586,44,585,44,586,44,585,45 Norway, NOR, Europe 624,40,624,39,625,39,625,38,626,38,627,38,628,38,627,38,628,38,629,38,629,39,629,38,630,38,630,39,631,39,630,39,631,39,632,39,633,39,633,40,631,40,630,40,629,40,626,40,625,40,626,40,625,40,626,40,629,41,628,41,629,41,628,41,628,42,628,41,630,41,629,41,630,41,631,41,631,42,631,41,632,41,632,42,631,42,630,41,630,42,627,43,626,43,627,42,627,41,625,41,624,41,624,40 Norway, NOR, Europe 572,59,573,59,572,59,570,60,569,60,569,59,570,59,568,60,568,59,569,59,568,59,570,59,569,59,570,59,569,59,569,58,570,58,571,58,570,58,571,58,571,57,572,57,573,57,574,57,573,57,573,58,574,57,575,57,574,57,574,56,575,56,574,56,576,56,575,56,574,56,573,56,574,56,573,56,574,56,575,56,573,56,574,56,575,56,575,55,576,55,576,56,576,55,577,55,578,55,577,55,578,55,577,55,576,55,577,55,577,54,577,55,578,55,577,54,578,54,577,54,577,53,577,54,578,54,577,54,577,53,578,53,577,53,578,53,579,53,578,53,579,52,578,52,579,52,580,52,581,52,580,52,581,52,582,52,582,51,581,52,580,52,579,52,580,52,579,51,579,52,579,51,578,51,579,51,580,51,581,51,580,51,579,51,580,51,579,51,580,51,579,50,580,50,581,50,580,50,581,50,580,50,581,50,580,50,581,50,582,50,582,49,582,50,582,49,583,49,582,49,583,49,584,49,583,49,584,49,585,49,584,49,585,49,586,49,585,49,584,49,583,49,584,49,583,49,582,49,583,48,584,48,585,48,584,48,585,48,584,48,585,48,584,48,585,48,586,48,586,49,587,49,586,48,587,48,586,48,585,48,586,48,585,48,585,47,586,47,587,47,586,47,585,47,584,48,585,47,584,47,585,47,584,47,585,47,586,47,587,47,587,46,586,46,586,47,585,47,585,46,586,46,587,46,586,46,587,46,588,46,588,47,589,47,588,47,588,46,589,47,588,47,589,46,589,47,589,46,590,46,588,46,589,46,588,46,589,46,588,46,589,46,590,46,589,46,588,46,589,45,590,45,590,46,591,45,591,46,592,46,591,46,591,45,592,45,593,45,592,45,591,45,590,45,589,45,590,44,591,45,591,44,592,45,593,45,592,44,591,44,592,44,593,44,592,44,593,44,592,44,593,43,592,43,594,43,593,43,594,43,594,42,595,42,595,43,595,42,596,43,595,42,596,42,597,42,598,42,598,43,597,43,598,43,598,42,597,42,596,42,597,42,596,42,597,41,598,41,599,41,599,42,598,42,599,42,600,42,599,42,599,41,600,41,601,41,600,42,601,42,600,42,599,42,599,43,600,43,600,42,601,42,602,42,601,42,601,41,602,41,603,41,602,41,603,41,602,41,603,41,603,40,604,40,606,41,605,41,606,41,605,41,606,41,606,40,605,40,606,40,605,40,604,40,603,40,604,40,605,40,606,40,605,40,606,40,607,40,606,40,607,40,608,40,607,40,609,40,608,40,609,40,609,41,610,40,609,40,610,40,609,40,610,40,609,40,610,40,610,39,611,39,612,39,613,39,612,39,613,38,613,39,614,39,614,38,612,38,613,38,614,38,613,38,614,38,615,38,614,38,615,38,616,38,617,38,616,38,615,39,615,40,614,40,615,40,616,40,616,39,618,39,618,38,619,38,620,38,619,38,619,39,620,39,621,39,620,39,621,39,621,38,622,38,621,38,622,38,621,38,622,38,621,37,622,37,622,38,622,37,623,37,624,37,625,38,624,38,623,38,624,38,623,38,622,39,623,39,624,38,624,39,623,39,624,39,625,39,624,39,624,40,623,40,622,40,621,41,620,41,619,41,617,41,617,42,617,43,616,44,615,44,615,45,614,45,614,44,612,44,611,44,609,45,609,44,607,44,605,43,603,43,602,43,601,43,600,43,600,44,601,44,600,45,599,45,600,45,599,45,596,45,595,45,594,45,594,46,593,47,591,46,590,47,589,48,588,48,589,49,588,50,586,51,586,52,585,52,583,52,583,53,583,54,583,55,582,55,581,57,582,57,582,58,581,58,579,58,578,58,578,59,576,59,576,60,575,61,576,61,576,62,576,63,576,64,576,65,577,66,578,66,577,67,576,67,576,68,577,69,577,70,576,71,575,71,574,72,575,73,574,74,574,73,573,73,572,73,571,72,572,72,571,71,572,71,571,71,571,72,571,71,570,71,571,72,570,72,571,72,571,73,570,73,570,74,570,73,570,74,569,74,569,73,568,73,569,73,568,74,567,74,568,74,567,74,567,75,566,75,565,76,564,76,563,76,562,76,561,76,561,77,560,76,561,76,560,76,559,76,560,76,559,76,560,76,559,76,558,76,557,75,556,75,556,74,556,73,557,74,558,74,559,73,558,74,557,74,558,74,558,73,557,73,558,73,559,73,558,73,557,73,558,72,559,72,558,72,557,72,558,72,557,72,556,72,557,72,556,73,556,72,556,73,556,72,556,73,556,72,555,72,556,72,556,71,556,72,556,71,557,72,557,71,558,71,557,71,557,70,558,70,559,69,559,70,560,69,561,69,560,69,561,69,560,69,559,69,560,69,559,69,558,69,558,70,557,70,557,71,557,70,556,70,557,70,556,70,557,69,556,69,556,70,555,70,556,70,555,70,555,69,556,69,557,69,556,68,557,68,556,68,556,69,555,69,554,68,555,68,556,69,556,68,555,68,556,68,555,68,554,68,555,68,555,67,556,67,557,67,559,67,560,67,560,68,561,68,560,67,561,67,562,67,563,67,562,67,561,67,562,66,561,66,561,67,562,67,561,67,560,67,561,67,560,67,559,67,560,66,559,66,559,67,558,67,557,67,556,67,555,67,554,67,555,66,555,67,556,67,555,67,555,66,556,66,555,67,554,66,555,66,554,66,555,66,556,66,557,66,556,66,555,66,556,66,555,66,556,66,555,66,554,66,554,65,555,65,556,65,557,65,556,65,557,65,558,65,559,65,560,65,559,65,558,65,557,65,556,65,555,65,556,64,555,64,556,64,557,64,558,64,559,64,558,64,557,64,558,64,558,63,559,64,559,63,560,63,561,64,560,64,561,64,560,64,561,64,560,64,560,63,559,63,558,63,560,63,559,63,558,63,559,63,560,63,561,63,562,63,563,63,562,63,562,62,563,62,564,62,562,62,560,62,561,62,560,62,561,62,561,61,562,62,563,62,564,62,565,62,564,62,563,61,563,62,563,61,564,61,565,62,564,62,565,62,566,62,565,62,564,62,565,61,564,61,565,61,566,61,565,61,566,60,565,60,566,60,567,60,567,61,567,60,568,60,567,60,568,60,569,60,569,61,570,61,570,60,571,60,572,60,571,60,572,59,573,59,574,59,573,59,574,59,574,58,573,58,574,58,573,58,571,59,572,59 Norway, NOR, Europe 715,190,715,189,716,189,716,188,716,189,716,190,715,190 Oman, OMN, Asia 707,184,707,179,708,178,708,175,709,176,709,177,710,178,711,179,713,179,714,179,715,180,716,180,717,181,717,182,718,183,719,183,719,184,718,185,718,186,717,186,716,187,716,188,715,189,714,189,713,189,713,190,713,191,713,192,713,193,713,194,711,194,710,194,709,195,709,196,709,197,708,197,706,197,705,198,705,199,704,200,703,199,702,199,701,200,700,200,699,200,699,201,698,199,698,198,697,198,695,195,695,194,708,187,708,184,707,184 Oman, OMN, Asia 763,139,764,139,764,140,765,139,766,140,767,140,767,141,768,141,768,142,767,142,768,142,768,143,769,143,770,144,772,144,773,144,772,145,771,145,771,146,770,146,770,147,770,146,769,146,768,146,768,147,767,147,766,147,765,147,764,146,763,146,762,146,761,147,761,148,762,148,761,148,762,148,762,149,761,149,762,150,762,151,763,151,763,152,762,152,763,152,764,152,763,153,764,153,765,153,766,154,765,154,764,154,764,155,763,155,763,156,763,157,764,157,763,157,762,158,761,159,761,160,760,160,760,161,759,162,758,163,757,164,756,164,756,165,755,166,755,167,754,167,753,167,752,167,751,167,751,166,750,167,750,168,748,169,748,170,749,171,750,171,750,172,750,173,751,173,752,174,752,175,753,176,752,177,753,177,752,177,752,178,751,178,751,177,750,178,749,178,748,178,747,178,746,178,746,179,745,179,744,179,743,179,742,179,742,178,741,177,741,176,740,176,739,176,740,176,740,175,739,174,738,174,739,174,738,174,736,174,735,175,734,175,733,175,734,175,733,175,732,175,732,174,731,174,732,174,731,174,730,174,730,175,729,175,728,175,727,175,726,175,725,175,724,175,725,173,725,172,726,172,726,171,727,171,728,171,729,171,729,170,729,169,730,169,729,169,728,169,728,168,728,167,728,166,727,166,727,165,726,165,724,164,724,163,724,162,722,161,725,162,727,162,728,162,730,162,732,162,734,162,735,162,736,162,738,161,739,161,738,160,739,159,738,159,739,158,740,157,741,157,743,156,742,156,743,156,744,155,745,155,746,155,746,156,747,156,748,155,747,154,747,153,748,153,748,152,748,151,749,151,750,151,750,150,750,149,749,149,749,148,751,149,752,149,752,148,753,148,753,147,752,147,753,147,753,146,754,146,754,145,754,144,754,143,753,143,753,142,754,141,755,141,756,141,756,140,757,140,759,140,761,140,762,140,763,140,763,139,763,140,763,139 Pakistan, PAK, Asia 295,229,294,228,295,228,295,229 Panama, PAN, Latin America 291,222,292,222,292,223,293,223,293,224,294,224,294,223,295,224,296,224,297,224,298,223,299,223,300,222,300,223,300,222,301,222,302,222,303,222,302,222,303,222,304,222,305,223,306,223,306,224,307,224,307,225,307,224,307,225,307,226,308,226,308,227,307,227,308,227,307,228,307,227,306,227,306,228,306,229,305,229,305,228,305,227,304,227,304,226,305,226,305,225,306,226,305,226,305,225,304,225,304,224,303,224,302,224,302,223,302,224,301,223,301,224,300,224,300,225,299,226,298,226,299,227,300,228,299,228,298,228,298,229,297,229,297,228,296,228,296,227,296,228,295,227,294,226,293,226,292,226,292,225,292,226,291,226,290,225,291,225,291,224,291,223,291,222 Panama, PAN, Latin America 991,279,990,279,990,278,991,278,991,279 Papua New Guinea, PNG, Asia 992,280,992,279,991,279,992,279,992,280 Papua New Guinea, PNG, Asia 993,281,992,281,992,280,992,281,992,280,993,280,993,281,993,280,993,281 Papua New Guinea, PNG, Asia 979,257,980,256,981,257,982,257,982,256,982,257,981,257,980,257,979,257 Papua New Guinea, PNG, Asia 991,259,990,259,990,258,989,258,990,258,991,258,991,259 Papua New Guinea, PNG, Asia 990,269,989,269,988,269,987,269,986,269,986,268,985,268,984,268,985,267,986,267,987,267,989,267,990,266,990,267,991,267,992,267,993,266,993,265,994,265,995,265,994,265,994,264,994,263,995,263,995,264,996,263,995,263,996,263,997,264,997,265,996,265,995,265,995,266,996,266,996,267,995,267,994,267,994,268,993,268,993,269,992,269,991,269,990,269 Papua New Guinea, PNG, Asia 1000,285,999,285,999,284,1000,285,1001,285,1000,285 Papua New Guinea, PNG, Asia 981,267,981,266,981,267 Papua New Guinea, PNG, Asia 983,268,983,267,984,267,984,268,983,268 Papua New Guinea, PNG, Asia 998,265,997,264,998,263,997,263,997,262,996,261,995,261,995,260,994,260,993,259,992,259,992,258,993,259,994,259,995,260,996,260,996,261,997,261,997,262,997,261,997,262,998,262,998,263,999,263,999,264,998,265 Papua New Guinea, PNG, Asia 998,278,997,278,997,277,998,277,999,278,998,278 Papua New Guinea, PNG, Asia 963,269,963,268,963,266,963,264,963,262,963,260,963,258,964,259,965,259,966,260,967,260,969,261,970,261,971,261,971,262,972,262,973,262,973,263,974,263,975,264,976,264,977,265,977,266,977,267,978,267,979,267,980,268,981,268,982,268,983,269,983,270,983,271,981,271,980,271,981,272,981,273,982,273,982,274,983,274,983,275,984,275,984,276,985,277,985,278,986,278,987,278,987,277,987,278,987,279,988,279,990,279,990,280,989,280,989,281,990,281,991,281,992,281,991,282,991,281,991,282,992,282,991,282,991,283,991,282,990,283,990,282,989,282,990,282,989,282,988,281,987,281,986,281,985,281,984,281,983,281,982,280,981,279,980,278,979,278,979,277,979,276,978,276,978,275,977,275,977,274,976,274,975,274,974,274,974,273,974,274,974,273,973,273,973,274,973,273,973,274,972,273,973,274,972,274,972,273,972,274,971,273,970,273,971,273,971,274,971,275,970,274,970,275,969,275,968,276,968,275,967,275,967,276,967,275,966,275,967,275,967,276,967,275,968,275,968,276,969,276,969,277,970,277,969,278,968,278,967,278,965,278,964,278,963,278,963,277,963,275,963,273,963,271,962,271,962,270,963,269 Papua New Guinea, PNG, Asia 354,309,358,309,360,308,362,309,365,310,365,311,365,312,366,312,366,313,366,314,366,315,366,316,366,317,367,317,368,317,369,317,370,317,371,317,372,317,372,318,373,319,373,320,373,321,373,322,374,323,375,322,376,322,377,323,377,324,376,325,376,326,376,327,376,328,376,329,375,330,375,331,374,331,373,331,373,332,373,333,372,333,371,332,371,333,370,333,369,333,368,333,367,333,366,332,365,332,364,332,364,331,365,331,364,331,365,331,365,330,365,329,366,328,367,327,367,326,366,326,365,325,364,325,363,325,362,324,361,324,361,323,359,323,358,322,356,322,356,321,355,320,354,319,353,319,353,318,352,317,353,314,353,312,354,311,354,309 Paraguay, PRY, Latin America 331,297,332,299,333,299,333,300,332,300,332,301,331,301,331,302,331,303,330,303,330,304,330,305,329,305,328,306,327,305,327,304,326,304,325,304,325,303,325,302,324,302,323,302,323,301,322,301,321,300,320,300,319,299,318,299,317,298,316,298,315,297,314,297,314,296,313,296,313,295,312,294,311,293,311,292,310,292,311,292,311,291,310,290,310,289,309,288,309,287,308,287,308,286,308,285,307,284,306,283,306,282,305,281,305,280,304,279,304,278,304,277,303,277,303,276,303,275,302,275,302,274,301,274,301,272,300,272,300,271,299,270,298,270,296,269,296,268,297,268,297,267,296,266,296,265,295,265,296,264,296,263,297,262,298,261,299,261,299,262,299,263,298,262,298,263,298,264,299,263,300,264,301,264,301,265,302,266,303,265,303,264,304,264,303,264,304,263,304,262,304,261,305,261,306,260,307,259,310,258,311,257,313,255,313,253,314,253,314,252,313,252,313,251,314,251,315,251,315,252,316,252,317,253,317,254,318,254,319,255,319,256,320,256,320,257,320,258,321,258,322,258,323,258,324,258,324,257,325,257,325,258,325,257,325,258,326,258,326,257,327,257,328,258,329,258,328,258,329,258,329,259,329,258,329,259,327,262,328,262,329,262,330,263,329,264,329,263,328,263,327,263,327,264,326,264,325,264,324,264,323,265,322,265,322,266,321,266,321,267,320,269,320,270,319,270,318,271,318,272,318,273,317,273,318,274,319,275,319,276,320,276,320,277,321,277,321,278,320,279,322,279,323,279,323,280,323,281,325,281,326,280,327,280,327,279,328,279,328,280,328,282,328,284,328,283,328,284,329,284,329,283,330,283,331,283,332,285,333,287,333,288,333,289,333,291,332,291,332,292,333,292,333,293,332,294,333,294,332,294,332,295,331,295,332,296,332,297,331,297 Peru, PER, Latin America 899,235,900,234,900,235,899,235 Philippines, PHL, Asia 909,223,908,223,908,222,907,221,908,220,908,219,908,218,909,218,910,218,910,219,909,220,909,221,909,222,909,223 Philippines, PHL, Asia 909,222,910,220,910,219,911,219,911,218,911,217,912,217,911,217,912,217,912,219,911,220,910,220,910,222,909,222 Philippines, PHL, Asia 916,221,916,220,916,219,917,219,916,220,917,221,916,221 Philippines, PHL, Asia 911,222,911,221,912,221,912,220,913,220,913,221,913,222,912,222,911,222 Philippines, PHL, Asia 907,219,907,218,908,218,908,219,907,219 Philippines, PHL, Asia 906,227,907,226,908,226,909,225,910,225,910,224,910,225,911,225,911,226,910,226,910,227,911,226,912,226,912,225,913,225,914,225,914,224,914,223,914,224,915,224,915,223,915,224,916,223,916,222,916,221,916,222,917,222,917,223,918,223,918,224,918,225,919,225,919,226,918,226,919,226,919,227,919,228,919,229,919,230,918,230,919,230,918,230,918,231,918,232,918,231,918,230,917,230,917,229,917,228,916,229,916,230,916,231,916,232,917,232,916,233,916,234,915,234,915,233,915,232,915,233,914,233,913,233,912,232,912,231,912,230,911,230,912,229,912,228,911,227,910,227,910,228,909,228,909,227,909,228,908,228,908,227,907,227,907,228,906,229,906,228,906,229,906,230,905,230,905,229,906,229,906,228,906,227 Philippines, PHL, Asia 917,217,916,217,915,217,914,217,914,216,915,215,914,215,914,214,913,214,912,213,913,213,914,213,915,213,915,214,916,214,916,215,916,216,916,217,917,217 Philippines, PHL, Asia 915,220,914,220,914,219,914,218,913,217,913,218,913,217,913,216,912,216,913,216,913,217,914,216,914,217,915,217,915,218,915,219,915,220,915,219,914,219,915,220 Philippines, PHL, Asia 912,215,911,215,910,214,909,215,909,214,909,213,910,213,911,214,912,215 Philippines, PHL, Asia 897,217,898,217,898,216,898,217,898,218,898,219,899,219,898,219,897,220,896,221,895,223,894,223,893,224,892,224,892,225,891,226,891,225,892,224,892,223,893,223,894,223,894,222,895,221,896,220,897,219,896,219,897,219,898,218,897,218,898,218,897,218,897,217,898,217,897,217 Philippines, PHL, Asia 905,231,905,230,906,230,906,231,905,231 Philippines, PHL, Asia 903,233,902,233,902,232,903,232,903,233,904,232,904,233,903,233 Philippines, PHL, Asia 906,214,905,214,906,214,905,214,905,213,906,213,905,213,906,212,906,213,906,214 Philippines, PHL, Asia 900,215,900,214,900,215,900,214,900,215,899,214,899,213,899,214,900,214,901,214,900,214,901,214,900,215 Philippines, PHL, Asia 906,211,905,211,905,210,906,210,906,211 Philippines, PHL, Asia 907,214,907,213,908,213,907,214 Philippines, PHL, Asia 905,207,905,206,905,205,906,206,905,206,906,206,905,207 Philippines, PHL, Asia 913,216,913,215,913,216 Philippines, PHL, Asia 912,210,912,209,912,208,912,209,913,209,913,210,912,210 Philippines, PHL, Asia 900,210,901,210,902,210,903,210,903,211,904,211,904,212,904,213,904,214,903,214,903,213,903,214,902,213,902,212,902,211,901,211,901,210,900,210 Philippines, PHL, Asia 905,219,905,218,906,217,906,216,906,215,905,215,906,215,907,215,907,216,908,216,909,216,909,217,908,217,908,218,907,218,906,219,905,219 Philippines, PHL, Asia 900,202,901,202,900,201,901,200,901,199,901,198,901,197,901,196,901,195,902,195,903,195,904,195,904,196,905,196,904,195,905,196,906,195,906,196,906,197,906,198,907,198,907,199,907,200,907,201,906,202,905,202,904,203,904,204,904,205,904,206,905,206,904,207,905,208,906,209,906,208,907,208,908,208,908,207,908,208,909,208,909,209,909,208,910,208,910,209,911,209,910,209,910,210,911,210,911,211,912,211,912,212,912,213,911,213,911,212,912,212,911,212,910,212,910,211,909,211,909,210,908,210,908,209,907,209,907,210,908,211,907,211,907,210,906,210,906,209,905,209,904,209,904,210,903,210,903,209,902,209,901,209,902,209,901,209,901,208,902,208,902,207,902,206,901,206,901,207,900,206,900,205,899,204,899,203,899,202,899,201,899,202,900,202 Philippines, PHL, Asia 598,87,599,87,601,87,604,88,606,87,608,87,609,87,609,88,610,88,610,89,610,90,611,91,611,92,610,93,609,94,610,94,610,95,610,96,611,96,610,97,611,97,611,98,612,98,611,98,612,99,611,99,610,100,609,100,608,101,608,102,607,102,608,103,607,103,606,103,605,103,604,102,603,102,602,103,602,102,601,102,600,103,599,103,599,102,598,102,597,102,596,102,596,101,595,101,594,101,594,100,593,101,593,100,592,100,593,100,592,100,591,99,590,99,591,100,590,100,589,100,588,99,589,99,588,98,588,99,587,98,586,98,585,98,585,97,584,97,585,98,584,98,584,97,585,97,584,96,583,95,584,95,584,94,583,94,583,93,582,92,583,91,583,90,582,89,583,89,583,90,583,89,582,89,583,89,584,88,586,88,587,88,588,88,588,87,589,87,590,87,591,86,592,86,593,86,595,86,596,87,596,86,595,86,595,87,596,87,597,87,598,87 Poland, POL, Europe 463,137,462,137,463,137,464,137,463,137 Portugal, PRT, Europe 455,135,454,135,455,135 Portugal, PRT, Europe 458,135,457,134,458,134,458,135 Portugal, PRT, Europe 489,153,488,152,489,152,489,153 Portugal, PRT, Europe 513,125,514,124,515,124,515,125,516,125,517,125,518,125,519,125,520,125,520,126,520,125,521,126,520,127,519,127,519,128,519,129,519,130,518,130,519,130,518,131,517,132,517,131,517,132,518,132,518,133,519,133,518,134,518,135,518,136,519,136,518,136,518,137,517,138,517,139,516,139,515,139,514,139,513,140,513,139,513,138,513,137,513,136,513,135,512,135,512,134,512,135,513,134,512,134,513,134,512,134,511,134,511,133,511,132,512,132,513,130,513,129,513,128,514,128,513,127,513,126,513,125 Portugal, PRT, Europe 339,197,338,197,338,196,338,195,340,195,341,195,342,195,343,195,343,196,342,196,342,197,341,197,340,197,339,197 Puerto Rico, PRI, Caribbean 693,177,692,177,692,176,692,174,692,173,693,172,694,172,694,173,694,174,694,175,694,176,694,177,693,177,694,177,693,177 Qatar, QAT, Asia 706,315,706,314,705,314,705,313,706,313,707,313,707,314,707,315,706,315 Reunion, REU, Sub Saharan Africa 618,106,619,106,620,106,621,106,621,107,621,108,622,108,623,109,624,110,624,111,624,112,624,113,624,114,625,115,626,115,627,115,627,114,628,114,629,115,628,115,629,115,628,115,628,116,627,116,626,116,627,116,627,115,626,116,626,117,626,116,626,117,625,118,626,118,625,118,625,119,624,119,623,119,623,118,623,119,622,118,621,118,620,118,619,118,618,119,617,119,616,120,615,119,613,119,611,119,610,119,609,119,608,119,608,118,609,118,608,118,607,117,608,117,607,116,606,117,605,117,604,116,604,115,603,115,602,114,602,113,601,113,600,112,601,112,602,112,603,112,603,111,604,111,604,110,605,109,604,109,605,109,605,108,606,108,606,107,607,107,608,107,608,106,609,107,609,106,610,107,610,106,610,107,611,107,612,107,613,107,614,107,615,107,616,107,618,107,618,106 Romania, ROM, Europe 699,38,699,37,697,37,696,37,696,36,697,36,698,36,699,37,698,37,698,36,698,37,699,37,699,38 Russia, RUS, Europe 717,5,713,5,714,5,713,5,715,5,717,5,718,5,717,5,718,5,717,5 Russia, RUS, Europe 812,7,809,7,810,7,812,7,814,7,813,7,812,7 Russia, RUS, Europe 1079,36,1080,36,1080,37,1079,38,1078,38,1077,38,1076,38,1075,37,1076,37,1078,36,1079,36 Russia, RUS, Europe 0,36,3,36,5,36,6,37,7,37,6,37,0,38,0,36 Russia, RUS, Europe 952,36,951,36,952,36,951,36,950,36,951,36,953,36,952,36 Russia, RUS, Europe 1009,99,1008,98,1009,98,1009,99 Russia, RUS, Europe 770,34,770,33,771,33,772,33,773,33,774,33,775,33,773,34,770,34 Russia, RUS, Europe 1006,101,1006,100,1005,100,1006,99,1007,99,1007,98,1008,98,1008,99,1007,100,1006,100,1006,101 Russia, RUS, Europe 926,34,925,34,924,34,923,33,922,33,920,33,919,33,920,33,921,33,923,33,926,33,927,33,928,33,927,34,928,34,927,34,928,34,926,34 Russia, RUS, Europe 925,33,924,33,926,32,926,33,925,33 Russia, RUS, Europe 921,33,923,32,924,32,928,32,927,33,925,32,924,32,921,33 Russia, RUS, Europe 1004,103,1003,103,1003,102,1004,102,1004,103 Russia, RUS, Europe 1030,75,1031,74,1031,73,1032,73,1033,73,1034,73,1033,74,1034,74,1033,74,1030,75 Russia, RUS, Europe 927,32,924,32,925,32,927,32 Russia, RUS, Europe 714,6,712,6,710,6,711,6,710,6,713,6,715,6,714,6 Russia, RUS, Europe 778,32,776,32,775,32,776,32,777,31,778,31,778,32 Russia, RUS, Europe 709,9,708,9,707,9,706,9,707,8,706,8,709,8,710,8,710,9,709,9 Russia, RUS, Europe 764,32,763,32,762,31,763,31,764,31,763,32,764,32 Russia, RUS, Europe 900,31,899,31,898,31,899,31,900,31 Russia, RUS, Europe 0,44,1,44,2,44,3,44,3,45,5,45,6,46,5,46,6,46,6,45,7,46,6,46,7,46,8,46,10,46,14,47,13,48,14,48,13,48,14,48,15,48,15,49,15,50,15,51,16,51,16,52,17,51,18,51,17,51,18,51,17,52,18,52,18,51,17,51,18,50,17,50,17,49,16,49,17,49,19,49,20,49,19,50,20,50,19,50,20,50,21,50,22,50,20,49,22,49,22,50,24,50,25,50,26,51,27,51,28,51,28,52,29,52,28,52,29,52,30,52,30,53,29,52,28,53,28,54,27,54,25,53,26,54,25,54,24,54,23,54,22,54,22,53,21,53,21,54,22,54,23,54,22,54,23,54,23,55,21,55,22,55,23,55,22,56,21,56,20,56,21,56,20,56,20,57,21,56,21,57,20,57,21,57,22,57,23,57,22,57,21,57,20,57,21,57,21,58,20,58,19,58,19,57,20,57,19,57,18,57,17,57,14,56,13,56,12,55,11,54,9,54,8,54,7,54,4,54,4,53,3,53,3,52,3,53,4,52,4,51,3,52,2,52,1,52,0,52,0,53,1,53,2,54,1,54,1,55,0,55,0,44 Russia, RUS, Europe 995,110,996,109,995,110 Russia, RUS, Europe 714,10,712,10,711,10,711,9,710,9,713,9,716,9,717,9,716,10,715,10,714,10,715,10,714,10,713,10,714,10 Russia, RUS, Europe 976,120,976,119,977,118,978,117,979,117,977,118,977,119,976,119,976,120 Russia, RUS, Europe 785,25,784,25,784,24,785,24,786,24,786,25,786,24,786,25,785,25 Russia, RUS, Europe 750,31,749,31,750,31,749,30,750,30,751,30,752,30,753,30,753,31,752,31,753,31,754,31,754,30,754,31,755,31,752,31,751,31,750,31 Russia, RUS, Europe 988,114,988,113,989,113,991,112,990,112,990,113,988,114 Russia, RUS, Europe 700,10,696,10,698,10,698,9,699,9,700,10,701,10,700,10 Russia, RUS, Europe 919,33,918,33,919,33,919,32,918,32,919,32,920,31,919,31,919,30,920,30,921,30,922,30,923,30,924,30,923,30,925,30,924,31,925,31,926,31,927,31,926,32,925,32,924,32,922,32,921,33,919,33 Russia, RUS, Europe 694,35,694,34,695,34,696,34,697,34,698,34,698,33,697,33,698,33,697,33,698,33,699,33,698,33,698,32,699,33,698,32,697,32,698,32,700,32,699,32,699,31,700,31,699,31,700,31,701,31,702,31,703,31,703,30,704,30,709,31,708,31,707,31,708,31,709,31,706,32,707,32,708,32,706,32,707,32,707,33,706,32,707,33,706,33,707,33,706,33,705,33,706,33,705,33,706,33,706,34,706,35,705,35,706,35,707,36,708,36,708,37,711,38,712,38,712,39,710,38,710,39,711,39,710,39,709,38,709,39,710,39,709,38,708,38,708,39,709,39,708,38,709,38,709,39,708,39,707,38,707,39,708,39,707,39,707,38,706,38,707,39,706,38,706,39,705,38,705,39,704,38,703,38,704,39,703,38,702,38,701,38,700,38,699,38,700,38,701,38,700,37,701,37,702,37,701,37,702,37,701,37,700,37,701,36,700,36,700,37,699,36,700,36,699,36,698,36,697,36,696,36,695,36,694,36,694,35 Russia, RUS, Europe 766,30,765,30,766,30,768,30,767,30,766,30 Russia, RUS, Europe 980,117,981,117,981,116,982,116,982,115,983,115,983,114,984,115,986,114,986,115,985,115,984,115,983,115,983,116,982,116,981,116,981,117,980,117 Russia, RUS, Europe 989,26,986,26,984,26,983,26,981,26,980,25,979,25,978,25,978,24,979,24,980,24,979,24,981,24,982,24,985,24,985,25,987,25,990,25,991,25,992,25,991,26,992,26,991,26,989,26 Russia, RUS, Europe 918,34,917,33,915,33,914,33,914,32,913,32,912,32,908,32,907,32,907,31,908,31,908,32,909,32,910,32,909,31,910,31,909,30,910,30,909,30,910,30,909,30,910,30,909,30,910,30,910,29,910,30,911,30,911,29,912,29,913,29,914,29,914,30,915,30,915,29,915,30,916,30,917,30,918,30,919,30,918,30,919,30,919,31,920,31,919,32,918,32,919,32,918,32,918,33,919,33,918,34 Russia, RUS, Europe 789,23,786,23,787,23,789,23 Russia, RUS, Europe 829,22,825,22,826,22,827,22,828,22,829,22,828,22,829,22 Russia, RUS, Europe 969,31,965,31,964,30,962,30,961,30,960,30,959,30,958,30,959,30,960,30,961,30,962,30,962,29,963,29,964,29,966,29,967,29,970,30,970,31,969,31 Russia, RUS, Europe 790,28,788,28,789,28,790,28 Russia, RUS, Europe 862,16,859,16,862,16,863,16,862,16 Russia, RUS, Europe 708,10,707,10,708,10,707,10,708,9,709,10,710,9,711,9,711,10,708,10 Russia, RUS, Europe 796,27,795,27,796,27 Russia, RUS, Europe 948,29,947,28,946,28,947,28,948,29 Russia, RUS, Europe 985,21,986,20,988,20,987,20,987,21,985,21 Russia, RUS, Europe 827,20,827,19,825,20,825,19,826,19,828,19,829,19,827,20 Russia, RUS, Europe 800,26,799,26,798,26,799,26,801,26,800,26 Russia, RUS, Europe 957,27,954,26,953,26,951,25,950,25,950,24,951,24,951,25,952,24,951,24,950,24,951,24,951,23,953,23,952,23,953,22,954,22,955,22,956,22,957,22,959,23,960,23,961,23,961,24,962,24,963,24,962,23,962,22,963,22,964,23,964,22,963,22,964,22,965,22,967,23,969,23,970,23,971,23,975,24,976,24,975,24,974,24,974,25,973,25,971,25,970,25,969,25,967,24,969,24,969,23,968,23,966,23,967,23,967,24,966,24,967,25,970,25,971,26,970,26,967,26,968,26,967,26,965,26,966,26,967,26,966,25,965,26,960,26,959,26,958,26,957,27 Russia, RUS, Europe 950,86,951,85,951,86,950,86 Russia, RUS, Europe 777,8,776,8,777,8,781,8,780,8,779,8,777,8 Russia, RUS, Europe 713,8,711,8,710,8,710,7,708,7,710,7,712,7,713,8,714,8,713,8 Russia, RUS, Europe 682,10,683,10,684,10,683,10,682,10,680,10,679,10,681,9,681,10,684,10,684,9,683,9,682,9,684,9,682,9,684,9,685,9,687,9,688,9,687,9,688,9,688,8,689,8,687,8,686,8,687,8,690,8,691,8,690,8,692,8,693,8,690,8,693,8,695,8,692,9,689,9,688,9,686,9,685,10,686,10,687,10,686,10,687,10,686,10,685,10,684,10,682,10 Russia, RUS, Europe 965,91,965,90,966,90,967,90,968,90,967,90,967,89,968,90,968,89,967,89,968,89,966,88,967,88,968,87,969,88,968,88,968,89,969,90,968,90,969,90,970,92,969,92,969,93,969,94,969,95,969,96,970,96,969,96,970,96,970,97,970,98,971,99,971,100,972,101,972,102,973,103,974,104,974,105,973,104,973,103,972,103,970,102,969,102,970,103,969,103,968,103,968,104,967,106,967,107,968,108,969,109,969,110,970,110,969,110,970,110,970,111,970,112,969,111,970,111,969,111,968,111,968,110,967,110,967,111,966,112,966,113,965,112,965,111,966,109,965,108,966,107,966,106,965,105,965,104,966,104,966,102,966,101,966,100,966,99,966,98,966,97,966,96,965,96,965,95,964,95,965,94,964,94,964,93,965,93,965,92,965,91 Russia, RUS, Europe 718,11,716,10,718,10,719,10,719,11,718,11 Russia, RUS, Europe 808,19,807,19,808,19,809,19,808,19,809,19,808,19 Russia, RUS, Europe 817,12,816,12,815,11,816,11,817,11,816,11,814,11,813,11,813,10,819,10,821,11,820,11,817,12 Russia, RUS, Europe 877,21,876,21,877,21,878,21,877,21 Russia, RUS, Europe 961,29,960,28,961,28,962,28,963,28,962,29,961,29 Russia, RUS, Europe 598,87,599,87,599,86,600,86,600,87,600,86,601,86,600,87,599,87,598,87 Russia, RUS, Europe 861,19,862,19,861,19,862,18,863,19,861,19 Russia, RUS, Europe 833,14,830,14,829,14,828,13,827,14,826,13,825,13,824,13,823,13,822,13,823,13,822,12,823,12,822,12,821,12,820,12,819,12,822,11,823,11,822,11,823,11,822,11,823,11,824,10,825,10,826,10,829,10,830,10,831,10,833,10,834,10,833,11,832,11,831,11,832,11,833,11,834,11,835,11,835,10,838,10,840,11,839,11,839,12,838,13,837,13,839,13,839,14,838,14,833,14 Russia, RUS, Europe 838,17,837,16,838,16,840,15,839,15,840,15,841,14,843,14,842,14,843,13,844,14,842,13,843,13,844,13,844,12,845,12,845,13,846,13,846,12,847,12,849,13,848,13,847,14,848,13,849,13,850,13,851,13,852,13,851,13,853,14,854,14,855,14,856,15,854,16,848,16,847,16,848,16,847,16,843,16,842,16,839,17,838,17 Russia, RUS, Europe 878,28,876,28,875,28,874,28,874,27,875,27,876,27,879,27,880,27,879,28,878,28 Russia, RUS, Europe 796,26,795,26,796,26,797,26,796,26 Russia, RUS, Europe 858,16,857,16,859,16,859,15,860,16,859,16,858,16 Russia, RUS, Europe 947,24,946,24,946,23,947,23,948,24,947,24,948,24,947,24 Russia, RUS, Europe 797,27,796,27,797,27,798,27,797,27 Russia, RUS, Europe 769,12,770,12,769,12,768,12,769,12,772,12,769,12 Russia, RUS, Europe 710,26,709,26,708,26,707,26,709,26,709,25,707,26,707,25,708,25,709,25,710,25,710,24,711,24,712,25,713,25,712,24,714,24,713,24,714,23,716,23,717,23,721,23,721,22,720,22,721,22,722,22,721,22,723,22,722,22,723,22,722,22,723,22,724,22,727,22,728,22,729,22,731,21,732,22,732,21,734,21,735,21,736,21,737,21,737,20,738,20,739,20,742,19,745,20,746,20,747,20,746,21,745,21,744,22,743,22,741,22,737,23,731,24,730,23,730,24,729,24,726,24,725,24,724,25,723,25,722,25,721,25,720,26,721,26,722,26,721,26,720,26,721,26,720,26,719,26,718,26,719,26,719,27,718,27,717,26,717,27,716,27,714,27,715,27,715,28,716,28,715,28,714,28,715,28,714,28,714,29,713,28,712,28,711,28,712,28,713,29,712,29,710,29,712,29,712,30,711,30,710,30,710,29,710,30,711,30,710,31,710,30,710,31,708,31,708,30,707,30,707,31,706,30,704,30,702,31,702,30,703,30,702,30,703,30,705,29,704,29,703,29,703,30,702,30,700,29,701,29,702,29,703,29,704,29,703,28,705,28,707,28,705,28,706,28,707,28,705,27,706,27,708,27,707,27,706,27,707,27,706,27,707,26,707,27,708,26,709,26,710,26 Russia, RUS, Europe 686,44,685,44,684,44,684,43,685,42,686,42,687,42,690,43,690,44,690,43,689,43,689,44,688,44,686,44 Russia, RUS, Europe 723,9,720,9,719,9,718,9,717,9,718,9,717,9,718,8,720,8,719,8,723,8,724,8,726,8,726,9,725,9,724,9,723,9 Russia, RUS, Europe 711,8,710,8,706,8,704,8,704,7,703,8,703,7,704,7,706,7,708,7,709,8,710,8,712,8,713,8,711,8 Russia, RUS, Europe 1047,42,1046,42,1044,41,1043,41,1044,40,1048,41,1047,41,1047,42 Russia, RUS, Europe 729,8,727,8,729,8,731,8,732,7,733,7,734,7,735,7,736,7,735,8,736,8,733,8,729,8 Russia, RUS, Europe 722,8,720,8,720,7,721,7,723,7,725,7,724,7,723,8,722,8 Russia, RUS, Europe 704,8,702,8,701,8,702,8,704,8,705,8,707,8,706,8,704,8 Russia, RUS, Europe 719,41,718,41,716,41,717,41,716,41,715,40,716,40,715,40,716,39,717,39,718,40,719,40,720,40,720,41,721,41,719,41 Russia, RUS, Europe 678,9,676,9,674,9,680,8,681,8,682,8,684,8,685,8,686,9,685,9,683,8,682,8,681,9,682,9,681,9,679,9,680,9,679,9,678,9 Russia, RUS, Europe 709,7,708,7,707,7,706,7,708,7,709,7,709,6,711,6,713,7,711,7,709,7 Russia, RUS, Europe 953,87,952,87,952,86,951,86,952,85,953,85,953,86,953,85,954,85,954,86,953,86,953,87 Russia, RUS, Europe 730,6,728,6,726,5,728,5,729,5,730,5,731,5,731,6,730,6 Russia, RUS, Europe 647,56,647,55,646,55,647,55,647,56 Russia, RUS, Europe 821,11,819,10,816,10,818,10,816,10,819,10,814,10,815,9,816,9,815,9,818,9,819,8,817,8,818,8,819,8,819,7,824,7,825,7,826,7,825,7,826,7,829,7,830,7,829,8,830,8,833,8,833,9,831,9,831,8,831,9,832,10,831,10,827,10,825,10,823,10,821,11 Russia, RUS, Europe 630,42,630,41,631,42,632,42,632,41,634,41,633,42,634,41,635,41,636,41,635,41,636,41,637,41,638,41,639,41,639,42,638,42,636,42,636,41,636,42,635,42,636,42,637,42,636,42,637,42,638,42,639,42,638,42,638,43,638,42,639,42,640,42,639,43,640,43,639,43,640,43,639,43,639,44,639,43,640,43,643,43,645,43,647,43,649,43,653,45,654,45,655,45,656,46,655,46,655,45,657,46,658,46,659,46,660,47,661,47,660,47,661,47,662,47,663,47,663,48,662,48,663,48,663,49,664,49,663,50,662,51,661,51,657,52,655,52,653,52,652,52,646,51,644,51,643,51,642,50,641,50,640,50,639,50,638,49,637,49,636,49,635,49,636,49,637,49,637,50,638,50,639,51,640,51,639,51,638,51,639,51,640,51,641,51,640,51,640,52,639,52,640,52,641,52,642,52,643,52,644,53,644,54,643,54,644,54,643,54,643,55,644,55,643,55,644,55,644,56,645,56,644,56,644,57,645,57,645,58,646,58,646,57,647,58,648,58,651,59,652,59,653,59,654,58,653,58,654,58,653,57,652,57,651,57,650,56,649,56,650,56,650,55,651,55,653,55,653,56,654,56,655,56,654,56,654,57,654,56,655,56,656,56,658,57,659,57,659,56,661,57,661,56,660,56,660,55,659,54,661,53,662,53,663,53,664,52,666,51,667,51,668,51,667,51,669,51,670,51,670,52,671,52,669,52,670,52,670,53,670,52,671,52,672,52,672,53,672,52,672,51,673,51,673,50,672,49,673,49,672,49,671,49,671,48,672,48,672,47,672,48,672,47,672,46,673,46,672,46,672,45,669,45,669,44,670,44,671,45,672,45,673,45,675,45,677,45,678,45,677,45,678,46,679,46,679,47,680,47,676,47,675,47,676,47,676,48,675,48,674,48,676,49,677,50,678,50,679,50,681,50,682,50,683,50,683,49,683,48,684,48,685,47,685,48,686,47,687,48,687,47,686,47,685,47,686,47,687,47,689,47,691,46,692,45,693,45,694,45,696,45,697,45,696,45,696,46,697,45,698,45,697,45,696,45,699,44,701,44,703,43,703,44,700,44,701,44,702,44,701,44,701,45,700,45,701,45,701,46,700,45,699,46,700,46,701,46,702,46,703,46,704,46,704,45,705,45,707,45,709,45,710,45,711,45,712,45,712,44,713,44,714,44,715,44,714,44,715,44,717,44,716,44,717,44,718,44,717,44,717,45,719,45,719,44,720,44,721,44,722,44,722,43,721,43,721,42,720,42,720,41,721,42,722,41,721,41,722,41,724,41,729,41,732,42,734,43,735,43,737,43,741,44,742,44,743,45,744,45,744,46,745,46,745,45,746,45,747,44,746,44,747,44,746,44,745,44,744,43,744,42,743,42,742,42,740,41,740,42,740,41,740,40,741,40,740,41,741,41,741,40,741,39,742,38,741,38,740,38,739,38,740,37,739,37,740,37,741,37,743,36,744,35,745,35,746,34,746,33,746,32,747,32,748,32,749,32,748,32,754,32,755,32,756,32,758,32,758,33,758,34,757,34,757,35,756,35,757,35,756,35,756,36,755,36,756,37,757,37,758,37,757,37,758,38,758,39,757,39,757,40,757,41,758,41,757,41,757,42,757,43,757,44,758,44,760,45,759,46,759,47,758,47,758,48,757,48,757,49,756,49,755,49,756,49,755,50,754,50,753,50,754,50,754,51,754,50,753,51,752,51,750,51,752,50,751,50,750,50,749,50,748,50,747,50,746,50,747,50,747,51,748,51,749,51,751,52,752,51,754,51,756,52,757,52,757,51,756,51,757,51,758,51,759,50,760,50,761,50,761,49,762,48,764,47,764,46,763,46,763,45,763,44,764,44,767,44,769,44,770,44,769,44,770,44,771,45,771,46,772,46,771,46,771,47,773,48,777,48,776,48,775,48,775,47,775,48,774,47,774,48,773,47,772,47,772,46,773,46,774,46,773,45,773,44,772,44,770,43,766,43,765,43,762,43,761,43,761,42,760,41,761,40,762,39,762,38,761,38,761,37,760,37,759,36,760,36,760,35,761,35,763,35,764,34,765,34,765,33,764,32,765,32,766,32,767,33,766,33,767,34,766,34,766,35,765,35,766,35,766,36,765,36,766,37,768,37,770,37,771,37,773,37,773,38,775,38,777,38,777,37,776,38,776,37,776,38,775,38,775,37,774,37,773,37,774,36,773,36,773,37,772,37,771,36,770,36,768,36,768,35,769,34,770,34,771,35,772,35,773,35,774,35,774,34,773,34,772,34,773,34,775,33,778,33,779,34,782,34,781,34,783,35,784,35,785,35,788,35,789,35,789,36,788,36,789,36,786,37,787,37,786,37,786,38,787,38,786,38,786,39,786,40,787,40,786,40,786,39,787,39,787,38,788,38,789,38,789,39,788,39,789,39,787,40,788,40,789,40,788,40,790,40,791,39,790,38,790,37,789,37,790,36,790,35,789,35,787,35,786,34,783,33,782,33,781,32,782,32,782,31,781,31,780,31,781,31,780,31,780,30,781,30,782,30,781,30,782,30,784,30,790,30,794,29,795,29,796,29,800,29,801,29,797,30,797,31,798,31,799,31,800,32,800,31,799,31,797,31,797,30,798,30,801,30,802,29,801,29,802,29,801,29,800,28,801,28,802,28,801,28,800,28,799,28,798,28,797,28,797,27,798,27,798,28,798,27,799,27,800,27,800,28,800,27,801,28,801,27,800,27,799,27,800,27,798,27,797,27,798,26,799,26,798,26,799,26,799,27,800,27,800,26,801,26,802,26,801,26,802,26,803,25,800,25,801,25,803,25,804,25,805,25,806,24,807,24,806,24,807,24,808,24,809,24,808,24,810,24,809,24,812,24,813,24,814,24,814,23,821,23,822,23,820,23,819,23,818,23,819,23,818,23,818,22,819,22,820,22,821,22,823,22,824,22,823,22,824,22,826,22,828,22,827,22,828,22,827,22,828,23,826,23,827,23,829,23,828,23,829,22,829,23,830,23,831,23,832,22,831,22,831,23,832,23,833,23,833,22,832,22,833,22,834,22,833,22,834,22,835,22,836,22,837,22,838,22,839,22,839,23,838,23,837,23,837,24,839,24,839,25,840,25,839,24,837,24,837,23,838,23,837,23,838,23,839,23,839,22,838,22,837,21,836,21,838,21,840,21,842,21,845,21,846,21,842,21,843,21,843,20,842,20,843,20,843,19,846,18,847,18,848,18,849,18,850,18,852,17,853,17,852,17,853,18,853,17,854,17,854,18,857,18,858,18,857,18,856,19,852,19,856,19,857,19,856,19,856,20,857,20,858,19,859,19,860,19,859,19,860,19,861,19,861,20,862,20,861,20,862,20,861,20,860,20,860,21,859,21,860,21,862,21,863,21,864,21,863,21,863,20,864,20,867,20,869,20,871,20,872,20,873,20,874,20,874,21,875,21,876,21,875,21,876,21,878,22,877,22,878,22,877,22,878,22,877,22,879,22,878,22,879,22,878,22,879,22,880,22,880,23,881,23,881,24,880,24,879,23,877,23,878,23,878,24,879,24,878,24,879,24,880,24,881,24,880,24,881,24,880,25,878,26,876,26,875,27,874,26,872,27,873,27,871,27,870,27,871,27,870,27,868,28,869,28,868,28,867,28,865,29,864,30,861,30,860,30,860,31,858,31,857,31,857,32,856,32,855,32,856,32,857,32,858,32,858,31,859,31,860,31,863,31,864,31,865,31,864,31,865,31,867,30,868,30,867,30,868,30,870,30,871,30,872,29,871,29,870,29,869,29,869,30,868,29,869,29,870,28,873,29,873,28,874,28,873,29,875,29,876,29,877,29,878,29,880,29,880,30,879,30,880,30,880,31,880,32,879,32,880,33,882,33,881,33,879,32,880,32,880,31,881,31,882,30,881,30,880,30,884,30,885,29,889,30,891,30,894,30,896,30,895,30,895,31,898,31,898,32,899,32,901,32,899,32,899,31,903,32,904,32,905,32,906,32,910,32,911,32,913,33,914,33,915,33,918,34,919,33,919,34,920,34,921,35,921,36,921,35,920,34,920,33,921,33,922,33,923,34,925,34,925,35,926,35,927,35,927,34,927,35,928,35,926,35,926,36,927,36,928,37,929,37,928,37,930,37,930,38,931,38,932,38,933,38,934,38,935,37,936,37,935,37,936,36,937,35,938,35,939,36,941,36,942,36,943,36,944,36,943,37,944,37,944,36,945,36,946,36,947,36,949,36,950,36,951,36,952,36,952,37,953,37,952,37,953,37,954,37,953,37,954,37,953,37,955,37,954,36,953,36,954,36,955,36,956,36,957,36,958,36,959,36,960,36,959,36,959,35,958,35,959,34,960,34,958,34,957,34,957,33,958,33,961,33,963,33,962,33,963,32,962,32,961,32,964,32,965,32,969,32,975,33,980,33,977,33,976,33,974,33,973,34,972,34,973,34,974,34,980,34,977,35,978,34,979,34,978,34,977,34,976,34,977,34,976,34,977,34,977,35,975,35,974,35,975,35,974,35,976,36,976,35,977,35,978,35,981,34,983,34,986,34,989,34,990,35,989,35,988,35,987,35,986,35,987,35,986,35,987,35,988,36,989,36,990,36,989,36,990,36,991,36,990,37,991,37,991,36,992,36,991,37,992,37,993,36,994,37,996,37,996,38,995,38,994,38,997,38,1000,38,1001,38,1002,38,1006,37,1006,38,1006,37,1007,37,1010,37,1013,37,1017,38,1019,39,1020,39,1020,40,1019,40,1019,41,1020,41,1020,42,1022,42,1023,42,1022,42,1023,43,1022,43,1023,43,1024,44,1023,44,1023,45,1022,45,1023,45,1024,44,1023,44,1024,44,1024,43,1024,42,1026,42,1026,41,1028,42,1029,41,1030,41,1031,41,1032,41,1033,42,1034,42,1040,42,1042,41,1043,41,1044,41,1043,42,1044,42,1044,43,1045,43,1048,43,1048,44,1051,44,1052,44,1052,43,1053,43,1052,43,1052,42,1051,42,1050,42,1050,41,1051,41,1051,40,1057,41,1058,41,1059,41,1060,41,1059,41,1060,41,1061,41,1062,41,1063,41,1065,41,1066,41,1068,41,1069,41,1070,41,1074,42,1075,42,1076,42,1077,43,1076,43,1075,42,1076,43,1077,43,1079,43,1079,44,1078,43,1079,44,1080,44,1080,45,1080,46,1080,47,1080,48,1080,49,1080,50,1080,51,1080,52,1080,53,1080,54,1080,55,1079,55,1078,56,1077,56,1075,57,1076,57,1076,56,1075,56,1072,56,1071,56,1071,55,1070,55,1069,55,1068,55,1069,56,1070,55,1071,56,1070,56,1069,56,1068,56,1067,56,1065,56,1064,56,1063,56,1064,56,1065,56,1067,56,1068,56,1069,56,1068,57,1069,57,1069,56,1070,57,1071,56,1072,56,1072,57,1073,58,1074,58,1074,57,1075,58,1075,59,1076,59,1076,60,1075,59,1075,60,1076,60,1075,60,1074,60,1075,60,1076,60,1075,60,1076,60,1076,61,1076,60,1076,61,1077,61,1078,61,1077,61,1077,62,1078,62,1078,63,1077,63,1077,64,1076,63,1075,63,1071,63,1071,62,1072,62,1071,62,1070,62,1071,62,1070,62,1070,63,1071,63,1070,63,1069,63,1066,64,1065,64,1064,65,1063,65,1064,65,1063,65,1062,65,1061,66,1061,65,1060,65,1060,66,1059,66,1058,66,1058,67,1057,67,1058,67,1057,67,1056,67,1057,67,1056,67,1056,68,1055,68,1054,68,1054,69,1053,69,1052,69,1051,69,1051,70,1051,71,1050,71,1050,70,1049,70,1049,69,1048,69,1047,69,1048,69,1047,69,1045,69,1044,69,1043,69,1042,69,1041,69,1039,70,1038,71,1038,70,1038,69,1039,69,1038,69,1037,69,1036,70,1035,70,1034,70,1035,70,1035,71,1034,71,1033,70,1032,70,1033,70,1033,71,1032,71,1032,70,1030,70,1031,71,1030,71,1030,72,1029,72,1029,73,1028,73,1029,73,1028,74,1027,74,1026,75,1025,76,1026,77,1027,77,1028,77,1029,77,1029,78,1028,78,1028,79,1028,80,1029,80,1029,81,1030,82,1029,82,1028,82,1027,82,1028,82,1029,81,1028,81,1027,81,1027,82,1026,82,1025,84,1025,85,1026,86,1025,87,1024,87,1023,87,1022,87,1020,88,1019,88,1019,89,1019,90,1019,89,1019,90,1019,91,1020,91,1019,91,1018,91,1017,91,1016,92,1015,91,1015,92,1015,93,1015,94,1014,94,1014,95,1013,95,1012,96,1010,98,1009,98,1010,98,1010,97,1009,97,1009,96,1009,95,1009,94,1008,93,1009,93,1008,93,1008,92,1008,91,1007,89,1007,88,1006,86,1006,85,1006,84,1006,83,1007,82,1007,80,1008,80,1009,80,1009,79,1010,79,1010,78,1010,77,1011,77,1012,77,1012,76,1014,76,1014,77,1015,77,1014,76,1016,75,1017,75,1018,74,1019,74,1019,73,1020,73,1020,72,1021,72,1022,72,1023,71,1024,71,1025,70,1025,69,1026,69,1028,69,1028,68,1029,68,1030,68,1031,68,1030,67,1031,67,1032,66,1031,66,1032,65,1032,64,1033,63,1035,63,1035,64,1035,63,1036,63,1034,63,1033,62,1029,63,1030,63,1029,64,1029,65,1028,65,1029,65,1029,66,1028,66,1028,65,1027,65,1028,66,1027,66,1027,65,1026,66,1025,66,1025,67,1024,67,1023,67,1022,68,1021,68,1020,69,1020,68,1021,68,1021,67,1020,67,1019,68,1019,67,1019,66,1020,66,1020,65,1021,65,1020,65,1019,65,1018,66,1018,65,1017,65,1016,65,1015,65,1014,65,1013,65,1012,65,1011,65,1011,66,1010,66,1009,66,1009,67,1008,67,1007,68,1006,69,1004,69,1003,70,1003,71,1002,71,1003,72,1002,72,1003,72,1004,72,1005,72,1005,73,1004,73,1003,73,1002,73,1003,73,1002,73,1001,73,1000,73,1001,73,1000,73,999,73,998,73,998,74,997,74,997,73,996,73,996,74,995,74,994,74,993,74,993,73,994,73,995,73,996,73,995,73,995,72,994,72,992,72,991,72,992,72,991,72,988,71,987,72,986,72,986,73,985,73,985,72,984,72,983,72,983,73,982,73,981,73,980,72,979,72,978,72,979,73,978,73,977,73,977,72,974,72,971,72,970,72,969,72,967,73,966,73,965,74,964,75,962,75,962,76,961,77,960,77,959,77,959,78,958,79,957,79,956,79,955,80,954,81,953,81,953,82,952,82,952,83,951,83,949,84,948,84,948,85,947,85,946,85,945,86,946,87,947,87,948,87,949,87,950,86,950,87,950,88,949,89,950,89,951,89,951,88,952,88,953,88,952,88,951,88,952,89,953,89,952,89,952,90,951,90,952,90,953,90,954,89,955,89,955,90,954,90,955,90,956,88,955,88,956,88,955,88,956,88,958,88,959,88,960,88,961,89,960,89,961,89,961,90,962,90,963,90,964,91,963,91,963,92,962,91,962,92,963,92,963,93,964,94,963,94,964,95,963,95,962,96,962,97,962,96,962,97,961,97,962,97,962,98,961,98,961,99,961,100,962,100,961,100,961,101,961,102,961,103,960,103,960,104,961,103,961,104,960,104,960,105,959,106,958,106,958,107,957,108,955,109,955,110,955,111,954,111,954,112,953,112,952,113,952,114,951,114,950,115,949,116,948,116,949,116,948,116,948,117,947,117,947,118,946,118,946,119,945,119,945,120,944,120,943,121,941,122,940,122,939,122,938,122,937,122,936,122,936,121,937,121,936,121,937,121,936,121,935,121,936,121,935,121,935,120,935,121,934,121,934,122,933,122,933,123,932,123,932,122,932,123,932,124,931,124,931,123,931,122,932,122,933,122,933,121,933,120,933,118,933,116,932,116,933,116,934,116,934,115,935,115,935,114,935,115,936,115,938,115,939,115,939,114,940,114,940,113,941,112,941,111,942,111,942,110,942,109,942,108,943,108,944,108,944,107,943,107,943,106,944,106,943,106,943,105,942,105,940,106,939,106,938,106,938,107,937,107,936,107,934,108,934,107,933,107,932,107,932,106,931,106,932,106,932,105,931,105,932,104,931,104,930,104,929,103,928,103,928,102,927,102,926,102,925,102,924,102,923,102,923,101,922,101,922,100,921,100,922,99,921,99,922,99,921,98,920,97,920,96,919,95,919,94,918,94,919,94,918,94,919,93,918,93,917,93,918,92,917,92,916,92,917,92,916,91,915,91,914,91,913,91,912,90,911,90,909,90,908,90,906,90,904,91,902,91,901,91,900,92,900,93,901,93,902,93,901,94,902,94,902,95,901,95,900,95,900,96,899,96,899,97,898,98,897,99,898,99,897,100,897,101,896,101,895,101,893,102,891,102,890,101,889,101,888,100,887,101,886,101,885,100,884,100,883,100,882,100,880,100,879,101,879,102,878,102,877,102,876,102,874,102,872,103,871,103,870,103,868,103,865,102,863,101,861,100,860,100,859,99,858,100,858,99,857,99,855,99,854,99,853,100,852,100,851,100,850,100,849,100,847,99,846,99,847,98,846,98,846,97,846,96,844,96,842,95,840,95,839,95,838,95,837,94,836,94,836,95,835,95,834,95,834,96,833,97,833,98,834,98,833,98,834,99,834,100,833,101,832,101,831,101,830,101,829,101,828,101,828,100,827,101,827,100,826,101,825,101,824,100,823,100,822,99,821,99,820,99,819,99,818,99,818,98,817,98,816,98,815,98,814,99,813,99,812,99,812,100,810,100,810,101,809,101,808,101,809,101,808,102,807,102,806,102,805,102,804,102,804,103,803,103,802,103,801,103,800,102,799,102,800,102,800,101,799,101,799,102,798,102,797,102,796,102,795,102,795,101,794,101,795,100,794,100,793,100,792,100,792,99,791,98,790,98,790,97,789,97,789,98,788,98,787,98,786,98,785,98,784,98,783,98,783,97,782,97,781,97,781,98,780,98,779,98,778,96,778,95,776,94,775,93,775,92,774,91,773,91,773,90,772,90,769,89,769,88,770,88,770,87,769,87,769,88,768,87,768,88,767,88,766,88,766,89,765,89,764,89,763,89,763,90,762,90,761,90,760,90,759,90,759,89,760,89,761,89,761,88,760,88,760,89,759,89,759,88,758,88,757,88,758,88,758,89,757,89,757,88,756,88,757,88,756,88,756,87,756,88,755,88,754,88,753,88,752,88,752,87,753,87,753,88,753,87,753,86,752,86,752,85,751,85,750,85,749,85,749,84,748,84,747,85,747,84,746,84,747,84,747,85,746,85,746,84,746,85,745,85,744,85,744,86,743,86,742,86,741,86,740,86,739,86,738,87,737,87,737,86,737,87,736,87,735,87,735,88,735,87,734,87,733,87,732,87,732,88,731,88,732,88,731,88,730,88,729,88,728,88,727,88,727,89,727,88,726,88,726,89,725,89,725,88,725,89,724,88,724,89,724,88,723,88,723,89,722,89,723,89,723,90,722,90,723,90,724,90,723,90,723,91,724,91,725,91,726,91,726,92,725,92,724,92,724,91,724,92,723,92,723,91,723,92,722,92,723,92,722,92,722,93,723,93,722,94,721,94,720,95,720,94,720,95,721,95,721,96,722,96,723,96,724,96,724,97,725,97,724,97,724,98,722,99,720,98,719,98,719,99,718,99,717,99,717,98,716,98,715,98,715,97,714,97,713,97,713,98,712,98,711,97,710,97,710,98,709,98,709,97,709,98,708,98,707,99,706,99,706,98,706,99,705,98,704,98,704,97,703,97,703,98,704,98,703,98,704,98,703,98,704,99,703,99,703,98,702,98,702,97,701,97,700,97,700,96,699,96,698,96,697,96,697,95,696,95,696,96,695,95,695,96,694,96,693,96,694,96,693,96,693,95,692,95,692,96,691,96,691,97,690,97,689,97,688,97,688,98,687,98,686,99,685,99,686,99,686,100,686,101,685,101,684,101,684,100,683,100,683,99,682,99,682,100,681,100,682,100,681,100,682,100,681,100,681,101,680,101,680,102,680,103,681,103,680,103,680,104,679,105,681,106,681,107,682,107,683,107,684,107,684,108,685,108,686,109,687,110,686,110,685,110,685,111,686,111,687,111,687,112,686,112,685,112,686,112,686,113,685,113,684,113,683,113,683,114,683,113,682,113,682,114,682,113,682,114,682,115,681,115,681,116,680,116,681,116,680,116,680,117,681,117,681,118,682,119,682,120,682,119,683,119,682,119,682,120,682,121,683,122,683,123,684,124,685,125,685,126,684,126,683,126,683,127,682,127,681,127,681,126,680,125,679,125,678,125,678,124,678,125,678,124,677,124,676,124,677,123,676,123,675,123,675,122,674,122,674,123,674,122,673,122,672,122,672,123,671,123,671,122,670,122,669,122,669,121,668,121,667,121,666,121,665,121,664,121,664,120,663,120,662,120,661,120,660,120,659,120,658,119,657,118,656,118,655,117,654,117,653,117,653,116,653,117,652,116,651,116,651,115,650,115,649,115,650,115,650,114,650,115,650,114,650,115,650,114,651,115,652,115,652,114,652,115,653,115,653,114,652,114,653,114,652,113,653,113,653,112,654,112,654,113,654,112,655,112,654,112,654,111,653,111,653,110,653,111,654,110,655,111,655,110,656,110,657,109,658,109,657,109,656,109,655,109,656,109,655,109,654,109,654,108,655,108,656,107,657,107,658,107,659,107,659,106,660,106,659,106,659,105,658,105,659,104,660,104,659,104,659,103,660,103,660,102,659,102,658,102,658,101,657,101,656,101,655,101,655,100,654,100,654,101,653,100,652,100,652,99,651,99,650,99,650,100,649,100,648,100,648,99,647,99,646,99,646,98,645,98,646,97,645,97,644,97,643,97,642,97,642,96,642,95,643,95,642,95,642,94,641,94,641,93,640,94,640,93,639,93,639,94,638,94,637,94,637,93,637,94,636,94,635,94,634,94,634,93,634,92,633,91,634,91,635,91,636,91,637,91,638,90,637,90,638,90,637,90,637,89,636,89,635,89,635,88,634,88,633,88,633,87,633,86,632,86,632,85,633,85,632,85,633,85,632,85,632,84,631,84,631,83,630,83,629,83,628,83,627,82,626,83,626,82,625,82,624,82,624,81,624,80,623,80,622,80,623,80,623,79,622,78,622,77,623,77,623,76,622,76,623,76,622,76,622,75,622,74,623,74,623,73,624,73,624,72,623,71,624,71,625,72,625,71,626,71,627,71,626,71,627,70,628,71,629,71,630,71,629,70,628,70,627,70,626,69,625,69,626,69,625,69,626,69,625,69,626,69,625,68,626,68,625,68,625,69,624,69,623,69,625,68,626,67,627,67,629,66,630,65,631,64,633,63,634,62,633,61,632,61,632,60,631,60,630,59,631,58,630,57,629,57,630,57,630,56,629,56,628,56,628,55,629,55,628,55,629,54,630,53,630,54,630,53,629,52,628,51,628,50,627,50,627,49,628,49,629,48,630,47,629,47,628,46,626,46,625,45,626,44,625,44,626,43,627,43,630,42 Russia, RUS, Europe 631,254,631,255,632,255,632,256,632,257,632,258,631,258,631,257,631,258,630,258,629,258,629,257,629,258,629,259,628,259,627,258,627,259,626,258,626,257,627,257,627,256,628,255,629,254,629,255,630,255,630,254,631,254 Rwanda, RWA, Sub Saharan Africa 577,119,577,119 San Marino, SMR, Europe 559,250,559,249,560,249,560,250,559,250 Sao Tome and Principe, STP, Sub Saharan Africa 562,246,561,246,562,246,562,245,562,246 Sao Tome and Principe, STP, Sub Saharan Africa 708,174,708,173,708,172,709,172,708,172,709,171,709,172,708,172,709,172,709,173,708,173,708,174 Saudi Arabia, SAU, Asia 657,154,660,154,663,156,667,158,668,158,669,159,670,159,670,160,670,162,672,162,674,163,676,164,677,164,679,163,680,163,682,164,683,165,685,165,685,166,686,166,686,167,686,168,687,168,687,169,687,168,687,169,688,169,689,170,690,170,689,170,690,171,690,172,689,172,689,173,690,173,690,172,690,173,690,174,690,173,691,174,691,175,691,176,692,176,692,178,694,180,696,183,706,184,707,184,708,184,708,187,695,194,682,198,676,205,673,198,672,198,671,199,671,198,670,198,669,198,669,199,669,200,669,201,668,201,668,200,667,200,667,199,666,198,665,197,664,196,664,195,663,195,663,194,663,193,662,193,662,192,662,191,661,191,661,190,660,190,659,189,658,189,658,188,657,187,657,186,657,185,656,185,657,185,657,184,657,183,656,182,657,182,656,182,656,181,655,180,655,179,654,179,653,178,652,178,652,177,651,176,651,175,651,174,650,173,649,173,650,173,650,172,649,172,648,171,648,170,647,169,646,168,646,167,645,167,645,166,644,166,643,166,644,166,644,165,644,164,644,163,644,162,645,163,646,163,647,163,648,163,648,162,649,162,650,161,651,161,652,160,653,159,654,159,653,158,652,158,651,157,651,156,652,156,653,155,654,155,655,155,656,155,657,154 Saudi Arabia, SAU, Asia 490,202,491,201,492,201,493,201,494,201,494,200,494,201,495,200,495,201,496,201,497,201,498,202,499,202,500,204,501,204,501,205,502,205,502,206,503,206,503,207,503,208,504,208,503,208,504,209,503,209,503,210,504,210,504,211,504,210,505,210,505,211,505,212,505,213,504,213,503,213,502,214,502,213,501,213,500,213,498,213,498,212,494,212,493,213,492,213,491,213,490,213,489,213,489,214,489,213,490,213,491,213,492,213,493,213,493,212,493,213,492,213,491,212,491,213,490,213,490,212,490,213,490,212,490,213,489,213,489,212,489,211,492,211,492,210,493,210,494,210,495,210,496,210,496,211,497,211,498,210,496,210,496,209,496,210,495,210,495,209,494,209,493,209,493,210,490,210,490,209,490,210,490,209,489,209,490,209,490,208,489,208,490,208,489,208,489,209,489,208,489,207,488,207,487,206,487,207,487,206,488,206,489,205,489,204,490,203,490,202 Senegal, SEN, Sub Saharan Africa 707,264,707,263,707,264 Seychelles, SYC, Sub Saharan Africa 706,265,706,264,706,265 Seychelles, SYC, Sub Saharan Africa 502,228,501,228,502,228 Sierra Leone, SLE, Sub Saharan Africa 501,223,501,222,502,222,502,221,503,221,504,221,506,221,507,222,508,223,507,223,508,223,508,224,508,225,507,226,508,225,508,226,508,225,509,225,509,226,508,226,508,227,507,227,507,228,506,228,506,229,505,229,505,230,504,229,502,228,503,228,502,228,502,227,501,227,501,226,500,226,500,225,501,225,500,225,500,224,500,223,501,223 Sierra Leone, SLE, Sub Saharan Africa 851,247,850,247,851,246,851,247 Singapore, SGP, Pacific 590,105,590,104,591,104,592,104,593,104,593,103,594,103,595,103,595,102,596,102,597,102,598,102,599,102,599,103,600,103,601,102,602,102,602,103,603,102,604,102,605,103,606,103,607,103,607,104,606,104,606,105,605,105,604,105,603,105,602,105,601,105,601,106,600,106,599,106,598,106,597,106,596,106,596,107,595,107,593,107,592,107,591,106,590,106,590,105 Slovakia, SVK, Europe 588,111,587,110,588,110,589,110,588,110,589,110,589,111,588,111,588,112,587,112,586,112,587,112,587,113,586,113,585,113,586,113,586,114,585,114,586,114,585,114,586,114,585,114,584,114,583,114,583,113,583,114,582,114,581,114,580,114,581,114,581,113,580,113,580,112,580,111,581,111,582,111,583,111,584,111,585,111,586,111,586,110,588,111 Slovenia, SVN, Europe 1011,275,1010,275,1010,274,1011,274,1011,275 Solomon Islands, SLB, Asia 1024,279,1023,279,1022,278,1022,277,1021,276,1022,276,1021,276,1021,275,1022,276,1022,275,1022,276,1023,276,1022,277,1023,277,1023,278,1024,279 Solomon Islands, SLB, Asia 1007,271,1006,271,1005,270,1005,269,1004,269,1004,268,1004,267,1005,267,1005,268,1006,268,1006,269,1007,269,1007,270,1007,271 Solomon Islands, SLB, Asia 1010,274,1009,274,1009,273,1010,273,1010,274 Solomon Islands, SLB, Asia 1027,283,1025,283,1024,282,1023,282,1023,281,1024,281,1025,282,1026,282,1026,283,1027,283 Solomon Islands, SLB, Asia 1014,277,1013,277,1013,276,1014,276,1014,277 Solomon Islands, SLB, Asia 1003,267,1003,266,1004,266,1004,267,1003,267 Solomon Islands, SLB, Asia 1021,280,1020,280,1019,280,1018,279,1018,278,1019,278,1019,279,1021,279,1022,280,1021,280 Solomon Islands, SLB, Asia 1013,276,1012,276,1012,275,1011,275,1011,276,1011,275,1012,275,1012,274,1012,275,1013,275,1013,276 Solomon Islands, SLB, Asia 1024,280,1024,279,1024,280 Solomon Islands, SLB, Asia 1021,286,1020,285,1019,285,1020,285,1021,286 Solomon Islands, SLB, Asia 1012,273,1011,273,1011,272,1010,272,1009,271,1009,270,1010,271,1011,271,1011,272,1012,272,1012,273 Solomon Islands, SLB, Asia 1019,276,1018,276,1017,275,1016,274,1015,274,1015,273,1016,273,1016,274,1018,274,1018,275,1019,275,1019,276 Solomon Islands, SLB, Asia 701,214,700,213,699,213,700,213,700,212,701,213,702,212,702,213,703,213,702,213,701,214 Somalia, SOM, Sub Saharan Africa 668,217,669,216,670,216,670,217,671,218,672,219,673,219,674,219,677,218,678,218,679,218,681,217,682,217,683,217,684,217,685,217,686,217,688,216,690,216,691,215,692,215,693,215,693,217,693,218,693,219,694,219,693,219,692,219,692,220,692,221,692,222,692,223,691,223,691,224,690,225,690,226,689,227,688,229,687,230,687,231,687,232,686,233,685,234,685,235,684,236,683,238,682,239,681,240,680,241,679,242,678,243,677,244,676,244,675,245,673,246,672,247,671,248,670,248,669,249,668,250,668,251,667,252,666,253,665,254,664,256,664,255,663,253,662,251,662,242,664,241,665,239,665,238,666,238,667,238,668,238,668,237,669,236,670,236,671,236,674,236,679,231,683,226,681,226,676,225,672,223,670,222,669,222,669,221,668,220,668,219,667,219,668,217 Somalia, SOM, Sub Saharan Africa 628,317,629,317,630,317,630,318,632,317,633,317,633,318,634,320,634,321,635,321,635,322,635,323,636,324,636,326,635,327,636,327,635,328,634,328,633,328,633,329,632,330,632,331,632,332,633,332,634,332,635,332,636,331,638,331,638,332,637,333,637,335,637,336,636,337,635,337,636,337,635,337,634,338,633,339,633,340,632,341,631,342,630,343,629,344,629,345,628,345,628,346,627,347,626,348,625,348,624,349,623,350,622,350,620,351,619,352,618,352,617,352,616,352,617,353,616,353,615,352,614,353,613,353,611,353,610,352,610,353,609,353,608,353,608,352,608,353,607,352,607,353,606,353,605,353,605,354,604,354,603,354,602,354,601,354,600,355,599,355,597,354,598,354,597,354,597,353,597,354,596,354,596,353,595,353,595,354,594,353,595,352,594,351,594,350,593,350,594,350,593,350,593,349,594,349,594,348,595,348,595,347,594,346,594,345,593,344,592,343,591,342,591,341,590,339,590,338,590,337,589,337,589,336,590,336,590,335,591,335,592,335,592,336,591,336,592,336,592,337,593,337,594,337,595,337,596,337,597,337,598,337,598,336,599,336,599,333,600,329,600,325,601,326,601,327,602,327,601,327,602,327,602,328,602,329,602,330,601,330,601,331,602,331,603,331,604,331,605,331,606,330,607,329,608,328,608,327,609,326,610,326,610,327,611,327,612,327,612,328,613,328,614,328,615,328,616,328,616,327,617,326,617,325,619,324,620,323,620,322,620,321,621,321,622,321,622,320,623,320,623,319,624,319,625,318,626,318,626,317,627,317,628,317 South Africa, ZAF, Sub Saharan Africa 626,336,625,336,624,337,623,337,622,338,622,339,621,339,621,341,622,341,622,342,623,342,624,342,624,341,625,341,626,341,627,340,627,339,628,339,627,338,627,337,626,337,626,336 South Africa, ZAF, Sub Saharan Africa 497,166,496,166,497,166,497,165,498,164,498,165,498,166,497,166 Spain, ESP, Europe 549,133,548,132,547,132,547,131,548,131,549,131,550,131,550,132,549,132,549,133 Spain, ESP, Europe 493,167,492,167,492,166,493,166,493,167 Spain, ESP, Europe 489,167,489,166,489,165,490,165,491,165,490,165,490,166,489,167 Spain, ESP, Europe 544,134,543,134,543,133,544,133,544,134 Spain, ESP, Europe 498,164,498,163,499,163,499,164,498,164 Spain, ESP, Europe 486,165,486,164,486,165 Spain, ESP, Europe 552,131,551,131,551,130,552,130,552,131,553,131,552,131 Spain, ESP, Europe 544,123,545,123,546,123,547,123,548,123,549,123,549,124,549,125,548,125,547,126,546,126,546,127,545,127,543,127,542,127,542,128,541,129,540,130,539,131,538,132,539,133,539,134,540,134,540,135,539,135,538,135,538,136,537,137,537,138,537,137,537,138,536,138,535,138,534,139,534,140,533,140,532,140,531,140,529,140,528,140,526,140,525,141,524,141,524,142,523,142,523,143,522,142,521,142,521,141,520,141,520,140,520,139,519,139,518,139,517,139,517,138,518,137,518,136,519,136,518,136,518,135,518,134,519,133,518,133,518,132,517,132,517,131,517,132,518,131,519,130,518,130,519,130,519,129,519,128,519,127,520,127,521,126,520,125,520,126,520,125,519,125,518,125,517,125,516,125,515,125,515,124,514,124,513,125,513,124,514,124,514,123,513,124,513,123,514,123,513,123,512,123,513,122,512,122,512,121,513,121,513,120,513,121,514,121,514,120,515,120,515,121,515,120,514,120,515,120,516,119,517,119,518,120,519,120,520,120,521,120,522,120,523,120,524,120,525,120,527,120,528,120,529,120,530,120,531,120,533,121,534,120,535,121,536,121,537,122,538,122,539,122,540,122,541,122,542,122,544,122,544,123 Spain, ESP, Europe 779,228,779,227,779,226,779,225,779,226,779,227,779,226,779,225,779,224,780,223,780,222,781,222,780,222,779,221,780,221,781,222,780,221,781,222,782,223,782,224,783,224,783,225,784,225,784,226,784,227,785,227,784,227,785,228,785,229,785,231,784,231,783,232,781,233,780,232,779,231,779,230,779,229,779,228 Sri Lanka, LKA, Asia 352,199,352,199 St. Christopher-Nevis, Caribbean 352,199,351,199,351,198,351,199,352,199 St. Christopher-Nevis, Caribbean 357,209,356,209,357,208,357,209 St. Lucia, LCA, Caribbean 356,212,356,211,356,212 St. Vincent and the Grenadines, VCT, Caribbean 356,212,356,212 St. Vincent and the Grenadines, VCT, Caribbean 356,212,356,212 St. Vincent and the Grenadines, VCT, Caribbean 356,212,356,212 St. Vincent and the Grenadines, VCT, Caribbean 355,213,355,213 St. Vincent and the Grenadines, VCT, Caribbean 355,213,355,213 St. Vincent and the Grenadines, VCT, Caribbean 355,213,355,213 St. Vincent and the Grenadines, VCT, Caribbean 356,212,355,212,356,212,355,212,356,212 St. Vincent and the Grenadines, VCT, Caribbean 356,212,356,212 St. Vincent and the Grenadines, VCT, Caribbean 356,211,356,210,356,211 St. Vincent and the Grenadines, VCT, Caribbean 646,237,645,237,643,237,641,238,640,239,639,239,638,239,637,239,636,240,635,240,635,239,634,239,634,240,633,239,632,239,632,240,632,239,631,240,631,239,630,239,630,238,629,238,629,237,628,236,627,237,626,237,625,237,625,238,625,237,624,237,623,237,623,236,622,236,622,235,621,235,621,234,621,233,620,233,619,232,618,231,619,231,618,230,616,228,615,228,615,227,614,226,613,226,612,226,612,225,612,224,610,224,610,223,610,224,610,223,610,222,611,221,609,219,609,218,608,218,608,217,608,216,607,216,607,214,607,213,606,212,606,213,605,213,605,212,605,211,606,211,606,210,606,209,607,208,607,207,608,206,608,205,608,204,609,203,610,203,611,203,611,194,611,192,612,190,613,191,615,191,615,189,615,184,616,185,618,185,620,185,622,185,624,184,626,185,627,184,629,185,631,184,633,185,634,184,634,185,636,184,638,184,639,184,641,185,642,185,642,184,644,184,644,182,645,182,646,181,647,182,648,182,648,183,649,184,650,184,650,185,650,186,651,186,651,187,651,188,651,189,651,190,652,193,652,194,653,194,653,195,654,195,654,196,655,196,655,197,655,198,654,198,653,198,652,198,652,199,651,199,650,199,651,199,650,200,651,200,650,201,650,202,650,203,650,204,649,204,649,205,649,206,649,207,649,208,649,209,649,210,648,210,648,211,648,212,647,213,646,214,645,215,645,216,644,217,645,217,644,218,643,218,642,219,643,220,642,220,642,222,642,224,642,225,641,225,640,225,639,225,639,226,638,227,639,227,640,227,642,228,642,229,643,230,644,230,644,231,644,232,644,233,645,233,645,234,646,234,647,234,647,235,647,236,647,237,646,237 Sudan, SDN, Sub Saharan Africa 367,240,366,240,367,240,366,240,366,239,365,239,365,238,366,238,366,237,366,236,366,235,367,235,368,235,367,235,368,234,368,233,369,233,370,233,371,233,372,233,374,233,375,233,374,233,375,233,376,233,377,233,378,233,377,234,377,235,376,235,376,236,376,238,377,238,376,238,377,239,377,240,378,240,377,240,377,241,377,242,376,243,376,244,375,244,375,243,374,243,373,243,372,243,371,243,371,244,372,244,372,245,370,245,370,244,369,244,368,243,368,242,368,241,368,240,367,240 Suriname, SUR, Latin America 615,21,614,21,615,21,616,20,615,21 Svalbard, SJM, Europe 620,15,619,14,620,14,621,14,620,15 Svalbard, SJM, Europe 624,14,623,14,624,14,625,14,626,14,627,14,628,14,629,14,627,14,625,14,624,14 Svalbard, SJM, Europe 607,19,607,18,608,18,607,18,606,18,602,18,603,18,603,17,604,17,602,16,605,16,608,16,610,16,609,16,610,17,611,17,612,17,614,17,612,17,612,18,611,18,610,18,609,18,608,18,608,19,607,19 Svalbard, SJM, Europe 635,10,634,10,639,10,640,10,635,10 Svalbard, SJM, Europe 602,16,601,16,602,16,601,16,602,15,601,15,600,15,603,15,604,15,606,15,606,16,605,16,602,16 Svalbard, SJM, Europe 597,27,596,27,597,27 Svalbard, SJM, Europe 610,13,609,13,608,13,607,13,607,12,608,12,602,12,600,12,599,12,598,12,600,12,601,12,603,12,601,11,606,11,607,11,606,11,605,11,601,11,598,11,596,11,594,11,596,10,594,10,595,10,594,10,593,10,594,10,596,10,597,10,598,10,597,10,596,9,597,9,597,10,598,10,599,10,599,9,598,9,599,9,598,9,599,9,600,9,601,9,601,10,602,10,603,10,604,10,605,10,604,10,605,10,606,10,606,11,607,11,607,10,606,10,607,10,607,9,608,9,607,9,608,10,608,9,609,9,610,9,609,10,608,10,609,10,610,10,611,10,613,10,612,9,613,9,613,10,614,9,614,10,616,10,615,10,616,10,617,10,619,10,620,10,621,10,621,11,619,11,617,12,615,13,614,12,612,13,610,13 Svalbard, SJM, Europe 589,21,588,21,589,21,586,20,588,20,589,20,588,19,587,19,587,20,585,19,583,19,582,19,582,18,581,18,582,18,581,18,582,18,583,18,584,18,587,18,588,18,587,18,586,18,584,18,587,17,589,17,590,17,591,17,590,17,591,17,590,17,589,17,587,17,586,17,585,17,581,17,580,17,581,17,580,16,581,16,582,16,582,17,583,17,582,16,585,16,584,16,585,16,586,16,587,16,586,16,587,15,590,15,591,15,590,15,588,15,589,15,590,15,590,14,589,14,589,15,588,15,587,15,586,15,585,15,586,15,586,14,585,14,585,15,584,15,584,14,583,14,583,15,584,15,582,15,582,16,581,16,580,16,579,16,578,16,578,15,577,15,579,15,578,15,575,15,575,14,574,14,575,14,574,14,576,14,577,14,576,14,575,14,576,14,576,13,575,13,576,13,575,13,574,13,575,13,573,13,572,13,572,12,573,12,572,12,574,12,573,11,574,11,575,11,576,11,577,12,577,11,576,11,577,11,579,11,581,11,580,11,579,11,577,12,579,12,580,12,579,12,580,12,581,12,581,13,582,13,582,12,581,12,582,12,582,11,583,11,584,11,585,12,586,12,587,13,586,13,587,13,588,13,588,14,589,14,588,13,587,13,587,12,586,11,587,11,588,11,587,11,588,10,589,10,590,11,592,11,594,11,592,12,593,12,592,12,593,12,594,12,595,12,596,12,596,13,595,13,596,13,597,13,598,13,599,13,604,14,604,15,602,14,601,15,599,15,598,15,599,15,596,15,597,15,596,16,597,16,596,16,597,16,596,16,595,16,595,17,595,18,594,18,593,18,592,18,592,19,591,19,591,20,590,20,591,20,591,21,590,21,589,21 Svalbard, SJM, Europe 635,328,636,329,636,330,636,331,635,332,634,332,633,332,632,332,632,331,632,330,633,329,633,328,634,328,635,328 Swaziland, SWZ, Sub Saharan Africa 574,76,575,76,574,76 Sweden, SWE, Europe 589,82,589,81,589,80,590,80,590,79,591,78,590,80,590,81,589,82 Sweden, SWE, Europe 594,80,594,79,594,78,595,77,596,77,597,77,596,77,596,78,596,79,595,79,596,79,595,79,595,80,594,80 Sweden, SWE, Europe 601,43,602,43,602,44,603,44,605,45,606,45,608,45,609,46,610,47,610,48,611,48,611,49,610,49,611,49,611,50,612,50,611,50,611,51,610,51,611,52,612,52,612,53,611,53,610,53,609,53,608,53,607,53,608,53,607,53,606,53,607,53,606,53,607,53,607,54,606,53,606,54,607,54,605,54,606,54,605,54,606,54,605,54,604,54,604,55,605,55,604,55,603,54,603,55,604,55,604,56,603,56,604,57,603,58,602,58,602,59,601,59,600,59,600,60,600,59,600,60,599,60,598,60,597,60,597,61,596,61,595,61,594,62,595,62,594,62,593,62,593,63,594,63,593,63,592,63,593,63,592,63,591,63,592,63,592,64,592,65,592,66,591,65,591,66,591,67,591,68,592,68,591,68,591,69,592,69,593,69,594,69,594,70,595,69,595,70,594,70,595,70,596,70,596,71,597,71,596,71,597,71,596,71,596,72,595,72,594,72,594,73,593,72,593,71,593,72,592,72,593,71,592,71,592,72,592,71,592,72,593,72,592,72,591,72,590,72,589,72,588,72,590,72,591,72,591,73,592,73,593,73,593,72,594,73,594,72,595,72,595,73,595,72,595,73,594,73,595,73,594,73,595,73,594,73,593,73,593,74,593,73,592,73,592,74,591,74,591,75,591,74,591,75,590,75,588,75,589,75,590,75,589,75,590,75,589,75,590,76,589,76,590,76,590,77,589,76,590,77,589,77,590,77,589,77,590,77,589,77,589,78,590,78,589,78,589,79,589,80,589,81,588,81,587,82,586,82,585,82,584,82,583,82,582,83,583,84,582,84,581,84,580,84,579,84,578,84,579,84,579,83,578,83,577,82,578,82,577,81,578,81,577,80,577,79,576,79,576,78,575,78,575,77,574,77,575,77,575,76,575,75,574,76,574,75,574,76,574,75,573,75,573,74,573,73,574,73,574,74,575,73,574,72,575,71,576,71,577,70,577,69,576,68,576,67,577,67,578,66,577,66,576,65,576,64,576,63,576,62,576,61,575,61,576,60,576,59,578,59,578,58,579,58,581,58,582,58,582,57,581,57,582,55,583,55,583,54,583,53,583,52,585,52,586,52,586,51,588,50,589,49,588,48,589,48,590,47,591,46,593,47,594,46,594,45,595,45,596,45,599,45,600,45,599,45,600,45,601,44,600,44,600,43,601,43 Sweden, SWE, Europe 568,109,569,109,569,110,570,110,571,109,571,110,571,111,570,111,570,112,569,112,569,111,569,112,568,112,568,111,567,111,567,112,567,113,566,113,567,113,566,113,566,112,565,112,565,111,564,112,563,112,563,113,562,113,561,113,560,112,560,111,559,111,558,111,558,112,557,112,558,112,557,112,558,112,558,111,558,110,559,110,560,109,561,109,561,108,560,108,561,108,560,108,561,108,562,108,563,108,562,108,563,108,564,108,565,108,565,107,566,107,566,108,567,108,568,108,568,109 Switzerland, CHE, Europe 667,139,665,141,664,141,663,141,663,142,664,143,664,144,663,144,663,145,663,146,663,147,660,148,656,150,655,151,654,151,653,152,652,152,652,153,651,153,650,154,650,153,649,153,648,153,647,152,646,152,646,151,647,151,646,151,647,150,648,150,647,150,647,149,648,149,649,149,648,149,649,148,649,147,649,146,648,146,648,147,647,147,647,146,647,145,647,144,647,143,648,143,649,142,650,142,649,141,649,140,650,140,651,140,651,141,652,141,653,140,654,140,655,140,656,140,657,141,658,140,659,140,660,140,661,140,662,139,663,139,664,139,665,139,666,139,667,139 Syria, SYR, Asia 902,185,902,184,901,183,900,183,900,182,900,181,900,180,901,178,901,177,902,177,902,176,903,175,904,175,905,175,905,176,905,177,905,178,904,178,904,179,904,181,903,182,902,183,902,184,902,185 Taiwan, TWN, Asia 752,130,751,130,751,131,751,130,750,130,748,130,748,131,747,131,747,132,748,132,749,132,750,132,751,132,752,132,753,132,754,132,755,132,755,133,755,132,756,132,756,133,757,132,758,132,759,132,760,132,761,132,760,132,760,133,761,134,761,135,762,135,763,134,763,135,764,135,764,136,764,137,764,138,765,138,765,139,764,139,764,138,763,138,761,139,760,139,761,139,761,138,759,138,759,139,758,139,757,139,757,140,756,140,755,140,754,140,754,139,754,137,753,137,753,136,754,136,753,135,752,135,751,135,751,136,750,137,750,138,749,138,748,138,748,139,747,139,746,139,745,139,744,139,744,140,743,139,743,138,744,137,744,136,745,136,744,136,744,135,744,134,743,133,743,134,743,133,742,133,742,132,743,132,744,132,745,132,745,131,746,131,746,130,747,130,746,130,745,130,746,130,747,130,748,130,747,129,748,128,749,129,749,128,750,128,751,128,751,127,751,128,752,128,751,128,752,128,751,129,751,130,752,130 Tajikistan, TJK, Asia 658,270,658,269,657,269,657,268,658,268,658,269,658,270 Tanzania, United Republic of, TZA, Sub Saharan Africa 658,274,659,274,659,273,659,274,658,274 Tanzania, United Republic of, TZA, Sub Saharan Africa 659,267,658,267,659,267,658,266,659,266,659,265,659,266,659,267 Tanzania, United Republic of, TZA, Sub Saharan Africa 628,264,629,264,630,263,630,262,631,262,631,261,632,260,632,259,631,259,631,258,631,259,631,258,632,258,632,257,632,256,632,255,631,255,631,254,632,253,634,253,635,253,636,253,638,253,640,254,641,254,642,254,644,255,647,256,648,257,652,260,653,260,652,261,653,261,657,264,657,265,657,266,656,268,656,269,656,270,657,270,657,271,658,271,658,272,658,273,657,273,657,274,658,274,658,275,657,275,657,276,658,276,658,277,658,278,658,279,659,280,659,281,659,280,659,281,660,281,661,282,661,281,661,282,660,282,660,283,659,283,658,283,657,284,656,284,655,285,654,284,653,284,653,285,652,286,651,286,651,285,650,285,650,286,649,286,648,286,648,285,647,285,646,285,644,285,644,284,643,284,644,283,643,282,643,281,643,280,642,279,641,279,641,280,641,279,640,279,639,279,638,279,638,278,637,278,636,278,635,278,635,277,634,277,634,276,633,276,632,276,632,275,631,273,631,272,630,271,629,271,628,269,628,268,628,267,628,265,628,264 Tanzania, United Republic of, TZA, Sub Saharan Africa 834,227,834,226,835,226,835,227,834,227 Thailand, THA, Asia 838,189,838,190,839,190,839,189,840,189,840,190,840,189,841,189,841,190,841,191,841,192,842,192,843,192,843,193,844,193,843,194,843,195,843,196,843,197,842,197,842,198,843,198,844,197,845,197,845,196,846,196,847,197,848,197,848,196,849,197,849,196,849,195,850,195,851,195,851,196,852,196,852,197,853,197,853,198,854,198,854,199,854,200,854,201,854,202,855,202,856,202,856,203,856,204,856,205,856,206,856,207,855,207,855,208,855,207,854,207,853,207,852,207,851,207,850,207,849,208,848,208,848,209,847,209,847,210,847,211,847,212,847,213,848,213,848,214,848,215,848,216,848,215,848,214,847,214,846,214,847,213,846,214,846,213,846,214,846,213,845,213,845,212,844,213,843,213,843,212,842,213,842,212,842,211,842,210,841,210,840,210,839,211,840,211,839,212,840,214,839,215,838,217,838,218,837,219,837,220,837,221,837,222,837,223,838,223,839,223,839,224,839,225,840,225,840,227,841,228,841,229,841,228,840,228,840,227,840,228,841,229,842,230,843,230,844,230,843,230,844,230,845,231,846,232,845,233,844,233,843,233,843,234,843,233,842,233,843,233,843,232,842,232,842,231,841,231,840,230,840,231,839,231,839,230,839,229,838,229,838,228,838,229,838,228,838,229,838,228,837,228,837,227,836,226,835,226,835,225,835,226,834,226,834,225,834,224,835,223,834,223,835,223,835,222,835,221,836,220,836,219,836,218,837,218,838,216,838,215,838,214,838,213,837,212,837,211,837,210,837,209,836,208,835,207,834,206,834,205,835,205,835,204,835,205,835,204,835,203,835,202,836,202,836,201,836,202,835,201,835,200,835,199,834,198,833,198,833,197,832,196,832,195,833,195,833,194,833,193,833,192,834,192,834,191,835,191,836,191,837,191,837,190,838,190,838,189 Thailand, THA, Asia 539,217,541,217,541,218,542,218,542,219,544,221,544,222,544,223,544,224,544,225,544,229,544,230,545,231,545,232,544,232,543,232,542,232,542,231,541,230,541,229,541,228,541,227,541,226,542,226,542,225,541,225,541,224,541,223,541,222,540,222,541,222,540,222,540,221,541,222,541,221,540,221,541,220,540,220,540,219,539,219,539,218,540,218,540,217,539,217 Togo, TGO, Sub Saharan Africa 16,307,15,307,16,307,15,307,16,307 Tonga, TON, Pacific 14,314,13,314,14,314,13,314,14,314 Tonga, TON, Pacific 17,307,17,307 Tonga, TON, Pacific 17,309,17,309 Tonga, TON, Pacific 14,310,14,310 Tonga, TON, Pacific 17,310,17,310 Tonga, TON, Pacific 15,315,15,314,15,315 Tonga, TON, Pacific 18,307,17,307,17,306,18,306,17,306,17,307,17,306,18,306,18,307 Tonga, TON, Pacific 354,220,355,220,355,219,355,218,356,218,357,218,356,218,356,219,357,220,355,220,354,220 Trinidad and Tobago, TTO, Caribbean 572,150,572,149,573,149,572,150 Tunisia, TUN, NorthAfrica 574,151,574,153,572,154,571,155,570,155,570,156,570,158,569,159,568,160,567,156,567,154,565,153,564,152,564,151,563,151,563,150,562,149,562,148,563,148,563,147,564,147,564,146,565,145,564,144,565,144,565,143,564,143,565,141,564,141,565,141,565,140,566,140,566,139,567,139,568,139,569,138,569,139,570,139,571,140,570,140,571,140,572,140,572,139,573,139,573,140,572,140,572,141,571,141,571,142,571,143,572,143,573,144,573,145,572,146,571,147,570,148,570,149,571,149,571,150,572,149,572,150,573,150,573,151,574,151 Tunisia, TUN, NorthAfrica 619,125,618,125,619,125,620,125,621,124,622,125,623,125,623,124,624,125,623,125,624,125,624,126,625,126,627,127,626,128,625,128,625,127,625,128,624,127,623,128,622,128,621,128,620,129,619,129,619,130,618,130,619,129,620,129,619,129,618,129,618,128,618,127,619,127,619,126,619,125 Turkey, TUR, Asia 664,126,665,126,667,126,668,126,669,127,670,127,670,128,671,128,670,129,671,130,670,130,672,130,673,131,674,131,674,132,673,131,673,132,672,132,672,133,672,134,672,135,673,135,673,136,672,137,673,137,673,138,674,139,673,139,672,140,672,139,671,139,670,139,669,139,669,138,668,139,668,138,667,139,666,139,665,139,664,139,663,139,662,139,661,140,660,140,659,140,658,140,657,141,656,140,655,140,654,140,653,140,652,141,651,141,651,140,650,140,649,140,649,141,650,142,649,142,648,143,647,143,647,142,647,141,648,141,648,140,647,140,646,140,647,140,646,141,644,140,643,140,642,141,642,142,641,142,640,142,639,142,638,142,637,142,636,142,636,141,634,141,633,140,632,140,631,140,631,141,631,142,630,142,629,142,628,142,627,142,627,141,627,140,626,140,626,141,626,140,625,140,624,140,624,141,623,141,624,141,624,140,623,140,624,140,623,140,623,141,622,140,622,141,622,140,623,140,624,140,624,139,623,139,622,140,621,140,621,139,622,139,622,138,621,138,621,137,621,136,620,136,619,136,618,136,618,135,619,136,619,135,619,134,619,135,620,136,620,135,621,135,620,135,620,134,621,134,620,134,620,133,619,133,620,133,620,132,619,132,618,132,618,131,618,130,619,130,620,129,621,129,622,130,623,130,623,129,624,129,623,129,625,129,626,129,627,129,626,129,628,128,629,128,628,128,627,128,627,127,629,127,630,127,632,127,633,127,634,127,635,126,636,126,636,125,637,125,639,125,640,124,642,125,643,125,644,125,645,124,645,125,646,126,647,125,648,126,649,127,649,126,650,126,650,127,651,127,652,127,653,127,654,128,655,128,656,127,657,127,658,127,659,128,660,128,661,127,662,127,663,127,664,126 Turkey, TUR, Asia 697,125,698,124,699,124,700,124,701,123,702,124,703,124,704,124,704,125,705,126,706,126,706,127,707,127,707,126,707,127,710,127,711,127,711,126,710,126,710,125,711,125,711,124,712,124,713,124,713,123,714,123,715,123,715,124,715,123,714,123,714,122,715,123,715,122,716,123,717,123,718,123,718,124,719,124,720,124,719,124,720,124,719,125,720,125,720,126,721,127,722,127,723,127,724,127,725,127,725,128,726,128,726,129,727,129,727,130,727,131,728,131,729,132,730,132,731,133,732,134,733,134,734,135,735,135,736,136,737,136,738,136,739,136,740,137,739,137,739,138,738,139,737,138,736,138,736,139,735,139,734,139,734,140,733,141,733,142,732,142,731,142,730,143,729,143,729,144,727,145,726,145,726,144,725,144,724,144,723,144,723,143,723,142,723,141,721,141,720,139,719,139,718,139,718,138,717,138,716,137,716,138,715,137,715,138,714,137,713,137,712,137,712,136,711,136,710,136,709,136,708,136,709,136,708,136,707,136,706,136,705,136,704,137,704,138,703,138,702,139,701,138,701,137,701,135,701,134,701,133,700,133,701,133,700,133,699,132,699,133,699,132,700,132,701,132,700,132,700,131,700,130,699,131,698,131,698,130,698,131,699,131,698,130,698,129,698,128,698,127,699,128,700,128,701,129,701,128,702,129,702,128,703,128,702,128,703,128,704,128,704,127,703,127,702,126,701,125,701,124,700,124,699,124,698,125,698,126,698,125,698,126,698,127,698,126,697,126,697,125 Turkmenistan, TKM, Asia 319,188,318,187,319,187,320,187,320,188,319,188 Turks and Caicos Islands, TCA, Caribbean 641,250,641,251,641,252,641,254,640,254,638,253,636,253,635,253,634,253,632,253,631,254,630,254,630,255,629,255,629,254,628,255,628,253,628,252,629,252,628,252,629,251,629,250,629,249,629,248,630,248,630,247,631,247,632,246,633,245,633,244,633,243,632,243,632,242,632,241,632,240,632,239,633,239,634,240,634,239,635,239,635,240,636,240,637,239,638,239,639,239,640,239,641,238,642,238,642,239,643,239,643,240,643,241,643,242,644,242,644,243,644,244,644,245,645,245,644,245,645,245,644,246,644,247,643,247,643,248,642,248,642,249,642,250,641,250 Uganda, UGA, Sub Saharan Africa 610,96,611,96,612,96,612,95,613,95,614,95,615,95,616,95,617,95,618,95,619,95,620,95,621,95,621,96,622,96,623,96,624,96,625,96,626,96,627,96,628,96,629,96,630,96,631,96,631,97,631,96,631,95,632,95,631,95,632,95,632,94,633,94,634,94,635,94,636,94,637,94,637,93,637,94,638,94,639,94,639,93,640,93,640,94,641,93,641,94,642,94,642,95,643,95,642,95,642,96,642,97,643,97,644,97,645,97,646,97,645,98,646,98,646,99,647,99,648,99,648,100,649,100,650,100,650,99,651,99,652,99,652,100,653,100,654,101,654,100,655,100,655,101,656,101,657,101,658,101,658,102,659,102,660,102,660,103,659,103,659,104,660,104,659,104,658,105,659,105,659,106,660,106,659,106,659,107,658,107,657,107,656,107,655,108,654,108,654,109,652,109,651,110,650,110,650,111,650,110,649,110,648,111,648,110,647,111,646,111,645,112,644,112,645,112,645,111,645,112,644,112,644,113,645,114,646,114,646,115,647,114,648,114,649,114,649,115,648,115,647,116,647,115,646,115,646,116,645,116,644,116,643,116,642,117,641,117,640,117,640,116,640,115,639,115,638,114,637,115,637,114,638,114,639,113,640,113,641,113,640,113,640,112,639,112,638,112,637,112,636,112,635,112,635,111,636,111,635,111,634,111,635,111,637,111,636,111,635,111,635,110,636,110,635,110,635,109,635,110,635,111,634,111,634,110,634,111,633,111,632,111,632,112,631,112,630,113,629,113,629,114,629,113,628,113,628,114,629,114,629,115,628,115,629,115,628,114,627,114,627,115,626,115,625,115,624,114,625,114,625,113,626,113,626,112,627,112,626,112,626,111,627,111,628,111,629,111,628,111,629,111,630,111,629,111,629,110,628,110,628,109,628,108,628,109,628,108,627,108,627,107,626,107,626,106,625,106,624,106,625,106,624,106,623,106,623,105,622,105,621,105,620,105,620,106,620,105,620,106,619,106,618,106,618,107,616,107,615,107,614,107,613,107,612,107,611,107,610,107,610,106,610,107,609,106,609,107,608,106,608,107,608,106,607,106,606,106,606,105,606,104,607,104,607,103,608,103,607,102,608,102,608,101,609,100,610,100,611,99,612,99,611,98,612,98,611,98,611,97,610,97,611,96,610,96 Ukraine, UKR, Europe 708,172,708,173,708,174,709,174,709,175,709,176,708,175,708,178,707,179,707,184,706,184,696,183,694,180,692,178,692,176,692,177,693,177,694,177,693,177,694,178,694,177,694,178,695,178,695,179,696,179,697,178,698,178,699,178,700,178,701,178,702,178,703,178,703,177,703,176,704,176,705,176,705,175,706,174,707,173,708,172 United Arab Emirates, ARE, Asia 521,82,520,82,521,81,521,82,521,81,522,81,523,81,522,81,522,82,522,81,521,82 United Kingdom, GBR, Europe 526,91,526,90,527,90,527,91,526,91 United Kingdom, GBR, Europe 524,84,523,84,523,83,524,83,524,84 United Kingdom, GBR, Europe 519,77,518,77,519,77,518,76,519,76,518,76,519,76,521,75,520,76,521,76,520,76,520,77,519,77,520,76,519,77,520,77,519,77 United Kingdom, GBR, Europe 521,79,522,79,521,79,520,79,520,78,519,78,520,78,521,77,521,78,521,79,522,79,523,79,522,79,521,79 United Kingdom, GBR, Europe 531,74,530,74,530,73,530,74,529,74,530,73,531,74 United Kingdom, GBR, Europe 518,78,517,78,518,78,518,77,518,78 United Kingdom, GBR, Europe 521,84,521,83,520,83,521,83,521,84 United Kingdom, GBR, Europe 522,83,521,83,522,83,522,82,522,83 United Kingdom, GBR, Europe 536,99,535,99,535,98,536,98,536,99 United Kingdom, GBR, Europe 517,79,517,78,518,78,518,79,517,78,518,79,517,79 United Kingdom, GBR, Europe 536,71,535,71,536,70,535,70,534,70,535,70,535,69,536,69,535,69,536,69,535,69,536,69,536,70,536,71 United Kingdom, GBR, Europe 524,77,523,76,524,76,523,76,524,76,525,76,524,76,524,75,525,75,526,75,525,75,526,75,527,75,528,75,529,75,529,74,530,75,530,76,529,76,528,77,527,77,528,77,527,77,527,78,526,78,527,78,527,77,527,78,529,78,529,77,530,77,530,78,531,77,532,77,533,77,534,77,534,78,533,79,533,80,532,80,532,81,531,81,530,81,531,81,532,82,531,82,530,82,529,82,528,82,529,82,530,83,531,82,532,82,533,83,534,84,535,84,535,85,536,86,536,87,537,87,538,87,538,88,539,88,539,89,540,90,539,89,538,89,539,89,539,90,540,90,541,91,540,92,541,92,542,92,543,92,544,92,545,93,544,94,544,95,543,94,543,95,542,95,542,96,541,96,542,96,541,96,542,96,543,96,544,96,544,97,543,97,542,97,542,98,541,98,540,98,539,98,537,98,536,98,535,98,536,98,535,98,534,98,533,98,534,99,533,99,532,99,531,98,529,99,529,98,529,99,529,100,528,100,527,100,527,99,527,100,526,99,525,100,524,100,524,101,524,100,523,100,522,100,523,100,524,99,525,99,526,98,526,97,526,98,527,97,528,97,530,97,531,96,532,95,531,96,530,96,529,96,528,96,527,96,526,95,525,95,525,96,524,95,525,95,524,95,524,94,525,94,526,94,527,94,527,93,528,93,527,93,527,92,528,92,527,92,526,92,525,92,526,92,526,91,527,91,528,91,529,91,529,90,530,90,530,91,530,90,531,91,531,90,531,91,531,90,530,90,531,89,530,89,531,89,531,88,530,88,529,88,529,87,529,86,530,86,529,86,528,86,527,86,526,86,525,86,525,87,525,86,524,86,524,85,524,86,525,86,524,85,525,85,526,84,525,84,525,83,526,83,525,82,525,83,525,82,525,83,524,83,523,83,524,82,525,82,524,82,523,82,523,83,524,83,523,83,523,84,523,85,522,85,522,84,522,83,523,83,522,83,523,83,522,83,523,82,522,83,523,82,523,81,524,81,523,81,524,81,523,81,524,81,525,80,524,80,523,81,522,81,521,81,522,81,523,80,521,80,522,80,522,79,523,80,522,79,523,79,522,79,523,79,522,79,522,78,523,78,522,78,523,78,522,78,522,77,523,77,524,77,523,77,524,77 United Kingdom, GBR, Europe 132,78,131,78,132,78,131,78,132,78,131,78,131,77,130,77,131,77,130,76,131,76,130,76,131,76,132,76,133,76,132,76,133,76,133,77,132,77,133,77,133,76,135,76,135,77,134,77,135,77,134,77,133,77,134,77,135,77,135,78,133,78,132,77,132,78,133,78,132,78 United States, USA, North America 77,80,78,80,78,79,78,80,78,79,77,79,77,80,77,79,78,79,77,79,76,79,77,79,77,80,76,80,76,79,75,78,76,78,77,77,77,78,78,78,78,79,78,78,79,78,78,77,79,77,79,78,79,77,80,77,79,77,80,77,80,76,80,77,81,77,82,77,83,77,82,77,82,78,82,77,82,78,83,78,82,78,81,78,80,78,81,78,82,78,82,79,81,79,81,78,80,78,80,79,81,79,80,79,79,79,79,80,78,80,77,80 United States, USA, North America 132,80,132,79,133,79,132,80 United States, USA, North America 80,80,79,79,80,79,81,79,80,79,80,80 United States, USA, North America 139,81,138,80,137,79,138,79,140,80,141,80,141,81,140,81,140,80,139,80,140,80,140,81,139,81 United States, USA, North America 137,83,137,82,137,81,137,80,137,81,136,80,137,80,136,80,137,80,138,80,138,81,138,80,138,81,138,82,138,81,138,82,137,82,137,83 United States, USA, North America 141,81,141,80,142,81,141,81 United States, USA, North America 56,75,56,74,57,74,57,75,56,75 United States, USA, North America 141,82,140,81,141,81,142,81,142,82,141,82 United States, USA, North America 143,82,142,81,143,81,142,81,143,81,144,82,143,82 United States, USA, North America 61,185,60,185,60,184,61,184,62,184,61,185 United States, USA, North America 143,83,142,83,142,82,141,82,142,82,142,81,142,82,143,82,143,83 United States, USA, North America 138,83,138,82,139,82,140,82,139,82,139,83,138,83 United States, USA, North America 7,96,6,95,8,95,7,95,7,96 United States, USA, North America 146,85,146,84,146,85,145,85,146,84,145,84,146,84,145,84,145,85,145,84,145,85,144,84,145,84,144,84,145,83,144,83,145,83,144,83,145,83,146,83,147,83,147,84,146,84,146,85 United States, USA, North America 143,86,142,86,143,86,142,86,142,85,142,86,142,85,141,85,140,85,141,85,140,85,140,84,141,84,140,84,141,84,140,84,139,84,139,83,140,83,140,82,139,82,139,81,140,82,141,82,142,83,142,84,142,83,142,84,143,84,142,84,141,84,142,84,143,84,142,84,143,84,143,85,144,85,143,85,143,86,144,85,144,86,143,86,144,86,143,86 United States, USA, North America 1077,96,1076,96,1075,96,1076,96,1077,96,1078,96,1077,96 United States, USA, North America 66,187,66,186,66,187,66,186,65,186,66,186,66,187,65,187,65,186,66,185,66,186,67,187,66,187 United States, USA, North America 57,85,57,84,58,84,57,85,58,84,58,85,57,85 United States, USA, North America 1039,86,1038,85,1037,85,1037,84,1038,84,1038,85,1039,86 United States, USA, North America 59,86,59,85,60,85,59,86 United States, USA, North America 145,86,145,85,145,86 United States, USA, North America 141,86,140,86,140,85,141,85,140,85,141,85,141,86 United States, USA, North America 45,87,46,86,47,86,48,86,48,85,49,85,49,86,50,86,50,87,50,86,49,86,49,87,47,87,46,87,45,87 United States, USA, North America 1044,87,1043,87,1042,86,1044,87 United States, USA, North America 42,88,41,88,42,88,43,88,42,88 United States, USA, North America 37,91,36,91,36,90,38,90,39,90,38,90,39,90,38,89,39,89,39,90,39,89,38,89,39,88,40,89,41,89,40,89,41,89,40,90,39,90,37,91 United States, USA, North America 32,92,33,91,34,91,34,90,35,90,36,90,35,91,34,91,33,92,32,92 United States, USA, North America 69,187,68,187,69,187 United States, USA, North America 1058,92,1057,92,1057,91,1059,92,1060,92,1059,92,1058,92 United States, USA, North America 19,94,18,94,17,94,19,94,21,94,20,94,19,94 United States, USA, North America 14,94,15,94,16,94,17,94,16,94,17,93,18,94,17,94,16,94,14,94 United States, USA, North America 1071,95,1072,95,1072,94,1073,94,1072,95,1071,95 United States, USA, North America 9,96,9,95,10,95,9,95,9,96,9,95,9,96 United States, USA, North America 6,96,5,96,5,95,6,95,5,95,6,95,7,95,6,95,6,96 United States, USA, North America 70,189,70,188,69,188,70,187,70,188,71,188,72,188,71,188,71,189,70,189 United States, USA, North America 172,107,172,106,171,106,172,105,172,106,171,106,172,106,172,107 United States, USA, North America 73,194,72,193,72,192,71,191,72,191,72,190,73,190,74,191,75,191,75,192,74,193,73,193,73,194 United States, USA, North America 318,129,317,129,317,128,318,128,319,128,320,128,322,128,323,127,322,127,322,128,323,127,324,127,322,128,321,128,322,128,320,128,318,129 United States, USA, North America 310,118,311,117,312,117,313,116,314,116,315,115,318,115,319,115,320,115,321,115,324,115,325,115,326,115,326,114,327,114,327,115,327,114,328,114,327,114,328,113,329,113,329,112,329,111,329,110,331,109,332,108,332,109,333,109,334,109,334,108,335,108,335,109,336,109,336,111,336,113,337,114,337,115,338,115,338,116,339,116,338,117,338,116,337,116,337,117,337,116,337,117,337,116,337,117,336,117,335,117,336,117,335,117,334,117,334,118,333,117,333,118,333,117,332,118,332,119,332,118,331,119,331,118,331,119,330,119,331,118,330,119,330,118,330,119,329,119,330,119,329,119,329,120,328,120,328,121,327,121,327,122,327,123,328,122,328,123,327,123,326,123,326,124,327,124,328,124,327,124,328,125,329,125,330,125,329,125,329,124,330,125,328,126,328,125,327,125,327,126,326,126,326,125,326,126,326,125,325,125,325,126,323,127,323,126,323,127,322,126,322,127,321,127,320,127,319,127,318,128,318,127,318,128,317,128,317,129,318,129,317,130,317,131,317,132,316,132,316,133,316,132,316,133,315,133,315,134,315,133,314,133,314,132,313,132,313,131,314,131,313,131,313,132,313,133,314,134,314,135,314,136,313,137,313,138,312,138,312,139,311,139,312,138,312,137,313,137,312,137,313,137,312,137,312,136,312,135,312,136,312,135,311,136,311,135,311,136,311,135,312,135,311,135,311,134,310,134,311,134,310,134,311,133,311,134,311,133,312,132,311,132,312,132,311,132,311,133,311,132,310,132,310,133,310,134,310,133,310,134,310,135,309,134,310,135,310,136,311,136,310,136,309,136,309,135,309,136,309,135,308,135,308,134,308,135,308,136,308,135,309,135,308,136,309,136,310,136,311,137,311,138,310,138,310,137,310,138,310,137,309,136,308,136,309,137,310,138,311,138,310,138,311,138,311,139,310,138,310,139,309,138,310,139,311,139,310,139,311,139,310,140,310,139,309,139,308,139,308,138,308,139,309,139,310,139,310,140,311,140,312,140,312,141,312,142,313,143,312,142,312,141,312,140,312,141,311,141,312,141,312,142,311,142,310,142,311,142,310,142,309,142,309,143,311,143,311,144,312,143,312,144,311,144,310,144,309,144,308,144,309,144,310,145,309,145,310,145,309,146,308,145,309,146,310,146,310,145,310,146,310,145,310,146,311,146,310,145,311,146,310,146,311,146,310,146,309,146,308,146,308,147,307,147,308,147,307,146,307,147,306,148,306,149,305,149,304,149,303,149,303,150,302,150,302,151,302,150,302,151,301,151,302,151,301,151,301,152,300,152,300,153,299,153,300,153,299,153,298,153,297,153,298,153,298,154,298,153,297,153,298,154,297,154,297,153,297,154,297,155,296,155,296,156,296,155,296,156,296,157,295,156,296,157,295,157,295,158,295,159,296,160,296,162,297,163,297,164,298,165,298,166,298,167,298,166,298,165,297,165,297,164,297,165,298,166,298,168,299,169,299,170,299,171,299,172,299,173,299,174,298,174,299,174,298,175,297,175,296,175,297,175,296,174,296,173,295,173,296,173,295,173,294,173,295,173,294,173,294,172,294,171,293,171,294,171,294,170,294,171,293,171,293,170,292,169,292,168,291,168,292,168,292,167,291,166,291,167,292,167,291,167,291,166,291,165,292,165,292,164,291,164,291,163,290,163,290,162,289,162,289,161,288,160,287,160,286,161,285,161,284,161,283,161,284,161,283,161,283,160,282,160,283,160,282,160,281,159,280,159,281,159,280,159,278,159,279,159,278,159,279,159,278,159,278,160,277,160,277,159,277,160,276,160,276,159,276,158,275,158,275,160,274,159,274,160,274,159,273,159,272,160,272,159,271,159,272,160,271,160,270,160,269,159,269,160,268,160,269,160,270,160,271,160,270,160,270,161,271,161,271,160,271,161,271,162,270,161,271,162,270,162,271,162,272,162,272,163,272,164,272,163,271,164,272,163,271,163,270,163,270,162,269,162,269,163,268,163,268,162,268,163,267,163,266,163,265,162,266,163,266,162,266,163,266,162,266,163,266,162,265,162,265,161,264,161,263,161,263,162,262,162,261,162,260,161,258,161,257,161,256,162,255,162,256,162,255,162,255,161,255,162,254,161,255,162,254,162,255,162,255,163,254,163,253,164,252,164,252,165,251,165,251,164,250,165,250,164,250,165,250,164,250,165,250,166,249,166,249,165,249,166,248,166,248,167,247,167,248,167,247,169,247,168,247,169,247,168,246,168,246,169,247,169,247,170,247,171,247,172,248,172,248,173,248,172,248,173,247,173,247,172,246,172,245,172,244,172,243,171,242,171,242,170,241,170,241,169,241,168,240,168,240,167,239,166,239,165,238,165,238,164,237,163,236,162,235,162,235,161,234,161,233,161,232,161,231,161,231,162,231,163,230,163,230,164,229,163,228,163,226,162,225,161,225,160,225,159,224,158,223,158,222,157,221,156,220,155,215,155,215,157,206,157,201,155,195,153,195,152,194,152,188,153,188,152,188,153,188,152,188,153,188,152,187,151,187,150,185,149,184,149,184,148,183,148,182,148,181,148,181,147,180,147,179,147,178,147,178,146,178,145,177,145,177,144,176,144,176,143,175,143,175,142,174,142,174,141,174,140,173,140,173,139,172,139,172,138,172,137,172,138,173,138,173,137,172,137,172,136,173,136,174,136,175,136,174,136,173,136,172,136,172,137,171,137,171,136,171,137,171,136,170,136,170,135,169,135,168,134,169,133,168,132,168,131,167,130,166,129,167,128,167,127,167,126,167,125,167,124,166,123,166,122,166,121,166,120,167,120,167,121,167,120,167,119,167,118,167,117,167,116,168,116,168,115,168,114,168,113,168,112,169,112,170,112,169,112,168,112,167,112,167,111,168,111,168,110,167,110,168,110,167,109,167,110,167,109,167,108,166,107,165,106,166,106,166,105,165,105,166,105,167,106,170,106,171,106,172,107,171,107,170,108,171,108,170,108,171,108,171,107,172,107,172,108,171,108,172,108,171,108,172,108,172,109,171,109,172,108,171,108,171,109,171,108,171,109,170,109,171,109,172,109,173,108,172,108,173,108,172,107,173,107,173,106,172,106,172,105,171,105,172,105,172,104,171,104,179,104,189,104,199,104,209,104,218,104,228,104,238,104,248,104,254,104,254,103,254,102,255,103,255,104,256,104,257,104,258,105,259,105,260,105,262,105,261,105,262,105,262,106,263,106,263,105,264,106,265,106,266,106,267,106,268,106,269,106,270,106,270,107,270,106,271,106,271,107,273,106,274,106,277,107,280,108,283,109,285,110,285,111,286,111,287,111,287,112,288,112,289,112,289,113,291,114,292,114,292,117,293,119,293,120,292,121,292,122,292,123,291,123,290,124,290,125,291,125,292,125,295,124,296,124,299,123,302,122,303,122,302,121,302,120,303,120,306,120,309,120,310,118 United States, USA, North America 136,79,136,78,137,79,136,78,135,76,135,75,135,76,137,76,137,77,138,78,138,77,137,77,137,76,137,77,137,78,138,78,137,78,138,78,138,79,137,78,137,79,136,79 United States, USA, North America 81,77,81,76,80,76,81,76,80,76,81,76,81,75,82,75,82,76,83,75,83,76,84,75,84,76,83,76,82,76,81,76,81,77 United States, USA, North America 100,70,99,70,100,69,99,69,100,69,101,69,100,70 United States, USA, North America 23,70,22,69,22,70,20,69,21,69,22,69,23,70 United States, USA, North America 41,71,39,71,38,70,38,71,38,70,37,70,39,70,40,70,40,69,41,69,41,70,42,70,42,69,42,70,43,71,41,71 United States, USA, North America 96,71,97,70,98,70,98,69,98,70,99,70,98,70,97,70,97,71,96,71 United States, USA, North America 31,62,30,62,30,61,29,61,27,60,26,60,25,61,24,60,24,59,25,59,25,60,26,60,27,60,28,59,29,60,30,60,31,60,32,60,32,61,32,60,33,61,32,61,31,61,31,62 United States, USA, North America 136,82,135,82,134,81,135,80,135,81,135,80,134,81,134,80,133,80,134,80,133,80,134,79,133,79,134,79,133,79,134,79,133,79,132,78,133,78,134,78,133,78,134,78,135,78,135,79,136,81,136,82 United States, USA, North America 117,42,116,50,116,60,117,70,118,70,120,70,120,69,122,69,122,70,122,71,123,71,124,71,126,72,127,73,127,74,129,73,130,73,130,72,131,72,130,72,133,71,134,72,135,72,134,72,135,73,136,73,136,74,137,74,138,74,138,75,139,75,140,76,142,78,143,79,142,79,143,79,143,80,144,80,144,81,145,81,146,81,147,81,148,82,149,82,149,83,149,84,150,85,149,85,148,86,147,86,147,85,146,85,147,85,148,85,148,84,147,85,147,83,146,83,146,82,146,83,145,83,145,82,144,83,144,84,143,84,143,83,144,83,144,82,145,82,144,82,144,81,143,81,142,81,143,81,142,81,142,80,141,80,141,79,140,79,139,79,140,79,140,78,139,79,139,78,140,78,139,78,139,77,140,77,139,77,138,77,138,76,138,77,137,76,138,76,137,75,138,75,137,76,136,75,135,75,135,74,135,75,135,74,134,74,133,73,134,72,133,72,133,73,134,73,133,73,133,74,134,74,134,75,134,76,133,75,132,75,131,74,132,74,131,74,131,73,131,74,130,74,129,73,130,74,128,73,129,74,128,74,129,74,130,74,130,75,131,75,131,76,131,75,130,75,130,76,130,75,130,76,129,76,129,75,128,75,127,75,126,74,125,73,124,73,123,73,122,72,121,72,120,72,121,72,121,71,122,71,121,71,122,72,121,72,122,72,122,71,121,70,121,71,120,71,119,71,118,71,115,71,116,71,116,70,115,70,114,71,113,70,111,70,108,70,108,71,107,70,106,70,105,70,105,69,106,69,106,68,105,68,104,69,103,69,102,69,103,69,103,68,102,69,102,68,102,69,102,68,101,69,101,68,100,68,99,68,101,68,100,68,99,68,100,68,99,68,99,67,100,67,101,67,100,67,99,68,98,68,99,68,98,67,98,68,98,67,98,68,97,68,97,67,97,68,97,67,97,68,96,68,97,68,96,68,95,68,96,67,95,67,94,67,94,68,95,67,95,68,94,68,93,68,94,68,94,69,95,68,95,69,94,69,93,69,94,69,95,69,96,69,95,69,95,70,94,70,95,70,94,70,94,71,94,70,94,71,93,71,92,71,92,70,92,71,92,70,91,70,91,71,90,71,90,72,90,71,89,71,90,71,89,72,89,71,89,72,88,72,89,71,88,72,87,73,86,73,87,73,86,73,85,73,84,73,84,72,85,72,86,72,87,71,86,71,85,72,84,71,84,70,85,70,85,69,86,69,85,68,86,68,87,68,88,67,89,68,90,68,92,68,91,68,89,67,90,67,91,66,92,66,91,66,90,66,90,67,88,67,88,66,88,67,86,67,84,68,83,69,82,69,83,69,82,70,81,70,80,70,81,70,82,70,81,71,80,71,81,71,80,71,80,72,80,71,80,72,79,72,80,71,79,71,79,72,79,71,78,72,79,72,78,72,77,72,78,72,77,73,78,73,79,74,80,74,79,74,79,75,78,75,77,75,76,76,77,76,76,76,77,76,76,76,75,76,74,76,74,77,73,77,74,77,73,77,72,78,71,78,70,79,70,80,69,80,69,79,69,80,68,80,67,80,67,81,66,81,66,80,66,81,65,81,66,81,65,81,64,81,64,82,64,81,64,82,65,82,64,82,65,82,64,82,64,83,64,82,64,83,64,82,63,82,64,82,63,82,64,82,64,83,63,83,63,82,63,83,62,83,61,83,61,84,60,84,61,84,60,84,61,83,60,83,61,83,60,83,59,83,59,84,58,84,57,84,58,84,57,84,56,84,55,84,56,84,55,84,54,84,54,85,53,85,54,85,53,85,52,85,51,85,52,85,52,86,52,85,51,86,51,85,50,85,50,86,49,86,50,86,49,86,50,86,50,85,51,85,52,84,53,83,55,83,56,83,57,83,56,83,57,83,58,83,57,83,58,83,59,83,58,83,58,82,60,81,62,80,63,80,64,80,63,80,64,79,65,79,65,78,66,78,67,78,66,78,67,77,67,76,68,76,67,76,67,75,68,74,69,74,69,73,68,74,65,75,64,74,64,73,65,73,65,74,66,74,65,74,65,73,64,73,63,74,63,75,62,75,61,74,60,74,59,74,59,73,58,73,57,74,56,74,55,74,54,75,53,75,54,74,54,75,54,74,55,74,54,74,54,73,55,73,54,73,53,73,54,73,54,72,54,71,53,71,53,70,52,70,53,70,52,70,52,69,53,69,54,68,53,69,53,68,53,69,52,69,52,70,51,70,52,70,52,71,51,70,51,71,50,71,48,71,47,71,46,70,45,70,46,70,45,70,45,69,44,69,45,69,43,69,44,69,44,68,45,68,44,68,45,68,46,68,45,68,47,68,46,69,47,69,47,68,48,68,48,69,49,68,48,68,49,68,48,68,46,68,45,68,44,68,44,67,45,67,44,67,43,67,44,67,44,66,45,66,44,66,44,67,43,67,42,67,42,66,41,66,41,65,41,66,42,65,41,65,42,65,43,65,42,65,42,64,43,63,44,63,45,63,46,63,45,63,46,62,45,63,45,62,45,61,46,61,47,61,46,61,47,61,48,61,49,61,51,61,53,60,56,60,57,59,57,58,56,57,55,57,56,57,57,57,57,56,56,56,57,56,56,56,55,56,54,56,53,56,52,57,51,57,50,57,49,57,50,57,49,57,48,57,47,57,45,57,41,57,40,57,40,56,39,56,39,55,40,55,41,55,39,54,37,54,36,54,35,54,35,53,36,53,35,53,35,54,36,53,37,53,38,53,39,53,41,52,42,52,43,52,42,52,43,51,44,51,45,51,48,51,49,51,48,51,48,52,47,52,48,52,51,52,52,52,53,52,54,52,54,53,54,52,55,52,56,52,57,52,56,51,55,51,54,51,54,52,54,51,53,50,52,50,53,50,53,51,54,51,55,51,56,51,58,51,59,51,58,51,57,51,56,51,55,51,54,50,55,50,54,49,53,49,52,50,52,49,53,49,52,49,51,49,48,49,48,48,47,48,45,47,43,46,42,46,41,46,39,45,40,45,41,45,40,45,41,45,41,44,44,44,47,44,48,43,50,42,50,43,50,42,51,41,50,41,51,41,52,41,52,40,54,40,53,40,54,40,55,40,57,40,58,39,59,39,60,39,59,39,60,39,59,40,60,39,60,40,60,39,62,39,61,39,60,39,59,39,62,38,61,38,62,38,63,38,62,38,64,38,65,38,66,38,67,37,68,37,69,37,70,36,70,37,71,37,72,37,73,37,72,38,71,38,72,38,73,38,74,37,74,38,74,37,75,37,76,37,76,38,75,38,76,38,77,38,78,38,81,38,82,38,81,38,82,38,83,38,82,38,82,39,83,39,82,39,84,39,85,39,86,39,87,39,88,39,89,39,90,39,91,39,92,39,93,39,94,39,94,40,95,39,96,40,98,40,101,40,102,40,103,40,104,41,105,41,107,40,109,40,110,40,112,41,113,41,114,41,115,41,115,42,116,42,116,41,117,42 United States, USA, North America 365,348,365,347,365,346,366,345,365,345,366,345,366,344,366,343,366,342,367,341,368,341,369,341,370,341,371,342,371,343,372,343,371,343,371,344,372,344,372,343,373,343,374,344,375,345,376,345,376,346,377,346,378,346,378,347,379,348,380,348,380,349,379,350,379,351,379,352,379,353,378,353,378,354,377,354,377,355,377,354,376,354,377,355,376,355,375,355,374,355,373,355,372,355,371,355,370,355,369,354,368,354,367,354,366,354,365,353,364,352,364,351,364,350,365,350,365,349,365,348 Uruguay, URY, Latin America 715,114,716,114,722,118,722,117,723,118,723,117,723,118,726,120,729,120,731,120,733,120,734,119,735,120,736,121,737,122,738,122,738,123,738,124,739,124,739,125,740,127,741,127,742,127,743,127,744,127,744,128,745,129,745,128,746,128,746,127,747,127,747,126,748,126,748,125,749,125,750,125,750,124,751,124,752,124,753,124,752,124,752,125,751,125,750,126,751,126,752,126,752,127,753,127,754,127,754,126,754,127,754,126,755,126,755,127,756,127,757,127,757,128,758,128,759,128,758,128,758,129,757,129,756,129,755,130,756,130,755,130,754,130,753,130,752,130,751,130,751,129,752,128,751,128,752,128,751,128,751,127,751,128,750,128,749,128,749,129,748,128,747,129,748,130,747,130,746,130,745,130,746,130,747,130,746,130,746,131,745,131,745,132,744,132,743,132,742,132,742,133,743,133,743,134,743,133,744,134,744,135,744,136,745,136,744,136,744,137,743,138,743,139,742,139,741,139,741,138,740,138,739,138,739,137,740,137,739,136,738,136,737,136,736,136,735,135,734,135,733,134,732,134,731,133,730,132,729,132,728,131,727,131,727,130,727,129,726,129,726,128,725,128,725,127,724,127,723,127,722,127,721,127,720,126,720,125,719,125,720,124,719,124,720,124,719,124,718,124,718,123,717,123,716,123,715,122,715,123,714,122,714,123,715,123,715,124,715,123,714,123,713,123,713,124,712,124,711,124,711,125,710,125,710,126,711,126,711,127,710,127,707,127,707,115,715,114 Uzbekistan, UZB, Asia 1044,300,1043,299,1044,299,1044,300 Vanuatu, VUT, Asia 1045,304,1044,304,1044,303,1045,303,1045,304 Vanuatu, VUT, Asia 1047,308,1047,307,1046,307,1047,307,1046,307,1047,306,1047,307,1047,308 Vanuatu, VUT, Asia 1045,301,1044,301,1044,300,1044,301,1045,301 Vanuatu, VUT, Asia 1048,309,1047,309,1047,308,1048,308,1048,309 Vanuatu, VUT, Asia 1044,298,1044,297,1044,298 Vanuatu, VUT, Asia 1042,300,1042,299,1041,299,1041,298,1042,299,1043,300,1042,300 Vanuatu, VUT, Asia 1043,297,1043,296,1044,296,1043,297 Vanuatu, VUT, Asia 1037,283,1038,283,1037,283 Vanuatu, VUT, Asia 1040,297,1039,297,1039,296,1039,295,1039,294,1040,295,1040,296,1040,295,1041,295,1041,296,1041,297,1040,297 Vanuatu, VUT, Asia 347,218,346,218,346,217,347,217,347,218,348,217,348,218,347,218 Venezuela, VEN, Latin America 320,223,319,223,320,222,321,221,321,219,322,218,322,217,323,217,324,216,325,215,326,215,325,215,324,216,324,217,325,217,325,218,324,217,325,218,325,219,324,219,323,221,324,222,323,222,324,222,323,222,324,222,324,223,325,223,326,223,326,222,326,221,325,220,325,219,325,218,326,217,327,217,328,217,329,216,330,216,330,215,329,216,329,215,329,214,330,214,330,215,330,216,331,216,332,216,333,216,334,217,335,218,334,218,335,218,335,219,336,219,338,219,339,219,341,219,342,220,343,220,344,220,345,220,346,220,346,219,347,219,348,219,349,219,348,219,347,219,347,218,347,219,348,219,348,218,348,219,349,219,350,218,351,218,352,218,353,218,354,218,354,219,353,219,351,219,350,220,351,220,351,219,351,220,352,220,351,220,351,221,351,220,351,221,351,220,352,220,352,221,353,221,353,222,353,221,353,220,353,221,354,221,355,221,355,222,356,222,357,222,357,223,356,223,357,223,356,224,356,225,355,225,356,225,357,225,358,225,359,225,360,225,360,226,359,226,359,227,358,227,358,228,357,228,358,228,358,229,359,229,358,230,357,230,356,230,356,231,356,232,355,233,357,235,358,235,358,236,357,236,357,237,356,237,355,237,355,238,354,238,353,238,352,238,351,238,351,239,351,240,350,239,349,239,348,239,347,239,347,238,346,238,345,238,346,239,347,240,347,241,347,242,348,243,347,243,349,243,349,244,348,245,347,245,347,246,346,246,345,247,344,247,344,248,343,248,343,249,343,248,342,248,341,248,339,247,339,245,338,245,338,244,338,243,337,243,337,242,336,242,337,241,338,240,337,240,337,239,336,239,336,238,336,237,336,235,336,234,337,234,337,233,337,232,336,232,335,232,334,232,333,232,332,232,331,232,329,230,328,229,327,229,326,230,325,229,324,230,323,229,323,228,322,228,322,227,322,226,322,225,321,223,320,223 Venezuela, VEN, Latin America 852,191,852,192,852,191,852,192,853,191,853,192,853,191,854,191,854,190,854,189,853,189,853,188,852,188,851,188,851,189,850,188,849,188,849,187,848,187,848,186,848,185,848,186,847,185,847,184,846,184,846,183,847,183,847,182,848,182,848,183,849,183,849,182,850,182,850,183,850,182,851,183,852,183,852,182,853,182,854,182,854,181,855,181,855,180,856,181,857,181,857,182,858,182,859,182,860,182,860,183,859,183,859,184,860,184,860,185,860,184,861,185,862,186,863,186,863,185,863,186,864,186,863,186,862,187,861,188,861,187,861,188,860,188,860,187,859,187,860,188,860,189,859,189,859,190,858,190,858,191,857,191,857,192,857,193,856,193,856,194,857,194,857,195,858,196,859,196,859,197,859,198,860,198,860,199,861,199,861,200,862,201,863,201,863,202,863,201,863,202,864,201,864,202,865,203,865,204,866,204,865,204,866,204,866,205,866,206,867,206,867,207,867,208,867,209,867,210,868,210,867,210,867,211,868,212,868,213,868,212,868,213,868,212,867,213,868,213,867,213,867,214,867,215,867,214,867,215,867,216,866,217,865,217,865,218,864,218,863,218,863,219,862,219,861,219,860,219,860,218,860,219,859,219,860,219,860,220,859,220,860,220,859,221,859,220,858,220,859,220,859,221,860,221,859,221,858,220,859,221,859,222,858,221,857,221,857,220,857,221,858,221,858,222,857,223,856,223,855,224,855,225,854,225,854,224,854,223,854,222,854,221,855,221,855,220,854,220,853,220,853,219,854,219,855,218,856,218,857,217,857,218,858,218,858,217,857,217,857,216,858,215,859,216,859,215,860,215,860,214,861,214,862,214,862,213,862,212,862,211,862,210,862,209,862,208,862,207,862,206,862,205,863,205,862,204,861,204,861,203,862,203,862,202,861,202,860,202,860,201,859,201,859,200,859,199,858,199,858,198,857,198,857,197,856,197,856,196,855,196,855,195,855,194,854,194,853,194,852,193,851,193,851,192,852,192,852,191 Vietnam, VNM, Asia 500,168,510,168,513,167,513,169,513,172,513,173,503,173,503,180,502,181,501,181,500,182,500,183,501,186,499,186,494,186,489,186,488,188,488,187,489,185,489,184,490,184,490,183,491,182,491,181,491,180,492,179,492,180,492,179,492,178,493,178,494,177,495,176,495,175,495,174,496,173,496,172,497,172,497,171,499,170,499,169,500,169,500,168 Western Sahara, ESH, NorthAfrica 23,292,22,292,21,291,22,291,23,291,23,292 Western Samoa, WSM, Pacific 24,293,23,292,24,292,25,292,25,293,24,293 Western Samoa, WSM, Pacific 695,194,695,195,697,198,698,198,698,199,699,201,698,201,697,201,696,202,696,203,696,204,695,204,695,205,694,205,692,205,691,205,691,206,690,206,688,206,687,207,687,208,686,208,685,208,684,209,684,208,683,208,683,209,682,210,681,210,680,210,679,210,678,210,676,211,675,212,674,212,675,212,674,212,673,212,672,213,671,213,670,212,669,211,669,210,669,209,669,208,668,207,669,207,668,206,668,205,667,205,668,205,668,204,668,205,668,204,668,203,668,202,668,201,669,201,669,200,669,199,669,198,670,198,671,198,671,199,672,198,673,198,676,205,682,198,695,194 Yemen, YEM, Asia 597,113,597,112,597,113,598,112,599,112,600,112,601,113,602,113,602,114,603,115,604,115,604,116,605,117,606,117,607,116,608,117,607,117,608,118,607,118,607,119,607,120,608,120,608,121,609,121,608,121,608,122,607,122,607,123,607,124,606,123,606,124,605,124,604,124,603,124,602,124,602,125,601,125,601,124,600,124,600,123,599,123,598,123,598,124,597,124,598,124,598,125,597,125,597,124,596,124,596,123,595,123,596,123,595,123,595,122,595,121,596,121,596,120,596,121,597,121,597,120,596,120,597,120,598,120,598,119,597,119,597,118,598,119,598,118,597,118,597,117,597,116,598,116,597,116,597,115,598,115,597,115,597,114,596,114,597,114,596,114,597,114,596,114,596,113,597,113 Yugoslavia, YUG, Europe 633,244,633,245,632,246,631,247,630,247,630,248,629,248,629,249,629,250,629,251,628,252,629,252,628,252,628,253,628,255,627,256,627,257,626,257,626,258,627,259,626,259,627,259,627,260,627,261,627,262,628,263,628,264,628,265,628,267,628,268,628,269,629,271,630,271,631,272,631,273,632,275,631,275,630,275,628,276,626,276,626,277,625,278,625,279,626,280,625,281,626,283,625,283,625,284,625,285,625,286,626,287,627,288,628,288,628,287,629,287,629,289,629,291,628,291,629,290,628,290,627,291,626,291,626,290,626,289,625,289,625,288,624,288,623,288,623,287,622,287,622,286,621,286,621,285,620,286,620,287,619,286,618,286,617,286,616,286,616,285,615,285,616,284,615,284,614,284,614,285,613,285,612,285,613,285,613,284,612,284,612,283,611,283,611,284,610,283,609,284,608,284,607,284,606,284,606,283,606,282,606,280,605,279,605,278,605,277,605,276,605,275,605,274,605,273,605,272,603,272,601,272,601,271,600,271,598,271,598,272,598,273,598,274,596,274,595,274,594,275,593,275,592,275,592,274,591,274,591,273,591,272,590,272,590,271,590,270,590,269,589,269,589,268,587,268,585,268,583,268,581,268,580,268,579,268,578,268,577,269,577,268,576,268,577,268,577,266,578,265,579,265,579,264,579,265,580,265,581,265,581,264,583,263,583,264,583,265,584,265,585,264,585,263,586,263,587,262,588,260,588,259,588,257,589,256,590,254,591,254,592,253,593,252,593,251,593,250,593,249,593,248,594,246,594,244,594,243,595,243,595,242,595,241,595,240,595,239,595,238,595,237,596,237,597,236,597,235,598,235,599,235,600,236,601,236,601,237,602,237,603,238,603,237,604,238,605,238,606,238,607,238,607,237,608,237,608,236,609,236,609,237,610,237,611,236,612,236,613,235,614,236,615,236,615,235,616,235,616,234,617,235,618,235,619,235,620,235,621,235,622,235,622,236,623,236,623,237,624,237,625,237,625,238,625,237,626,237,627,237,628,236,629,237,629,238,630,238,630,239,631,239,631,240,632,239,632,240,632,241,632,242,632,243,633,243,633,244 Congo,DRC, Sub Saharan Africa 626,300,624,301,623,301,622,302,622,303,621,304,620,305,619,304,618,304,617,305,617,304,616,304,615,304,615,303,614,303,612,303,610,303,609,303,606,300,606,299,605,294,605,290,607,290,609,290,612,290,612,289,611,289,612,288,612,287,611,287,611,286,612,285,611,283,612,283,612,284,613,284,613,285,612,285,613,285,614,285,614,284,615,284,616,284,615,285,616,285,616,286,617,286,618,286,619,286,620,287,620,286,621,285,621,286,622,286,622,287,623,287,623,288,624,288,625,288,625,289,626,289,626,290,626,291,627,291,628,290,629,290,628,291,629,291,629,289,629,287,628,287,628,288,627,288,626,287,625,286,625,285,625,284,625,283,626,283,625,281,626,280,625,279,625,278,626,277,626,276,628,276,630,275,631,275,632,275,632,276,633,276,634,276,634,277,635,277,635,278,636,278,637,278,638,278,638,279,639,279,639,280,640,280,639,281,640,281,640,282,641,282,640,283,639,283,640,284,639,285,639,286,639,287,640,287,640,288,640,287,640,288,639,288,638,289,639,289,638,290,639,290,638,291,638,292,639,293,639,292,639,293,636,294,634,294,632,295,630,295,630,296,631,296,631,297,629,297,627,298,626,298,626,299,626,300 Zambia, ZMB, Sub Saharan Africa 626,300,626,299,626,298,627,298,629,297,631,297,631,299,632,299,633,299,634,299,635,299,635,300,636,300,637,300,638,300,638,301,638,302,639,303,638,303,639,303,639,304,638,304,638,305,639,305,638,305,639,306,638,306,638,307,638,308,638,309,638,310,638,309,638,310,639,310,639,311,638,311,637,312,637,313,637,314,637,315,637,314,634,318,633,318,633,317,632,317,630,318,630,317,629,317,628,317,627,317,627,316,625,315,624,315,623,314,623,313,623,312,622,312,621,312,621,311,620,311,619,310,618,309,619,309,618,309,617,308,617,307,616,306,616,305,615,305,615,304,616,304,617,304,617,305,618,304,619,304,620,305,621,304,622,303,622,302,623,301,624,301,626,300 Zimbabwe, ZWE, Sub Saharan Africa United States 196,123 Canada 179,69 Brazil 372,274 Greenland 395,25 Iceland 468,62 United 518,51 Kingdom 509,62 Ireland 477,94 Algeria 526,162 Libya 577,164 South Africa 580,357 Angola 566,284 Peru 306,280 Bolivia 334,296 Chile 295,340 Russia 751,63 China 819,140 Japan 966,138 Australia 914,321 India 765,178 Egypt 613,171 Sudan 609,204 Iran 691,148 New Zealand 1033,396 Philippines 915,203 Antarctica 521,472 Mexico 217,173 Argentina 331,354 Congo 589,256 Madagascar 669,331 Indonesia 851,278 Papua New Guinea 972,250 PAK 724,163 Colombia 300,234 Arial 6 Normal Normal None ================================================ FILE: LICENSE.txt ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: LICENSE_short.txt ================================================ Copyright (C) 2004-2008 fyiReporting Software, LLC Copyright (C) 2011-2025 Peter Gill Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. For additional information, see LICENSE.txt or visit https://github.com/majorsilence/My-FyiReporting/discussions. ================================================ FILE: LanguageWrappers/php/Examples/test1.php ================================================ test1.log 2>&1 // php.exe -f "C:\PHP test1.php" -- -arg1 -arg2 -arg3 error_reporting(E_ALL); ini_set('display_errors', '1'); date_default_timezone_set('America/Los_Angeles'); require_once("../report.php"); # SETUP $current_directory = dirname(__FILE__); $base_directory = realpath($current_directory . '/../../../'); $db_path = realpath($current_directory . '/../../../Examples/northwindEF.db'); $report_path = realpath($current_directory . '/../../../Examples/SqliteExamples/SimpleTest1.rdl'); if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { // If self-hosted or on Windows, we do not need to set the path to dotnet, rdlcmd can be run directly $path_to_dotnet = null; $path_to_rdlcmd = realpath($base_directory . '/RdlCmd/bin/Release/net8.0/win-x64/publish/RdlCmd.exe'); } else { // dotnet is required to run rdlcmd // if a self contained build is used, the path to dotnet is not needed and the call should be to RdlCmd instead of RdlCmd.dll directly // if a self contained build is not used, the path to dotnet is needed $path_to_dotnet = 'dotnet'; $path_to_rdlcmd = realpath($base_directory . '/RdlCmd/bin/Debug/net8.0/RdlCmd.dll'); } $output_directory = $current_directory . '/output'; if (!file_exists($output_directory)) { mkdir($output_directory, 0777, true); } # EXAMPLE REPORT $rpt = new MajorsilenceReporting\Report($report_path, $path_to_rdlcmd, $path_to_dotnet); $rpt->set_connection_string('Data Source=' . $db_path); $rpt->export("pdf", $output_directory . '/test1.pdf'); ?> ================================================ FILE: LanguageWrappers/php/Examples/test2-connection-string-parameter.php ================================================ set_parameter("TestParam1", 'I am a parameter value.'); $rpt->set_parameter("TestParam2", 'The second parameter.'); $rpt->set_connection_string('Data Source=' . $db_path); $rpt->export("pdf", $output_directory . '/test2-parameters.pdf'); ?> ================================================ FILE: LanguageWrappers/php/Examples/test3-streaming.php ================================================ set_parameter("TestParam1", 'I am a parameter value.'); $rpt->set_parameter("TestParam2", 'The second parameter.'); $rpt->set_connection_string('Data Source=' . $db_path); $data = $rpt->export_to_memory("pdf"); header("Content-type: application/octet-stream"); header("Content-disposition: attachment; filename=YourFileName2.pdf"); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); ob_clean(); flush(); echo $data; ?> ================================================ FILE: LanguageWrappers/php/report.php ================================================ report_path = $report_path; $this->rdl_cmd_path = $rdl_cmd_path; $this->dotnet_path = $dotnet_path; $this->rdlcmd_dir = dirname($rdl_cmd_path); } /** * Set a parameters values * @param string $name - the report parameter name * @param string $value - the value of the parameter */ public function set_parameter($name, $value){ $this->parameters[$name] = $value; } public function set_connection_string($connection_string){ $this->connection_string = $connection_string; } /** * Export report to a file on the server * @param string $type - Export type "pdf", "csv", "xslx", "xml", "rtf", "tif", "html". If type does not match it will default to PDF. * @param string $export_type - path on server to export file */ public function export($type, $export_path){ if ($type != "pdf" && $type != "csv" && $type != "xslx" && $type != "xml" && $type != "rtf" && $type != "tif" && $type != "html"){ $type = "pdf"; } $cmd = ""; if ($this->dotnet_path != null){ $cmd = '"' . $this->dotnet_path . '" "' . $this->rdl_cmd_path . '" '; } else{ // if self hosted or on windows we do not need to set the path to mono, rdlcmd can be run directly $cmd = '"' . $this->rdl_cmd_path . '" '; } $temp_folder = sys_get_temp_dir(); $temp_name = tempnam($temp_folder, "majorsilencereporting"); copy($this->report_path, $temp_name); // add path to rdl file $cmd = $cmd . '"/f' . $temp_name . ''; // Add all parameters to report $count=0; foreach($this->parameters as $key => $value){ if ($count == 0){ $cmd = $cmd . '?' . $key . '=' . $value; } else { $cmd = $cmd . '&' . $key . '=' . $value; } $count = $count + 1; } $cmd = $cmd . '" '; // set the export type $cmd = $cmd . '"/t' . $type . '" '; //set the folder that the file will be exported $cmd = $cmd . '"/o' . $temp_folder . '" '; if (!empty($this->connection_string)) { $cmd .= '"/c' . $this->connection_string . '" '; } $cdir = getcwd(); chdir ($this->rdlcmd_dir); $shell_output = shell_exec($cmd); chdir ($cdir); $temp_pdf = $temp_folder; if ($this->endsWith($temp_pdf, DIRECTORY_SEPARATOR) == false) { $temp_pdf = $temp_pdf . DIRECTORY_SEPARATOR; } $temp_pdf = $temp_pdf . basename($temp_name, ".tmp") . "." . $type; $final_pdf = $export_path; //echo($cmd); copy($temp_pdf, $final_pdf); unlink($temp_name); unlink($temp_pdf); } /** * Export report to memory for direct display on page * @param string $type - Export type "pdf", "csv", "xslx", "xml", "rtf", "tif", "html". If type does not match it will default to PDF. */ public function export_to_memory($type){ if ($type != "pdf" && $type != "csv" && $type != "xslx" && $type != "xml" && $type != "rtf" && $type != "tif" && $type != "html"){ $type = "pdf"; } global $override_tmp_folder; $temp_folder = ""; if ($override_tmp_folder == "") { $temp_folder = sys_get_temp_dir(); } else { $temp_folder = $override_tmp_folder; } $temp_name = tempnam($temp_folder, "majorsilencereporting"); $this->export($type, $temp_name); $data = file_get_contents($temp_name); unlink($temp_name); return $data; } private function endsWith($haystack, $needle) { return $needle === "" || substr($haystack, -strlen($needle)) === $needle; } } ?> ================================================ FILE: LanguageWrappers/php/viewer.php ================================================ rpt = $rpt; } /** * Display a pdf.js viewer with the report */ public function show(){ } } ?> ================================================ FILE: LanguageWrappers/python/Examples/test1.py ================================================ #! /usr/bin/env python import sys sys.path.append("..") import report import os import platform # SETUP current_directory = os.path.dirname(os.path.abspath(__file__)) base_directory = os.path.join(current_directory, '..', '..', '..') base_directory = os.path.abspath(base_directory) db_path = os.path.join(current_directory, '..', '..', '..', 'Examples', 'northwindEF.db') db_path = os.path.abspath(db_path) report_path = os.path.join(current_directory, '..', '..', '..', 'Examples', 'SqliteExamples', 'SimpleTest1.rdl') report_path = os.path.abspath(report_path) if platform.system() == 'Windows': # if self hosted or on windows we do not need to set the path to dotnet, rdlcmd can be run directly path_to_dotnet = None path_to_rdlcmd = os.path.join(base_directory, "RdlCmd/bin/Release/net8.0/win-x64/publish/RdlCmd.exe") else: # dotnet is required to run rdlcmd # if a self contained build is used, the path to dotnet is not needed and the call should be to RdlCmd instead of RdlCmd.dll directly # if a self contained build is not used, the path to dotnet is needed path_to_dotnet= "dotnet" path_to_rdlcmd = os.path.join(base_directory, "RdlCmd/bin/Debug/net8.0/RdlCmd.dll") path_to_rdlcmd = os.path.abspath(path_to_rdlcmd) output_directory = os.path.join(current_directory, 'output') if not os.path.exists(output_directory): os.makedirs(output_directory) # REPORT EXAMPLE rpt = report.Report(report_path, path_to_rdlcmd, path_to_dotnet) rpt.set_connection_string('Data Source=' + db_path) rpt.export("pdf", os.path.join(output_directory, 'test1.pdf')) ================================================ FILE: LanguageWrappers/python/Examples/test2-parameters.py ================================================ #! /usr/bin/env python import sys sys.path.append("..") import report import os import platform # SETUP current_directory = os.path.dirname(os.path.abspath(__file__)) base_directory = os.path.join(current_directory, '..', '..', '..') base_directory = os.path.abspath(base_directory) db_path = os.path.join(current_directory, '..', '..', '..', 'Examples', 'northwindEF.db') db_path = os.path.abspath(db_path) report_path = os.path.join(current_directory, '..', '..', '..', 'Examples', 'SqliteExamples', 'SimpleTest3WithParameters.rdl') report_path = os.path.abspath(report_path) if platform.system() == 'Windows': # if self hosted or on windows we do not need to set the path to dotnet, rdlcmd can be run directly path_to_dotnet = None path_to_rdlcmd = os.path.join(base_directory, "RdlCmd\\bin\\Debug\\net8.0\\RdlCmd.exe") else: # dotnet is required to run rdlcmd path_to_dotnet= "dotnet" path_to_rdlcmd = os.path.join(base_directory, "RdlCmd/bin/Debug/net8.0/RdlCmd.dll") path_to_rdlcmd = os.path.abspath(path_to_rdlcmd) output_directory = os.path.join(current_directory, 'output') if not os.path.exists(output_directory): os.makedirs(output_directory) # REPORT EXAMPLE rpt = report.Report(report_path, path_to_rdlcmd, path_to_dotnet) rpt.set_parameter("TestParam1", 'I am a parameter value.') rpt.set_parameter("TestParam2", 'The second parameter.') rpt.set_connection_string('Data Source=' + db_path) rpt.export("pdf", os.path.join(output_directory, 'test2-parameters.pdf')) ================================================ FILE: LanguageWrappers/python/Examples/test3-streaming.py ================================================ #! /usr/bin/env python import sys sys.path.append("..") import report import os import platform # SETUP current_directory = os.path.dirname(os.path.abspath(__file__)) base_directory = os.path.join(current_directory, '..', '..', '..') base_directory = os.path.abspath(base_directory) db_path = os.path.join(current_directory, '..', '..', '..', 'Examples', 'northwindEF.db') db_path = os.path.abspath(db_path) report_path = os.path.join(current_directory, '..', '..', '..', 'Examples', 'SqliteExamples', 'SimpleTest1.rdl') if platform.system() == 'Windows': # if self hosted or on windows we do not need to set the path to dotnet, rdlcmd can be run directly path_to_dotnet = None path_to_rdlcmd = os.path.join(base_directory, "RdlCmd\\bin\\Debug\\net8.0\\RdlCmd.exe") else: # dotnet is required to run rdlcmd path_to_dotnet= "dotnet" path_to_rdlcmd = os.path.join(base_directory, "RdlCmd/bin/Debug/net8.0/RdlCmd.dll") path_to_rdlcmd = os.path.abspath(path_to_rdlcmd) # REPORT EXAMPLE rpt = report.Report(report_path, path_to_rdlcmd, path_to_dotnet) rpt.set_connection_string('Data Source=' + db_path) data = rpt.export_to_memory("pdf") print(data) # This is where you output data on your site using wsgi, cgi, or whatever python framework/library you are using ================================================ FILE: LanguageWrappers/python/report.py ================================================ import tempfile import os import shutil import subprocess class Report : """ Report Class This class provides functionality to generate and export reports using the RDL (Report Definition Language) command-line tool. It supports exporting reports in various formats such as PDF, CSV, XLSX, XML, RTF, TIF, and HTML. Usage: 1. Copy and paste the `report.py` file into your Python project. 2. Import the `Report` class into your script: ```python import report ``` 3. Create an instance of the `Report` class: ```python rpt = report.Report(report_path="path_to_report.rdl", rdl_cmd_path="path_to_rdl_cmd.exe", path_to_dotnet="path_to_dotnet_executable") ``` - `report_path`: Path to the RDL file. - `rdl_cmd_path`: Path to the RDL command-line executable. - `path_to_dotnet`: (Optional) Path to the .NET executable, if required. 4. Set report parameters (if any): ```python rpt.set_parameter("ParameterName", "ParameterValue") ``` 5. Set the connection string (if required): ```python rpt.set_connection_string("your_connection_string") ``` 6. Export the report to a file: ```python rpt.export(type="pdf", export_path="output_path.pdf") ``` - `type`: The export format. Supported formats are "pdf", "csv", "xslx", "xml", "rtf", "tif", "html". Defaults to "pdf". - `export_path`: The path where the exported file will be saved. 7. Export the report to memory (for direct display): ```python data = rpt.export_to_memory(type="pdf") ``` - `type`: The export format. Supported formats are "pdf", "csv", "xslx", "xml", "rtf", "tif", "html". Defaults to "pdf". - Returns the exported report data as a string or binary, depending on the format. """ __report_path="" __parameters = {} __connection_string = None __rdl_cmd_path="" __path_to_dotnet = None def __init__(self, report_path: str, rdl_cmd_path: str, path_to_dotnet :str =None): self.__report_path = report_path self.__rdl_cmd_path = rdl_cmd_path self.__path_to_dotnet = path_to_dotnet def set_parameter(self, name, value): ''' Set a parameters values name - string - the report parameter name value - string - the value of the parameter ''' self.__parameters.update({name:value}) def set_connection_string(self, connection_string: str): ''' Set the connection string for the report connection_string - string - the connection string to use for the report ''' self.__connection_string = connection_string def export(self, type : str, export_path : str): ''' Export report to a file on the server type - string - Export type "pdf", "csv", "xslx", "xml", "rtf", "tif", "html". If type does not match it will default to PDF. export_type - string - path on server to export file ''' if (type != "pdf" and type != "csv" and type != "xslx" and type != "xml" and type != "rtf" and type != "tif" and type != "html"): type = "pdf" cmd = [] if (self.__path_to_dotnet != None): cmd.append(self.__path_to_dotnet) cmd.append(self.__rdl_cmd_path) fd, temp_name = tempfile.mkstemp() os.close(fd) temp_folder = os.path.dirname(temp_name) shutil.copyfile(self.__report_path, temp_name) #add path to rdl file rdl_path = "/f" + temp_name # Add all parameters to report count=0 for key in self.__parameters: if (count == 0): rdl_path = rdl_path + '?' + key + '=' + self.__parameters[key] else: rdl_path = rdl_path + '&' + key + '=' + self.__parameters[key] count = count + 1 cmd.append(rdl_path) # set the export type cmd.append('/t' + type) #set the folder that the file will be exported cmd.append('/o' + temp_folder) if self.__connection_string: cmd.append('/c' + self.__connection_string+'') #print("Executing command:", cmd) subprocess.run(cmd) temp_pdf = temp_folder + os.sep + os.path.basename(temp_name) + "." + type final_pdf = export_path shutil.copyfile(temp_pdf, final_pdf) os.remove(temp_name) os.remove(temp_pdf) def export_to_memory(self, type : str) -> bytes | str : ''' Export report to memory for direct display on page type - string - Export type "pdf", "csv", "xslx", "xml", "rtf", "tif", "html". If type does not match it will default to PDF. ''' if (type != "pdf" and type != "csv" and type != "xslx" and type != "xml" and type != "rtf" and type != "tif" and type != "html"): type = "pdf" fd, temp_name = tempfile.mkstemp() os.close(fd); self.export(type, temp_name) if type == "pdf" or type == "tif" or type == "rtf" or type == "xslx": with open(temp_name, 'rb') as binary_file: data = binary_file.read() else: with open(temp_name, 'r+') as text_file: data = text_file.read() os.remove(temp_name) return data ================================================ FILE: LanguageWrappers/ruby/Examples/test1.rb ================================================ #!/usr/bin/env ruby $LOAD_PATH << '../' require 'report' # SETUP current_directory = File.dirname(File.expand_path(__FILE__)) db_path = File.expand_path(File.join(current_directory, '..', '..', '..', 'Examples', 'northwindEF.db')) report_path = File.expand_path(File.join(current_directory, '..', '..', '..', 'Examples', 'SqliteExamples', 'SimpleTest1.rdl')) if Gem.win_platform? # If on Windows, we do not need to set the path to dotnet, RdlCmd can be run directly path_to_dotnet = nil path_to_rdlcmd = File.expand_path(File.join(current_directory, '..', '..', '..', 'RdlCmd', 'bin', 'Debug', 'net8.0', 'RdlCmd.exe')) else # dotnet is required to run RdlCmd path_to_dotnet = 'dotnet' path_to_rdlcmd = File.expand_path(File.join(current_directory, '..', '..', '..', 'RdlCmd', 'bin', 'Debug', 'net8.0', 'RdlCmd.dll')) end path_to_rdlcmd = File.absolute_path(path_to_rdlcmd) output_directory = File.join(current_directory, 'output') Dir.mkdir(output_directory) unless Dir.exist?(output_directory) # REPORT EXAMPLE rpt = Report.new(report_path, path_to_rdlcmd, path_to_dotnet) rpt.set_connection_string('Data Source=' + db_path) rpt.export("pdf", File.join(output_directory, 'test1.pdf')) ================================================ FILE: LanguageWrappers/ruby/Examples/test2-parameters.rb ================================================ #!/usr/bin/env ruby $LOAD_PATH << '../' require 'report' # SETUP current_directory = File.dirname(File.expand_path(__FILE__)) db_path = File.expand_path(File.join(current_directory, '..', '..', '..', 'Examples', 'northwindEF.db')) report_path = File.expand_path(File.join(current_directory, '..', '..', '..', 'Examples', 'SqliteExamples', 'SimpleTest3WithParameters.rdl')) if Gem.win_platform? # If on Windows, we do not need to set the path to dotnet, RdlCmd can be run directly path_to_dotnet = nil path_to_rdlcmd = File.expand_path(File.join(current_directory, '..', '..', '..', 'RdlCmd', 'bin', 'Debug', 'net8.0', 'RdlCmd.exe')) else # dotnet is required to run RdlCmd path_to_dotnet = 'dotnet' path_to_rdlcmd = File.expand_path(File.join(current_directory, '..', '..', '..', 'RdlCmd', 'bin', 'Debug', 'net8.0', 'RdlCmd.dll')) end output_directory = File.join(current_directory, 'output') Dir.mkdir(output_directory) unless Dir.exist?(output_directory) # REPORT EXAMPLE rpt = Report.new(report_path, path_to_rdlcmd, path_to_dotnet) rpt.set_parameter("TestParam1", 'I am a parameter value.') rpt.set_parameter("TestParam2", 'The second parameter.') rpt.set_connection_string('Data Source=' + db_path) rpt.export("pdf", File.join(output_directory, 'test2-parameters.pdf')) ================================================ FILE: LanguageWrappers/ruby/Examples/test3-streaming.rb ================================================ #!/usr/bin/env ruby $LOAD_PATH << '../' require 'report' # SETUP current_directory = File.dirname(File.expand_path(__FILE__)) db_path = File.expand_path(File.join(current_directory, '..', '..', '..', 'Examples', 'northwindEF.db')) report_path = File.expand_path(File.join(current_directory, '..', '..', '..', 'Examples', 'SqliteExamples', 'SimpleTest1.rdl')) if Gem.win_platform? # If on Windows, we do not need to set the path to dotnet, RdlCmd can be run directly path_to_dotnet = nil path_to_rdlcmd = File.expand_path(File.join(current_directory, '..', '..', '..', 'RdlCmd', 'bin', 'Debug', 'net8.0', 'RdlCmd.exe')) else # dotnet is required to run RdlCmd path_to_dotnet = 'dotnet' path_to_rdlcmd = File.expand_path(File.join(current_directory, '..', '..', '..', 'RdlCmd', 'bin', 'Debug', 'net8.0', 'RdlCmd.dll')) end output_directory = File.join(current_directory, 'output') Dir.mkdir(output_directory) unless Dir.exist?(output_directory) # REPORT EXAMPLE rpt = Report.new(report_path, path_to_rdlcmd, path_to_dotnet) rpt.set_connection_string('Data Source=' + db_path) data = rpt.export_to_memory("pdf") # show the data in the console print(data) # or save it to a file File.open(File.join(output_directory, 'test3-streaming.pdf'), 'wb') do |file| file.write(data) end # This is where you output data on your site using wsgi, cgi, or whatever python framework/library you are using ================================================ FILE: LanguageWrappers/ruby/report.rb ================================================ require 'tempfile' class Report def initialize(report_path, rdl_cmd_path, path_to_dotnet = nil) @@report_path = report_path @@path_to_rdlcmd = rdl_cmd_path @@path_to_dotnet = path_to_dotnet @@parameters = {} end def set_parameter(name, value) #Set a parameters values # name - string - the report parameter name # value - string - the value of the parameter @@parameters[name] = value end def set_connection_string(connection_string) #Set the connection string for the report # connection_string - string - the connection string to use for the report @@connection_string = connection_string end def export(type, export_path) # Export report to a file on the server # type - string - Export type "pdf", "csv", "xslx", "xml", "rtf", "tif", "html". If type does not match it will default to PDF. # export_type - string - path on server to export file if (type != "pdf" and type != "csv" and type != "xslx" and type != "xml" and type != "rtf" and type != "tif" and type != "html") type = "pdf" end cmd = [] if @@path_to_dotnet cmd.push(@@path_to_dotnet) end cmd.push(@@path_to_rdlcmd) temp_file_to_close = Tempfile.new('maj') temp_name = temp_file_to_close.path temp_file_to_close.close temp_folder = File.dirname(temp_name) FileUtils.cp(@@report_path, temp_name) #add path to rdl file rdl_path = "/f" + temp_name # Add all parameters to report count=0 @@parameters.each do |key, value| if (count == 0) rdl_path = rdl_path + '?' + key + '=' + value else rdl_path = rdl_path + '&' + key + '=' + value end count = count + 1 end cmd.push(rdl_path) # set the export type cmd.push('/t' + type) #set the folder that the file will be exported cmd.push('/o' + temp_folder) if @@connection_string cmd.push('/c' + @@connection_string) end #puts cmd.join(" ") IO.popen(cmd) do |io| # wait until process finished io.readlines end temp_pdf = temp_folder + File::SEPARATOR + File.basename(temp_name) + "." + type final_pdf = export_path #echo(cmd) FileUtils.cp(temp_pdf, final_pdf) File.delete(temp_name) File.delete(temp_pdf) end def export_to_memory(type) # Export report to memory for direct display on page # type - string - Export type "pdf", "csv", "xslx", "xml", "rtf", "tif", "html". If type does not match it will default to PDF. if !["pdf", "csv", "xslx", "xml", "rtf", "tif", "html"].include?(type) type = "pdf" end temp_file = Tempfile.new('export') temp_name = temp_file.path temp_file.close temp_file.unlink export(type, temp_name) data = nil if ["pdf", "tif", "rtf", "xslx"].include?(type) File.open(temp_name, 'rb') do |binary_file| data = binary_file.read end else File.open(temp_name, 'r') do |text_file| data = text_file.read end end File.delete(temp_name) if File.exist?(temp_name) data end end ================================================ FILE: LibRdlWpfViewer/LibRdlWpfViewer.csproj ================================================ Library true true true True RDL Data WPF Library false Majorsilence.Reporting.LibRdlWpfViewer Debug;Release;Debug-DrawingCompat;Release-DrawingCompat net48;net8.0-windows;net10.0-windows 4014 3.5 3.5 3.0 3.0 ================================================ FILE: LibRdlWpfViewer/LibRdlWpfViewer.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0.31101.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RdlEngine", "..\RdlEngine\RdlEngine.csproj", "{C97E91F4-B310-44E2-9B6C-96775395722D}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataProviders", "..\DataProviders\DataProviders.csproj", "{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RdlCri", "..\RdlCri\RdlCri.csproj", "{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RdlViewer", "..\RdlViewer\RdlViewer.csproj", "{D99145B1-CB6C-41F5-BA86-723325145FB5}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibRdlWpfViewer", "LibRdlWpfViewer.csproj", "{DA84B318-4210-4C7C-9A47-3A9356BC8D83}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.Build.0 = Debug|Any CPU {C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.ActiveCfg = Debug|x64 {C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.Build.0 = Debug|x64 {C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.ActiveCfg = Debug|x86 {C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.Build.0 = Debug|x86 {C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.ActiveCfg = Release|Any CPU {C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.Build.0 = Release|Any CPU {C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.ActiveCfg = Release|x64 {C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.Build.0 = Release|x64 {C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.ActiveCfg = Release|x86 {C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.Build.0 = Release|x86 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.Build.0 = Debug|Any CPU {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x64.ActiveCfg = Debug|x64 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x64.Build.0 = Debug|x64 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x86.ActiveCfg = Debug|x86 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x86.Build.0 = Debug|x86 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.ActiveCfg = Release|Any CPU {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.Build.0 = Release|Any CPU {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x64.ActiveCfg = Release|x64 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x64.Build.0 = Release|x64 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x86.ActiveCfg = Release|x86 {D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x86.Build.0 = Release|x86 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.Build.0 = Debug|Any CPU {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x64.ActiveCfg = Debug|x64 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x64.Build.0 = Debug|x64 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x86.ActiveCfg = Debug|x86 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x86.Build.0 = Debug|x86 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.ActiveCfg = Release|Any CPU {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.Build.0 = Release|Any CPU {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x64.ActiveCfg = Release|x64 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x64.Build.0 = Release|x64 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x86.ActiveCfg = Release|x86 {9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x86.Build.0 = Release|x86 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.Build.0 = Debug|Any CPU {D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x64.ActiveCfg = Debug|x64 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x64.Build.0 = Debug|x64 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x86.ActiveCfg = Debug|x86 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x86.Build.0 = Debug|x86 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.ActiveCfg = Release|Any CPU {D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.Build.0 = Release|Any CPU {D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x64.ActiveCfg = Release|x64 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x64.Build.0 = Release|x64 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x86.ActiveCfg = Release|x86 {D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x86.Build.0 = Release|x86 {DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Debug|Any CPU.Build.0 = Debug|Any CPU {DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Debug|x64.ActiveCfg = Debug|x64 {DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Debug|x64.Build.0 = Debug|x64 {DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Debug|x86.ActiveCfg = Debug|x86 {DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Debug|x86.Build.0 = Debug|x86 {DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Release|Any CPU.ActiveCfg = Release|Any CPU {DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Release|Any CPU.Build.0 = Release|Any CPU {DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Release|x64.ActiveCfg = Release|Any CPU {DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Release|x86.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: LibRdlWpfViewer/Properties/Resources.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace LibRdlWpfViewer.Properties { using System; /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Resources() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("LibRdlWpfViewer.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } } } ================================================ FILE: LibRdlWpfViewer/Properties/Resources.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ================================================ FILE: LibRdlWpfViewer/Properties/Settings.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace LibRdlWpfViewer.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.2.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); public static Settings Default { get { return defaultInstance; } } } } ================================================ FILE: LibRdlWpfViewer/Properties/Settings.settings ================================================  ================================================ FILE: LibRdlWpfViewer/RdlWpfViewer.xaml ================================================  ================================================ FILE: LibRdlWpfViewer/RdlWpfViewer.xaml.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace LibRdlWpfViewer { /// /// Interaction logic for RdlWpfViewer.xaml /// public partial class RdlWpfViewer : UserControl { public RdlWpfViewer() { InitializeComponent(); } public async Task Rebuild() { await this.reportViewer.Rebuild(); } public async Task SaveAs(string FileName, Majorsilence.Reporting.Rdl.OutputPresentationType type) { await this.reportViewer.SaveAs(FileName, type); } public Uri SourceFile { get { return this.reportViewer.SourceFile; } } public async Task SetSourceFile(Uri value) { await this.reportViewer.SetSourceFile(value); } public string SourceRdl { get { return this.reportViewer.SourceRdl; } } public async Task SetSourceRdl(string value) { await this.reportViewer.SetSourceRdl(value); } public string Parameters { get { return this.reportViewer.Parameters; } set { this.reportViewer.Parameters = value; } } public async Task Report() { return await this.reportViewer.Report(); } } } ================================================ FILE: Majorsilence.Drawing.Common/Bitmap.cs ================================================ using Majorsilence.Drawing.Imaging; using SkiaSharp; namespace Majorsilence.Drawing { // Compatibility wrapper for Bitmap public class Bitmap : Image, IDisposable { // Constructor for creating a new bitmap with width and height public Bitmap(int width, int height) : base(width, height) { } // Constructor for loading an image from a file public Bitmap(string filename) : base(filename) { } public Bitmap(MemoryStream ms) : base(ms) { } // Constructor for creating a bitmap from SKBitmap public Bitmap(SKBitmap skBitmap) : base(skBitmap) { _skBitmap = skBitmap; } // Save method with options (e.g., quality) public void Save(string filename, ImageFormat format, EncoderParameters encoderParams) { // This is a placeholder for implementing quality settings or other encoder options. Save(filename, format); // Basic implementation } public new void Save(Stream stream, ImageFormat format) { SKImage.FromBitmap(_skBitmap).Encode(format.ToSkImageEncodeFormat(), 100).SaveTo(stream); } // Convert bitmap to graphics public Graphics GetGraphics() { return new Graphics(new SKCanvas(_skBitmap)); } // Dispose of the bitmap public new void Dispose() { base.Dispose(); _skBitmap?.Dispose(); } // Static method to create a bitmap from file public static new Bitmap FromFile(string filename) { return new Bitmap(filename); } public static implicit operator SKBitmap(Bitmap i) { return i._skBitmap; } public static implicit operator Bitmap(SKBitmap i) { return new Bitmap(i); } } } ================================================ FILE: Majorsilence.Drawing.Common/Brush.cs ================================================ using SkiaSharp; namespace Majorsilence.Drawing { // Compatibility wrapper for Brush (only supports solid color for now) public class Brush : IDisposable { private SKPaint _paint; public Brush(Color color) { _paint = new SKPaint { Color = new SKColor((byte)color.R, (byte)color.G, (byte)color.B, (byte)color.A), Style = SKPaintStyle.Fill }; } public void Dispose() { _paint?.Dispose(); } // Convert Brush to SKPaint internal SKPaint ToSkPaint() { return _paint; } } } ================================================ FILE: Majorsilence.Drawing.Common/Brushes.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Majorsilence.Drawing { public static class Brushes { public static Brush Black => new Brush(Color.Black); public static Brush White => new Brush(Color.White); public static Brush Red => new Brush(Color.Red); public static Brush Green => new Brush(Color.Green); public static Brush Blue => new Brush(Color.Blue); public static Brush Yellow => new Brush(Color.Yellow); public static Brush Cyan => new Brush(Color.Cyan); public static Brush Magenta => new Brush(Color.Magenta); public static Brush Transparent => new Brush(Color.Transparent); public static Brush Orange => new Brush(Color.Orange); public static Brush Purple => new Brush(Color.Purple); public static Brush Brown => new Brush(Color.Brown); public static Brush Pink => new Brush(Color.Pink); public static Brush Lime => new Brush(Color.Lime); public static Brush Gray => new Brush(Color.Gray); public static Brush Navy => new Brush(Color.Navy); public static Brush Olive => new Brush(Color.Olive); public static Brush Teal => new Brush(Color.Teal); public static Brush Silver => new Brush(Color.Silver); public static Brush Maroon => new Brush(Color.Maroon); public static Brush Chocolate => new Brush(Color.Chocolate); public static Brush IndianRed => new Brush(Color.IndianRed); public static Brush Peru => new Brush(Color.Peru); public static Brush BurlyWood => new Brush(Color.BurlyWood); public static Brush AntiqueWhite => new Brush(Color.AntiqueWhite); public static Brush FloralWhite => new Brush(Color.FloralWhite); public static Brush Ivory => new Brush(Color.Ivory); public static Brush LightCoral => new Brush(Color.LightCoral); public static Brush DarkSalmon => new Brush(Color.DarkSalmon); public static Brush LightSalmon => new Brush(Color.LightSalmon); public static Brush PeachPuff => new Brush(Color.PeachPuff); public static Brush NavajoWhite => new Brush(Color.NavajoWhite); public static Brush Moccasin => new Brush(Color.Moccasin); public static Brush PapayaWhip => new Brush(Color.PapayaWhip); public static Brush Goldenrod => new Brush(Color.Goldenrod); public static Brush DarkGoldenrod => new Brush(Color.DarkGoldenrod); public static Brush DarkKhaki => new Brush(Color.DarkKhaki); public static Brush Khaki => new Brush(Color.Khaki); public static Brush Beige => new Brush(Color.Beige); public static Brush Cornsilk => new Brush(Color.Cornsilk); public static Brush DeepSkyBlue => new Brush(Color.DeepSkyBlue); public static Brush Gold => new Brush(Color.Gold); public static Brush SlateGray => new Brush(Color.SlateGray); public static Brush DarkGray => new Brush(Color.DarkGray); public static Brush LightGray => new Brush(Color.LightGray); public static Brush DarkSlateGray => new Brush(Color.DarkSlateGray); public static Brush DimGray => new Brush(Color.DimGray); public static Brush LightSlateGray => new Brush(Color.LightSlateGray); public static Brush Gainsboro => new Brush(Color.Gainsboro); public static Brush LightBlue => new Brush(Color.LightBlue); public static Brush LightCyan => new Brush(Color.LightCyan); public static Brush LightGoldenrodYellow => new Brush(Color.LightGoldenrodYellow); public static Brush LightGreen => new Brush(Color.LightGreen); public static Brush LightPink => new Brush(Color.LightPink); public static Brush LightSeaGreen => new Brush(Color.LightSeaGreen); public static Brush LightSkyBlue => new Brush(Color.LightSkyBlue); public static Brush LightSteelBlue => new Brush(Color.LightSteelBlue); public static Brush LightYellow => new Brush(Color.LightYellow); public static Brush CadetBlue => new Brush(Color.CadetBlue); public static Brush MediumTurquoise => new Brush(Color.MediumTurquoise); public static Brush Aquamarine => new Brush(Color.Aquamarine); public static Brush Azure => new Brush(Color.Azure); public static Brush AliceBlue => new Brush(Color.AliceBlue); public static Brush MintCream => new Brush(Color.MintCream); public static Brush DarkSeaGreen => new Brush(Color.DarkSeaGreen); public static Brush PaleGreen => new Brush(Color.PaleGreen); public static Brush MediumPurple => new Brush(Color.MediumPurple); public static Brush CornflowerBlue => new Brush(Color.CornflowerBlue); public static Brush Lavender => new Brush(Color.Lavender); public static Brush GhostWhite => new Brush(Color.GhostWhite); public static Brush PaleGoldenrod => new Brush(Color.PaleGoldenrod); public static Brush LemonChiffon => new Brush(Color.LemonChiffon); public static Brush Orchid => new Brush(Color.Orchid); public static Brush Plum => new Brush(Color.Plum); public static Brush LavenderBlush => new Brush(Color.LavenderBlush); public static Brush Linen => new Brush(Color.Linen); public static Brush PaleTurquoise => new Brush(Color.PaleTurquoise); public static Brush OldLace => new Brush(Color.OldLace); } } ================================================ FILE: Majorsilence.Drawing.Common/CharacterRange.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Majorsilence.Drawing { public class CharacterRange { public int First { get; set; } public int Length { get; set; } public CharacterRange(int first, int length) { First = first; Length = length; } } } ================================================ FILE: Majorsilence.Drawing.Common/Color.cs ================================================ using Majorsilence.Drawing.Drawing2D; using SkiaSharp; using System.Reflection; namespace Majorsilence.Drawing { // Compatibility wrapper for Color public class Color { public static Color Black => new Color(0, 0, 0); public static Color White => new Color(255, 255, 255); public static Color Red => new Color(255, 0, 0); public static Color Green => new Color(0, 255, 0); public static Color Blue => new Color(0, 0, 255); public static Color Yellow => new Color(255, 255, 0); public static Color Cyan => new Color(0, 255, 255); public static Color Magenta => new Color(255, 0, 255); public static Color Transparent => new Color(0, 0, 0, 0); public static Color Orange => new Color(255, 165, 0); public static Color Purple => new Color(128, 0, 128); public static Color Brown => new Color(165, 42, 42); public static Color Pink => new Color(255, 192, 203); public static Color Lime => new Color(0, 255, 0); public static Color Gray => new Color(128, 128, 128); public static Color Navy => new Color(0, 0, 128); public static Color Olive => new Color(128, 128, 0); public static Color Teal => new Color(0, 128, 128); public static Color Silver => new Color(192, 192, 192); public static Color Empty => new Color(0, 0, 0, 0); public static Color Maroon => new Color(128, 0, 0); public static Color Chocolate => new Color(210, 105, 30); public static Color IndianRed => new Color(205, 92, 92); public static Color Peru => new Color(205, 133, 63); public static Color BurlyWood => new Color(222, 184, 135); public static Color AntiqueWhite => new Color(250, 235, 215); public static Color FloralWhite => new Color(255, 250, 240); public static Color Ivory => new Color(255, 255, 240); public static Color LightCoral => new Color(240, 128, 128); public static Color DarkSalmon => new Color(233, 150, 122); public static Color LightSalmon => new Color(255, 160, 122); public static Color PeachPuff => new Color(255, 218, 185); public static Color NavajoWhite => new Color(255, 222, 173); public static Color Moccasin => new Color(255, 228, 181); public static Color PapayaWhip => new Color(255, 239, 213); public static Color Goldenrod => new Color(218, 165, 32); public static Color DarkGoldenrod => new Color(184, 134, 11); public static Color DarkKhaki => new Color(189, 183, 107); public static Color Khaki => new Color(240, 230, 140); public static Color Beige => new Color(245, 245, 220); public static Color Cornsilk => new Color(255, 248, 220); public static Color DeepSkyBlue => new Color(0, 191, 255); public static Color Gold => new Color(255, 215, 0); public static Color SlateGray => new Color(112, 128, 144); public static Color DarkGray => new Color(169, 169, 169); public static Color LightGray => new Color(211, 211, 211); public static Color DarkSlateGray => new Color(47, 79, 79); public static Color DimGray => new Color(105, 105, 105); public static Color LightSlateGray => new Color(119, 136, 153); public static Color Gainsboro => new Color(220, 220, 220); public static Color LightBlue => new Color(173, 216, 230); public static Color LightCyan => new Color(224, 255, 255); public static Color LightGoldenrodYellow => new Color(250, 250, 210); public static Color LightGreen => new Color(144, 238, 144); public static Color LightPink => new Color(255, 182, 193); public static Color LightSeaGreen => new Color(32, 178, 170); public static Color LightSkyBlue => new Color(135, 206, 250); public static Color LightSteelBlue => new Color(176, 196, 222); public static Color LightYellow => new Color(255, 255, 224); public static Color CadetBlue => new Color(95, 158, 160); public static Color MediumTurquoise => new Color(72, 209, 204); public static Color Aquamarine => new Color(127, 255, 212); public static Color Azure => new Color(240, 255, 255); public static Color AliceBlue => new Color(240, 248, 255); public static Color MintCream => new Color(245, 255, 250); public static Color DarkSeaGreen => new Color(143, 188, 143); public static Color PaleGreen => new Color(152, 251, 152); public static Color MediumPurple => new Color(147, 112, 219); public static Color CornflowerBlue => new Color(100, 149, 237); public static Color Lavender => new Color(230, 230, 250); public static Color GhostWhite => new Color(248, 248, 255); public static Color PaleGoldenrod => new Color(238, 232, 170); public static Color LemonChiffon => new Color(255, 250, 205); public static Color Orchid => new Color(218, 112, 214); public static Color Plum => new Color(221, 160, 221); public static Color LavenderBlush => new Color(255, 240, 245); public static Color Linen => new Color(250, 240, 230); public static Color PaleTurquoise => new Color(175, 238, 238); public static Color OldLace => new Color(253, 245, 230); public static Color Bisque => new Color(255, 228, 196); public byte R { get; } public byte G { get; } public byte B { get; } public byte A { get; } private string _name; public string Name { get { if (_name != null) { return _name; } _name = GetColorName(ToSkColor()); return _name; } } private static string GetColorName(SKColor color) { // Get all public static properties of the SKColors class var properties = typeof(SKColors).GetFields(BindingFlags.Public | BindingFlags.Static); foreach (var property in properties) { // Get the value of the property (which is an SKColor) if (property.GetValue(null) is SKColor skColor) { // Compare the RGBA values if (skColor.Red == color.Red && skColor.Green == color.Green && skColor.Blue == color.Blue && skColor.Alpha == color.Alpha) { return property.Name; // Return the name of the matching color } } } return string.Empty; // No match found } public bool IsEmpty => R == 0 && G == 0 && B == 0 && A == 0; public Color(int r, int g, int b, int a = 255) { R = (byte)r; G = (byte)g; B = (byte)b; A = (byte)a; _name = GetColorName(ToSkColor()); } public Color(byte r, byte g, byte b, byte a = 255) { R = r; G = g; B = b; A = a; _name = GetColorName(ToSkColor()); } public static Color FromRgb(int a, int r, int g, int b) { return new Color(r, g, b, a); } public static Color FromArgb(int a, int r, int g, int b) { return new Color(r, g, b, a); } public static Color FromName(string name) { switch (name.ToLower()) { case "black": return Black; case "white": return White; case "red": return Red; case "green": return Green; case "blue": return Blue; case "yellow": return Yellow; case "cyan": return Cyan; case "magenta": return Magenta; case "transparent": return Transparent; case "orange": return Orange; case "purple": return Purple; case "brown": return Brown; case "pink": return Pink; case "lime": return Lime; case "gray": return Gray; case "navy": return Navy; case "olive": return Olive; case "teal": return Teal; case "silver": return Silver; case "maroon": return Maroon; case "chocolate": return Chocolate; case "indianred": return IndianRed; case "peru": return Peru; case "burlywood": return BurlyWood; case "antiquewhite": return AntiqueWhite; case "floralwhite": return FloralWhite; case "ivory": return Ivory; case "lightcoral": return LightCoral; case "darksalmon": return DarkSalmon; case "lightsalmon": return LightSalmon; case "peachpuff": return PeachPuff; case "navajowhite": return NavajoWhite; case "moccasin": return Moccasin; case "papayawhip": return PapayaWhip; case "goldenrod": return Goldenrod; case "darkgoldenrod": return DarkGoldenrod; case "darkkhaki": return DarkKhaki; case "khaki": return Khaki; case "beige": return Beige; case "cornsilk": return Cornsilk; case "deepskyblue": return DeepSkyBlue; case "gold": return Gold; case "slategray": return SlateGray; case "darkgray": return DarkGray; case "lightgray": return LightGray; case "darkslategray": return DarkSlateGray; case "dimgray": return DimGray; case "lightslategray": return LightSlateGray; case "gainsboro": return Gainsboro; case "lightblue": return LightBlue; case "lightcyan": return LightCyan; case "lightgoldenrodyellow": return LightGoldenrodYellow; case "lightgreen": return LightGreen; case "lightpink": return LightPink; case "lightseagreen": return LightSeaGreen; case "lightskyblue": return LightSkyBlue; case "lightsteelblue": return LightSteelBlue; case "lightyellow": return LightYellow; case "cadetblue": return CadetBlue; case "mediumturquoise": return MediumTurquoise; case "aquamarine": return Aquamarine; case "azure": return Azure; case "aliceblue": return AliceBlue; case "mintcream": return MintCream; case "darkseagreen": return DarkSeaGreen; case "palegreen": return PaleGreen; case "mediumpurple": return MediumPurple; case "cornflowerblue": return CornflowerBlue; case "lavender": return Lavender; case "ghostwhite": return GhostWhite; case "palegoldenrod": return PaleGoldenrod; case "lemonchiffon": return LemonChiffon; case "orchid": return Orchid; case "plum": return Plum; case "lavenderblush": return LavenderBlush; case "linen": return Linen; case "paleturquoise": return PaleTurquoise; case "oldlace": return OldLace; case "bisque": return Bisque; default: throw new ArgumentException($"Unknown color name: {name}"); } } // Convert to SkiaSharp's SKColor public SKColor ToSkColor() { return new SKColor((byte)R, (byte)G, (byte)B, (byte)A); } #if !DRAWINGCOMPAT public static implicit operator System.Drawing.Color(Color p) { return System.Drawing.Color.FromArgb(p.A, p.R, p.G, p.B); } #endif } } ================================================ FILE: Majorsilence.Drawing.Common/ColorTranslator.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Majorsilence.Drawing { public class ColorTranslator { public ColorTranslator() { } public static Color FromHtml(string html) { if (string.IsNullOrEmpty(html)) throw new ArgumentException("Invalid HTML color code", nameof(html)); if (html[0] == '#') { html = html.Substring(1); } try { if (html.Length == 3) { return new Color( Convert.ToInt32(new string(html[0], 2), 16), Convert.ToInt32(new string(html[1], 2), 16), Convert.ToInt32(new string(html[2], 2), 16) ); } else if (html.Length == 4) { return new Color( Convert.ToInt32(new string(html[0], 2), 16), Convert.ToInt32(new string(html[1], 2), 16), Convert.ToInt32(new string(html[2], 2), 16), Convert.ToInt32(new string(html[3], 2), 16) ); } else if (html.Length == 5) { return new Color( Convert.ToInt32(html.Substring(0, 2), 16), Convert.ToInt32(html.Substring(1, 2), 16), Convert.ToInt32(html.Substring(3, 2), 16), Convert.ToInt32(html.Substring(4, 2), 16) ); } else if (html.Length == 6) { return new Color( Convert.ToInt32(html.Substring(0, 2), 16), Convert.ToInt32(html.Substring(2, 2), 16), Convert.ToInt32(html.Substring(4, 2), 16) ); } else if (html.Length == 8) { return new Color( Convert.ToInt32(html.Substring(0, 2), 16), Convert.ToInt32(html.Substring(2, 2), 16), Convert.ToInt32(html.Substring(4, 2), 16), Convert.ToInt32(html.Substring(6, 2), 16) ); } } catch (FormatException) { } return Color.FromName(html); } } } ================================================ FILE: Majorsilence.Drawing.Common/Drawing2D/CompositingQuality.cs ================================================ namespace Majorsilence.Drawing.Drawing2D { public enum CompositingQuality { Invalid = -1, Default = 0, HighSpeed = 1, HighQuality = 2, GammaCorrected = 3, AssumedLinear = 4 } } ================================================ FILE: Majorsilence.Drawing.Common/Drawing2D/DashStyle.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Majorsilence.Drawing.Drawing2D { public enum DashStyle { Solid = 0, Dash = 1, Dot = 2, DashDot = 3, DashDotDot = 4, Custom = 5 } } ================================================ FILE: Majorsilence.Drawing.Common/Drawing2D/GraphicsPath.cs ================================================ using SkiaSharp; namespace Majorsilence.Drawing.Drawing2D { public class GraphicsPath { private SKPath _path; public GraphicsPath() { _path = new SKPath(); } public void AddLine(float x1, float y1, float x2, float y2) { _path.MoveTo(x1, y1); _path.LineTo(x2, y2); } public void AddRectangle(float x, float y, float width, float height) { _path.AddRect(new SKRect(x, y, x + width, y + height)); } public SKPath ToSKPath() => _path; } } ================================================ FILE: Majorsilence.Drawing.Common/Drawing2D/GraphicsState.cs ================================================ using SkiaSharp; namespace Majorsilence.Drawing.Drawing2D { public class GraphicsState { internal SKCanvas SaveLayer { get; } internal GraphicsState(SKCanvas canvas) { SaveLayer = canvas; } } } ================================================ FILE: Majorsilence.Drawing.Common/Drawing2D/HatchBrush.cs ================================================ using SkiaSharp; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Majorsilence.Drawing.Drawing2D { public sealed class HatchBrush : Brush { private readonly HatchStyle _hatchStyle; public readonly Color ForegroundColor; private readonly Color _backColor; public HatchBrush(HatchStyle hatchStyle, Color foreColor, Color backColor) : base(foreColor) { _hatchStyle = hatchStyle; ForegroundColor = foreColor; _backColor = backColor; } internal new SKPaint ToSkPaint() { var paint = base.ToSkPaint(); paint.Style = SKPaintStyle.Fill; paint.Shader = CreateTwoColorHatchShader(_hatchStyle, ForegroundColor.ToSkColor(), _backColor.ToSkColor()); return paint; } private SKShader CreateTwoColorHatchShader(HatchStyle hatchStyle, SKColor foreColor, SKColor backColor) { // Implement the logic to create a two-color hatch shader based on the hatch style // This is a placeholder implementation and should be replaced with actual logic return SKShader.CreateLinearGradient( new SKPoint(0, 0), new SKPoint(10, 10), new SKColor[] { foreColor, backColor }, new float[] { 0, 1 }, SKShaderTileMode.Repeat); } } } ================================================ FILE: Majorsilence.Drawing.Common/Drawing2D/HatchStyle.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Majorsilence.Drawing.Drawing2D { public enum HatchStyle { Horizontal, Vertical, ForwardDiagonal, BackwardDiagonal, Cross, DiagonalCross, Percent05, Percent10, Percent20, Percent25, Percent30, Percent40, Percent50, Percent60, Percent70, Percent75, Percent80, Percent90, LightDownwardDiagonal, LightUpwardDiagonal, DarkDownwardDiagonal, DarkUpwardDiagonal, WideDownwardDiagonal, WideUpwardDiagonal, LightVertical, LightHorizontal, NarrowVertical, NarrowHorizontal, DarkVertical, DarkHorizontal, DashedDownwardDiagonal, DashedUpwardDiagonal, DashedHorizontal, DashedVertical, SmallConfetti, LargeConfetti, ZigZag, Wave, DiagonalBrick, HorizontalBrick, Weave, Plaid, Divot, DottedGrid, DottedDiamond, Shingle, Trellis, Sphere, SmallGrid, SmallCheckerBoard, LargeCheckerBoard, OutlinedDiamond, SolidDiamond } } ================================================ FILE: Majorsilence.Drawing.Common/Drawing2D/InterpolationMode.cs ================================================ namespace Majorsilence.Drawing.Drawing2D { public enum InterpolationMode { Invalid = -1, Default = 0, Low = 1, High = 2, Bilinear = 3, Bicubic = 4, NearestNeighbor = 5, HighQualityBilinear = 6, HighQualityBicubic = 7 } } ================================================ FILE: Majorsilence.Drawing.Common/Drawing2D/LineCap.cs ================================================ namespace Majorsilence.Drawing.Drawing2D { public enum LineCap { Flat, Square, Round } } ================================================ FILE: Majorsilence.Drawing.Common/Drawing2D/LineJoin.cs ================================================ namespace Majorsilence.Drawing.Drawing2D { public enum LineJoin { Miter, Round, Bevel } } ================================================ FILE: Majorsilence.Drawing.Common/Drawing2D/LinearGradientBrush.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Majorsilence.Drawing.Drawing2D { public sealed class LinearGradientBrush : Brush { public LinearGradientBrush(Color color) : base(color) { } public LinearGradientBrush(Color color1, Color color2, float angle) : base(color1) { throw new NotImplementedException(); } public LinearGradientBrush(Rectangle rect, Color color1, Color color2, LinearGradientMode mode) : base(color1) { // Implementation for initializing with rectangle, two colors, and gradient mode throw new NotImplementedException(); } } } ================================================ FILE: Majorsilence.Drawing.Common/Drawing2D/LinearGradientMode.cs ================================================ namespace Majorsilence.Drawing.Drawing2D { public enum LinearGradientMode { Horizontal, Vertical, ForwardDiagonal, BackwardDiagonal } } ================================================ FILE: Majorsilence.Drawing.Common/Drawing2D/Matrix.cs ================================================ using SkiaSharp; namespace Majorsilence.Drawing.Drawing2D { public class Matrix { private SKMatrix _matrix; public Matrix() { _matrix = SKMatrix.CreateIdentity(); } public void Translate(float dx, float dy) { _matrix = SKMatrix.Concat(_matrix, SKMatrix.CreateTranslation(dx, dy)); } public void Scale(float scaleX, float scaleY) { _matrix = SKMatrix.Concat(_matrix, SKMatrix.CreateScale(scaleX, scaleY)); } public void Rotate(float angle) { _matrix = SKMatrix.Concat(_matrix, SKMatrix.CreateRotationDegrees(angle)); } public SKMatrix ToSKMatrix() => _matrix; } } ================================================ FILE: Majorsilence.Drawing.Common/Drawing2D/PixelOffsetMode.cs ================================================ namespace Majorsilence.Drawing.Drawing2D { public enum PixelOffsetMode { Invalid = -1, Default = 0, HighSpeed = 1, HighQuality = 2, None = 3, Half = 4 } } ================================================ FILE: Majorsilence.Drawing.Common/Drawing2D/SmoothingMode.cs ================================================ namespace Majorsilence.Drawing.Drawing2D { public enum SmoothingMode { Invalid = -1, Default = 0, HighSpeed = 1, HighQuality = 2, None = 3, AntiAlias = 4 } } ================================================ FILE: Majorsilence.Drawing.Common/Font.cs ================================================ using SkiaSharp; namespace Majorsilence.Drawing { // Compatibility wrapper for System.Drawing.Font public class Font : IDisposable { private static readonly Dictionary<(string, SKFontStyle), SKTypeface> TypefaceCache = new(); private SKTypeface _typeface; private SKFont _paint; // Properties for Family, Size, Style public string FontFamily { get; } public float Size { get; } public FontStyle Style { get; } public Font(string fontFamily, float size) : this(fontFamily, size, FontStyle.Regular) { } // Constructor to initialize the Font with family, size, and style public Font(string fontFamily, float size, FontStyle style) { FontFamily = fontFamily; Size = size; Style = style; // Determine SkiaSharp style flags based on FontStyle var typefaceStyle = SKFontStyle.Normal; if ((style & FontStyle.Bold) != 0 && (style & FontStyle.Italic) != 0) typefaceStyle = SKFontStyle.BoldItalic; else if ((style & FontStyle.Bold) != 0) typefaceStyle = SKFontStyle.Bold; else if ((style & FontStyle.Italic) != 0) typefaceStyle = SKFontStyle.Italic; // Create the SkiaSharp Typeface based on the family and style var cacheKey = (fontFamily, typefaceStyle); if (!TypefaceCache.TryGetValue(cacheKey, out _typeface)) { _typeface = SKTypeface.FromFamilyName(fontFamily, typefaceStyle); TypefaceCache[cacheKey] = _typeface; } else { _typeface = TypefaceCache[cacheKey]; } // Initialize the SKFont for text rendering _paint = new SKFont(_typeface, size); } public Font(Drawing.FontFamily fontFamily, float size, FontStyle style) : this(fontFamily.Name, size, style) { } public double GetHeight(Graphics g) { if (g == null) { throw new ArgumentNullException(nameof(g)); } // Measure the height of a sample text to determine the font height using (var paint = new SKFont(_typeface, Size)) { var metrics = paint.Metrics; return Math.Ceiling(metrics.Descent - metrics.Ascent); } } // Property to get SKPaint (useful for drawing text) public SKFont ToSkFont() { return _paint; } // Dispose method to release resources public void Dispose() { _paint?.Dispose(); _typeface?.Dispose(); } // Override ToString to show font details public override string ToString() { return $"{FontFamily} {Size}pt {Style}"; } } } ================================================ FILE: Majorsilence.Drawing.Common/FontFamily.cs ================================================ namespace Majorsilence.Drawing { public class FontFamily { public static FontFamily GenericMonospace { get; } = new FontFamily("monospace"); public static FontFamily GenericSansSerif { get; } = new FontFamily("sans-serif"); public static FontFamily GenericSerif { get; } = new FontFamily("serif"); public string Name { get; } public FontFamily(string name) { Name = name; } public float GetCellDescent(FontStyle fs) { // Placeholder implementation, replace with actual logic switch (fs) { case FontStyle.Bold: return 2.0f; case FontStyle.Italic: return 1.5f; case FontStyle.Underline: return 1.0f; case FontStyle.Strikeout: return 0.5f; default: return 1.0f; } } public float GetEmHeight(FontStyle fs) { // Placeholder implementation, replace with actual logic switch (fs) { case FontStyle.Bold: return 16.0f; case FontStyle.Italic: return 14.0f; case FontStyle.Underline: return 12.0f; case FontStyle.Strikeout: return 10.0f; default: return 12.0f; } } public override string ToString() { return Name; } } } ================================================ FILE: Majorsilence.Drawing.Common/FontStyle.cs ================================================ using System; using System.Drawing.Imaging; using System.IO; namespace Majorsilence.Drawing { // Enum for FontStyle (simulating System.Drawing.FontStyle) [Flags] public enum FontStyle { Regular = 0, Bold = 1, Italic = 2, Underline = 4, Strikeout = 8 } } ================================================ FILE: Majorsilence.Drawing.Common/Graphics.cs ================================================ using System.Drawing; using System.Security.Cryptography; using SkiaSharp; namespace Majorsilence.Drawing { // Compatibility wrapper for Graphics public class Graphics : IDisposable { private SKCanvas _canvas; public Text.TextRenderingHint TextRenderingHint { get; set; } public Drawing.Drawing2D.InterpolationMode InterpolationMode { get; set; } public Drawing.Drawing2D.SmoothingMode SmoothingMode { get; set; } public Drawing.Drawing2D.PixelOffsetMode PixelOffsetMode { get; set; } public Drawing.Drawing2D.CompositingQuality CompositingQuality { get; set; } public Drawing.GraphicsUnit PageUnit { get; set; } public float DpiX { get; set; } = 96; public float DpiY { get; set; } = 96; public Drawing.Drawing2D.Matrix Transform { get; set; } public Graphics(SKCanvas canvas) { _canvas = canvas; } // Clear method // Draw rectangle method public void DrawRectangle(Pen pen, Rectangle rectangle) { _canvas.DrawRect(new SKRect(rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height), pen.ToSkPaint()); } public void FillRectangle(Brush brush, Rectangle rectangle) { _canvas.DrawRect(new SKRect(rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height), brush.ToSkPaint()); } public void FillRectangle(Brush brush, int x, int y, int width, int height) { _canvas.DrawRect(new SKRect(x, y, x + width, y + height), brush.ToSkPaint()); } public void FillRectangle(Brush brush, float x, float y, float width, float height) { _canvas.DrawRect(new SKRect(x, y, x + width, y + height), brush.ToSkPaint()); } public void DrawImage(Image image, Rectangle rect) { if (image?.SkiaBitmap != null) { var srcRect = new SKRect(0, 0, image.SkiaBitmap.Width, image.SkiaBitmap.Height); var destRect = new SKRect(rect.X, rect.Y, rect.X + rect.Width, rect.Y + rect.Height); _canvas.DrawBitmap(image.SkiaBitmap, srcRect, destRect); } } public void DrawImage(Bitmap bitmap, Rectangle rect) { DrawImage((Image)bitmap, rect); } public void FillEllipse(Brush brush, int x, int y, int width, int height) { _canvas.DrawOval(new SKRect(x, y, x + width, y + height), brush.ToSkPaint()); } public void FillEllipse(Brush brush, Point point) { _canvas.DrawOval(new SKRect(point.X, point.Y, point.X + 1, point.Y + 1), brush.ToSkPaint()); } public void FillEllipse(Brush brush, Rectangle r) { _canvas.DrawOval(new SKRect(r.X, r.Y, r.X + 1, r.Y + 1), brush.ToSkPaint()); } public void FillPolygon(Brush b, PointF[] points) { if (points == null || points.Length < 3) { throw new ArgumentException("Polygon must have at least 3 points", nameof(points)); } var skPoints = points.Select(p => new SKPoint(p.X, p.Y)).ToArray(); using (var path = new SKPath()) { path.AddPoly(skPoints, true); _canvas.DrawPath(path, b.ToSkPaint()); } } public void DrawEllipse(Pen pen, Point p) { _canvas.DrawOval(new SKRect(p.X, p.Y, p.X + 1, p.Y + 1), pen.ToSkPaint()); } public void DrawEllipse(Pen pen, Rectangle r) { _canvas.DrawOval(new SKRect(r.X, r.Y, r.X + 1, r.Y + 1), pen.ToSkPaint()); } public void DrawPolygon(Pen pen, PointF[] points) { if (points == null || points.Length < 3) { throw new ArgumentException("Polygon must have at least 3 points", nameof(points)); } var skPoints = points.Select(p => new SKPoint(p.X, p.Y)).ToArray(); using (var path = new SKPath()) { path.AddPoly(skPoints, true); _canvas.DrawPath(path, pen.ToSkPaint()); } } public void DrawRectangle(Pen pen, int x, int y, int width, int height) { _canvas.DrawRect(new SKRect(x, y, x + width, y + height), pen.ToSkPaint()); } public void DrawCurve(Pen pen, Point[] points, float tension) { if (points == null || points.Length < 2) { throw new ArgumentException("At least two points are required to draw a curve", nameof(points)); } var skPoints = points.Select(p => new SKPoint(p.X, p.Y)).ToArray(); using (var path = new SKPath()) { path.MoveTo(skPoints[0]); for (int i = 1; i < skPoints.Length - 1; i++) { var p0 = skPoints[i - 1]; var p1 = skPoints[i]; var p2 = skPoints[i + 1]; var controlPoint1 = new SKPoint(p0.X + (p1.X - p0.X) * tension, p0.Y + (p1.Y - p0.Y) * tension); var controlPoint2 = new SKPoint(p1.X - (p2.X - p0.X) * tension, p1.Y - (p2.Y - p0.Y) * tension); path.CubicTo(controlPoint1, controlPoint2, p1); } path.LineTo(skPoints.Last()); _canvas.DrawPath(path, pen.ToSkPaint()); } } public void FillPie(Brush brush, Rectangle r, float startAngle, float endAngle) { using (var path = new SKPath()) { path.MoveTo(r.X + r.Width / 2, r.Y + r.Height / 2); path.ArcTo(new SKRect(r.X, r.Y, r.X + r.Width, r.Y + r.Height), startAngle, endAngle - startAngle, false); path.Close(); _canvas.DrawPath(path, brush.ToSkPaint()); } } public void DrawPie(Pen p, Rectangle r, float startAngle, float endAngle) { using (var path = new SKPath()) { path.MoveTo(r.X + r.Width / 2, r.Y + r.Height / 2); path.ArcTo(new SKRect(r.X, r.Y, r.X + r.Width, r.Y + r.Height), startAngle, endAngle - startAngle, false); path.Close(); _canvas.DrawPath(path, p.ToSkPaint()); } } public void DrawLines(Pen p, Point[] points) { if (points == null || points.Length < 2) { throw new ArgumentException("At least two points are required to draw lines", nameof(points)); } var skPoints = points.Select(p => new SKPoint(p.X, p.Y)).ToArray(); _canvas.DrawPoints(SKPointMode.Lines, skPoints, p.ToSkPaint()); } // Draw line method public void DrawLine(Pen pen, Point pt1, Point pt2) { _canvas.DrawLine(pt1.X, pt1.Y, pt2.X, pt2.Y, pen.ToSkPaint()); } // Draw string method (you would also need to implement font compatibility here) public void DrawString(string s, Font font, Brush brush, PointF point) { var skPaint = brush.ToSkPaint(); _canvas.DrawText(s, point.X, point.Y, font.ToSkFont(), skPaint); } public void DrawString(string s, Font font, Brush brush, Rectangle layoutRectangle, StringFormat format) { var skFont = font.ToSkFont(); var skPaint = brush.ToSkPaint(); float lineHeight = skFont.Metrics.Descent - skFont.Metrics.Ascent + skFont.Metrics.Leading; float x = layoutRectangle.X; float y = layoutRectangle.Y; float maxWidth = layoutRectangle.Width; var lines = s.Replace("\r\n", "\n").Split('\n'); foreach (var line in lines) { var words = line.Split(' '); string currentLine = ""; foreach (var word in words) { string testLine = string.IsNullOrEmpty(currentLine) ? word : currentLine + " " + word; var bounds = new SKRect(); skFont.MeasureText(testLine, out bounds); if (maxWidth > 0 && bounds.Width > maxWidth) { // Draw currentLine if (!string.IsNullOrEmpty(currentLine)) { float drawX = x; if (format.Alignment == StringAlignment.Center) drawX += (maxWidth - bounds.Width) / 2; else if (format.Alignment == StringAlignment.Far) drawX += maxWidth - bounds.Width; _canvas.DrawText(currentLine, drawX, y - skFont.Metrics.Ascent, skFont, skPaint); y += lineHeight; } currentLine = word; } else { currentLine = testLine; } } // Draw last line in this paragraph if (!string.IsNullOrEmpty(currentLine)) { var bounds = new SKRect(); skFont.MeasureText(currentLine, out bounds); float drawX = x; if (format.Alignment == StringAlignment.Center) drawX += (maxWidth - bounds.Width) / 2; else if (format.Alignment == StringAlignment.Far) drawX += maxWidth - bounds.Width; _canvas.DrawText(currentLine, drawX, y - skFont.Metrics.Ascent, skFont, skPaint); y += lineHeight; } } } // Overloaded DrawString for RectangleF public void DrawString(string s, Font font, Brush brush, RectangleF layoutRectangle, StringFormat format) { DrawString(s, font, brush, new Rectangle( (int)layoutRectangle.X, (int)layoutRectangle.Y, (int)layoutRectangle.Width, (int)layoutRectangle.Height), format); } // Dispose of the graphics object public void Dispose() { _canvas?.Dispose(); } public Drawing2D.GraphicsState Save() { var state = new Drawing2D.GraphicsState(_canvas); _canvas.Save(); return state; } public SizeF MeasureString(string text, Font font) { return MeasureString(text, font, 0, StringFormat.GenericTypographic); } public SizeF MeasureString(string text, Font font, SizeF layoutArea, StringFormat stringFormat) { return MeasureString(text, font, (int)layoutArea.Width, stringFormat); } public SizeF MeasureString(string text, Font font, int maxWidth, StringFormat stringFormat) { var skFont = font.ToSkFont(); var lineHeightAdjustment = 1.1f; float lineHeight = (skFont.Metrics.Descent - skFont.Metrics.Ascent + skFont.Metrics.Leading) * lineHeightAdjustment; float maxLineWidth = 0f; float totalHeight = 0f; if (string.IsNullOrEmpty(text)) return new SizeF(0, lineHeight); var lines = text.Replace("\r\n", "\n").Split('\n'); foreach (var line in lines) { var words = line.Split(' '); string currentLine = ""; foreach (var word in words) { string testLine = string.IsNullOrEmpty(currentLine) ? word : currentLine + " " + word; var bounds = new SKRect(); skFont.MeasureText(testLine, out bounds); if (maxWidth > 0 && bounds.Width > maxWidth) { // Commit currentLine, start new line if (!string.IsNullOrEmpty(currentLine)) { var currentBounds = new SKRect(); skFont.MeasureText(currentLine, out currentBounds); maxLineWidth = Math.Max(maxLineWidth, currentBounds.Width); totalHeight += lineHeight; currentLine = word; // Start new line with the current word } else { // The word itself is longer than maxWidth, commit it as its own line var wordBounds = new SKRect(); skFont.MeasureText(word, out wordBounds); maxLineWidth = Math.Max(maxLineWidth, wordBounds.Width); totalHeight += lineHeight; currentLine = ""; // Start new line } } else { currentLine = testLine; } } // Commit last line in this paragraph (even if it's a single word) if (!string.IsNullOrEmpty(currentLine)) { var currentBounds = new SKRect(); skFont.MeasureText(currentLine, out currentBounds); maxLineWidth = Math.Max(maxLineWidth, currentBounds.Width); totalHeight += lineHeight; // If the last line is more than 60% of the maxWidth, add a new blank line of height if (maxWidth > 0 && currentBounds.Width > 0.6f * maxWidth) { totalHeight += lineHeight; } } } // If at least one line, ensure totalHeight is at least one lineHeight if (totalHeight < lineHeight) totalHeight = lineHeight; var padding = 1.5f; return new SizeF(maxLineWidth, (totalHeight) * padding); } public Region[] MeasureCharacterRanges(string text, Font font, RectangleF layoutRect, StringFormat stringFormat) { var skPaint = font.ToSkFont(); var regions = new List(); foreach (var range in stringFormat.MeasurableCharacterRanges) { var substring = text.AsSpan(range.First, range.Length); var bounds = new SKRect(); skPaint.MeasureText(substring, out bounds); var padding = 1.2f; var region = new Region( (int)(layoutRect.X + bounds.Left), (int)(layoutRect.Y + bounds.Top), (int)(bounds.Width + 2 * padding), (int)(bounds.Height + 2 * padding) ); regions.Add(region); } return regions.ToArray(); } public void ResetTransform() { // TODO: ? } public void AddMetafileComment(byte[] data) { // TODO: ? } // Restore the graphics state public void Restore(Drawing2D.GraphicsState state) { _canvas.RestoreToCount(state.SaveLayer.SaveCount); } public static Graphics FromImage(Bitmap bm) { return bm.GetGraphics(); } } } ================================================ FILE: Majorsilence.Drawing.Common/GraphicsUnit.cs ================================================ namespace Majorsilence.Drawing { public enum GraphicsUnit { World = 0, Display = 1, Pixel = 2, Point = 3, Inch = 4, Document = 5, Millimeter = 6 } } ================================================ FILE: Majorsilence.Drawing.Common/Image.cs ================================================ using Majorsilence.Drawing.Imaging; using SkiaSharp; namespace Majorsilence.Drawing { // Import the SkiaSharp library public class Image : IDisposable { protected SKBitmap _skBitmap; public int Width => _skBitmap.Width; public int Height => _skBitmap.Height; /// /// Gets the underlying SkiaSharp bitmap /// public SKBitmap? SkiaBitmap => _skBitmap; public Image(SKBitmap bitmap) { _skBitmap = bitmap; } public Image(int width, int height) { _skBitmap = new SKBitmap(width, height); } // Constructor for loading an image from a file public Image(string filename) { using (var stream = new FileStream(filename, FileMode.Open, FileAccess.Read)) { _skBitmap = SKBitmap.Decode(stream); } } public Image(MemoryStream ms) { ms.Position = 0; _skBitmap = SKBitmap.Decode(ms); } public static Image FromFile(string path) { var bitmap = SKBitmap.Decode(path); if (bitmap == null) { throw new FileNotFoundException("The image file could not be found or loaded.", path); } return new Image(bitmap); } public void Save(string path, ImageFormat format) { var skFormat = GetSkFormat(format); using var image = SKImage.FromBitmap(_skBitmap); using var data = image.Encode(skFormat, 100); using var stream = File.OpenWrite(path); data.SaveTo(stream); } public void Save(Stream stream, ImageFormat format) { var skFormat = GetSkFormat(format); using var image = SKImage.FromBitmap(_skBitmap); using var data = image.Encode(skFormat, 100); data.SaveTo(stream); } public void Save(Stream stream, ImageFormat format, int quality) { var skFormat = GetSkFormat(format); using var image = SKImage.FromBitmap(_skBitmap); using var data = image.Encode(skFormat, quality); data.SaveTo(stream); } public void Save(Stream stream, ImageCodecInfo codec, EncoderParameters encoderParams) { var skFormat = GetSkFormat(codec.Format); using var image = SKImage.FromBitmap(_skBitmap); using var data = image.Encode(skFormat, 100); data.SaveTo(stream); } private SKEncodedImageFormat GetSkFormat(ImageFormat format) { SKEncodedImageFormat skFormat; switch (format) { case ImageFormat.Jpeg: skFormat = SKEncodedImageFormat.Jpeg; break; case ImageFormat.Png: skFormat = SKEncodedImageFormat.Png; break; case ImageFormat.Gif: skFormat = SKEncodedImageFormat.Gif; break; case ImageFormat.Bmp: skFormat = SKEncodedImageFormat.Bmp; break; case ImageFormat.Tiff: throw new NotSupportedException("TIFF format is not supported."); default: throw new ArgumentException("Unsupported image format.", nameof(format)); } return skFormat; } public static Image FromStream(Stream stream) { var bitmap = SKBitmap.Decode(stream); if (bitmap == null) { throw new ArgumentException("The stream does not contain a valid image.", nameof(stream)); } return new Image(bitmap); } public static implicit operator SKBitmap(Image i) { return i._skBitmap; } public static implicit operator Image(SKBitmap i) { return new Image(i); } public void Dispose() { _skBitmap?.Dispose(); } } } ================================================ FILE: Majorsilence.Drawing.Common/Imaging/Encoder.cs ================================================ namespace Majorsilence.Drawing.Imaging { // Simulates Encoder in System.Drawing.Common public class Encoder { public static readonly Encoder Quality = new Encoder("Quality"); public static readonly Encoder Compression = new Encoder("Compression"); public string ParameterName { get; } private Encoder(string parameterName) { ParameterName = parameterName; } } } ================================================ FILE: Majorsilence.Drawing.Common/Imaging/EncoderParameter.cs ================================================ namespace Majorsilence.Drawing.Imaging { // Simulates EncoderParameter in System.Drawing.Common public class EncoderParameter { public Encoder Encoder { get; } public object Value { get; } public EncoderParameter(Encoder encoder, object value) { Encoder = encoder ?? throw new ArgumentNullException(nameof(encoder)); Value = value ?? throw new ArgumentNullException(nameof(value)); } } } ================================================ FILE: Majorsilence.Drawing.Common/Imaging/EncoderParameters.cs ================================================ namespace Majorsilence.Drawing.Imaging { // Simulates EncoderParameters in System.Drawing.Common public class EncoderParameters { private List _parameters; // Constructor public EncoderParameters(int count) { _parameters = new List(new EncoderParameter[count]); } // Add a parameter to the list public void Add(EncoderParameter parameter) { _parameters.Add(parameter); } // Retrieve the list of parameters public List GetParameters() => _parameters; // Indexer to access parameters by index public EncoderParameter[] Param { get => _parameters.ToArray(); set { if (value.Length != _parameters.Count) throw new ArgumentException("Array length must match the number of parameters."); _parameters = new List(value); } } } } ================================================ FILE: Majorsilence.Drawing.Common/Imaging/ImageCodecInfo.cs ================================================ namespace Majorsilence.Drawing.Imaging { // Simulate ImageCodecInfo (simplified) public class ImageCodecInfo { public Guid Guid { get; set; } #if NET6_0_OR_GREATER public required string MimeType { get; set; } #else public string MimeType { get; set; } #endif public ImageFormat Format { get; set; } public string FormatDescription { get { return Format switch { ImageFormat.Bmp => "BMP", ImageFormat.Jpeg => "JPEG", ImageFormat.Png => "PNG", ImageFormat.Gif => "GIF", ImageFormat.Tiff => "TIFF", _ => "Unknown" }; } } public static ImageCodecInfo[] GetImageEncoders() { return new[] { new ImageCodecInfo { MimeType = "image/bmp", Format = ImageFormat.Bmp }, new ImageCodecInfo { MimeType = "image/jpeg", Format = ImageFormat.Jpeg }, new ImageCodecInfo { MimeType = "image/png", Format = ImageFormat.Png }, new ImageCodecInfo { MimeType = "image/gif", Format = ImageFormat.Gif }, new ImageCodecInfo { MimeType = "image/tiff", Format = ImageFormat.Tiff } }; } } } ================================================ FILE: Majorsilence.Drawing.Common/Imaging/ImageFormat.cs ================================================ namespace Majorsilence.Drawing.Imaging { // ImageFormat Compatibility public enum ImageFormat { Bmp, Jpeg, Png, Gif, Tiff } } ================================================ FILE: Majorsilence.Drawing.Common/Imaging/ImageFormatExtensions.cs ================================================ using SkiaSharp; namespace Majorsilence.Drawing.Imaging { // Extension method for converting ImageFormat to SkiaSharp's image encode format public static class ImageFormatExtensions { public static SKEncodedImageFormat ToSkImageEncodeFormat(this ImageFormat format) { return format switch { ImageFormat.Jpeg => SKEncodedImageFormat.Jpeg, ImageFormat.Png => SKEncodedImageFormat.Png, ImageFormat.Bmp => SKEncodedImageFormat.Bmp, _ => throw new ArgumentOutOfRangeException() }; } } } ================================================ FILE: Majorsilence.Drawing.Common/Majorsilence.Drawing.Common.csproj ================================================  net48;net8.0;net10.0 net8.0;net10.0 enable enable Debug;Release;Debug-DrawingCompat;Release-DrawingCompat True ================================================ FILE: Majorsilence.Drawing.Common/Pen.cs ================================================ using Majorsilence.Drawing.Drawing2D; using Majorsilence.Drawing.Imaging; using SkiaSharp; using System.Drawing; namespace Majorsilence.Drawing { // Compatibility wrapper for Pen public class Pen : IDisposable { private SKPaint _paint; public Pen(Color color) { _paint = new SKPaint { Color = new SKColor((byte)color.R, (byte)color.G, (byte)color.B, (byte)color.A), StrokeWidth = 1, Style = SKPaintStyle.Stroke }; } public Pen(Brush brush) { // FIXME; what does brush do? _paint = new SKPaint { StrokeWidth = 1, Style = SKPaintStyle.Stroke }; } public Pen(Color color, float width) { _paint = new SKPaint { Color = new SKColor((byte)color.R, (byte)color.G, (byte)color.B, (byte)color.A), StrokeWidth = width, Style = SKPaintStyle.Stroke }; } public Pen(Brush brush, float width) { // FIXME; what does brush do? _paint = new SKPaint { StrokeWidth = width, Style = SKPaintStyle.Stroke }; } public LineJoin LineJoin { get; set; } public LineCap LineCap { get; set; } public Brush Brush { get; set; } public Drawing2D.DashStyle DashStyle { get; set; } public void Dispose() { _paint?.Dispose(); } // Convert Pen to SKPaint public SKPaint ToSkPaint() { _paint.StrokeJoin = LineJoin switch { LineJoin.Miter => SKStrokeJoin.Miter, LineJoin.Round => SKStrokeJoin.Round, LineJoin.Bevel => SKStrokeJoin.Bevel, _ => _paint.StrokeJoin }; _paint.StrokeCap = LineCap switch { LineCap.Flat => SKStrokeCap.Butt, LineCap.Square => SKStrokeCap.Square, LineCap.Round => SKStrokeCap.Round, _ => _paint.StrokeCap }; return _paint; } } } ================================================ FILE: Majorsilence.Drawing.Common/Pens.cs ================================================ namespace Majorsilence.Drawing { public static class Pens { public static Pen Black { get; } = new Pen(Color.Black); public static Pen White { get; } = new Pen(Color.White); public static Pen Red { get; } = new Pen(Color.Red); public static Pen Green { get; } = new Pen(Color.Green); public static Pen Blue { get; } = new Pen(Color.Blue); } } ================================================ FILE: Majorsilence.Drawing.Common/Point.cs ================================================ using System; namespace Majorsilence.Drawing { public struct Point : IEquatable { public int X { get; set; } public int Y { get; set; } public bool IsEmpty => X == 0 && Y == 0; public Point(int x, int y) { X = x; Y = y; } public override string ToString() { return $"Point [X={X}, Y={Y}]"; } public static implicit operator PointF(Point p) { return new PointF(p.X, p.Y); } //#if !DRAWINGCOMPAT public static implicit operator System.Drawing.Point(Point p) { return new System.Drawing.Point(p.X, p.Y); } //#endif public static Point Empty => new Point(0, 0); public override bool Equals(object? obj) { if (obj is Point point) { return X == point.X && Y == point.Y; } return false; } public static bool operator ==(Point left, Point right) { return left.Equals(right); } public static bool operator !=(Point left, Point right) { return !(left == right); } public bool Equals(Point other) { return X == other.X && Y == other.Y; } #if NET6_0_OR_GREATER public override int GetHashCode() { return HashCode.Combine(X, Y); } #endif } } ================================================ FILE: Majorsilence.Drawing.Common/PointF.cs ================================================  namespace Majorsilence.Drawing { public class PointF { public float X { get; set; } public float Y { get; set; } public PointF() { } public PointF(float x, float y) { X = x; Y = y; } public override string ToString() { return $"PointF [X={X}, Y={Y}]"; } public static implicit operator Point(PointF p) { return new Point((int)p.X, (int)p.Y); } //#if !DRAWINGCOMPAT public static implicit operator System.Drawing.PointF(PointF p) { return new System.Drawing.PointF(p.X, p.Y); } //#endif } } ================================================ FILE: Majorsilence.Drawing.Common/Rectangle.cs ================================================  namespace Majorsilence.Drawing { public struct Rectangle { public int X { get; set; } public int Y { get; set; } public int Width { get; set; } public int Height { get; set; } public int Left => X; public int Top => Y; public int Right => X + Width; public int Bottom => Y + Height; public static Rectangle Empty => new Rectangle(0, 0, 0, 0); public Rectangle(int x, int y, int width, int height) { X = x; Y = y; Width = width; Height = height; } public Rectangle(Point p, Size s) { X = p.X; Y = p.Y; Width = s.Width; Height = s.Height; } public bool IntersectsWith(Rectangle other) { return !(other.Left > Right || other.Right < Left || other.Top > Bottom || other.Bottom < Top); } public override bool Equals(object? obj) { if (obj is Rectangle) { var other = (Rectangle)obj; return X == other.X && Y == other.Y && Width == other.Width && Height == other.Height; } return false; } public override int GetHashCode() { #if NET8_0 return HashCode.Combine(X, Y, Width, Height); #else unchecked { int hash = 17; hash = hash * 23 + X.GetHashCode(); hash = hash * 23 + Y.GetHashCode(); hash = hash * 23 + Width.GetHashCode(); hash = hash * 23 + Height.GetHashCode(); return hash; } #endif } public static bool operator ==(Rectangle left, Rectangle right) { return left.Equals(right); } public static bool operator !=(Rectangle left, Rectangle right) { return !(left == right); } } } ================================================ FILE: Majorsilence.Drawing.Common/RectangleF.cs ================================================  namespace Majorsilence.Drawing { public struct RectangleF { public float X { get; set; } public float Y { get; set; } public float Width { get; set; } public float Height { get; set; } public RectangleF(float x, float y, float width, float height) { X = x; Y = y; Width = width; Height = height; } public float Left => X; public float Top => Y; public float Right => X + Width; public float Bottom => Y + Height; public SizeF Size => new SizeF(Width, Height); public bool Contains(float x, float y) { return x >= Left && x <= Right && y >= Top && y <= Bottom; } public bool IntersectsWith(RectangleF rect) { return rect.Left < Right && rect.Right > Left && rect.Top < Bottom && rect.Bottom > Top; } public static RectangleF Intersect(RectangleF a, RectangleF b) { if (!a.IntersectsWith(b)) return new RectangleF(0, 0, 0, 0); float x = Math.Max(a.Left, b.Left); float y = Math.Max(a.Top, b.Top); float width = Math.Min(a.Right, b.Right) - x; float height = Math.Min(a.Bottom, b.Bottom) - y; return new RectangleF(x, y, width, height); } public static RectangleF Union(RectangleF a, RectangleF b) { float x = Math.Min(a.Left, b.Left); float y = Math.Min(a.Top, b.Top); float width = Math.Max(a.Right, b.Right) - x; float height = Math.Max(a.Bottom, b.Bottom) - y; return new RectangleF(x, y, width, height); } public bool IsEmpty => Width == 0 && Height == 0; public static RectangleF Empty => new RectangleF(0, 0, 0, 0); public override string ToString() { return $"RectangleF [X={X}, Y={Y}, Width={Width}, Height={Height}]"; } } } ================================================ FILE: Majorsilence.Drawing.Common/Region.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Majorsilence.Drawing { public class Region : IDisposable { public int X { get; set; } public int Y { get; set; } public int Width { get; set; } public int Height { get; set; } public Region(int x, int y, int width, int height) { X = x; Y = y; Width = width; Height = height; } public int Area() { return Width * Height; } public bool Contains(int x, int y) { return x >= X && x <= X + Width && y >= Y && y <= Y + Height; } public RectangleF GetBounds(Graphics g) { if (g == null) { throw new ArgumentNullException(nameof(g)); } return new RectangleF(X, Y, Width, Height); } public override string ToString() { return $"Region [X={X}, Y={Y}, Width={Width}, Height={Height}]"; } public void Dispose() { } } } ================================================ FILE: Majorsilence.Drawing.Common/Size.cs ================================================  namespace Majorsilence.Drawing { public struct Size { public int Width { get; set; } public int Height { get; set; } public Size(int width, int height) { Width = width; Height = height; } public static Size Empty => new Size(0, 0); public override string ToString() { return $"Size [Width={Width}, Height={Height}]"; } } } ================================================ FILE: Majorsilence.Drawing.Common/SizeF.cs ================================================  namespace Majorsilence.Drawing { public struct SizeF { public float Width { get; set; } public float Height { get; set; } public SizeF(float width, float height) { Width = width; Height = height; } public static SizeF Empty => new SizeF(0, 0); public override string ToString() { return $"SizeF [Width={Width}, Height={Height}]"; } } } ================================================ FILE: Majorsilence.Drawing.Common/SkiaImageExtensions.cs ================================================ using Majorsilence.Drawing.Imaging; using SkiaSharp; namespace Majorsilence.Drawing { // Extension method to handle quality parameter for encoding public static class SkiaImageExtensions { // Converts EncoderParameters to SkiaSharp encoding options public static SKEncodedImageFormat ToSkImageEncodeOptions(this EncoderParameters encoderParams, ImageFormat format) { // Default Skia options var encodeOptions = new SKEncodedImageFormat(); foreach (var parameter in encoderParams.GetParameters()) { if (parameter.Encoder == Encoder.Quality) { var quality = (int)parameter.Value; //// SkiaSharp supports quality for JPEG encoding //if (format == ImageFormat.Jpeg) //{ // encodeOptions = quality; //} //else //{ // throw new NotSupportedException("Quality parameter is only supported for JPEG encoding in SkiaSharp."); //} } else { throw new NotSupportedException($"Encoder parameter {parameter.Encoder.ParameterName} is not supported."); } } return encodeOptions; } } } ================================================ FILE: Majorsilence.Drawing.Common/SolidBrush.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Majorsilence.Drawing { public sealed class SolidBrush : Brush { public SolidBrush(Color color) : base(color) { } } } ================================================ FILE: Majorsilence.Drawing.Common/StringAlignment.cs ================================================ namespace Majorsilence.Drawing { public enum StringAlignment { Near, Center, Far } } ================================================ FILE: Majorsilence.Drawing.Common/StringFormat.cs ================================================ namespace Majorsilence.Drawing { public class StringFormat : IDisposable { public StringAlignment Alignment { get; set; } public StringAlignment LineAlignment { get; set; } public StringFormatFlags FormatFlags { get; set; } public StringTrimming Trimming { get; set; } public static readonly StringFormat GenericTypographic = new StringFormat { Alignment = StringAlignment.Near, LineAlignment = StringAlignment.Near, FormatFlags = StringFormatFlags.MeasureTrailingSpaces, Trimming = StringTrimming.None }; public StringFormat() { Alignment = StringAlignment.Near; LineAlignment = StringAlignment.Near; FormatFlags = StringFormatFlags.None; Trimming = StringTrimming.None; } public void SetMeasurableCharacterRanges(CharacterRange[] ranges) { // Assuming we need to store the ranges in a private field MeasurableCharacterRanges = ranges; } // Add a private field to store the character ranges public CharacterRange[] MeasurableCharacterRanges { get; set; } public object Clone() { return this.MemberwiseClone(); } public void Dispose() { } } } ================================================ FILE: Majorsilence.Drawing.Common/StringFormatFlags.cs ================================================ namespace Majorsilence.Drawing { [Flags] public enum StringFormatFlags { None = 0, DirectionRightToLeft = 1, DirectionVertical = 2, MeasureTrailingSpaces = 4, NoWrap = 8 } } ================================================ FILE: Majorsilence.Drawing.Common/StringTrimming.cs ================================================ namespace Majorsilence.Drawing { public enum StringTrimming { None, Character, Word, EllipsisCharacter, EllipsisWord, EllipsisPath } } ================================================ FILE: Majorsilence.Drawing.Common/Text.cs ================================================ using SkiaSharp; namespace Majorsilence.Drawing { public class Text { public string Content { get; set; } public Color Color { get; set; } public float Size { get; set; } public string FontFamily { get; set; } public bool Bold { get; set; } public bool Italic { get; set; } public enum TextRenderingHint { SystemDefault, SingleBitPerPixel, AntiAlias, ClearTypeGridFit } public Text(string content, Color color, float size, string fontFamily = "Arial", bool bold = false, bool italic = false) { Content = content; Color = color; Size = size; FontFamily = fontFamily; Bold = bold; Italic = italic; } public SKFont ToSkFont() { return new SKFont( SKTypeface.FromFamilyName(FontFamily, Bold ? SKFontStyleWeight.Bold : SKFontStyleWeight.Normal, SKFontStyleWidth.Normal, Italic ? SKFontStyleSlant.Italic : SKFontStyleSlant.Upright), Size, 1F, 0F); } } } ================================================ FILE: Majorsilence.Reporting.Benchmarks/DrawingCompatJob.cs ================================================ using BenchmarkDotNet.Attributes; using System; using BenchmarkDotNet.Engines; using BenchmarkDotNet.Environments; using BenchmarkDotNet.Extensions; using BenchmarkDotNet.Jobs; using JetBrains.Annotations; namespace Majorsilence.Reporting.Benchmarks { [AttributeUsage(AttributeTargets.Class | AttributeTargets.Assembly, AllowMultiple = true)] public class DrawingCompatJob : JobConfigBaseAttribute { private const int DefaultValue = -1; public DrawingCompatJob( RunStrategy runStrategy, int launchCount = DefaultValue, int warmupCount = DefaultValue, int iterationCount = DefaultValue, int invocationCount = DefaultValue, string? id = null, bool baseline = false, string buildConfiguration = "Release-DrawingCompat" ) : base(CreateJob(id, launchCount, warmupCount, iterationCount, invocationCount, runStrategy, baseline, buildConfiguration)) { } private static Job CreateJob(string? id, int launchCount, int warmupCount, int iterationCount, int invocationCount, RunStrategy? runStrategy, bool baseline, string buildConfiguration) { var job = new Job(id).WithCustomBuildConfiguration(buildConfiguration); int manualValuesCount = 0; if (launchCount != DefaultValue) { job.Run.LaunchCount = launchCount; manualValuesCount++; } if (warmupCount != DefaultValue) { job.Run.WarmupCount = warmupCount; manualValuesCount++; } if (iterationCount != DefaultValue) { job.Run.IterationCount = iterationCount; manualValuesCount++; } if (invocationCount != DefaultValue) { job.Run.InvocationCount = invocationCount; manualValuesCount++; int unrollFactor = job.Run.ResolveValue(RunMode.UnrollFactorCharacteristic, EnvironmentResolver.Instance); if (invocationCount % unrollFactor != 0) { job.Run.UnrollFactor = 1; manualValuesCount++; } } if (runStrategy != null) { job.Run.RunStrategy = runStrategy.Value; manualValuesCount++; } if (baseline) job.Meta.Baseline = true; return job.Freeze(); } } } ================================================ FILE: Majorsilence.Reporting.Benchmarks/JsonDataProviderBenchmark.cs ================================================ using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Engines; using BenchmarkDotNet.Jobs; using System.Collections.Generic; using System.IO; using System.Xml.Serialization; using System; using Majorsilence.Reporting.RdlCreator; using System.Text.RegularExpressions; using System.Threading.Tasks; namespace Majorsilence.Reporting.Benchmarks { [AsciiDocExporter] [HtmlExporter] [MemoryDiagnoser] //[RPlotExporter] //[SimpleJob(baseline: true)] [DrawingCompatJob(runStrategy: RunStrategy.Throughput, baseline: true, buildConfiguration: "Release-DrawingCompat")] public class JsonDataProviderBenchmark { DataProviders dataProvider = DataProviders.Json; private string connectionString = "file=NestedJsonData.json"; [Benchmark] public async Task NestedJson() { var create = new RdlCreator.Create(); var fyiReport = await create.GenerateRdl(dataProvider, connectionString, "columns=EmployeeID,LastName,FirstName,ContactInfo_Phone,ContactInfo_Email", pageHeaderText: "DataProviderTest TestMethod1"); using var ms = new Majorsilence.Reporting.Rdl.MemoryStreamGen(); await fyiReport.RunGetData(null); await fyiReport.RunRender(ms, Majorsilence.Reporting.Rdl.OutputPresentationType.PDF); } } } ================================================ FILE: Majorsilence.Reporting.Benchmarks/Majorsilence.Reporting.Benchmarks.csproj ================================================  Exe net48;net8.0;net10.0 net8.0;net10.0 enable enable Debug;Debug-DrawingCompat;Release;Release-DrawingCompat AnyCPU NestedJsonData.json PreserveNewest ================================================ FILE: Majorsilence.Reporting.Benchmarks/Program.cs ================================================ // See https://aka.ms/new-console-template for more information using BenchmarkDotNet.Configs; using BenchmarkDotNet.Jobs; using BenchmarkDotNet.Running; using Majorsilence.Reporting.Benchmarks; using System.Diagnostics; //var summary = BenchmarkRunner.Run(typeof(Program).Assembly, // new DebugBuildConfig() // .WithOptions(ConfigOptions.DisableOptimizationsValidator)); var summary = BenchmarkRunner.Run(typeof(Program).Assembly); //var config = DefaultConfig.Instance // .AddJob(Job.Default.WithCustomBuildConfiguration("Release-DrawingCompat")) // .WithOptions(ConfigOptions.DisableOptimizationsValidator); //var summary = BenchmarkSwitcher // .FromAssembly(typeof(Program).Assembly) // .Run(args, config); // Run a simple multithreaded test var jsonBp = new JsonDataProviderBenchmark(); Console.WriteLine("|Threads|Duration|Source|Calls/Sec|Total Calls|Errors|"); Console.WriteLine("|-------|--------|------|---------:|----------:|-----:|"); ConcurrentCallCount(jsonBp, threadCount: 1, durationInSeconds: 30); ConcurrentCallCount(jsonBp, threadCount: 20, durationInSeconds: 30); ConcurrentCallCount(jsonBp, threadCount: 20, durationInSeconds: 30); ConcurrentCallCount(jsonBp, threadCount: 30, durationInSeconds: 30); ConcurrentCallCount(jsonBp, threadCount: 40, durationInSeconds: 30); ConcurrentCallCount(jsonBp, threadCount: 50, durationInSeconds: 30); void ConcurrentCallCount(JsonDataProviderBenchmark inst, int threadCount, int durationInSeconds) { Stopwatch stopwatch = new Stopwatch(); // Start the stopwatch stopwatch.Start(); int functionCallCount = 0; int errors = 0; // Create an array to hold the threads Thread[] threads = new Thread[threadCount]; // Create and start the threads for (int i = 0; i < threadCount; i++) { threads[i] = new Thread(async () => { while (stopwatch.Elapsed.TotalSeconds < durationInSeconds) { try { await inst.NestedJson(); Interlocked.Increment(ref functionCallCount); } catch (Exception ex) { Interlocked.Increment(ref errors); Console.WriteLine(ex); } } }); threads[i].Start(); } foreach (var thread in threads) { thread.Join(); } stopwatch.Stop(); double callRate = functionCallCount / stopwatch.Elapsed.TotalSeconds; Console.WriteLine( $"|{threadCount}|{durationInSeconds}|{inst.GetType().Name}|{callRate:N0}|{functionCallCount:N0}|{errors:N0}|"); } ================================================ FILE: Majorsilence.Reporting.UI/.gitignore ================================================ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # User-specific files *.rsuser *.suo *.user *.userosscache *.sln.docstates # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs # Mono auto generated files mono_crash.* # Build results [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ x64/ x86/ [Ww][Ii][Nn]32/ [Aa][Rr][Mm]/ [Aa][Rr][Mm]64/ bld/ [Bb]in/ [Oo]bj/ [Ll]og/ [Ll]ogs/ # Visual Studio 2015/2017 cache/options directory .vs/ # Uncomment if you have tasks that create the project's static files in wwwroot #wwwroot/ # Visual Studio 2017 auto generated files Generated\ Files/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* # NUnit *.VisualState.xml TestResult.xml nunit-*.xml # Build Results of an ATL Project [Dd]ebugPS/ [Rr]eleasePS/ dlldata.c # Benchmark Results BenchmarkDotNet.Artifacts/ # .NET Core project.lock.json project.fragment.lock.json artifacts/ # Tye .tye/ # ASP.NET Scaffolding ScaffoldingReadMe.txt # StyleCop StyleCopReport.xml # Files built by Visual Studio *_i.c *_p.c *_h.h *.ilk *.meta *.obj *.iobj *.pch *.pdb *.ipdb *.pgc *.pgd *.rsp *.sbr *.tlb *.tli *.tlh *.tmp *.tmp_proj *_wpftmp.csproj *.log *.vspscc *.vssscc .builds *.pidb *.svclog *.scc # Chutzpah Test files _Chutzpah* # Visual C++ cache files ipch/ *.aps *.ncb *.opendb *.opensdf *.sdf *.cachefile *.VC.db *.VC.VC.opendb # Visual Studio profiler *.psess *.vsp *.vspx *.sap # Visual Studio Trace Files *.e2e # TFS 2012 Local Workspace $tf/ # Guidance Automation Toolkit *.gpState # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper *.DotSettings.user # TeamCity is a build add-in _TeamCity* # DotCover is a Code Coverage Tool *.dotCover # AxoCover is a Code Coverage Tool .axoCover/* !.axoCover/settings.json # Coverlet is a free, cross platform Code Coverage Tool coverage*.json coverage*.xml coverage*.info # Visual Studio code coverage results *.coverage *.coveragexml # NCrunch _NCrunch_* .*crunch*.local.xml nCrunchTemp_* # MightyMoose *.mm.* AutoTest.Net/ # Web workbench (sass) .sass-cache/ # Installshield output folder [Ee]xpress/ # DocProject is a documentation generator add-in DocProject/buildhelp/ DocProject/Help/*.HxT DocProject/Help/*.HxC DocProject/Help/*.hhc DocProject/Help/*.hhk DocProject/Help/*.hhp DocProject/Help/Html2 DocProject/Help/html # Click-Once directory publish/ # Publish Web Output *.[Pp]ublish.xml *.azurePubxml # Note: Comment the next line if you want to checkin your web deploy settings, # but database connection strings (with potential passwords) will be unencrypted *.pubxml *.publishproj # Microsoft Azure Web App publish settings. Comment the next line if you want to # checkin your Azure Web App publish settings, but sensitive information contained # in these scripts will be unencrypted PublishScripts/ # NuGet Packages *.nupkg # NuGet Symbol Packages *.snupkg # The packages folder can be ignored because of Package Restore **/[Pp]ackages/* # except build/, which is used as an MSBuild target. !**/[Pp]ackages/build/ # Uncomment if necessary however generally it will be regenerated when needed #!**/[Pp]ackages/repositories.config # NuGet v3's project.json files produces more ignorable files *.nuget.props *.nuget.targets # Microsoft Azure Build Output csx/ *.build.csdef # Microsoft Azure Emulator ecf/ rcf/ # Windows Store app package directories and files AppPackages/ BundleArtifacts/ Package.StoreAssociation.xml _pkginfo.txt *.appx *.appxbundle *.appxupload # Visual Studio cache files # files ending in .cache can be ignored *.[Cc]ache # but keep track of directories ending in .cache !?*.[Cc]ache/ # Others ClientBin/ ~$* *~ *.dbmdl *.dbproj.schemaview *.jfm *.pfx *.publishsettings orleans.codegen.cs # Including strong name files can present a security risk # (https://github.com/github/gitignore/pull/2483#issue-259490424) #*.snk # Since there are multiple workflows, uncomment next line to ignore bower_components # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) #bower_components/ # RIA/Silverlight projects Generated_Code/ # Backup & report files from converting an old project file # to a newer Visual Studio version. Backup files are not needed, # because we have git ;-) _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm ServiceFabricBackup/ *.rptproj.bak # SQL Server files *.mdf *.ldf *.ndf # Business Intelligence projects *.rdl.data *.bim.layout *.bim_*.settings *.rptproj.rsuser *- [Bb]ackup.rdl *- [Bb]ackup ([0-9]).rdl *- [Bb]ackup ([0-9][0-9]).rdl # Microsoft Fakes FakesAssemblies/ # GhostDoc plugin setting file *.GhostDoc.xml # Node.js Tools for Visual Studio .ntvs_analysis.dat node_modules/ # Visual Studio 6 build log *.plg # Visual Studio 6 workspace options file *.opt # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) *.vbw # Visual Studio LightSwitch build output **/*.HTMLClient/GeneratedArtifacts **/*.DesktopClient/GeneratedArtifacts **/*.DesktopClient/ModelManifest.xml **/*.Server/GeneratedArtifacts **/*.Server/ModelManifest.xml _Pvt_Extensions # Paket dependency manager .paket/paket.exe paket-files/ # FAKE - F# Make .fake/ # CodeRush personal settings .cr/personal # Python Tools for Visual Studio (PTVS) __pycache__/ *.pyc # Cake - Uncomment if you are using it # tools/** # !tools/packages.config # Tabs Studio *.tss # Telerik's JustMock configuration file *.jmconfig # BizTalk build output *.btp.cs *.btm.cs *.odx.cs *.xsd.cs # OpenCover UI analysis results OpenCover/ # Azure Stream Analytics local run output ASALocalRun/ # MSBuild Binary and Structured Log *.binlog # NVidia Nsight GPU debugger configuration file *.nvuser # MFractors (Xamarin productivity tool) working folder .mfractor/ # Local History for Visual Studio .localhistory/ # BeatPulse healthcheck temp database healthchecksdb # Backup folder for Package Reference Convert tool in Visual Studio 2017 MigrationBackup/ # Ionide (cross platform F# VS Code tools) working folder .ionide/ # Fody - auto-generated XML schema FodyWeavers.xsd ## ## Visual studio for Mac ## # globs Makefile.in *.userprefs *.usertasks config.make config.status aclocal.m4 install-sh autom4te.cache/ *.tar.gz tarballs/ test-results/ # Mac bundle stuff *.dmg *.app # content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore # General .DS_Store .AppleDouble .LSOverride # Icon must end with two \r Icon # Thumbnails ._* # Files that might appear in the root of a volume .DocumentRevisions-V100 .fseventsd .Spotlight-V100 .TemporaryItems .Trashes .VolumeIcon.icns .com.apple.timemachine.donotpresent # Directories potentially created on remote AFP share .AppleDB .AppleDesktop Network Trash Folder Temporary Items .apdisk # content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore # Windows thumbnail cache files Thumbs.db ehthumbs.db ehthumbs_vista.db # Dump file *.stackdump # Folder config file [Dd]esktop.ini # Recycle Bin used on file shares $RECYCLE.BIN/ # Windows Installer files *.cab *.msi *.msix *.msm *.msp # Windows shortcuts *.lnk # JetBrains Rider .idea/ *.sln.iml ## ## Visual Studio Code ## .vscode/* !.vscode/settings.json !.vscode/tasks.json !.vscode/launch.json !.vscode/extensions.json ================================================ FILE: Majorsilence.Reporting.UI/App.axaml ================================================ ================================================ FILE: Majorsilence.Reporting.UI/App.axaml.cs ================================================ using Avalonia; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Markup.Xaml; namespace Majorsilence.Reporting.UI { public partial class App : Application { public override void Initialize() { AvaloniaXamlLoader.Load(this); } public override void OnFrameworkInitializationCompleted() { if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) { desktop.MainWindow = new MainWindow(); } base.OnFrameworkInitializationCompleted(); } } } ================================================ FILE: Majorsilence.Reporting.UI/MainWindow.axaml ================================================ ================================================ FILE: Majorsilence.Reporting.UI/MainWindow.axaml.cs ================================================ using Avalonia.Controls; namespace Majorsilence.Reporting.UI { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } } } ================================================ FILE: Majorsilence.Reporting.UI/Majorsilence.Reporting.UI.csproj ================================================  WinExe net10.0 enable copyused true Debug;Release;Debug-DrawingCompat;Release-DrawingCompat true $(DefineConstants);DRAWINGCOMPAT ================================================ FILE: Majorsilence.Reporting.UI/Program.cs ================================================ using Avalonia; using System; namespace Majorsilence.Reporting.UI { class Program { // Initialization code. Don't use any Avalonia, third-party APIs or any // SynchronizationContext-reliant code before AppMain is called: things aren't initialized // yet and stuff might break. [STAThread] public static void Main(string[] args) => BuildAvaloniaApp() .StartWithClassicDesktopLifetime(args); // Avalonia configuration, don't remove; also used by visual designer. public static AppBuilder BuildAvaloniaApp() => AppBuilder.Configure() .UsePlatformDetect() .With(new X11PlatformOptions { UseDBusMenu = false }) .LogToTrace(); } } ================================================ FILE: Majorsilence.Reporting.UI.RdlAvalonia/Majorsilence.Reporting.UI.RdlAvalonia.csproj ================================================  Library net48;net8.0;net10.0 net8.0;net10.0 enable copyused true Debug;Release;Debug-DrawingCompat;Release-DrawingCompat true $(DefineConstants);DRAWINGCOMPAT ================================================ FILE: Majorsilence.Reporting.UI.RdlAvalonia/Viewer/AvaloniaReportViewer.axaml ================================================